DDS Code AVR ----> 8051

Gast #52513
Lesenswert?
• ▲
▼
Hi,

nachdem ich mit ML2036 frequenzen bis 10KHz generiert habe moechte ich
nun einen AT89C2051 einsetzen.
Jesper Hansen hatte 2001 den Poor-mans DDS Synthesizer
vorgestellt,allerdings mit einem AT90S2313...

mein wunsch ist nun ein teil des programmes von AVR auf '51
umzuschreiben.

; main loop
;
;  r28,r29,r30 is the phase accumulator
;    r24,r25,r26 is the adder value determining frequency
;
;   add value to accumulator
;  load byte from current table in ROM
;  output byte to port
;  repeat
;
LOOP1:
    add    r28,r24      ; 1
    adc    r29,r25      ; 1
    adc    r30,r26      ; 1
    lpm            ; 3
    out    PORTB,r0    ; 1
    rjmp  LOOP1      ; 2 => 9 cycles


ich habe versucht einen '51 ersatz fuer '' lpm '' zu finden...
vermutlich ist es mit 'dptr' zu realisieren.
ich weiss,dass hier clevere leute sitzen und lesen...der eine oder
andere hat wohl lust und laune...?fuer eine uebersetzung?

die hardware laeuft schon und der erzeugte sinus ist sehr schoen.
mein problem ist nur der phasenakkumulator.

Andreas S. hat sich auch intensiv mit DDS beschaeftigt;schoene Arbeit.
Gruss
Edgar
Gast #52514
Lesenswert?
• ▲
▼
Hi

Ersatz für LPM ist MOVC A,@A+DPTR
add und adc sollten sich direkt übernehmen lassen wenn man die
entsprechenden Register anpasst. out wird ein mov und der rjmp entweder
ein sjmp oder ajmp. Wenn der Assembler halbwegs clever ist reicht auch
ein jmp.

Matthias
Gast #52515
Lesenswert?
• ▲
▼
vielen Dank Matthias,

....fuer die bestaetigung: dptr 16bit pointer .

es sind also die beiden hoechstwertigen bytes des phasenakkus,die
in den dptr geladen werden um einen wert aus der tabelle zuholen ?
je groesser der wert in r24..r26 desto hoeher die ausgangsfrequenz?

werde im simulator anschauen ,was da passiert.

Edgar
Gast #52516
Lesenswert?
• ▲
▼
Hallo Edgar,

Ersatz für LPM:

beim MCS51 geht´s z.B. so:

1. Tabellenanfang in den Datenpointer schreiben:
   MOV DPTR, #data16 (oder MOV DPTR, #Tabelle)

2. Tabellenplatz in a schreiben:
   MOV A, #Tabellenplatz

3. Byte aus einer Datentabelle im ROM lesen:
   (Move Code Byte)
   MOVC A, @A+DPTR

Anschliesend steht in A das adressierte Byte aus dem ROM.
Operation: PC <- PC+1
           (A) <- ((A) + (DPTR))


Ähnlich geht es auch mit MOVC A, @A+PC beim aufruf in Subroutinen.

Übrigends: ich bin Anfänger, falls mein Tipp nicht stimmt, frage
jemanden, der sich auskennt (Gelbe Seiten).

Tschüß Matthias
Gast #52517
Lesenswert?
• ▲
▼
hi,

funktioniert !

hier ist das spiel fuer 8051 familie.Hinter dem R2R wandler muss
ein filter sein, damit der ausgang einen SINUS liefern kann.


dedees:
         mov dptr,#Tabelle

         mov 28h,#0
         mov 29h,#0     ;phase accumulator
         mov 30h,#0

         mov 24h,#0ffh
         mov 25h,#0fah     ;adder wert ...frequenz
         mov 26h,#010h

loop2:   mov a,28h
         add a,24h
         mov 28h,a
         mov a,29h
         addc a,25h
         mov 29h,a
         mov a,30h
         addc a,26h
         mov 30h,a
         movc a,@a+dptr
         mov p1,a               ;ausgang R2R D/A wandler...sinus (etwa
4KHz - 11.059MHZ)
   cpl p3.5    ;W-dog..futter
         sjmp loop2


Edgar

Antwort schreiben

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.

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.