mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 7-Segment-Anzeige - Fehler im AVR-Tutorial?


Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Habe gerade die gemultiplexte 7-Segment-Anzeige mit vier Ziffern laut 
Tutorial 
http://www.mikrocontroller.net/articles/AVR-Tutori... 
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!

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: F. P. (pl504)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: F. P. (pl504)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.