Hallo,
wie der Titel schon sagt suche ich ein Beispiel für die Ansteuerung des AD9833 in Bascom! Wenn jemand was hat, bitte melden!
Druckbare Version
Hallo,
wie der Titel schon sagt suche ich ein Beispiel für die Ansteuerung des AD9833 in Bascom! Wenn jemand was hat, bitte melden!
Hallo Rasieel,
die Anfrage liegt zwar schon einige Zeit zurück, aber vielleicht interessiert die Lösung auch andere Leser.
Es gibt zwei versteckte Fallen in BASOM, wenn man das SPI-Interface zusammen mit dem AD9833 benutzt:
1) der AD9833 erwartet 16 Bit-Worte. Überträgt man mit SPIOUT die 16 Bit in 2 Befehlen zu je 8 Bit geht der SYNC (AD9833 Pin8) kurz auf High, was zu Fehlern führt
2) überträgt man mit SPIOUT zwei Bytes auf einmal hat man das SYNC-Problem nicht mehr, aber es wird die Reihenfolge der zwei 8 Bit-Bytes beim Senden vertauscht!
hier ein funktionierendens BASCOM Programm mit ATMega8 und 20 MHz Clock am AD9833
'Test: feste Frequenz als Sinus
Dim Ctrl As Integer 'AD9833 Control Register 16 Bit
Dim Freq_msb As integer 'AD9833 Frequenz Register
Dim Freq_lsb As integer 'AD9833 Frequenz Register
Config Spi = Hard , Interrupt = Off , Data Order = msb , Master = Yes , Polarity = High , Phase = 0 , Clockrate = 4 , Noss = 0
'Spi = Hard = SCK(PB5) Clock Output, MOSI(PB3) Data Output, MISO(PB4) Data Input, SS(PB2) FSYNC am AD9833, Clockrate unkritisch
Spiinit
Ctrl = &B0000000000100000 'Control Register, Bit 15/14 = 0/0, Bit 13 = 1 (Fq folgt in 2 Bytes à 16Bit), Bit5/1 = 0/0 = Sinus
Spiout Ctrl , 2 'bei Augabe von 16 Bit ist die Reihenfolge Bit 7...0 Bit 15...8
Freq_lsb = &B1111111101111111 'Frequenz0 Register LSB, Bit 15/14 = 0/1, Bitreihenfolge wie Controlbyte
Freq_msb = &B0011111101000000 'Frequenz0 Register MSB, Bit 15/14 = 0/1, Bitreihenfolge wie Controlbyte
Spiout Freq_lsb , 2 'LSB muss zuerst übertragen werden
Spiout Freq_msb , 2 'ca. 75 kHz bei 20 MHz Clock