Hallo! Habe gerade die gemultiplexte 7-Segment-Anzeige mit vier Ziffern laut Tutorial http://www.mikrocontroller.net/articles/AVR-Tutorial:_7-Segment-Anzeige realisiert. Mich hat schon gewundert, daß im Quelltext "call" geschrieben steht, obwohl der Compiler nur "rcall" kennt. Kann dazu jemand etwas sagen? Weiterhin besteht folgendes Problem: Es werden keine Zahlen hochgezählt, sondern alle Ziffern flackern nur mit ständig wechselnden Werten (kann man nicht ablesen, geht zu schnell). Manchmal ist "ansatzweise" ein Hochzählen zu beobachten. Das Programm habe ich 1:1 übernommen (halt call mit rcall ersetzt), Controller ist ein Mega8 auf internen 1 MHz. Bin ich hier zu irgendwas zu blöd oder stimmt etwas in der Programmierung nicht? Wie schnell müßte - wenn es denn funktioniert - der µC hochzählen? Danke für die Hilfe!
Hallo, ja, ist ein Fehler, der Mega8 kennt nur rcall. rcall erreicht einen Bereich von PC+2k Word bzw. PC-2k Word. Damit ist beim Mega8 der komplette 8k Byte (4k Word) Flash erreichbar und es gibt keinen call Befehl. Bei den größeren AVR (mehr Flash) reicht das dann nicht mehr und es gibt call. Ist wohl passiert, weil der Schreiber des Tutorials es auf einem AVR mit mehr Flash geschrieben hat und es dann erst für den Mega8 eingestellt hat... Zu deinem Fehler kann ich jetzt nicht viel sagen, kommtiere doch mal den Aufruf _loop: ; call out_number mal auskommentieren aus, dann sollte die Anzeige auf irgendwelchen Werten stehen. Flackert es dann auch ist es ein Fehler in den Multiplexroutinen oder dem Interrupt, sonst in der Zählroutine/Rechnerei. Gruß aus Berlin Michael
Hallo Michael! Deinen Tip habe ich mal umgesetzt und die Zeile auskommentiert. Das Ergebnis: Es werden vier "Nullen" inklusive Dezimalpunkt an jeder Ziffer angezeigt, allerdings bleibt Segment "d" ausgeschaltet, also sehen die "Nullen" wie ein großes Pi aus. Die Anzeige flackert weiterhin. Manche Segmente (bei jeder Ziffer anders) scheinen etwas langsamer zu flackern, andere machen fast den Eindruck, als ob sie permanent leuchten (also kein sichtbares Flackern). Also vermute ich, daß es mehrere unterschiedliche Durchläufe gibt und nicht immer dasselbe angezeigt wird. Eventuell sollte ich mal auf einen externen langsamen Takt umstellen, dann könnte man die einzelnen angezeigten Sachen lesen. Also alles sehr seltsam! Was soll ich als nächstes tun?
Nachtrag: Bei nochmaliger eingehender Überprüfung des Quelltextes ist mir ein weiterer gravierender Fehler aufgefallen: Die Segmente werden verkehrtherum angesteuert. Um ein Segment einzuschalten, muß das entsprechende Bit auf 0 gesetzt werden, und nicht wie im Programm auf 1. Als Treiber dienen im Beispiel PNP-Transistoren, die mit 0 durchgeschaltet werden, also sind alle Segmente aus, wenn am Port-Ausgang PC0:3 1111 anliegt. Kann auch in der Diskussion zu diesem Artikel nachgelesen werden, wie ich gerade gesehen habe. Ich bin dabei, das Programm umzuschreiben, was mir allerdings nicht so leicht fällt, da ich mit Zeigern noch nicht so viel Erfahrung habe. Eigentlich müßte der Autor das machen. ;)
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.