Witam!
Chcę skomunikować się z układem MMA7455 (akcelerometr) przy pomocy ATMega8 i dane wysłać przez RS do komputera.
Próbuję ruszyć komunikację według dokumentacji ale ciągle dostaje z powrotem same 0.
Układ mam połączony tak:
I jeśli dobrze wyczytałem z dokumentacji MMA7455, to gdy pin CS zwieram z masą, układ przechodzi w stan transmisji SPI. Więc napisałem taki program dla uC:
Wrzuciłem to co najważniejsze raczej w kodzie (cały jest dość długi), czyli samo SPI.
Bawił się już ktoś tym układem lub podobnym? W czym może tkwić błąd?
Komenda którą wysyłam do akcelerometru (0x0F) to "Who am I” i jest tylko do odczytu, więc raczej tak powinna wyglądać chyba próba jej odczytania.
Pozdrawiam
Chcę skomunikować się z układem MMA7455 (akcelerometr) przy pomocy ATMega8 i dane wysłać przez RS do komputera.
Próbuję ruszyć komunikację według dokumentacji ale ciągle dostaje z powrotem same 0.
Układ mam połączony tak:
I jeśli dobrze wyczytałem z dokumentacji MMA7455, to gdy pin CS zwieram z masą, układ przechodzi w stan transmisji SPI. Więc napisałem taki program dla uC:
#define F_CPU 8000000UL
int main()
{
DDRB = 0x6F; //PB7 i PB4 jako wejście
PORTB = 0x43; //PB6, PB1 i PB0 w stanie podciągniętym
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1); //układ MASTER, dzielnik 128
while(1)
{
PORTB &= ~_BV(PB2); //CS akcelerometru w stanie niskim
_delay_ms(1); //czekaj 1ms
SPDR = 0x0F<<1; //wyslij rozkaz 0x0F (z dokumentacji wynika że ostatni bit jest nieważny, czyli muszę chyba przesunąć wartość o jeden bit, jednocześnie pierwszy bit jest 0 czyli odczyt)
while(!(SPSR & (1<<SPIF))); //czekaj na zakończenie transmisji
_delay_ms(1);
while(!(SPSR & (1<<SPIF)));
dana = SPDR; //odbierz dane
PORTB |= _BV(PB2); //CS w stanie wysokim (wyłączenie akcelerometru)
_delay_ms(998); //czekaj około 1s
wyslij(dana); //wyślij otrzymaną wartość przez RS
}
}Wrzuciłem to co najważniejsze raczej w kodzie (cały jest dość długi), czyli samo SPI.
Bawił się już ktoś tym układem lub podobnym? W czym może tkwić błąd?
Komenda którą wysyłam do akcelerometru (0x0F) to "Who am I” i jest tylko do odczytu, więc raczej tak powinna wyglądać chyba próba jej odczytania.
Pozdrawiam
