www.mikrocontroller.net

Forum: Mikrocontroller und Elektronik @ Andreas: Frage zum Digitalen Funktionsgenerator DDS

Autor: Björn Wieck (bwieck)
Datum: 23.09.2007 14:25

Hallo,

@Andreas:

Ich wollte mal den DDS aus dem Artikel
http://www.mikrocontroller.net/articles/Digitaler_...
testen und bin beim Assemblieren darüber gefallen das einige Register
Im Quelltext neu definiert werden obwohl sie in der m8def.inc schon
vordefiniert sind...

Das ergibt natürlich Fehler bei der Assemblierung.
Hier mal auszüge der betreffenden Direktiven.

dds.asm:

.def        fbinL        = R26            ; binary value Low byte
.def        fbinH        = R27            ; binary value High byte

.def  z1 = R28        ; Dieses Registertripel enthält die Phasenposition
.def  z2 = R29        ; zu der die Register changeX bei der Phasenakk.
.def  z3 = R30        ; addiert werden




m8def.inc:

; ***** CPU REGISTER DEFINITIONS
*****************************************
.def  XH  = r27
.def  XL  = r26
.def  YH  = r29
.def  YL  = r28
.def  ZH  = r31
.def  ZL  = r30


ausserdem werden im Quelltext die Register 21 und 22
gleich doppelt definiert:

.def   fbin2   = R21            ; binary value byte 2
.def   fbin3   = R22            ; binary value byte 3 (MSB)
.def   tBCD0   = R21            ; BCD value digits 1 and 0 (same as
fbin2)
.def   tBCD1   = R22            ; BCD value digits 3 and 2 (same as
fbin3)

soll das so sein ?
oder Hast Du eine andere m8def.inc benutzt

Grüße
Björn
Autor: Björn Wieck (bwieck)
Datum: 23.09.2007 14:50

Einen habe ich noch:

Diese Zeile mag der Assembler auch nicht:

ldi temp1, 0b10000000|(((@0)-1)<<6)|((@1)-1)

Da bekomme ich eine Fehlermeldung:

DDS.asm(121): error: syntax error, unexpected ','

Merkwürdig... ich kann da nichts falsches dran finden..

Grüße
Björn
Autor: Björn Wieck (bwieck)
Datum: 23.09.2007 17:02

Björn Wieck wrote:

> Diese Zeile mag der Assembler auch nicht:
>
> ldi temp1, 0b10000000|(((@0)-1)<<6)|((@1)-1)
>
> Da bekomme ich eine Fehlermeldung:
>
> DDS.asm(121): error: syntax error, unexpected ','


OK, den Fehler habe ich gefunden... lag am Assembler selbst.
mit Version 1 gehts dann, nur die Registerproblematik ist geblieben.
Autor: Björn Wieck (bwieck)
Datum: 24.09.2007 22:59

Björn Wieck wrote:

> OK, den Fehler habe ich gefunden... lag am Assembler selbst.
> mit Version 1 gehts dann, nur die Registerproblematik ist geblieben.

Die restlichen Meldungen wegen der Registerdoppelbelegungen scheinen
nicht
ins Gewicht zu fallen, das Prog läuft.

Da habe ich mich mal über den Schaltplan hergemacht und stelle 2 Fragen:

R19 ist ohne Wert, ich habe jetzt mal einfach 10-15k als passend
angenommen weil es hier nur um die Kompensation geht.

R29 ist als 1k angegeben! Warum?? da gehen ja ständig 0,5W in Wärme weg.


Grüße
Björn
Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite
Datum: 24.09.2007 23:49

R19 kannst du im Zweifelsfall auch weglassen, der dient nur dazu den
Einstellungsbereich etwas zu verkleinern um genauer einstellen zu
können. Was ich da eingebaut habe weiß ich nicht mehr genau.

R29 ist zu klein, das stimmt. Allerdings ist wenn man ihn größer macht
der Spannungsteiler nicht mehr als unbelastet zu betrachten, was das
Ergebnis verfälschen könnte.

Ich habe die Hinweise im Artikel eingefügt.
Autor: Björn Wieck (bwieck)
Datum: 25.09.2007 00:13

Andreas Schwarz wrote:
> R19 kannst du im Zweifelsfall auch weglassen, der dient nur dazu den
> Einstellungsbereich etwas zu verkleinern um genauer einstellen zu
> können. Was ich da eingebaut habe weiß ich nicht mehr genau.
>
> R29 ist zu klein, das stimmt. Allerdings ist wenn man ihn größer macht
> der Spannungsteiler nicht mehr als unbelastet zu betrachten, was das
> Ergebnis verfälschen könnte.
>
> Ich habe die Hinweise im Artikel eingefügt.

Hallo Andreas,

Ich würde jetzt mal R19 auf Verdacht bei 10k nehmen.

R29 würde ich auf 4k7 machen und dazu den R32 auf 33k machen.
R30 und 31 sollten dann auch 33k sein aber ich teste erstmal..

Tschüss
Björn
Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite
Datum: 25.09.2007 00:32

Kleiner würde ich die Widerstände am OP nicht machen, sonst belastest du
den Spannungsteiler nur noch mehr. Lass die 56k doch einfach.
Autor: Björn Wieck (bwieck)
Datum: 06.10.2007 22:35
Angehängte Dateien:

Andreas Schwarz wrote:
> Kleiner würde ich die Widerstände am OP nicht machen, sonst belastest du
> den Spannungsteiler nur noch mehr. Lass die 56k doch einfach.

Sooo, getestet und für Gut befunden.

Dein DDS funktioniert hervorragend.

R19 habe ich jetzt mit 4k2 getestet und ist i. O.
Bei R29 komme ich mit 4k7 auf gute Einstellbarkeit.
Alle anderen Werte sind so geblieben.

Anstelle des R2R Netzwerkes habe allerdingsich einen DA Wandler ZN428
genommen.

Grüße
Björn
Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite
Datum: 06.10.2007 23:31

Schön! Mit dem Gehäuse hast du dir ja einige Mühe gegeben. Ich hab das
Bild auf der Projektseite verlinkt.
Autor: Björn Wieck (bwieck)
Datum: 06.10.2007 23:56
Angehängte Dateien:

Andreas Schwarz wrote:
> Schön! Mit dem Gehäuse hast du dir ja einige Mühe gegeben. Ich hab das
> Bild auf der Projektseite verlinkt.

Danke Andreas, Das Gehäuse hatte ich noch zu liegen...

Das Display und die Tastatur haben so gerade eben noch in dieser Höhe
reingepasst.


Grüße
Björn
Autor: Christian Engel (engel07)
Datum: 03.12.2007 07:34

Hallo Björn,

gefällt mir richtig gut deine Lösung.
Leider bin ich fachlich noch nicht so weit, dass eine solche Aufgabe
ohne Hilfe stemmen kann.

Habe ich die Möglichkeit den Schaltplan von "Deiner Lösung" zu bekommen?
Evtl. würdest Du mir ja auch das Layout überlassen?

Habe noch eine Frage zum ASM-Code. Für die Anwendung des DA-Umsetzers
ZN428 musstest Du den Code nicht anfassen?

Gruß aus Wolfsburg

Christian Engel
Autor: kelli (Gast)
Datum: 17.02.2008 21:40

Hallo zusammen,

Als erstes muss ich sagen dass ich das ein sehr gutes Projekt finde!
Vielleicht werde ich es auch mal als "Inspiration" für ein eigenes
Projekt benützen.
Ich habe aber noch eine Lösung für den R29: man muss einfach eine OP als
Impedanzwandler dahinterschalten und dann kann man ein fast beliebiges
Poti nehmen, zb. 50k.

Gruss kelli
Autor: Jörg S. (mitchell)
Datum: 13.04.2008 11:32

>> Diese Zeile mag der Assembler auch nicht:
>>
>> ldi temp1, 0b10000000|(((@0)-1)<<6)|((@1)-1)
>>
>> Da bekomme ich eine Fehlermeldung:
>>
>> DDS.asm(121): error: syntax error, unexpected ','
>
> OK, den Fehler habe ich gefunden... lag am Assembler selbst.
> mit Version 1 gehts dann, nur die Registerproblematik ist geblieben.

Hallo,
ich habe gerade das selbe Problem.
Ich benutze AVR-Studie 4.13, wie kann ich das Problem da lösen?
Ich habe auch noch nicht so richtig verstanden welche Bitmanipulation da
erfolgt. Kann mir das mal jemand erklären.

mfg
Jörg
Autor: dixie (Gast)
Datum: 16.11.2009 10:54

>> Diese Zeile mag der Assembler auch nicht:
>>
>> ldi temp1, 0b10000000|(((@0)-1)<<6)|((@1)-1)
>>
>> Da bekomme ich eine Fehlermeldung:
>>
>> DDS.asm(121): error: syntax error, unexpected ','
>
> OK, den Fehler habe ich gefunden... lag am Assembler selbst.
> mit Version 1 gehts dann, nur die Registerproblematik ist geblieben.


Einstellung im AVR-Studio:
-> Project -> Assembler Options -> AVR Assembler -> Version 1
Ansonsten wir mit Fehlermeldung übersetzt.
Normal ist der AVR Assembler Version 2 aktiv. ( Standard Einstellung )
Autor: hoax (Gast)
Datum: 17.01.2010 17:19

Das Projekt Wirklich feine Sache! Habe es gleich mal nachgebaut.
Die Idee statt eines R2R-Netzwerkes ein DAC zu nehmen war ein klasse
Idee. Allerdings konnte ich den DA Wandler ZN428, den  Björn Wieck
benutzt hate nicht finden. Dehalb habe ich den DAC 0800 genommen.
Funktioniert ebenfalls gut und ist jederzeit bei Reichelt zu bekommen.
Autor: Andreas A. (elw-2)
Datum: 22.01.2010 22:08

@ hoax
Hättest du evtl. den geänderten Schaltplan mit dem DAC 0800??

Wäre sehr net, und würde mir die Neuerfindung des Rades ersparen :)
Autor: hoax (Gast)
Datum: 24.01.2010 11:54
Angehängte Dateien:

Hier der gewünschte Schaltplan. Ersichtlich ist nur die Beschaltung des
DAC0800. Problem bei dieser Schaltung ist nur die Spannungsversorgung,
um einen Signalverlauf von 0-10V hinbekommt (Habe noch nicht getestet
was passiert wenn V- auf GND gelegt wird). Es wäre kein Problem auch
Spannungen von -5V - 5V zu erzeugen (ohne Offsetkompensation mit OPs).
Dazu nutzt man andere Referenzspannungen.

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email ü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




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate

Hinweis: der Originalbeitrag ist mehr als 6 Monate alt.
Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net