Здравствуйте, господа!
Возникла у меня такая проблема - пытаюсь подключить 24C через TWI. Написал такую программу в CVAVR:
#include <mega16.h>
void init(void)
{
TWBR=0x0A;
TWAR=0x00;
TWCR=0x40;
TWSR=0x00;
DDRD=0xff;
PORTD=0;
}
void twi_start (void)
{
TWCR=0xE4; //формируем сигнал старта
while (!(TWCR & (1<<TWINT)));
TWCR=0<<5; //обнуляем бит TWSTA
while (!(TWCR & (1<<TWINT)));
}
void send_byte (char byte)
{
TWDR=byte;
TWCR=0xC4;
while (!(TWCR & (1<<TWINT)));
}
void start_tx (void)
{
send_byte(0xA0); //Настраиваем EEPROM на прием информации
}
void main (void)
{
init();
twi_start();
start_tx();
send_byte(0x00); //Посылаем первую половину адреса
send_byte(0x00); //Посылаем вторую половину адреса
send_byte(0x53); //Посылаем данные для записи
twi_start();
send_byte(0xA0); //Настраиваем устройство на запись
send_byte(0x00); //Первая половина адреса чтения
send_byte(0x00); //Вторая половина адреса чтения
twi_start(); //Рестарт
send_byte(0xA1); //Переводим EEPROM на выдачу информации
TWCR=0xC4;
while (!(TWCR & (1<<TWINT)));
PORTD=TWDR; //Выводим принятые данные на порт D
}
В процессе написания и параллельной отладки в Протеусе (6.9 SP4) обнаружил такие странности:
1. При отсылке байта с микроконтроллера почему-то никогда не приходит подтверждение (согласно регистру статуса, который так же выводил на порт, а даташит утверждает, что должны), но при этом сообщения о формировании старта воплне адекватные.
2. При чтении ячейки выдавалось 0xFF.
3. EEPROM указывал пустой файл - при отправке байта в него ничего не писалось.
Заранее благодарен за помощь.
С уважением Андрей
P.S. Смриншот со схемой прилагаю
Возникла у меня такая проблема - пытаюсь подключить 24C через TWI. Написал такую программу в CVAVR:
#include <mega16.h>
void init(void)
{
TWBR=0x0A;
TWAR=0x00;
TWCR=0x40;
TWSR=0x00;
DDRD=0xff;
PORTD=0;
}
void twi_start (void)
{
TWCR=0xE4; //формируем сигнал старта
while (!(TWCR & (1<<TWINT)));
TWCR=0<<5; //обнуляем бит TWSTA
while (!(TWCR & (1<<TWINT)));
}
void send_byte (char byte)
{
TWDR=byte;
TWCR=0xC4;
while (!(TWCR & (1<<TWINT)));
}
void start_tx (void)
{
send_byte(0xA0); //Настраиваем EEPROM на прием информации
}
void main (void)
{
init();
twi_start();
start_tx();
send_byte(0x00); //Посылаем первую половину адреса
send_byte(0x00); //Посылаем вторую половину адреса
send_byte(0x53); //Посылаем данные для записи
twi_start();
send_byte(0xA0); //Настраиваем устройство на запись
send_byte(0x00); //Первая половина адреса чтения
send_byte(0x00); //Вторая половина адреса чтения
twi_start(); //Рестарт
send_byte(0xA1); //Переводим EEPROM на выдачу информации
TWCR=0xC4;
while (!(TWCR & (1<<TWINT)));
PORTD=TWDR; //Выводим принятые данные на порт D
}
В процессе написания и параллельной отладки в Протеусе (6.9 SP4) обнаружил такие странности:
1. При отсылке байта с микроконтроллера почему-то никогда не приходит подтверждение (согласно регистру статуса, который так же выводил на порт, а даташит утверждает, что должны), но при этом сообщения о формировании старта воплне адекватные.
2. При чтении ячейки выдавалось 0xFF.
3. EEPROM указывал пустой файл - при отправке байта в него ничего не писалось.
Заранее благодарен за помощь.
С уважением Андрей
P.S. Смриншот со схемой прилагаю
- Вложения
-
- Schema.jpg
- (182.75 КБ) 534 скачивания
