Witam serdecznie!
Mam mały problem z obsługą TWI w języku C.
mam kody bibliotek do TWI z tej strony
http://radzio.dxp.pl/twi/
a plik main.c wygląda tak:
niestety TWI nie działa poprawnie, zawiesza się w drugiej instrukcji zapisu:
na wyświetlaczu LCD mam zatem :SW i nic dalej się nie dzieje...
mam procesor atmega644p taktowany z zewnętrznego kwarcu 16 MHz, lcd podpięty na portA, linie SDA i SCL podciągane 4k7 do VCC (schemat tu: http://www.and-tech.pl/EvB4.3/schemat_v4.png )
dodam jeszcze, że po wgraniu odpowiadającego programu w języku BASCOM wszystko działa bez zarzutów....
Z góry dziękuję za pomoc
EDIT:
problem rozwiązany, przepraszam za zaśmiecanie forum, ale może się taka informacja przyda potomnym.
Mianowicie wystarczyło zmniejszyć częstotliwość pracy magistrali poprzez wpisanie np. wartości 255 do rejestru TWBR.
czyli na samym początku funkcji int main(void):
Mam mały problem z obsługą TWI w języku C.
mam kody bibliotek do TWI z tej strony
http://radzio.dxp.pl/twi/
a plik main.c wygląda tak:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include "LCD/lcd44780.h"
//#include "I2C_TWI/i2c_twi.h"
#include "TWI.h"
int main(void){
uint8_t sek;
lcd_init();
lcd_cls();
lcd_str(":");
twistart();
lcd_str("S");
twiwrite(162);
lcd_str("W");
twiwrite(2);
lcd_str("W");
twistart();
lcd_str("S");
twiwrite(163);
lcd_str("W");
sek=twiread(NOACK);
lcd_str("R");
twistop();
lcd_int(sek);
while(1);
}
niestety TWI nie działa poprawnie, zawiesza się w drugiej instrukcji zapisu:
twiwrite(2);na wyświetlaczu LCD mam zatem :SW i nic dalej się nie dzieje...
mam procesor atmega644p taktowany z zewnętrznego kwarcu 16 MHz, lcd podpięty na portA, linie SDA i SCL podciągane 4k7 do VCC (schemat tu: http://www.and-tech.pl/EvB4.3/schemat_v4.png )
dodam jeszcze, że po wgraniu odpowiadającego programu w języku BASCOM wszystko działa bez zarzutów....
Z góry dziękuję za pomoc
EDIT:
problem rozwiązany, przepraszam za zaśmiecanie forum, ale może się taka informacja przyda potomnym.
Mianowicie wystarczyło zmniejszyć częstotliwość pracy magistrali poprzez wpisanie np. wartości 255 do rejestru TWBR.
czyli na samym początku funkcji int main(void):
TWBR=255;