Schmeiß doch erstmal
for(i = 0; num >= 1000; i++, num -= 1000);
LCD_1 = i;
for(i = 0; num >= 100; i++, num -= 100);
LCD_2 = i;
for(i = 0; num >= 10; i++, num -= 10);
LCD_3= i;
LCD_4 = num;
raus. Und weise LCD_1 - _4 explizit Werte zu. Dann siehst du erstmal ob
deine Ausgabe funktioniert.
Das hier ist der weitaus schönere Ansatz:
/*
LCD_1=num/1000;
LCD_2=num%1000/100;
LCD_3=num%100/10;
LCD_4=num%10;
*/
hi,
Danke!!!!!
Ja die Ausgabe funktioniert jedoch werden falsche Zahlen angezeigt ;o)
Ich habe auch schon eine Schleife (0 bis 9999) laufen lassen ... mit dem
Ergebnis das jeweils bei den Ziffern 1 bzw 4 die Anzeige in allen 4 LCD
7 bzw. 9 anzeigt.
als aus 1 wird 7
und aus 4 wird 9
ist schon irgendwie seltsam ;o)
Netwurm
Schmeiss dein Programm weg und gib einfach nur
0x01
aus und sieh nach welches Segment leuchtet
Danach 0x02, 0x04, 0x08 etc.
bist du von jedem Bit weißt, zu welchem Segment es gehört.
Und dann baust du deine Tabelle erneut auf.
Hi,
erstmal danke ;o)
LCD_PORT_OUT = 0x01;
leuchtet alles ...
werde ich jetzt mal versuchen
unsigned char digit[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82,
0xF8, 0x80, 0x90};
so wie ich es bis jetzt verstanden habe ist das doch ein standard
Der Controller kann mit hex Zahlenformat umgehen und hat eine
Zuordnungstabelle für ASCII-Darstellung
na da bin ich ja mal gespannt
Netwurm
netwurm schrieb:> LCD_PORT_OUT = 0x01;>> leuchtet alles ...
Aber der Punkt ist aus.
Das wird invertiert dargestellt. Und die 1 ist für den Punkt da.
Bevor du jetzt das Inverse von 0x01 selber ausrechnest, nimm den ~
Operator.
netwurm schrieb:> so wie ich es bis jetzt verstanden habe ist das doch ein standard
Standard ist das, wie du die Drähte vom µC zur Anzeige gezogen hast.Und
ich bin jetzt zu faul mir das aus deinem Schaltplan rauszulesen, wenn du
das in einem 1/4 der Zeit durch pures ausprobieren selbst feststellen
kannst.
Vertausch 2 Drähte und anstelle des Punktes leuchtet eben irgendein ein
anderes Segment. Ist doch wurscht welches, solange man nur weiß welches.
Und genau das stellst du jetzt einfach mit einem Testprogramm fest.
Hi,
Hab die ganze Sache mal getestet
scheinbar ist irgendwas kaputt ....
Die obere LED (a) bleibt immer an bzw. blink nur ganz kurz geht aber
nicht aus
Hier nochmal der Code kann ja sein das Jemand auch so ein Problemchen
hat
mr. mo schrieb:> hättest auch in einer schleife das array füllen können
Welchen Sinn hat ein Array, wenn alle Elemente den gleichen Wert haben,
wie ihr Index?
>> es leuchtet Segment a darf es das ???
Ist es das einzige Segment, welches leuchtet?
Wenn ja, dann darf es das.
Also
++++++
+ +
+ +
++++++
+ +
+ +
++++++
welches Segment leuchtet? (Tausch die + gegen eine 0 aus)
(Jetzt gehen wir beide das ganze mal systematisch an. Das hat doch
keinen Sinn, wenn du da ohne System an die Sache rangehst. Wenn du
hardwaremässig keinen Kurzschluss hast, dann ist das eine Sache auf 10
Minuten und du hast deine Zahlen dann korrekt auf der Anzeige. Und nein,
es ist mir völlig wurscht, welchen Buchstaben das Segment da weiter oben
hat. Wir brauchen eine zusammenstellung, welches Segment mit welchem Bit
gesteuert wird. Und am besten diese Zusammenstellung in graphischer
Form. Denn dann muss man nicht um die Ecke denken, sondern hat alles
direkt vor Augen)
Wenn du das hast, dann probierst du
LCD_PORT_OUT = ~0x02;
und tauscht wieder die entsprechenden + für das Segment diesmal gegen
eine 1 aus.
Danach
LCD_PORT_OUT = ~0x04;
+ austauschen gegen 2
LCD_PORT_OUT = ~0x08; // austauschen gegen 3
LCD_PORT_OUT = ~0x10; // 4
LCD_PORT_OUT = ~0x20; // 5
LCD_PORT_OUT = ~0x40; // 6
LCD_PORT_OUT = ~0x80; // 7
Hast du die alle einzeln durchpobiert, dann musst du eine Zeichnung
haben, in der für jedes Segment der 8 das Segment gegen die jeweilige
Bitnummer ersetzt ist.
Und wenn du das hast, dann gehts weiter.
Hi,
Es ist ein Hardwarefehler der Platine. Ich konnte den Fehler etwas
eingrenzen. Offenbar ist irgendwas nicht richtig abgeschirmt sobald ich
über den LCD Treiber mit meiner Hand gehe (ohne Berührung!) fangen die
defekten Segmente (a) an zu flackern... die anderen sind jedoch stabil!
Ist schon ärgerlich...Aber für mein Verständnis des MSP430 (bin ja noch
blutiger Anfänger)ist es gut ;o) habe mich mit dem LCD richtig
auseinandergesetzt. Werde heute noch Deinen Vorschlag (Isolierung der
einzelnen Segmente) durchtesten.
Danke Dir ;o)
Netwurm
Hi,
Jetzt gehts!!! Das Bord hatte Pins für die P20 - P37
Habe diese ersetzt durch andere ... da muss man erstmal drauf kommen ;o)
Jetzt ist die Anzeige stabil. Habe noch ein wenig rumprobiert
~0x01 = 1
~0x02 = 2
~0x04 = 4
~0x08 = 8
~0x10 = 16
~0x20 = 32
~0x40 = 64
~0x80 = 128
~0x00 = off
Buchstaben
P[.] wie Programm
P = ~(0x01+0x20+0x02+0x40+0x10) + 0x80
A[.] wie Arlarm
A = ~(0x01+0x20+0x02+0x40+0x10+0x04) + 0x80
++~0x01++
+ +
~0x20 ~0x02
+ +
++~0x40++
+ +
~0x10 ~0x04
+ +
++~0x08++ [+] ~0x80 = Punkt
Danke nochmal an Alle
Netwurm