mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Assembler: Anfängerfrage


Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe eine wohl einfache Frage zu Assembler, da ich diese Sprache 
aber eigentlich nicht brauche und auch nicht lernen möchte, da ich den 
fertigen Code von einem Projekt übernehme, stelle ich sie kurz hier.

Folgender Codeausschnitt soll den Vorteiler eines ATmega PWMs bei 
bestimmten Einstellungen des Potis ändern.
Convert3:
  sts sCmp,R7 ; speichere im SRAM
  sts sCmp+1,R8
  mov ZL,rAdc0L ; kopiere ADC0 nach Z
  mov ZH,rAdc0H
  ldi XL,LOW(392)
  ldi XH,HIGH(392)
  ldi rmp,(1<<WGM13)|(1<<WGM12)|(1<<CS10)
  cp ZL,XL
  cpc ZH,XH
  brcc Convert4
  ldi rmp,(1<<WGM13)|(1<<WGM12)|(1<<CS11)
  ldi XL,LOW(225)
  ldi XH,HIGH(225)
  cp ZL,XL
  cpc ZH,XH
  brcc Convert4
  ldi rmp,(1<<WGM13)|(1<<WGM12)|(1<<CS10)|(1<<CS11)
  ldi XL,LOW(60)
  ldi XH,HIGH(60)
  cp ZL,XL
  cpc ZH,XH
  brcc Convert4
  ldi rmp,(1<<WGM13)|(1<<WGM12)|(1<<CS12)
  cpi ZL,3
  brcc Convert4
  ldi rmp,(1<<WGM13)|(1<<WGM12)|(1<<CS12)|(1<<CS10)

Ich benötige aber konstant den Vorteiler "1", also der, der bei 392 
gesetzt wird. Die Vorteiler werden sonst ja offentlich bei 3, 60, 225 
und 392 geändert. Wie baue ich den Code nun um, dass nur der eine 
Vorteiler, unabhängig vom Potiwert, benutzt wird?

Mein Vorschlag wäre jetzt gewesen:
Convert3:
  sts sCmp,R7 ; speichere im SRAM
  sts sCmp+1,R8
  mov ZL,rAdc0L ; kopiere ADC0 nach Z
  mov ZH,rAdc0H
  brcc Convert4
  ldi rmp,(1<<WGM13)|(1<<WGM12)|(1<<CS12)|(1<<CS10)

Macht das Sinn? Sorry wie gesagt, möchte nicht Assembler lernen da ich 
es nur für diese eine Sache brauche, vll. erbarmt sich ja jemand :)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg schrieb:

> möchte nicht Assembler lernen da ich
> es nur für diese eine Sache brauche

Das soll dich aber nicht daran hindern, ins Datenblatt zu schauen ...


> Mein Vorschlag wäre jetzt gewesen:
>
Convert3:
>   sts sCmp,R7 ; speichere im SRAM
>   sts sCmp+1,R8
>   mov ZL,rAdc0L ; kopiere ADC0 nach Z
>   mov ZH,rAdc0H
>   brcc Convert4
>   ldi rmp,(1<<WGM13)|(1<<WGM12)|(1<<CS12)|(1<<CS10)
>
> Macht das Sinn?

... denn das ist kein Vorteiler von 1

Machs dir doch einfach:
In dem Code werden offenbar verschiedene Vorteiler gesetzt, je nach 
Bereich, in dem sich der ADC Wert abspielt.

Wenn nun in all den unterschiedlichen Fällen immer der gleiche Vorteiler 
gesetzt wird (die 'alte' Belegung als Kommentar dazuschreiben, wer weiß 
ob man die nicht noch einmal braucht) ... brauchst du den Code nicht 
weiter analysieren und hast trotzdem dein Ziel erreicht.

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dankeschön. Werd mir den Vorteilerwert selbst raussuchen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ob allerdings die Anzeige in deinem Generator dann noch den richtigen 
Wert anzeigt, ist eine ganz andere Geschichte :-)

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit ein wenig nachdenken glaube ich, dass der Vorteiler offenbar dieser 
sein muss:
  ldi rmp,(1<<WGM13)|(1<<WGM12)|(1<<CS10)

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Anzeige wird stimmen, da ich die Frequenztabelle angepasst habe. (es 
war fertiger Code mit Anleitung)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg schrieb:
> Mit ein wenig nachdenken glaube ich, dass der Vorteiler offenbar dieser
> sein muss:
>   ldi rmp,(1<<WGM13)|(1<<WGM12)|(1<<CS10)


Das sieht schon besser aus.
Du solltest aber trotzdem mit dem Datenblatt kontrollieren.

Schon alleine die Neugier, was eigentlich WGM13 + WGM12 bewirkt, sollte 
einem das Wert sein :-)

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe ich gerade. Wenn nur CS10 gesetzt ist, heißt das Vorteiler von 1. 
Wunderbar :)

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.