Forum: Mikrocontroller und Digitale Elektronik Falsche Frequenz mit Jespers MiniDDS ?


von Stefan (Gast)


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?

von iii (Gast)


Lesenswert?

Comments are always welcome at jesperh@telia.com

von eProfi (Gast)


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?

von Stefan (Gast)


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.

von eProfi (Gast)


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.

von Stefan (Gast)


Lesenswert?

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

von eProfi (Gast)


Lesenswert?

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

von Martin (Gast)


Lesenswert?

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?

von eProfi (Gast)


Lesenswert?

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)?

von Leandro L. (tetef)


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

von Leandro L. (tetef)


Lesenswert?

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

von Leandro L. (tetef)


Lesenswert?

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
Noch kein Account? Hier anmelden.