1. записать в регистр 0x07 байт 0x00 (Перевод в режим StandBy, начало настройки)
2. записать в регистр 0х06 байт 0х10
3. записать в регистр 0х08 байт 0х00 (120 сэмплов, режим автоматического засыпания)
4. записать в регистр 0х07 байт 0х01 (Перевод в режим ActiveMode, начало измерений)
Собственно, вопрос у меня один - как записать байт в конкретный регистр? Как считать из определенного регистра - знаю.
Считывание содержимого регистров датчика делаю следующим образом:
Код: Выделить всё
ISR(TWI_vect)
{
switch (TWSR & 0xF8)
{
case 0x08: //На шине кто-то есть. Передать адрес для записи.
{
TWDR = 0x98;
TWCR = (1<<TWEN)|(1<<TWINT)|(1<<TWIE);
break;
}
case 0x18: //Устройство ответило. Передать адрес памяти.
{
TWDR = 0x00;
TWCR = (1<<TWEN)|(1<<TWINT)|(1<<TWIE);
break;
}
case 0x28: //Устройство передало подтверждение. Сброс шины.
{
TWCR = (1<<TWEN)|(1<<TWIE)|(1<<TWINT)|(1<<TWSTA);
break;
}
case 0x10: //На шине кто-то есть. Передать адрес для чтения.
{
TWDR = 0x99;
TWCR = (1<<TWEN)|(1<<TWINT)|(1<<TWIE);
break;
}
case 0x40: //Устройство готово. Передать команду к началу передачи данных.
{
TWCR = (1<<TWEN)|(1<<TWINT)|(1<<TWEA)|(1<<TWIE);
break;
}
case 0x50: //Пришли данные. Прочитать байт и передать ACK или NACK.
{
USART_Transmit(TWDR);
byte_cnt++;
if (byte_cnt < 10)
TWCR = (1<<TWEN)|(1<<TWINT)|(1<<TWEA)|(1<<TWIE);
else
TWCR = (1<<TWEN)|(1<<TWINT)|(1<<TWIE);
break;
}
case 0x58: //Пришли данные. Прочитать байт и сформировать STOP.
{
//USART_Transmit(0x06);
USART_Transmit(TWDR);
TWCR = (1<<TWEN)|(1<<TWINT)|(1<<TWSTO)|(1<<TWIE);
byte_cnt = 0;
break;
}
}
}


