Hallo..
Ich habe vor, einen AD9833 DDS Baustein mit einem AT89C5131A-UM
anzusteuern.
Nur leider kommt aus dem AD9833 nichts brauchbares heraus.
Hat jemand vielleicht nen Beispielcode wie man die Daten in den AD9833
schicken muss?
Ich habs jetzt so gemacht:
M. D. schrieb:> CPOL und CHPA ist alles auf Standartwerten.> Werd ich mir mal anschauen ob das kompatibel ist.
Du mußt aus den 4 SPI-Modi den richtigen ermitteln und im uC einstellen
http://www.lothar-miller.de/s9y/categories/17-SPI
Und dann noch kontrollieren, ob der SS (=FSYNC) schon vom uC angesteuert
wird, oder ob du das selber machen mußt (das ist üblich)...
Ok danke,
also hab mir das mal angeschaut, aber im Datenblatt des AD9833 finde ich
nur ein Timing-Diagramm, aus dem werde ich aber nicht richtig schlau,
bzw ich weiß nicht wie ich das auf den SPI-Modus umsetzen muss.
Fsync habe ich auf den Ausgang P1.0 vom Controller gelegt.
Naja Das Timing Diagramm hilft dir da schonmal. Du schaust einfach wann
die Daten in deinem Controller übernommen werden, steigende oder
fallende Flanke.
Danach suchst du bei deinem Controller im Datenblatt welcher Modus für
steigende und welcher für fallende Flanke ist und stellst diesen dann
ein.
Damit kannst du diesen Fehlerfall mal ausschließen.
M. D. schrieb:> aus dem werde ich aber nicht richtig schlau,> bzw ich weiß nicht wie ich das auf den SPI-Modus umsetzen muss.
Dann mach Pattern-Matching. Sieh dir die Beziehungen der 3 Signale im
Datenblatt vom uC an und sieh dir die Beziehungen der Signale im DB vom
Signalgenerator an. Und dann stellst du CPOL und CPHA im uC so ein, dass
die beiden zusammenpassen...
Oder du nimmst das Timing-Diagramm und liest daraus ab:
Wenn FSYNC aktiv wird (fallende Flanke) muß SCLK high sein --> CPOL = 1
Daten werden bei der fallenden Flanke von SCLK übernommen --> CPHA = 0
Daraus folgt: SPI Mode 2
Und: die Defaulteinstellungen des uC (CPOL=CPHA=0) passen da nicht.
> Fsync habe ich auf den Ausgang P1.0 vom Controller gelegt.
Dann mußt du den in deiner Senderoutine natürlich auch noch ansteuern...
Super, vielen Dank für die Hilfe.
Werd die Register jetzt mal entsprechend einstellen und dann probieren.
Reicht es nicht wenn ich die Fsync-Leitung schon vor der Senderoutine
auf 0 setze?
So hab das ganze jetzt eingestellt..
SPCON = 0x9A;
Funktioniert leider trotzdem noch nicht.
Er gibt zwar eine Sinuskurve am Ausgang aus, aber die ist immer gleich,
egal wie das Datenwort aussieht.
Ok auch geändert, danke für den Tipp mit der While-Schleife ;)
Das Codewort wird in einer anderen Funktion errechnet.
Das ist der Wert, den man per Formel heraus bekommt.
Das Codewort lasse ich mir auch immer mit ausgeben, und das passt
soweit.
Ist ja Faktor 10,7 in etwa zur eingegebenen Frequenz.
8 Hz -> 85 Codewort
Hier wird der Baustein mit nur 3 SPI-Worten initialisiert:
Beitrag "Beispielprogramm AD9833 (DDS) mit atmega8"
Warum brauchst du so viel mehr?
>>> M. D. schrieb:>>>> Nur leider kommt aus dem AD9833 nichts brauchbares heraus.M. D. schrieb:> Funktioniert leider trotzdem noch nicht.> Er gibt zwar eine Sinuskurve am Ausgang aus,
Ist das jetzt schon eine Verbesserung? Oder hat sich nichts geändert?
Kann gut sein das 3 Datenwörter reichen, das ist im Datenblatt für mich
schwer zu erkennen.
Einmal wird beispielhaft mit 3 Datenwörtern geschrieben, und darunter
steht im Flussdiagramm dann, das man erst resetten soll, und den Reset
so lange aktiv halten muss bis die Frequenzwörter übertragen wurden.
Also wären es dann schonmal 6 Wörter:
Reset an (0x0100)
Register (0x4100)
Datenwort LSB (0x4xxx + Datenwort)
Datenwort MSB (0x4xxx + Datenwort)
Phase (0xC000)
Reset aus (0)
Aber ich bin mir nicht wirklich sicher dass das richtig ist.
Lasse ich den Reset weg, funktioniert der AD überhaupt nicht mehr.
Was ich jetzt probiert habe, ist ein Datenwort (10Khz) direkt in das
Register zu schreiben.
10Khz = 0x29F1 + Register (0x4000)
Also:
Reset an (0x0100)
Register (0x4100)
Datenwort LSB (0x69F1)
Datenwort MSB (0x4000)
Phase (0xC000)
Reset aus (0)
Aber alles was aus dem AD kommt, ist ein Sinus mit ca. 85 Hz.
Und das ist auch so, wenn ich ein anderes Frequenzwort nehme.
Denke mal mit der Reset-Routine funktioniert noch irgendwas nicht
richtig.
M. D. schrieb:> Lasse ich den Reset weg, funktioniert der AD überhaupt nicht mehr.> :> Aber alles was aus dem AD kommt, ist ein Sinus mit ca. 85 Hz.
D.h. er reagiert schon mal auf deine Kommunikation...