Hallo, @Andreas: Ich wollte mal den DDS aus dem Artikel http://www.mikrocontroller.net/articles/Digitaler_Funktionsgenerator 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
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
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.
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
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.
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
Kleiner würde ich die Widerstände am OP nicht machen, sonst belastest du den Spannungsteiler nur noch mehr. Lass die 56k doch einfach.
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
Schön! Mit dem Gehäuse hast du dir ja einige Mühe gegeben. Ich hab das Bild auf der Projektseite verlinkt.
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
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
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
>> 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
>> 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 )
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.
@ 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 :)
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.
Hi! Danke hoax!! Hat es evtl. schon einer Probiert, ob man es einfach gegen GND schalten kann? MFG Andreas
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
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)
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
Nö, moment mal, Denkfehler: die Bits sind dieselben ... könnte doch klappen mit der symmetrischen Ausgangsspannung. Jochen
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
> 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
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
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
Hey, DANKE!!! Du hast mir das ganze neuzeichen erspart :) Sag einmal, könntest du evtl. noch eine Bibliothek "bjoern" hochladen?? MFG Andreas
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
Hallo Björn, habe mir Dein Layout zwecks Nachbau angeschaut. Ich finde leider keinen passenden Trafo. Welchen hast Du verwandt? Gruß Christian
Hallo Christian, wenn ich mich recht entsinne, müsste das der hier sein: http://www.reichelt.de/Printtrafos-2-0-2-8VA/EI-30-15-5-209/index.html?ACTION=3&GROUPID=3314&ARTICLE=27334&SHOW=1&START=0&OFFSET=500&;PROVID=2402 Gruß Björn
Hallo Björn, danke, war ein zielführender Hinweis! EI 30/15,5 109 :: Trafo 2VA, 9V, 222mA Gruß Christian
Hallo Björn B., ich habe mehrfach versucht das asm-File zu assemblieren. Habe dabei auch die beiden Einstellungen "AVR Simulator" und "AVR Simulator 2" angewendet. Im AVR Studio 4.19 bekomme ich immer den Syntaxfehler "D:\DDS\Dds.asm(121): error: syntax error, unexpected ','". Ich weiß nicht, was ich noch versuchen könnte! Wäre es möglich, mir das hex-File zukommen zu lassen bzw. hier zum Download bereit zu stellen? Gruß, Heinz
Hi >Im AVR Studio 4.19 bekomme ich immer den Syntaxfehler >"D:\DDS\Dds.asm(121): error: syntax error, unexpected ','". Ich weiß >nicht, was ich noch versuchen könnte! Dann korrigiere mal die Aufrufe von locate in:
1 | update: |
2 | locate 1,1 ; Signalform an Zeile 1, Pos. 1 ausgeben |
3 | mov temp1, waveform |
4 | rcall printstring |
5 | locate 2,1 |
MfG Spess
:
Bearbeitet durch Admin
Danke Spess53, mit Deiner Hilfe konnte ich die Hex-Datei erstellen. Ich werde morgen den Atmega8 damit beschreiben und hoffe, dass es dann gehen wird. Aufgebaut habe ich bis jetzt alles, ausser die Sache mit den TL072. Aber so sollte eigentlich die Steuerung mit den Atmega8 schon funktionieren. Gruß, Heinz
Hallo Spess53, da bin ich nochmals! Das Assemblieren hat ja funktioniert. Das Programm im AT8 scheint aber nicht richtig zu laufen. Auf dem Display sind nur lauter P´s zu sehen. Am Pin19 ist ein wechselnder Pegel zu verzeichnen. Die Pin´s 14 bis 18 haben konstanten H-Pegel. An den Pin´s 2 bis 6 und 11 bis 13 liegt konstant L-Pegel. Wäre es nicht möglich, mir das fertige Hex-File zukommen zu lassen? MfG Heinz
Ein kleiner Fehler: ;; ;; Dieser Programmteil wird exakt 256000 Mal pro Sekunde ;; ;; durch den Timer aufgerufen. 256000 ---> 6553600/(24+1)=262144 Habe ich hier schon mal erwähnt: Beitrag "Re: atmega8, pwm, tongenerator ganz einfach"
Hast du die .eep-Datei ins EEPROM geschrieben? Da sind die Strings für die Datstellung auf dem LCD abgelegt. Sie können während dem Betrieb nicht direkt aus dem Flash ausgelesen werden, weil man dafür den Z-Pointer ändern müsste, welcher für die DDS gebraucht wird. Vorschlag für eine kleine Programmierübung: Strings im Flash ablegen, bei Programmstart ins RAM kopieren, und von dort ausgeben.
Ich habe den Funktionsgenerator auch nachbegaut und möchte ihn nun programmieren. Kann mir bitte jemand sagen woher ich die EEprom datei bekomme? und die Fusebits? Atmega8-16PU verwende ich Danke im Vorraus
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.