7-Segment-Anzeige - Fehler im AVR-Tutorial?

Gast #937417
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. ;)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.