IIC
Помогите, не пойму.
Купил ATmega16 и 24С16 собрал и начал, так сказать, общаться.
НО при работе
if address‹=255 { хорошо }
else {не хорошо}
Так примерно операций 10 попробовал (дабы закрепить материал) и всё.
Далее началось интересное:
написал цикл (for) address++, так контроллер в Resete зацикливается (судя по LCD 16252) индикатор будь-то бы вообще из LCD_init не вылазит дальше (засветка строки).
Вернул всё на место как и было:
одна запись --› одно чтение - стали выпадать какие-то не знакомые мне числа, будь-то бы всё умерло, но толька местами.
Вот!
КАК БЫТЬ дальше? почему так? с eeprom до этого не работал.
И почему когда сдвигаю строку
eeprom_write(100,77);
пробелом, она (eeprom), меняет цвет на Фиолетовый и обратно при последующем нажатии.
CVAVR 1.24.4 standard
/************************************************** ***
Chip type : ATmega16
Program type : Application
Clock frequency : 3,686400 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
************************************************** ***/
#include ‹mega16.h›
#include ‹stdio.h›
#include ‹delay.h›
#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=5
.equ __scl_bit=4
#endasm
#include ‹i2c.h›
#define EEPROM_BUS_ADDRESS 0xa0
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include ‹lcd.h›
unsigned char eeprom_read(unsigned char address)
{
unsigned char data;
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data=i2c_read(0);
i2c_stop();
return data;
}
void eeprom_write(unsigned char address, unsigned char data)
{
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address);
i2c_write(data);
i2c_stop();
delay_ms(10);
}
void lcd_print(int n)
{
char b[30];
sprintf(b,"%i",n);
lcd_puts(b);
}
void main(void)
{
unsigned char i;
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
lcd_init(16);
i2c_init();
eeprom_write(100,77);
eeprom_write(100,77);
while (1)
{
lcd_clear();
lcd_gotoxy(2,0);
i=eeprom_read(100);
lcd_print(i);
delay_ms(200);
};
}
__________________
Б.га нет, есть только двоичный код.
|