Mam problem z magistralą I2C
kody funkcji
http://ds5.agh.edu.pl/~czaro/naukowo/soft/avr_twiobsluga.pdf
Próbuję zapisywać do pamięci 1 bajt
Na wyświetlaczu widzę efekt
TWI_write(0xA0);
i koniec, procesor staje po adersowaniu układu.
Jeżeli usunę adresowanie komurek pamięci to normalnie dalej działa.
Co jest nie tak?
Jak sprawdzić czy układ jest na magistrali?
kody funkcji
http://ds5.agh.edu.pl/~czaro/naukowo/soft/avr_twiobsluga.pdf
#include <avr/io.h>
#include <stdlib.h>
#include<inttypes.h>
#include<avr/interrupt.h>
#include <util/delay.h>
#include "../lib/lcd.h"
#include "../lib/twi.h"
#undef F_CPU
#define F_CPU 16000000 //częstotliwość zegara w Hz
#define INIT1 12000
unsigned int sekundy = 00;
unsigned int minuty = 29;
unsigned int godziny = 23;
char tab[8];
char bufor[8];
uint8_t wys=0;
unsigned char i, tmp1;
// program główny
int main(void)
{
uint8_t adres;
DDRD = 0xFF;
PORTD = 0xFF;
DDRB=0xFF;
DDRC = 0;
lcd_init();
TWI_start();
write_command(0x01); // czyść LCD
write_text("TWI_start();");
_delay_ms(1);
TWI_write(0xA0);
write_command(0x01); // czyść LCD
write_text("TWI_write(0xA0);");
TWI_write(0x00);
write_command(0x01); // czyść LCD
write_text("TWI_write(0x0);");
//TWI_write(0x1);
write_command(0x01); // czyść LCD
write_text("TWI_write(0x1);");
//TWI_write(10);
write_command(0x01); // czyść LCD
write_text("TWI_write(10);");
TWI_stop();
write_command(0x01); // czyść LCD
write_text("TWI_stop();");
_delay_ms(15);
while(1)
{
}
return 0;
}
Próbuję zapisywać do pamięci 1 bajt
Na wyświetlaczu widzę efekt
TWI_write(0xA0);
i koniec, procesor staje po adersowaniu układu.
Jeżeli usunę adresowanie komurek pamięci to normalnie dalej działa.
Co jest nie tak?
Jak sprawdzić czy układ jest na magistrali?
![[ATMEGA8] [I2C] [24C64] [ATMEGA8] [I2C] [24C64]](https://obrazki.elektroda.pl/58_1227442149.jpg)