mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik avr assembler frage


Autor: M. S. (sadmarvin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe mein erstes etwas längeres Programm in assembler geschrieben.

Es ist zur Ansteuerung einer 3x3 LED Matrix mit einem ATtiny2313

Ich habe 2 Timer verwendet. Einer für das Multiplexing der Spalten
und einer für das durchschalten der einzelnen Komplettbilder.

Die Bilder sind so im Programmspeicher abgelegt
bilder:
  .db 0b00000011  ;3 Bilder
bild0:
  .db 0b00100000
  .db 0b00010010    
  .db 0b00001000

  .db 0b00100000
  .db 0b00010010    
  .db 0b00001000

  .db 0b00100010
  .db 0b00010101    
  .db 0b00001010

am Anfang des Programmes wird dann der Wert an der Stelle bilder in 
einem Register gespeichert.
  ldi ZH,LOW(bilder*2)    ;Low-Byte der Adresse von bilder in ZL  
  ldi ZH,HIGH(bilder*2)    ;High-Byte der Adresse von bilder in ZH
  lpm 
  mov bilderanzahl,r0

In einem weiteren REgister ist die nr. des aktuellen Bildes gespeichert.
Im Interrupt Handler Für den Bilder Timer wird dieser Wert dann mit der 
gesamtanzahl der Bilder verglichen und bei Bedarf wieder auf null 
gesetzt.
Und am ende um 1 erhöht.
  cp nextbild,bilderanzahl  ;nextbild mit Anzahl Bilder vergeleichen
  brne next
  mov nextbild,zero
next:
Das funktioniert leider nicht. Es sieht so aus als ob weiter als 3 
gezählt wird.

Wenn ich aber
cpi nextbild,3
nehem funktioniert es wie gewünscht

muss ich da evtl. einen anderen Vergleichsbefehl oder eine andere 
Sprungbedingung nehmen?

Das komplette Programm ist hier zu finden
http://pastebin.com/ebNeXcN2

p.s.:
ich beschäftige mich erst seit gut 1-2 Wochen mit der µC Programmierung.

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
M. S. schrieb:
> ldi ZH,LOW(bilder*2)

Du musst das LB auch in's ZL laden...

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Du musst das LB auch in's ZL laden...

Genau.

> lpm
>  mov bilderanzahl,r0

Das kannst du dir auch sparen

  lpm bilderanzahl,Z

Oder besser

  lpm bilderanzahl,Z+

dann zeigt Z gleich auf den naächsten Wert.

MfG Spess

Autor: M. S. (sadmarvin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MWS schrieb:
>> ldi ZH,LOW(bilder*2)
>
> Du musst das LB auch in's ZL laden...
ups, das habe ich ganz übersehen, war wohl ein Tippfehler ;)
danke

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich vermute mal, dass das Register "bilderanzahl" noch irgendwo anders 
mit genutzt wird. Um welches Register handelt es sich denn?

Autor: M. S. (sadmarvin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
r22

aber der Fehler war wie gesagt, dass ich

ldi ZH,LOW(bilder*2)

statt

ldi ZL,LOW(bilder*2)

da stehen hatte. Jetzt funktioniert es.

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.