Moin, ich möchte an einem arduino mega mit 10 gemultiplexen 7 segment anzeigen eine variable ausgeben weiss nur leider nicht wie ich die ausgeben soll. Als Beispiel Die variable die ich auf den segment anzeigen ausgeben will→ Int BeispielvariablePin = 0; Long Punkte = 0; Bei einen eingangssignal so hab ich das gemacht → If (DigitalRead(beispielvariablePin) == HIGH) { Punkte = Punkte + 35000 } Kann mir jemand erklären wie ich die variable Punkte auf die segment anzeige drauf bekomme. Vielleicht auch nen kleinen beispiel code wäre nett :). Zahlenvariablen also von 0-9 für die segment anzrige hab ich schon. Gruß Christoph
Christoph Rohloff schrieb: > Moin, ich möchte an einem arduino mega mit 10 gemultiplexen 7 segment > anzeigen eine variable ausgeben weiss nur leider nicht wie ich die > ausgeben soll. Die wichtigste Erkentnis ist, dass du die Anzeige der 7-Segment-Anzeigen und dessen, was da dargestellt wird voneinander trennen musst. Die 7-Segment Anzeigen werden mit einem Timer gemultiplext und greifen dabei auf 10-Stück uint8_t Variablen zu, die der Multiplex-Routine mitteilen, welche konkreten LED an welcher Anzeige zu leuchten haben und welche nicht. Damit ist dann schon mal der Teil erledigt: wie kommt die physikalische Anzeige zu stande. Das Leuchtmuster der LED ist in diese 10 Stück uint8_t Variablen zu schreiben (die man innigerweise wahrscheinlich als Array auslegen wird). Dann braucht man noch eine Funktion, die genau diese Leuchtmuster für eine konkrete Zahl bestimmt, was ja eigentlich recht einfach ist, dann für eine bestimmte Ziffer ist ja das auszugebende Muster immer dasselbe. Es muss nur ja nach auszugebender Stelle in eine andere der 10 uint8_t Mustervariablen geschrieben werden. Mit dieser Funktion ist dann auch das Ausgeben einer Variablen nicht mehr schwer: einfach aufrufen, die Funktion bestimmt die LED-Muster für jede Stelle und die ständig laufende Timer-Interrupt Funktion schaufelt die dann auf die physikalischen 7_Segment Anzeigen. > anzeige drauf bekomme. Vielleicht auch nen kleinen beispiel code wäre > nett :). Zahlenvariablen also von 0-9 für die segment anzrige hab ich > schon. Aber wahrscheinlich gibst du die direkt aus. So kommst du aber nicht weiter. Der WEg führt über einen Timer, eine Interrupt-Funktion und einem Satz von globalen Variablen, in denen die Leuchtmuster der LED jeder einzelnen der 10 7_Segment Anzeigen stehen. Ergo: lass die Zahlen mal Zahlen sein, leg sie beiseite und beschäftige dich damit wie Timer funktionieren, wie du eine ISR hinkriegst und wie du in
1 | volatile uint8_t digits7[10]; |
2 | uint8_t digitCnt; |
3 | |
4 | ISR( ... ) |
5 | {
|
6 | // die Stelle die gerade leuchtet abschalten
|
7 | //
|
8 | |
9 | // welches ist die nächste Stelle
|
10 | digitCnt++; |
11 | if( digitCnt == 10 ) |
12 | digitCnt = 0; |
13 | |
14 | // und digits7[digitCnt] an die 7_Segment Stelle digitCnt ausgeben
|
15 | }
|
das reihum-weise Ausgeben der Leuchtmuster aus digits7 hinkriegst. Das ist dein erster Meilenstein. Ob in den digits7 dann die entsprechenden Muster für Ziffern stehen, oder ob da Muster für irgendwelche 'Graphiken' drinnen sind, interessiert die Multiplexroutine nicht. Die schaufelt die einfach nur an die Anzeigen raus.
:
Bearbeitet durch User
Danke dir für die schnelle antwort... bin dadurch schon mal schlauer geworden :). Dann werd ich die Sache gleich mal angehen
> Kann mir jemand erklären wie ich die variable Punkte auf die segment > anzeige drauf bekomme Karl-Heiz hat ja schon erwähnt: Mit einer Timer-Interrupt-Routine, die z.B. jede Millisekunde ausgeführt wird Angenommen die Segmente hängen an Port B (Segment A=PB0 und leuchtet wenn PB0 ein HIGH ist) und die Stellen an Port C (PC0..PC3 bcd codiert) Scheint ja mal wieder um Arduino zu gehen
1 | int stelle; |
2 | BYTE ziffer[10]; |
3 | BYTE segment[]={0x3F,0x06,0x5B,0x4F,0x66,0x6d,0x7D,0x07,0x7F,0x6F}; |
4 | void blink() |
5 | {
|
6 | PORTB=0; |
7 | PORTC=stelle; |
8 | PORTB=segment[ziffer[stelle]]; |
9 | stelle=(stelle+1)%10; |
10 | }
|
11 | void setup() |
12 | {
|
13 | DDRB=0xFF; // alles Ausgänge |
14 | DDRC=0x0F; // einige Ausgänge |
15 | Timer1.attachInterrupt(blink); |
16 | Timer1.initialize(1000); |
17 | }
|
18 | void zahlinziffern(long zahl) |
19 | {
|
20 | int i; |
21 | for(i=0;i<10;i++) |
22 | {
|
23 | ziffer[i]=zahl%10; |
24 | zahl/=10; |
25 | }
|
26 | }
|
27 | void loop() |
28 | {
|
29 | .. irgendwas was deine Punke ändert |
30 | Punkte = Punkte + 35000 |
31 | zahlinziffern(Punkte); |
32 | }
|
Wenn ich so was hingegen lese, wird mir schlecht: http://www.macherzin.net/article25-Arduino-7-Segment-Anzeige
:
Bearbeitet durch User
MaWin schrieb: > Wenn ich so was hingegen lese, wird mir schlecht: Na da warten wir doch mal auf das Servicepack 2. Timer werden doch erst in 5 Jahren erfunden.
Hi Vielleicht solltest du dir mal den Post "15x7 Segmentanzeige mit durchlesen". Sollte dir auch nützlich sein. Gruß oldmax
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.