eugmai86 » 17 апр 2011, 22:26
Уже неделю пытаюсь добиться работы акселерометра. Но все никак. Подозрение вызывает потребляемый ток 1.7 mA По ДШ 490 мкА максимум. Питаю акселерометр от L78L33. МК от 5В. Согласование уровней МК - Датчик сделал на мосфетах по AN97055. Черт его знает, что не так.
Вот ф-ция отправки и получения
void SPI_MasterTransmit(char cReg, char cData)
{
unsigned char x;
CS=0; //прижимаем CS к земле, давая понять что передача пошла
SPDR=(((cReg&0x3F)<<1)|0x80); /* Start transmission */
while(!(SPSR&(1<<SPIF)));/* Wait for transmission complete */
x = SPDR;//dummy read
SPDR = cData;
while(!(SPSR&(1<<SPIF)));/* Wait for transmission complete */
x = SPDR;//dummy read
CS=1;
}
unsigned char SPI_MasterReceive(char cReg)
{
unsigned char x;
CS=0;// прижимаем CS к земле, давая понять что передача пошла
SPDR=((cReg&0x3F)<<1); // write in the register address with the read comman
while(!(SPSR&(1<<SPIF))); /* Wait for reception complete */
x=SPDR;//dummy read
CS=1;
return x; /* Return data register */
}
Кому не лень, гляньте код, и еще насколько я понял из ДШ SPI должен быть "вариант 0" для МК Мега16
я пользую такую настройку
SPCR=0b01010011;
/*{
7: SPIE: SPI Interrupt Enable
6: SPE: SPI Enable
5: DORD: Data Order
4: MSTR: Master/Slave Select
3: CPOL: Clock Polarity
2: CPHA: Clock Phase
1,0: Bits 1, 0 – SPR1, SPR0: SPI Clock Rate Select 1 and 0
}*/