J
Johannes Bauer
Guest
Hallo Gruppe,
ich habe gerade etwas merkwürdiges mit einem meiner ATtiny2313s
festgestellt: für eine Sekundenanzeige habe ich eine zweistellige
Siebensegmentanzeige verwandt. Da der Tiny (fast) nichts macht, ewig
viel Flash und Portpins verfügbar hatte und ich gerade keinen 7447 zur
Hand hatte, kam mir eine grandiose (?) Idee: ich habe alle Kathodenpins
über Vorwiderstände an sieben Portpins geschaltet. Die zwei Anodenpins
direkt an Portpins. Dann wollte ich die einzelnen Leuchtsegmente
multiplexen (also nicht nur die ganze Anzeige, sondern wirklich die
einzelnen Segmente). Dass ich dafür die Vorwiderstände auch an die
Anodenleitungen hängen hätte können ist mir erst später aufgefallen...
aber naja.
Das ganze funktioniert auch einigermaßen gut, aber wenn ich
beispielsweise so eine Verzögerungsschleife einbaue:
void delay(unsigned char how) {
unsigned char x, y, z;
for (x=0; x<=how; x++) {
for (y=0; y<=how; y++) {
for (z=0; z<=how; z++) {
asm volatile("nop");
}
}
}
}
Und die Aufrufe, geht das Display aus! Wenn ich die Zahlen von 0-9
hochzählen lasse, wird die 0, die 2 und die 8 korrekt dargestellt, der
Rest ist Murks (also ganz "merkwürdige" Zeichen). Alle Ziffern einzeln
stellen sich korrekt dar.
Außerdem habe ich bemerkt, dass wenn ich eine derartige Schleife mache:
Display_Left();
while (1) {
Display_Single(5);
}
Die "5" korrekt im linken Display angezeigt wird. Aber diese Schleife:
while (1) {
Display_Left();
Display_Single(5);
}
Zeigt die 5 in der linken Displayhälfte an und schwach - ca. 20%
Dutycycle - auch in der rechten!
Woran kann das liegen? Bin für alle Hinweise dankbar.
Viele Grüße,
Johannes
ich habe gerade etwas merkwürdiges mit einem meiner ATtiny2313s
festgestellt: für eine Sekundenanzeige habe ich eine zweistellige
Siebensegmentanzeige verwandt. Da der Tiny (fast) nichts macht, ewig
viel Flash und Portpins verfügbar hatte und ich gerade keinen 7447 zur
Hand hatte, kam mir eine grandiose (?) Idee: ich habe alle Kathodenpins
über Vorwiderstände an sieben Portpins geschaltet. Die zwei Anodenpins
direkt an Portpins. Dann wollte ich die einzelnen Leuchtsegmente
multiplexen (also nicht nur die ganze Anzeige, sondern wirklich die
einzelnen Segmente). Dass ich dafür die Vorwiderstände auch an die
Anodenleitungen hängen hätte können ist mir erst später aufgefallen...
aber naja.
Das ganze funktioniert auch einigermaßen gut, aber wenn ich
beispielsweise so eine Verzögerungsschleife einbaue:
void delay(unsigned char how) {
unsigned char x, y, z;
for (x=0; x<=how; x++) {
for (y=0; y<=how; y++) {
for (z=0; z<=how; z++) {
asm volatile("nop");
}
}
}
}
Und die Aufrufe, geht das Display aus! Wenn ich die Zahlen von 0-9
hochzählen lasse, wird die 0, die 2 und die 8 korrekt dargestellt, der
Rest ist Murks (also ganz "merkwürdige" Zeichen). Alle Ziffern einzeln
stellen sich korrekt dar.
Außerdem habe ich bemerkt, dass wenn ich eine derartige Schleife mache:
Display_Left();
while (1) {
Display_Single(5);
}
Die "5" korrekt im linken Display angezeigt wird. Aber diese Schleife:
while (1) {
Display_Left();
Display_Single(5);
}
Zeigt die 5 in der linken Displayhälfte an und schwach - ca. 20%
Dutycycle - auch in der rechten!
Woran kann das liegen? Bin für alle Hinweise dankbar.
Viele Grüße,
Johannes