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
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
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
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
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.