Witam.
Walczę z obsługą magistrali I2C łączącej procesor Atmega324p i czujnik DS1624. Chcę zapisać na karcie SD póki co dwa surowe bajty z rejestru temperatury, jednak prawie za każdym razem otrzymuję wynik 255, czyli same jedynki w bajcie. Piszę "prawie", gdyż przy ostatniej próbie z jakiegoś powodu była to liczba 151. Podobny efekt daje próba zapisu jakichś danych do EEPROM-u czujnika a potem odczytanie ich.
Linie SDA i SCL są podciągnięte do Vcc rezestorami 2,2k (wcześniej było 4,7k, ale w dokumentacji doczytałam, że przy zasilaniu układu napięciem 3,3V można zastosować mniejsze rezystory - spróbowałam więc, w każdym razie nic się nie zmieniło). Korzystam z wbudowanego oscylatora 8MHz, wersja BASCOM 1.11.9.8. Nie zmieniałam żadnych fusebitów poza jedynym potrzebnym do zwiększenia częstotliwości wspomnianego oscylatora z 1MHz do 8MHz. Poniżej zamieszczam kod:
Ten kod to tylko jedna z wersji, które przetestowałam - próbowałam korzystać z domyślnego I2C, różnych wartości I2Cdelay; sprzętowego TWI, dołączając bibliotekę "i2c_twi.lbx" i definiując parametry "config twi" lub osobno TWBR i TWSR; różne ustawienia baudrate. Połączenia na płytce też sprawdzałam wiele razy. Nic nie dało efektu. O co może chodzić i co zrobić, żeby poprawnie odczytać temperaturę?
Walczę z obsługą magistrali I2C łączącej procesor Atmega324p i czujnik DS1624. Chcę zapisać na karcie SD póki co dwa surowe bajty z rejestru temperatury, jednak prawie za każdym razem otrzymuję wynik 255, czyli same jedynki w bajcie. Piszę "prawie", gdyż przy ostatniej próbie z jakiegoś powodu była to liczba 151. Podobny efekt daje próba zapisu jakichś danych do EEPROM-u czujnika a potem odczytanie ich.
Linie SDA i SCL są podciągnięte do Vcc rezestorami 2,2k (wcześniej było 4,7k, ale w dokumentacji doczytałam, że przy zasilaniu układu napięciem 3,3V można zastosować mniejsze rezystory - spróbowałam więc, w każdym razie nic się nie zmieniło). Korzystam z wbudowanego oscylatora 8MHz, wersja BASCOM 1.11.9.8. Nie zmieniałam żadnych fusebitów poza jedynym potrzebnym do zwiększenia częstotliwości wspomnianego oscylatora z 1MHz do 8MHz. Poniżej zamieszczam kod:
Kod: text
Ten kod to tylko jedna z wersji, które przetestowałam - próbowałam korzystać z domyślnego I2C, różnych wartości I2Cdelay; sprzętowego TWI, dołączając bibliotekę "i2c_twi.lbx" i definiując parametry "config twi" lub osobno TWBR i TWSR; różne ustawienia baudrate. Połączenia na płytce też sprawdzałam wiele razy. Nic nie dało efektu. O co może chodzić i co zrobić, żeby poprawnie odczytać temperaturę?