mikrocontroller.net

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


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: iii (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Comments are always welcome at jesperh@telia.com

Autor: eProfi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: eProfi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: eProfi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: eProfi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)?

Autor: Leandro Leandro (tetef)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leandro Leandro (tetef)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Leandro Leandro (tetef)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.