Forum: Mikrocontroller und Digitale Elektronik 3x7 Segment-zähler-attiny2313


von Daniel B. (und3rt4ker)


Angehängte Dateien:

Lesenswert?

Hi,
im Anhang ist der Quelltext für den Attiny 2313. Er sollte per 
multiplexing 3 siebensegmentanzeigen ansteuern, aber dabei kommt nur 
"wirres Zeug " raus. dh.: Wenn man in die Register ein, zehn und hundert 
die "5"lädt, wird nicht 5 angezeigt, sondern irgendwas...am font liegt 
es nicht, die anzeigen machen unabhängig voneinander den fehler
Ich finde meinen Fehler nicht, kann sich evtl. jmd den Quelltext 
ansehen?
Danke.

Mfg Und3rt4ker

von Jadeclaw D. (jadeclaw)


Lesenswert?

Ich glaube, da fehlt was.
Ich sehe, daß du die Font-Basisadresse in ZH:ZL einlädst.
Dann addierst du den Ziffernwert zu ZL dazu. Und da liegt, glaube ich 
mal, das Problem.
Wenn die Fontdaten über eine Seitengrenze hinausgehen, läuft ZL über und 
er lädt stattdessen den Inhalt vom Seitenanfang ein.
Lösen könnte man es so:
1
    clr mpr  ;neu    Dummynull für den add with carry
2
    ldi ZL, LOW(font*2)      ; Font-adresse in den
3
    ldi ZH, HIGH(font*2)     ; Z-Pointer laden
4
    add ZL, ein              ; Adresse des Z-Pointers um wert der anzeige erhöhen
5
    adc ZH, mpr  ;neu  0 und den beim add entstandenen Überlauf dazuaddieren
6
    sbi enable,2
7
    sbi  enable,1
8
    cbi  enable,0
9
;    out enable, mpr  ;den hier verstehe ich nicht ganz, die Stellen werden schon durch die SBI/CBI aktiviert, resp. abgeschaltet. Rausnehmen, sage ich mal
10
    lpm   ; Lese Fontdaten in R0
11
;    mov mpr, r0  ; Der ist auch überflüssig, denn
12
    out segmente, r0 ; geht laut AVR-Doku genauso
add immediate mit carry kann der AVR leider nicht, deshalb über den 
Umweg eines auf 0 gesetzten Registers. Wird der Überlauf vergessen, 
fehlt anschliessend der Seitenwechsel. Die mit 'neu' gekennzeichneten 
Stellen auch in den beiden anderen Blöcken einbauen. Die 
auskommentierten Zeilen können auch aus den anderen Blöcken raus, sofern 
vorhanden.

Gruss
Jadeclaw

von Daniel B. (und3rt4ker)


Lesenswert?

ist es eigentlich egal ob man:

font:
.db XXXX,XXXX,XXXX,XXXX


oder


font:
.db XXXX
.db XXXX
.db XXXX
.db XXXX

schreibt?

Das müsste doch äquivalent sein.

mfg

von Andreas K. (a-k)


Lesenswert?

Nein. Zumindest in Atmels Assembler erzeugt .DB immer eine ganze Anzahl 
Worte. Folglich ist
  .db 1
  .db 2
äquivalent zu
  .db 1,0
  .db 2,0

von Simon K. (simon) Benutzerseite


Lesenswert?

Jou, gibt aber auch entsprechende Warnings aus ("...Padding zero 
byte...").

von Daniel B. (und3rt4ker)


Lesenswert?

ja^^, ist mir jetzt auch gerade aufgefallen. Danke g

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
Noch kein Account? Hier anmelden.