Вот код программы:
Код: Выделить всё
#include <mega16.h>
#include <alcd.h>
#include <delay.h>
#include <stdlib.h>
#define ACK 0xD0
#define NACK 0xD1
char D[8]; // Массив для записи туда значения тока в виде строки
int a;
void start_twi(void)
{
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while (!(TWCR & (1<<TWINT)));
}
void stop_twi(void)
{
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
}
void write_twi(unsigned char data_byte)
{
TWDR = data_byte;
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT)));
}
unsigned char i2read (unsigned ACK_Status)
{
if(ACK_Status == ACK)
TWCR = (1<<TWINT)| (1<<TWEA) | (1<<TWEN);
else
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT)));
return TWDR;
}
void main(void)
{
DDRC=0xFF;
// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTA Bit 0
// RD - PORTA Bit 1
// EN - PORTA Bit 2
// D4 - PORTA Bit 4
// D5 - PORTA Bit 5
// D6 - PORTA Bit 6
// D7 - PORTA Bit 7
// Characters/line: 16
lcd_init(16);
delay_ms(50);
TWBR=0x48;
TWSR= 0x00;
start_twi();
write_twi(0b10010000);
itoa(TWSR,D);
lcd_clear();
lcd_gotoxy(0,0);
lcd_puts(D);
}
Данный код посылает адресный пакет 0x90 и выводит диагностическое сообщение (TWSR) на жк экран в десятичной системе (24 (18 hex) - значит все в порядке, 32 (20 hex) - значит не отозвался на свой адрес).
Как я не бился, датчик постоянно выдает 32, то бишь не отзывается. Жду помощи, не знаю что делать...
Файлик с проектом прилагаю.