Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 3 gru 2024, o 21:35


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 24 gru 2014, o 23:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 maja 2013
Posty: 191
Pomógł: 2

Witam, jako iż przyszedł czas na nieszczęsne I2C postanowiłem zaglądnąć do kodu z książki.

Układ pcf8583 mam podłączony do ATB.
Wyjście INT do portu PD2
Wejście A0 jest zwarte do VCC
Taktowanie atmegi 16 8MHz
Dioda z przerwania mruga co 1sekundę.
Druga dioda umieszczona jest w funkcji TWI_START() a dokładniej:
-przed pętlą "while (!(TWCR&(1<<TWINT)));" zaświeca się
-po pętli "while (!(TWCR&(1<<TWINT)));" brak reakcji
Czyli program staje w miejscu oczekując na spełnienie warunku

I teraz moje pytanie co może być przyczyną takiego zachowania.
Dodam także że na programowym I2C na wyświetlaczu wyświetlają się same zera w miejscach godziny
(podczas gdy odłączę jakąś z linii SDA lub SCL pojawia się 165:165:165:165

Oto mój main.c
Składnia: [ Pobierz ] [ Ukryj ]
język cpp-qt
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 gru 2014, o 00:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2014
Posty: 446
Lokalizacja: DKL
Pomógł: 53

TWI sprzętowe będzie zawieszać się jak jest problem z łącznością z układem/układami na magistrali.
Programowe i2c tez podpowiada, że coś jest nie tak.
Sprawdź dokładnie połączenia, przedzwoń wszystkie nogi PCF-a, szczególnie SCL/SDA/A0, może coś z rezonatorem lub niepoprawny adres układu i2c.


Autor postu otrzymał pochwałę

_________________
Migracja z punktu B do punktu C
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 gru 2014, o 00:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 maja 2012
Posty: 471
Lokalizacja: ZGY/ZS
Pomógł: 30

Dlatego warto przerobić trochę te standardowe biblioteki do sprzętowego TWI, dorzucić timeouty i obsługę błędów. Kiedyś widziałem fajnie zrobioną obsługę tego w źródłach dla arduino.

_________________
eDiyCraft.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 gru 2014, o 10:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 kwi 2014
Posty: 438
Lokalizacja: Zambrów
Pomógł: 22

Tutaj podobny wątek :) post110347.html#p110347

Ogólnie mi pomogło zrobienie to co mówi savian86. Jednak ktoś może ma właśnie jakieś biblioteki, w których jest to "fajnie" zrobione. Bo to co ja namodizłem u siebie jakoś działa, ale na pewno nie jest uniwersalne :P

_________________
.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 gru 2014, o 10:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

Jak wroce wieczorem to postaram sie wrzucic kod ktory ma w miare obsluge bledow :)


Sent from my iPhone using Tapatalk

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 gru 2014, o 11:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 maja 2013
Posty: 191
Pomógł: 2

Dziękuje bardzo za zainteresowanie, nie zauważyłem że pode mną był już taki temat. Trochę mnie zastanawia to zachowanie ponieważ nie ma zwarć miedzy poszczególnymi nóżkami. Wyjście INT z RTC ewidentnie działa. Najbardziej prawdopodobne jest że układ najwyraźniej może być uszkodzony. Czekając do wieczora na pomoc RafPe spróbuje coś sam wydedukować;)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 gru 2014, o 12:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2014
Posty: 446
Lokalizacja: DKL
Pomógł: 53

Witam,
sam miewałem różnorakie problemy z i2c, więc na podstawie mojej skromnej wiedzy utworzyłem sobie narzędzie do przeszukiwania magistrali za pomocą sprzętowego TWI i prezentacji wyników w konsoli via UART.

Program w każdym cyklu szuka urządzeń w zakresie 0-255 (0x00 - 0xff) i bada stan na magistrali.
Dzięki temu możemy dość szybko zdiagnozować czy i jakie urządzenia (na jakich) adresach mamy podpięte.

Kod może być niedoskonały, bo jak wspomniałem bazuję na swojej skromnej wiedzy z zakresie C dla uC AVR. Ale dzięki temu forum i informacjom tu znalezionym udało się sklecić to narzędzie, które mam nadzieję pomoże w okiełznaniu problemów z i2c.

Domyślnie projekt skonfigurowany jest dla zestawu ATB, czyli ATmega32 @ 11059200, UART @ 19200.

Wynik działania na zestawie ATB 1.04
Obrazek

P.S. W moim kodzie w funkcjach odpowiedzialnych za TWI zastosowane są własnie opisywanie przez poprzedników opóźnienia, które pozwalają ograniczyć zawieszenia dając jednoczenie możliwość wyłapywania takich zdarzeń.


Autor postu otrzymał pochwałę

Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.

_________________
Migracja z punktu B do punktu C
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 gru 2014, o 13:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 sty 2014
Posty: 178
Pomógł: 24

Tylko takie pytanie na szybko bo nie znalazłem w opisie Twojego problem
Czy podciągnąłeś linie SCL I SDA poprzez rezystory (np 4,7k) do Vcc ?

Aha i jeszcze jedno, kiedyś walczyliśmy ze sprzętowym I2C, który sie zawieszał i remedium okazało się wpisanie odpowiedniej wartości do rejestru TWBR podczas inicjalizacji.
U nas dla Atmegi8 i wewnętrzenego oscylatora 8MHz należało wpisać to: "TWBR = 8;"

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 gru 2014, o 17:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 maja 2013
Posty: 191
Pomógł: 2

Hmm wiecie co panowie działa, trochę nie wiem dlaczego. Na początku miałem A0 do Vcc podłączone (#define PCF8583_ADDR 0xA2)
Wgrałem program matw ale zmieniłem podłączenie na GND odczytałem takie coś:
Obrazek
Czyli wszystko okej, zmieniłem w programie na #define PCF8583_ADDR 0xA0 i działa.;)

Dziękuje wszystkim za zaangażowanie przy prezentacji projektu nie zapomnę o was :)

Pozdrawiam

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO