www.mikrocontroller.net

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

Autor: Björn Wieck (bwieck)
Datum:

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:

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:

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:

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 Flattr this
Datum:

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:

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 Flattr this
Datum:

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:
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 Flattr this
Datum:

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:
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: C. E. (engel07)
Datum:

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:

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:

>> 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:

>> 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:

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:

@ 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:
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.
Autor: Andreas A. (elw-2)
Datum:

Hi!

Danke hoax!!

Hat es evtl. schon einer Probiert, ob man es einfach gegen GND schalten
kann?

MFG
Andreas
Autor: Jochen Oberreiter (Gast)
Datum:

Hm.
Ich bin bei der Auslegung des Transformators etwas stutzig geworden, da
mir die 10,5V eff etwas zu klein scheinen. Eine kurze überschlägige
Rechnung gibt:

10,5V eff = 14,85 V Scheitel

Mit V_D = 0,7 V (Diodenspannung) und V_RIPPLE ~ 1,2 V (über den
Kondensator), sowie V_LM317 = V_IN - V_OUT = ~ 5V würde das etwa

(14.85 - V_RIPPLE - V_D - V_LM317) = 7,9 V

ergeben, viel zu wenig und nicht annähernd an den gewünschten 11,3 V ...

Wenn ich den Trafo auslegen müßte, würde ich eher einen 15V eff
verwenden. Welchen Trafo habt ihr real verbaut?


Jochen
Autor: Andreas A. (elw-2)
Datum:

Also ich würde real eine nehmen mit 13,4V, was ausreichen wäre, den
13,4V*Wurzel²~18V sollte reichen :)

Aber ich weiß nochnet ob das mit dem AD Wandler klappt (siehe Oben)
Autor: Jochen Oberreiter (joob)
Datum:

Folgendes ist rein theoretisch, da ich noch keinen DAC0800 zum Testen
habe:

Soweit ich aus dem Datenblatt zum DAC0800 rauslese, braucht der ein V-
von <= -5V (d.h. -5V bis max. -18V). Zu sehen ist das in dem Diagramm
"Power Supply Current vs. V-". Deshalb glaube ich nicht, dass es klappen
wird da einfach zB +12V und GND anzuhängen.

Und zur Symmetrie des Ausgangssignals um +/- 5V:
Wenn man den Output des DAC0800 symmetrisch um den Nullpunkt haben will,
so funktioniert das wie in Fig. 8 (Symmetrical Offset Binary Operation)
mit einem dahintergehängten LM741.

ABER: Dann müssen wahrscheinlich auch die Bits vom AVR anders ausgegeben
werden, da in dieser Verschaltung "alle Bits auf 0" nicht 0V
Ausgangsspannung, sondern -V_Ref bedeutet (siehe Tabelle)!

Insofern ist es (denke ich) einfacher mit V+ = - V- = 11,3V, V+_Ref=+5V,
V-_Ref = GND und der ursprünglichen Offsetkompensation zu arbeiten.


Jochen
Autor: Jochen Oberreiter (joob)
Datum:

Nö, moment mal, Denkfehler: die Bits sind dieselben ... könnte doch
klappen mit der symmetrischen Ausgangsspannung.


Jochen
Autor: Andreas A. (elw-2)
Datum:

Ja, ok..?!?!

Jetzt bin ich verwirrt.

>Insofern ist es (denke ich) einfacher mit V+ = - V- = 11,3V,
>V+_Ref=+5V, V-_Ref = GND und der ursprünglichen Offsetkompensation zu >arbeiten.

Aber mal eine andere Frage, muss es den der IC sein??
Würde es nicht auch ein Widerstandsnetzwerk tunen?
Der Genauigkeit zugrunde dürfte das ja nicht viel machen, da der AVR ja
auch mit Heißernadel gestrickt ist.

Andreas
Autor: Jochen Oberreiter (joob)
Datum:
Angehängte Dateien:

> Jetzt bin ich verwirrt.

Inwiefern?
Ich überlegte mir, dass  B1 ... B8 = 0 in der Originalschaltung 0V
Ausgangsspannung bedeuten, beim DAC aber -V_Ref. Aber ich habe
vergessen, dass die Offsetkompensation in der Originalschaltung aus B1
... B8 = 0 dann auch -V_Ref (d.h. -2.5V) daraus macht.
Insofern ist es Ausgangsspannungsmäßig egal, ob da ein
Widerstandsnetzwerk oder ein DAC dahinterhängt.
Die (ungetestete!) Beschaltung für ein symmetrisches Ausgangssignal (wie
schon erwähnt, Fig. 8 aus dem DAC0800-Datenblatt) habe ich angehängt.

> Aber mal eine andere Frage, muss es den der IC sein??
> Würde es nicht auch ein Widerstandsnetzwerk tunen?
> Der Genauigkeit zugrunde dürfte das ja nicht viel machen, da der AVR ja
> auch mit Heißernadel gestrickt ist.

Sicher wirds das Widerstandsnetzwerk auch tun. Der DAC0800 ist ja im
wesentlichen nichts anderes -- aber integrierte Widerstände liegen
prozessbedingt in einem viel engeren Toleranzband, insofern sehe ich da
schon einen Sinn darin.
Die "heiße Nadel" bedeutet ja meiner Meinung nicht, dass die Werte die
der AVR ausgibt ungenau sind, sondern dass der Code noch optimiert
werden könnte.


Jochen
Autor: Jochen Oberreiter (joob)
Datum:

Ergänzung zum obigen Schaltplan: +V_ref = 5V (Pin14) bedeutet eine
Ausgangsspannung (= SIGNAL_UNFILTERED) von +/- 5V. Wer unbedingt +/-
2.5V haben möchte, müsste da wahrscheinlich +V_Ref = 2.5V an den Pin 14
dranhängen.

Ich werde die +/- 5V ausprobieren, wenn ich die Schaltung am
Experimentierboard aufbaue (kann aber noch dauern).


Jochen
Autor: Björn B. (elmo)
Datum:
Angehängte Dateien:

Hallo,

ich habe mal ein Layout mit Kicad gemacht. Vielleicht kanns ja noch
jemand anders gebrauchen. Passt gut in die Fischer KOH Gehäuse (2100 +
6100).

Gruß
Björn
Autor: Andreas A. (elw-2)
Datum:

Hey,

DANKE!!! Du hast mir das ganze neuzeichen erspart :)

Sag einmal, könntest du evtl. noch eine Bibliothek "bjoern" hochladen??

MFG
Andreas
Autor: Björn B. (elmo)
Datum:
Angehängte Dateien:

Hi Andreas,

ok, hier ist sie. Ich muss allerdings vorwarnen, das ist meine erste
Kicad Bibliothek und sie erhebt weder Anspruch auf Funktionsfähigkeit,
noch auf strukturierte und sinnvolle Benennung ;-)

Gruß
Björn
Autor: Christian (Gast)
Datum:

Hallo Björn,

habe mir Dein Layout zwecks Nachbau angeschaut.
Ich finde leider keinen passenden Trafo.
Welchen hast Du verwandt?

Gruß

Christian
Autor: Björn B. (elmo)
Datum:

Hallo Christian,

wenn ich mich recht entsinne, müsste das der hier sein:
http://www.reichelt.de/Printtrafos-2-0-2-8VA/EI-30...

Gruß
Björn
Autor: Christian (Gast)
Datum:

Hallo Björn,

danke, war ein zielführender Hinweis!

EI 30/15,5 109 :: Trafo 2VA, 9V, 222mA


Gruß

Christian

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net