Phasenschieber mit AVR

Gast #718721
Hallo allerseits,
ich bin Anfänger in Assembler. Habe vor, einen Sinusgenerator zu bauen 
mit zwei gleichfrequenten Sinussignalen aber einstellbarer 
Phasenunterschiede. Anbei mein  Programm. Leider kann ich nur die Phase 
zwischen 0 und 90 grad einstellen (etwa 4 grad-Schritte). Meine Idee war 
eine Einstellung von 0 bis 360 grad.
Hat jemand von euch eine Idee wie ich es besser machen kann?
Angehängte Dateien:
Gast
Der Befehl "ADIW" erlaubt nur einen K-Wert von 0 bis 63 und das 
entspricht in meinem Fall max. 90 Grad Phasendifferenz. Ich ergänze das 
"aus der Tabelle rauslaufen" mit dem Tabellenstück "Ergänzung" in der 
Tabelle selbst.
An PORTA und PORTB befinden sich D/A-Wandler (R-Netzwerk). So wie mein 
Programm geschrieben ist, kann ich die Phasenverschiebung von 0 bis 90 
Grad problemlos über "phase" einstellen (in Schritten von ca. 4 Grad).
Ich denke mir dass ich in der NCO-Schleife nach Ausgabe von PORTA einen 
offset einbauen muss, weiss allerdings nicht wie sowas gemacht wird...
Gruß
Gast
Leider läuft alles nicht so richtig!
Bevor ich weiterhin dumme Fragen stelle, lasse ich mir nochmal alles 
durch den Kopf gehen. Ich melde mich morgen wieder.
Auf jeden Fall, vielen Dank für die Antworten,
Gruß
Gast
Hallo Benedikt,
so, nun habe ich das Problem im Griff. Die letzten Zeilen
lauten:


;Frequenzregister laden (default: 159,15 Hz)
  ldi    r17,0x7c
  ldi    r18,0x08
  ldi    r19,0x00

Haupt:
   add    r28,r17     ;1
   adc    r29,r18     ;1
   adc    r30,r19     ;1
   lpm        ;3
  out   PORTA,  r0    ;1

  addi  ZL,low(phase) ;1
    lpm               ;3
    out   PORTB,  r0  ;1

  subi  ZL,low(phase) ;1
  lpm                 ;3
  rjmp  Haupt         ;2 => 18 Takte

Danke für deine Tipps.
Grüße
Gast
stimmt, habe ich total vergessen: "addi" ist ein Makro

.MACRO  addi
 subi  @0, -@1
.ENDM

Da dieser Befehl fehlt, wird er durch die Subtraktion der negativen 
Konstante ersetzt. @0 entspricht den 1. Operanden und @1 den 2. 
Operanden. zB.
addi  r16, 12 => wird ersetzt durch subi r16, -12

Gruß

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.