Hallo Forum, ich habe mir den Mini DDS von Jesper zusammengelötet (http://www.myplace.nu/avr/minidds/index.htm). Wenn ich eine Frequenz über DDSControl.exe einstelle, kommt auch ein Signal am Ausgang raus. Leider stimmt aber die Frequenz nicht ! Ich nutze eine ATTiny2313 mit 11,0592MHz (Frequenz wie das Orginal). Die Fuses (Low: 0xEE, High: 0XDF) sollten stimmen, die Serielle Kommunikation klappt. Wenn ich mit DDSControl eine Frequenz von 10 Hz einstelle, schickt DDSControll folgende Werte zum ATTiny: 46 00 00 00 07 0A. Mit der Formel aus der ASM-Datei (f = r24/r25/r26 * (11059200/9)/16777216) errechne ich daraus so ca. 0,5Hz, was in etwa auch dem entspricht was ich am Ausgang beobachte (LED nach OPV, da mir (noch) ein Frequenzzähler fehlt). Kann es sein, das DDSControl fehlerhaft ist bzw. für eine andere Quarzfrequenz compiliert wurde?
150994944 = 9 * 2^24 (die Hauptschleife dauert 9 Cyclen) Resolution = fCPU/150994944 and fOut = Accumulator * Resolution 11059200 / 150994944 = 0,0732421875 Für 10 Hz sollte der Summand 10 / 0,0732421875 = 136,53333 sein. 136 ist 0x88 137 ist 0x89 (aufgerundet) "Wenn ich mit DDSControl eine Frequenz von 10 Hz einstelle, schickt DDSControll folgende Werte zum ATTiny: 46 00 00 00 07 0A." 46 ist ein 'F', d.h. die Sequenz ist die Antwort vom µC an den PC, nicht der Befehl vom PC an den µC. Die 0,5 Hz sind 00000007 * 0,073242188 = 0,512695316 Poste bitte, was der PC sendet (müsste mit 0x73 ('s') beginnen). Welche Frequenz gibt der µC nach dem Reset aus (sollte 1kHz Sinus sein)? 0x003555 = 13653 13653 * 0,0732421875 = 999,9755859375 Hz (liegt näher an 1000) 13654 * 0,0732421875 = 1000,0488281250 Hz Hast Du den Code selbst compiliert oder verwendest Du ein fertiges .hex?
Hall eProfi, vielen Dank für deine Antwort. Du hast natürlich recht. Die Sequenz, die mit 46 beginnt ist schon die Antwort vom uC. Allerdings stimmen die 3 bzw 4 Bytes mit den "Additions"-Werten überein, die Kommunikation zwischen uC und PC ist in Ordnung. Wenn ich in DSSControl 10 Hz eingebe, sendet DSSControl 73 00 00 00 07 Der ATTiny antwortet mit 46 00 00 00 07 0A Dies entspricht aber 7 * 11059200/9/2^24 = 0,51Hz Wenn ich in DSSControl 1000 Hz eingebe, sendet DSSControl 73 00 00 02 BC Der ATTiny antwortet mit 46 00 00 00 02 BC Hier ergibt sich (2*256 + 11*16 + 12) * 11059200/9/2^24 = 51,2 Hz Im Falle von 10Hz müsste DDSControl 73 00 00 00 89 schicken. Bei 1000Hz 73 00 00 35 55. Ich habe mir DDSControl direkt von Jespers Homepage geladen. Anders als im Screenshot auf seiner Seite kann ich keine Schnittstelle Com1-4 auswählen. Das Hex-File hatte ich Anfangs von anderer Stelle runtergeladen. Im Laufe der Problemsuche habe ich das File dann aber auch selbst compliert. Nach Anpassung von - Dateiendung .S - #define von SPL,UBRR,USR und UCR - #include <avr/io.h> Das Problem liegt auf der PC Seite - nicht auf der Microcontrollerseite. Nach einem Reset gibt der uC 1000Hz aus (Hörtest). Ich bin nun dabei, mir die Steuersoftware in Visual Basic nachzuprogrammieren.
"Das Problem liegt auf der PC Seite - nicht auf der Microcontrollerseite." Das dachte ich mir schon. Kannst Du beim PC-Programm die Quarzfrequenz eingeben? Dann kannst Du den Fehler darüber kompensieren - vorausgesetzt, es ist kein Overflow-Fehler. Wie gibt man die Quarzfrequenz ein, in Hz, kHz oder MHz? Mit Komma oder mit Punkt? Oder aus einer Auswahl? Moment, jetzt habe ich doch das Programm heruntergeladen. Bei (rechte Maustaste ins Blaue) | Preferences kannst Du eingeben: DDS resolution 24 Bit oder 32 Bit bei Synthesizer Frequency ist die Vorbelegung 2.4e+007 Comport Com1 oder Com2 oder Com3 oder Com4 Was hast Du eingestellt? Vermutlich ist 1.10592e+007 richtig, aber es kann auch 11059200 * 0,0732421875 = 810000 richtig sein.
Hallo eProfi, kleine Ursache grosse Wirkung... Unter Vorbelegung war 2.4e+007 eingetragen. Hab dies auf 1.10592e+006 geändert und siehe da es funktioniert... Wegen dieser sch... Einstellung hab ich Stunden verplempert... Hab die Einstellungsseite nicht bemerkt. Vielen Dank. Gruß Stefan
1.10592e+006 ?? Das verstehe ich nicht ganz, wenn dann würde ich eher 11059200/9=1228800 = 1.2288e+006 vermuten. Bei 2.4e+007 ist die Frequenz um 1000 / 51,2 = 19,53125 zu klein. 2,4e+007 / 19,53125 = 1228800
Ich habe ebenfalls ein kleines Problem mit dem miniDDS: Der Aufbau funktioniert gut (Test mit Terminalprog), aber leider gehts mit dem Programm DDSControl.exe von der Seite http://www.myplace.nu/avr/minidds/ gar nicht. Der Controller scheint die Befehle zu ignorieren :-( Hat jemand damit Erfahrung?
Baudrate richtig eingestellt? Versuche mal, mit einem 2. PC (oder einer COM2) die gesendeten Bytes zu loggen. Muss funktionieren, läuft ja bei vielen anderen auch. Hast Du eine echte oder virtuelle Schnittstelle (welcher Hersteller / Chipset)?
Hallo, ich habe den Code aus der Webseite vom Jesper runtergeladen und versuchte ihn unter AVR Studio zu complieren. Dabei habe ich ein paar Fehler bekommen, die mit dem Controller zu tun haben. Ich benutze den Controller ATTINY2313 anstatt den AT90S2313, ich glaube, sie sind aehnlich. Die Fehler, die ich bekomme lauten: 1. ....projects\minidds\minidds.asm(66): error: Cannot find include file: io2313.h 2. ....projects\minidds\minidds.asm(69): error: Invalid directive: '.section' Kann jemand weiter helfen!! Gruss
Hallo, ich habe den Code auf Attiny2313 umgewandelt. Compiliert und eine Hex-Datei erzeugt. Ich muss nur mein uC flashen und testen, ob es funktioiert. Gruss
hallo noch mal, Ich habe auf die Webseite vom Jesper gelesen, dass die Spannung und die Frequenz sich steuern lassen (Spannung variert in 256 level). Meine Fragen: 1. ich benutze eine CPU vom 16 MHZ, wo kann ich im Programm (Regfister) es definieren? 2. wie kann ich die Spannung mit seinem Programm steuern? Gruss
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.