mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DDS Code AVR ----> 8051


Autor: edi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: edi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias Reiter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: edi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.