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
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
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.
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
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.
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
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.
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
Datum:
Schön! Mit dem Gehäuse hast du dir ja einige Mühe gegeben. Ich hab das Bild auf der Projektseite verlinkt.
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
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
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
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
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 )
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.
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 :)
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.
Datum:
Hi! Danke hoax!! Hat es evtl. schon einer Probiert, ob man es einfach gegen GND schalten kann? MFG Andreas
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
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)
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
Datum:
Nö, moment mal, Denkfehler: die Bits sind dieselben ... könnte doch klappen mit der symmetrischen Ausgangsspannung. Jochen
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
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
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
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
Datum:
Hey, DANKE!!! Du hast mir das ganze neuzeichen erspart :) Sag einmal, könntest du evtl. noch eine Bibliothek "bjoern" hochladen?? MFG Andreas
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
Datum:
Hallo Björn, habe mir Dein Layout zwecks Nachbau angeschaut. Ich finde leider keinen passenden Trafo. Welchen hast Du verwandt? Gruß Christian
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
Datum:
Hallo Björn, danke, war ein zielführender Hinweis! EI 30/15,5 109 :: Trafo 2VA, 9V, 222mA Gruß Christian




