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