Falsche Frequenz mit Jespers MiniDDS ?

Gast #1100099
Lesenswert?

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?
Gast #1101172
Lesenswert?

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?
Gast #1102133
Lesenswert?

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.
Gast #1102306
Lesenswert?

"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.
#1778340
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren