W układzie są połączone: Atmega8 i MCP4822. Komunikacja ma przebiegać po SPI i tu właśnie pojawia sie problem. Tak wygląda program:
Kod: Zaznacz cały
$regfile = "m8def.dat"
$crystal = 12000000
Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = low , Phase = 1 , Clockrate = 4, noss=0
Spiinit
Do
Gosub Spi_nadaj
Loop
End
Spi_nadaj:
$asm
ldi r16, 00011111
Out Spdr , R16
Czekaj:
sbis spsr,spif
rjmp czekaj
ldi r16,11111111
Out Spdr , R16
Czekaj1:
sbis spsr,spif
rjmp czekaj1
$end Asm
ret
W czym jest problem: sygnał na SCK i MOSI sa bo sprawdzałem na oscyloskopie ale wciąż nic nie dostaje na wyjściu przetwornika. Przetwornik oprócz SCK i SDI (dane) ma również dwa wejścia sterujące: CS i LDAC (w obu sygnał aktywny niski). Na szynie SPI mam podłączony tylko jeden odbiornik wiec podłączyłem CS na stałe do masy. LDAC służy do "zatrzaskiwania" rejestrów DACa i DACb po wpisaniu danych. Widziałem na jednej z dokumentacji Microchip'a, że ta linia była podłączona na stałe do masy wiec tak zrobiłem. Ale wciąż nic nie dostałem na wyjściu przetwornika. Więc zacząłem sterować CS - przed wysłaniem danych była ustawiana w stan H w czasie wysyłania danych stan L i po zakończeniu wysyłania danych znów stan H (program umieszczony wyżej nie posiada juz tego sterowania). Podczas takiego sterowania na oscyloskopie dostałem bardzo dziwne przebiegi (górny przebieg to dane a dolny to SCK).
Na lini zegarowej co osiem bitów pojawiał sie taki pik.
Po odpięciu lini CS od przetwornika przebiegi wyglądały dużo lepiej (górny przebiek - dane, dolny - SCK).
Więc wykorzystałem linie SS do sterowania przetwornikiem i podłączyłem ja do CS przetwornika ale wciąż nic nie dostaję na wyjściu przetwornika. I to również nie pomogło. Podłączyłem sondę do SS mikrokontrolera, aby zobaczyć jak jest sterowana ta linia no wydaje mi sie, że jest bardzo żle. Powinna być ustawiona w stan L podczas nadawania a w stan H jeśli nadawanie jest zakończone ale przebieg na tej linii wygląda tak (górny przebieg to SS a dolny to SCK)
Co do wpisywania wartości do rejestru przetwornika to trzeba wysłać 2x po 8 bitów. 4 pierwsze bity (dokładnie 3) służą do konfiguracji przetwornika, a następne 12 bitów to wartość którą przetwarzamy.
Ja wysyłam bajt1=00011111, bajt2=11111111 aby na wyjściu DACa przetwornika uzyskać napięcie 4,096V.
Sterowałem przetwornikiem w sposób pokazany na rysunku poniżej i wciąż nic
Proszę o pomoc ponieważ jest to dla mnie sprawa bardzo ważna i pilna. Być może ktoś używał tego przetwornika, miał podobne problemy i sie z nimi uporał. Proszę o pomoc.