In Sachen Display

Dieses Thema im Forum "Fiesta Mk3" wurde erstellt von Gerrit, 14. Dezember 2003.

  1. TS
    Gerrit

    Gerrit Forums Elite

    Registriert seit:
    4. Februar 2003
    Beiträge:
    1.293
    Zustimmungen:
    0
    Ort:
    Braunschweig, Germany
    Also ich hatte ja vor, zum nächsten K-Treffen mit dem eingebauten Ding zu erscheinen....
     
  2. Agamemnon

    Agamemnon Forums Inventar

    Registriert seit:
    23. Juli 2002
    Beiträge:
    2.175
    Zustimmungen:
    1
    Ort:
    Zülpich, Deutschland
    Quasi noch knapp 160 Tage...
     
  3. TS
    Gerrit

    Gerrit Forums Elite

    Registriert seit:
    4. Februar 2003
    Beiträge:
    1.293
    Zustimmungen:
    0
    Ort:
    Braunschweig, Germany
    AAHHH,

    Setz mich doch nich so unter Druck :(
     
  4. Ravebase

    Ravebase Forums Inventar

    Registriert seit:
    4. September 2001
    Beiträge:
    2.582
    Zustimmungen:
    0
    Geschlecht:
    männlich
    Ort:
    Lahr
    Kann man schon vorbestellen? Dann leg mir mal einen zurück :)
     
  5. Quasi

    Quasi Forums Bewohner(in)

    Registriert seit:
    27. März 2004
    Beiträge:
    1.008
    Zustimmungen:
    0
    Ort:
    Ratshausen, Germany
    Könnte dann ja fast ein Geburtstagsgeschenk zum 13. werden(vom Fofi)
     
  6. MKC

    MKC Forums Semi-Profi

    Registriert seit:
    8. Dezember 2004
    Beiträge:
    453
    Zustimmungen:
    0
    Hi,
    Höre ich da raus, dass du die Dinger dann auch verkaufst?
    Oder quasi "in Serie" produzierst?

    a) Wenn ja, wo würden deine Preisvorstellungen liegen?
    b) Ich habe keine Ahnung von dem was du da so gemacht hast *lob dafür!* aber die Grafiken könnte ich auch selber machen, oder?

    Markus...
     
  7. TS
    Gerrit

    Gerrit Forums Elite

    Registriert seit:
    4. Februar 2003
    Beiträge:
    1.293
    Zustimmungen:
    0
    Ort:
    Braunschweig, Germany
    Moin !

    Wenns funktioniert, und die LCDs noch zu kriegen sind, kann ich ne Kleinserie draus machen.

    Wie meinst Du das mit den Grafiken ?
    Also die Geschwindigkeitsanzeige ist ne Windows-Schriftart. Die kann man tauschen, aber bei den restlichen Grafiken..

    also ums einfach zu sagen: Man müsste komplett umprogrammieren, wie die grafiken gezeichnet werden...

    Wenn Du schonmal die Tankanzeige nach Deinen Wünschen umbauen willst, bitte:

    Code:
    void DrawTank(unsigned char Prozent)
    {
     unsigned char i;
     unsigned char j;
     unsigned char FillByte;
     unsigned char *lpacTankBMP;
    //unsigned char Text[4]; //wir benutzen die Arrayvariable aMemSpalte
    
    	LCDWriteCmd(C_CSRDIR_RIGHT);
    	LCDWriteCmd(C_CSRW);
    	 LCDWriteData( LOW((((TANKPOS_Y/8)-1) * (LCD_X/8)) + TANKPOS_X/8) );
    	 LCDWriteData(HIGH((((TANKPOS_Y/8)-1) * (LCD_X/8)) + TANKPOS_X/8) );
    
    	if (Prozent < 10)		//Bissel in die Mitte rücken
    		LCDWriteData(' ');
    	LCDWriteString(itoa(Prozent,aMemSpalte,10));
    	 LCDWriteData('%');
    	 LCDWriteData(' ');		//% Zeichen an der 100er Stelle killen
    
    	
    // Reinschreiben	
    
    	Prozent = Prozent >>1;
    	lpacTankBMP = (unsigned char *)aZapf;	//Cast gegen die Fehlermeldung
    
    	LCDWriteCmd(C_CSRDIR_DOWN);
    	for (j = 0; j < 5; j++)
    	{
    		LCDWriteCmd(C_CSRW);			//CursorPos
    		LCDWriteData( LOW(((TANKPOS_Y-21) * (LCD_X/8)) + (TANKPOS_X/8)-1+j + LCD_LAYER2) );
    		LCDWriteData(HIGH(((TANKPOS_Y-21) * (LCD_X/8)) + (TANKPOS_X/8)-1+j + LCD_LAYER2) );
    		LCDWriteCmd(C_MWRITE);
    
    		for(i = 50; i > 0;i--)
    		{
    			FillByte = 0;
    
    			if ((j > 0) && (j < 4) && (i < 29) )
    			{
    				FillByte = pgm_read_byte(lpacTankBMP++);
    			}
    			if (i < Prozent)
    				FillByte = ~FillByte;
    
    			LCDWriteData(FillByte);
    		}
    	}	
    } //endof DrawTank
    
    
    Gruss, Gerrit
     
  8. haeger

    haeger Forums Fortgeschrittene(r)

    Registriert seit:
    28. Mai 2004
    Beiträge:
    314
    Zustimmungen:
    0
    voll das geile ding würde auch gerne so einen haben willwillwill
     
  9. TS
    Gerrit

    Gerrit Forums Elite

    Registriert seit:
    4. Februar 2003
    Beiträge:
    1.293
    Zustimmungen:
    0
    Ort:
    Braunschweig, Germany
    Boah ne ey, ich werd noch bescheuert....
    Scheiss Mathe...

    Helft mir mal, geht um die Selbstlernfunktion der Tankanzeige.

    gegeben sei Tank als Wert 0..255
    Gewollt ist Anzeige als Wert 0..100%


    Da die gemessenen Werte schwanken, werden sie gemittelt:

    m = m - (m / 256) + Tank;
    Anzeige = ((m / 256) * 100) / 256;

    soweit ganz gut, funzt auch.

    Jetzt habe ich noch folgendes drin:

    if (Tank > Max) Max = Tank;
    if (Tank < Min) Min = Tank;

    jetzt möchte ich meine Anzeige nicht mehr nach
    0% = 0
    100% = 255

    sondern nach
    0% = Min
    100% = Max

    ausrichten.

    Und da hörts jetz bei mir auf....

    Kann jemand besser rechnen als ich ?

    Gruss, Gerrit
     
  10. Quasi

    Quasi Forums Bewohner(in)

    Registriert seit:
    27. März 2004
    Beiträge:
    1.008
    Zustimmungen:
    0
    Ort:
    Ratshausen, Germany
    Wenn ich jetzt keinen Denkfehler drin hab, dürfte der min-Stand bei 12%, also ca 5Liter liegen, somit ergibt sich:
    12%=0
    100%=255

    wobei, wenn man in die Reserve reinkommt, ein negativer Wert entstünde..
     
  11. ralf_donald

    ralf_donald Forums Inventar

    Registriert seit:
    29. Dezember 2003
    Beiträge:
    1.822
    Zustimmungen:
    0
    Ort:
    Leipzig, Germany
    ich als delphi progger würde das so machen.

    nur dann musst du den tank einmal richtig leer fahren und einmal bis zum auslaufen vollmachen, sonst haste
    mal 15%=0 und 95%=255 und
    mal 05%=0 und 80%=255 (je nach tankgewohnheit)

    und was machst du mit der reserve? ich schätz mal wenn deine tankanzeige bei 10-15 Prozent ist lässte etwas aufblinken oder so, weil wenn nicht und ich hätte deine tankanzeige, dann würd ich auf dem blanken fahren, da ich oft mit reserve fahre.
     
  12. ShirKahn

    ShirKahn Forums Neuling

    Registriert seit:
    15. Januar 2003
    Beiträge:
    98
    Zustimmungen:
    0
    Sollte mit der Zeile am ende funktionieren:

    Ausgabeprozent = (Min+Anzeige) / Max;

    Dann würde es zum Beispiel so aussehen:
    Max=237
    Min=11
    Aktueller Tankwert (Anzeige) = 33

    Prozentausgabe--> 19%

    // Anzeige hab ich als die Variable verstanden in der der Aktuelle (gemittelte) tankwert (0...255) steht, korrekt?
     
  13. TS
    Gerrit

    Gerrit Forums Elite

    Registriert seit:
    4. Februar 2003
    Beiträge:
    1.293
    Zustimmungen:
    0
    Ort:
    Braunschweig, Germany
    Hi !

    Hast Du richtig verstanden, ja.

    Obs funktioniert werd ich mal ausprobieren...

    Gruss, Gerrit
     
  14. TS
    Gerrit

    Gerrit Forums Elite

    Registriert seit:
    4. Februar 2003
    Beiträge:
    1.293
    Zustimmungen:
    0
    Ort:
    Braunschweig, Germany
    Hi !

    Ich wollt mal eben so loswerden, das ich die Display-Kommunikation gerade um 40 Kommandos ärmer gemacht, d.h. entlastet habe.

    Timing ist alles ;)

    Das heisst, das jetz noch weniger Zeit beim Schreiben aufs Display vertrödelt wird.
    Zeit, die jetzt für andere Spielereien über ist.

    Wer will, darf mir applaudieren :party:

    Gruss, Gerrit
     
  15. ShirKahn

    ShirKahn Forums Neuling

    Registriert seit:
    15. Januar 2003
    Beiträge:
    98
    Zustimmungen:
    0
    Hat das mit der Prozentberechnung hingehauen? :hurra:
     
  16. alex666

    alex666 Forums Mythos

    Registriert seit:
    20. August 2002
    Beiträge:
    1.487
    Zustimmungen:
    0
    War das nicht die 401. Antwort?!
     
  17. TS
    Gerrit

    Gerrit Forums Elite

    Registriert seit:
    4. Februar 2003
    Beiträge:
    1.293
    Zustimmungen:
    0
    Ort:
    Braunschweig, Germany
    Leute ich bin frustriert :x

    Da mir ja niemand nen Widerstandswert eines leeren Tanks sagen konnte, hab ich mir vom FastFiesi die Spritpumpe mit Schwimmerschalter besorgt.

    Der Widerstand bei leerem Tank beträgt ca 148 Ohm :eek:
    Bei vollem Tank hat man noch ca 23 Ohm auf der Leitung.

    Wenn das Ganze über einen 1:1 Spannungsteiler geht, hat man bei leerem Tank am Messpunkt ungefähr halbe Betriebsspannung (2,483221V).
    Bei vollem Tank noch ca. 0,385906 V

    So is das geschaltet:
    [​IMG]

    Für die die mitrechnen:
    Uaus = Uges * R1 / (R1 + R2 )


    Der Prozessor sampelt mit einer Auflösung von 256 Stufen von 0 bis Betriebsspannung.

    D.h. ich kriege für "Leer" bis "Voll" ca 0..127. Viel ist das nicht, aber es geht.

    Der grosse Kack kommt aber erst noch:

    Solange der Prozessor den AD-Wandler noch nicht aktiviert hat, ist dieser Pin ein ganz normaler Digital-Ausgang und liegt auf logisch 0 also Masse.

    D.h. es fliesst ein Strom von +5V über R2 in den Prozessor.
    Und nach U=R*I macht das

    I = U / R = 5V / 150Ohm = 0,0333A = 33mA.

    Da der Prozessor nur maximal 20mA treiben kann, ist das definitiv zu viel.

    Der aufmerksame Leser fragt sich vielleicht: "Wieso macht der Junge so ein Geschiss, soll der den Pin gleich auf AD-Wandler schalten und gut ist".
    Stimmt ja auch, lieber Leser, aber während man den Prozessor neu flasht liegt dieser Pin ebenfalls auf Masse. Und die Programmierphase dauert definitiv länger als der Prozessor diese Überbelastung aushält. :eek:

    "Dann nimm doch einen grösseren Widerstand" wird der Fachazubi sagen.

    Okay, grübeln wir mal... :gruebel: 10mA sollte der Port ja wohl aushalten...

    10mA macht nach U=R*I:

    R = U / I = 5 V / 0,010 A = 500 Ohm (boah, war das schwer) :)

    Setzen wir diesen Wert nun in obige Formel für den Spannungsteiler ein:

    Für leeren Tank:
    Uaus = 5 V * 148 Ohm / (148 + 500) Ohm = 1,14197530864197530864197530864198 V

    Für vollen Tank:

    Uaus = 5 V * 23 Ohm / (23+ 500) Ohm = 0,219885277246653919694072657743786 V


    So, jetz rechnen wir mal schnell aus, wieviel eine Stufe beim AD-Wandler ist um dann zu ermitteln, welchen Wert mir der AD-Wandler bei vollem Tank ausspuckt:

    5V / 256 = 0,01953125 V

    1,14197530864197530864197530864198 V / 0,01953125 V = 58

    Und bei leerem Tank:

    0,219885277246653919694072657743786 V / 0,01953125 V = 11

    58 - 11 = 47

    Na wie geil, 47 Stufen zwischen leer und voll, bzw 0 und 100 % :eek:

    Also jede Stufe = 2% oder wie ?
    Na Prima, bin ich wieder bei dem gleichen Quark, den uns die analoge Tankanzeige auch präsentiert. :x

    So, da ich ja nun der digitale Typ bin und bei solchen Rechnungen schon anfange zu schwitzen, kommt nun das kalte Grausen auf mich zu.

    Ich muss diesen Messbereich ja irgendwie spreizen. Das Signal verstärken.
    Die Leute vom Fach wissen es bestimmt schon: Sowas macht man mit einem Transistor. :schreck:

    [​IMG]
    Erschrocken ? :D Macht nix, ich auch. :-?

    Weil nämlich so ein Transistor und die Widerstände wollen hübsch dimensioniert werden. :roll:
    Dazu muss man ins Datenblatt gucken, noch mehr Formeln rechnen und noch mehr aufpassen und ahrg, da ich nie sowas erwartet habe, habe ich auf meiner Platine auch garnicht den Platz für solche Bauteile :eek:

    Naja, irgendwo werd ich mir schon ein Stückchen freikratzen.

    Und damit ich nicht wieder vor so einem Problem stehe, bitte ich Dich, lieber Leser, auch wenn Du obige Rechnungen nicht ganz verstanden hast, dir mal dein Multimeter und einen Schraubendreher zu nehmen und mal eben am Tachostecker deines Fofis (vorausgesetzt, es ist ein MK3) den Widerstandswert für vollen oder relativ leeren Tank zu messen.

    Anleitung gibts hier:
    http://www.fiesta-tuning.de/forum/viewtopic.php?t=44377

    Guten Rutsch und weiterhin viel Spass mit unserer kleinen Hobbythek wünscht Dir:

    Gerrit

    P.S.: Ich habe Kopfschmerzen. Kommt das nun vom vielen Rechnen oder dampft die Spritpumpe immernoch Benzingase aus ??? :oops:
     
  18. Quasi

    Quasi Forums Bewohner(in)

    Registriert seit:
    27. März 2004
    Beiträge:
    1.008
    Zustimmungen:
    0
    Ort:
    Ratshausen, Germany
    Wieso willst du das eigentlich so weit auflösen? Momentan entspricht eine Stufe ca. 1 Liter, oder willst du eine Restfahrstreckenauswertung machen, so in der Art: Noch 2,35 km bis zum endgültigen Stillstand?
     
  19. TS
    Gerrit

    Gerrit Forums Elite

    Registriert seit:
    4. Februar 2003
    Beiträge:
    1.293
    Zustimmungen:
    0
    Ort:
    Braunschweig, Germany
    Nein, so genau werd ich das eh nicht hinkriegen.

    Aber der AD-Wandler wirft auf Grund von Störungen usw. bei gleicher Stellung des Schwimmers immer mal einen anderen Wert aus.

    Die Abweichung beträgt meisstens so 2 oder 3 nach oben oder unten.

    Wenn ich nen Range von 200 habe, schlägt eine Abweichung von 2 gerade mal mit 1% ein.
    Bei einem Range von 47 hab ich gleich 8% Abweichung.

    Ich bilde zwar den Mittelwert über 256 Sampelungen aber 8% reissen den trotzdem ganzschön runter.

    Klar ?

    Gruss, Gerrit
     
  20. Maddin

    Maddin Forums Inventar Mitarbeiter Moderator

    Registriert seit:
    19. Mai 2002
    Beiträge:
    8.722
    Zustimmungen:
    0
    Ort:
    Frankfurt am Main, Germany
    Das schaut ja lustig aus. Warum ham wir net so schöne einfache geber wie bei opel. Tank leer wiederstand unendlich, tank voll wiederstand null. Eine abweichung von 8% find ich net so schlim, die originale anzeige hat locker 15%