Witam.
Mam problem z komunikacją ATmega - MCP3208 (ADC, są jeszcze wersje 2 i 4-kanałowe).
Ramka transmisyjna wygląda tak:
Czyli rozumiem, że wysyłam ramkę z init i adresem. Przy założeniu, że DIFF=1, a D2=D1=D0=0 (adres 0 kanału ADC) pierwsza ramka to liczba 0x04. Druga ramka to same zera czyli 0x00, a trzecia jest bez znaczenia.
Podczas wysyłania pierwszej ramki odczytuje tą z MPC i dostaje coś tam, bezużytecznego. Podczas zapisu drugiej, odczytuje bajt, gdzie cztery najmłodsze bity są MSB liczby 12-bitowej z przetwornika. Wysyłając trzecią ramkę odczytuje kolejny bajt, który jest LSB liczby 12 bitowej. Odpowiednio sklejam obie liczby i mam wynik 12-bitowy. Czy tak?
Mam do tego taki kod:
I nie działa. Odczytuje jakieś dziwne wartości, cały czas się zmieniające w nieprzewidywalny sposób, a na wejście podane jest Vref, czyli wynik przetwarzania to liczba 0x0FFF, a wyskakuje bardzo różna. Czy coś jest nie tak?
Mam problem z komunikacją ATmega - MCP3208 (ADC, są jeszcze wersje 2 i 4-kanałowe).
Ramka transmisyjna wygląda tak:
Czyli rozumiem, że wysyłam ramkę z init i adresem. Przy założeniu, że DIFF=1, a D2=D1=D0=0 (adres 0 kanału ADC) pierwsza ramka to liczba 0x04. Druga ramka to same zera czyli 0x00, a trzecia jest bez znaczenia.
Podczas wysyłania pierwszej ramki odczytuje tą z MPC i dostaje coś tam, bezużytecznego. Podczas zapisu drugiej, odczytuje bajt, gdzie cztery najmłodsze bity są MSB liczby 12-bitowej z przetwornika. Wysyłając trzecią ramkę odczytuje kolejny bajt, który jest LSB liczby 12 bitowej. Odpowiednio sklejam obie liczby i mam wynik 12-bitowy. Czy tak?
Mam do tego taki kod:
SS_NISKI();
SPDR = 0x04;
while(!(SPSR & (1<<SPIF)));
danaH = SPDR;
SPDR = 0x00;
while(!(SPSR & (1<<SPIF)));
SPDR = 0x80;
danaH = SPDR;
SPDR = 0x00;//wszystko jedno co sie przesle
while(!(SPSR & (1<<SPIF)));
danaL = SPDR;
SS_WYSOKI();I nie działa. Odczytuje jakieś dziwne wartości, cały czas się zmieniające w nieprzewidywalny sposób, a na wejście podane jest Vref, czyli wynik przetwarzania to liczba 0x0FFF, a wyskakuje bardzo różna. Czy coś jest nie tak?