Cześć,
Jestem dość młodym projektantem układów elektronicznych, a co za tym idzie mam małe doświadczenie w rozwiązywaniu dziwnych nieprocedurowych zachowań układu.
Właśnie zaprojektowałem układ na PIC16f77 i zaczynam powoli pisać obsługę poszczególnych urządzeń. Program piszę w CCS http://www.ccsinfo.com/content.php?page=compilers.
W tej chwili natrafiłem na dość dziwną nigdzie nie opisywaną sytuację z I2C. Otóż mikrokontroler obsługuje u mnie 3 urządzenia na szynie I2C (EEprom_TEXT z komunikatami na wyświetlacz, EEprom_DATA do zapisu informacji i Real Time Clock do liczenia czasu)
Budowa magistrali:
wartości rezystorów R5 i R6 to: 4,7 kOhma, EEPROM 24C16, RTC Philips PFC8583.
Opis dziwnego zachowania układu:
Na początek pisałem procedurę obsługi EEPROM_TEXT i wyświetlanie informacji na LCD (EEPROM_DATA i RTC były wyjęte z podstawek). Ponieważ wszystko szło dobrze, dołożyłem EEPROM_DATA i chciałem pisać blok akwizycji danych pomiarowych. W tym momencie program zaczął mi się wykładać. Dziwne zachowanie polegało na tym, iż np. mikrokontroler pierwsze cztery byte komunikatu odczytywał z EEPORM_DATA a resztę (nawet cały wyswieltacz LCD4x16 z prawidłowego EEPROM_TEXT). Wyjąłem więc EEPROM_DATA i przełożyłem EEPROM_TEXT w miejsce EEPROM_DATA. Oczywiście nie zmieniałem w kodzie adresu urządzenia I2C. Ku mojemu zdziwieniu program odczytał komunikaty, mimo, że teoretycznie nie powinien. Czyta je również wtedy, gdy EEPROM_TEXT siedzie w miejscu RCT. Gdy do układu dołożę RTC to w ogóle ten zaczyna pierwszy się odzywać na wszelkiego rodzaju komunikację na magistrali.
Wygląda to tak jakby na całej szynie I2C nie obowiązywała zasada odczytu adresu urządzenia do którego komunikat jest kierowany. Co jest tego przyczyną???
Jestem dość młodym projektantem układów elektronicznych, a co za tym idzie mam małe doświadczenie w rozwiązywaniu dziwnych nieprocedurowych zachowań układu.
Właśnie zaprojektowałem układ na PIC16f77 i zaczynam powoli pisać obsługę poszczególnych urządzeń. Program piszę w CCS http://www.ccsinfo.com/content.php?page=compilers.
W tej chwili natrafiłem na dość dziwną nigdzie nie opisywaną sytuację z I2C. Otóż mikrokontroler obsługuje u mnie 3 urządzenia na szynie I2C (EEprom_TEXT z komunikatami na wyświetlacz, EEprom_DATA do zapisu informacji i Real Time Clock do liczenia czasu)
Budowa magistrali:
wartości rezystorów R5 i R6 to: 4,7 kOhma, EEPROM 24C16, RTC Philips PFC8583.
Opis dziwnego zachowania układu:
Na początek pisałem procedurę obsługi EEPROM_TEXT i wyświetlanie informacji na LCD (EEPROM_DATA i RTC były wyjęte z podstawek). Ponieważ wszystko szło dobrze, dołożyłem EEPROM_DATA i chciałem pisać blok akwizycji danych pomiarowych. W tym momencie program zaczął mi się wykładać. Dziwne zachowanie polegało na tym, iż np. mikrokontroler pierwsze cztery byte komunikatu odczytywał z EEPORM_DATA a resztę (nawet cały wyswieltacz LCD4x16 z prawidłowego EEPROM_TEXT). Wyjąłem więc EEPROM_DATA i przełożyłem EEPROM_TEXT w miejsce EEPROM_DATA. Oczywiście nie zmieniałem w kodzie adresu urządzenia I2C. Ku mojemu zdziwieniu program odczytał komunikaty, mimo, że teoretycznie nie powinien. Czyta je również wtedy, gdy EEPROM_TEXT siedzie w miejscu RCT. Gdy do układu dołożę RTC to w ogóle ten zaczyna pierwszy się odzywać na wszelkiego rodzaju komunikację na magistrali.
Wygląda to tak jakby na całej szynie I2C nie obowiązywała zasada odczytu adresu urządzenia do którego komunikat jest kierowany. Co jest tego przyczyną???