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



Teraz jest 4 lip 2026, o 16:45


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 8 lip 2013, o 12:42 
Offline
Nowy

Dołączył(a): 03 paź 2012
Posty: 14
Pomógł: 0

Witam,
jak można w prosty sposób wykrywać błąd transmisji I2C na przykładzie(RTC) z książki. Przy zastosowaniu tego programu i w przypadku braku transmisji układ cały czas czeka na sygnał ACK. Czy trzeba np w przerwaniu ustawiać jakąś flagę i pilnować prawidłowej transmisji?

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


Kody wklejamy przy pomocy syntax=c - Zielony J.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2013, o 12:58 

Pomógł: 0

Możesz zastosować softwerowy timer. Np, sprawdzać co 10ms czy flaga ACK została zmieniona, jeżeli nie to reset transmisji, albo error, czy co tam sobie ustawisz.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2013, o 13:14 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27462
Lokalizacja: Szczecin
Pomógł: 1045

W każdej pętli oczekującej na akcję zastosować prostego timeouta, nawet bez żadnego timera, żeby nie tracić zasobów .... i to wystarczy.

Jak będzie coś nie tak to zgłaszasz komunikat ..... ale

...ale jest jedno małe ale

Przede wszystkim to nie komputer PC więc gdzie zgłosić ten komunikat ? do czego ? do kogo ? ;)

w zdecydowanej większości wypadków jest to po prostu bezcelowe ..... bo skoro nie działa transmisja I2C a zwykle nie jest ona dla zabawy tylko pełni istotną rolę w układzie wbudowanym, na tyle że bez niej zwykle działanie całego urządzenia staje się nonsensem ...

dlatego jak nie działa to przynajmniej szybko wiadomo co ;) i można to naprawić

a takie pomysły na timeouty w prostej komunikacji I2C przychodzą do głowy, gdy ktoś ma poważne kłopoty ze zrobieniem elektroniki do tego - co w zdecydowanej większości wypadków jeśli chodzi o początkujących sprowadza się np do tego że nie dają rezystorów podciągających linie SDA i SCL do VCC i potem mają takie kwiatki. Tzn raz im to działa a raz nie - i wtedy zaczyna się poszukiwanie przyczyn że niby w programie, że się niby przydałyby timeouty ;) itp .... a po co ? jak się poprawnie zrobi I2C to śmiga aż miło ...

oczywiście ten wywód nie obejmuje wszystkich przypadków na świecie ;) ale opowiadam to na podstawie BARDZO CZĘSTO zadawanych pytań i poszukiwań takiego rozwiązania kłopotu z jakim się kolega zwrócił w tym wątku.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2013, o 13:28 

Pomógł: 0

U mnie to koncepcja wygląda z zgłaszaniem następująco, jest sobie coś na zasadzie flag, systemowych czyli wiem, co zgłasza błąd, program podejmuje za mnie decyzje, czyli albo powtarza transmisje do skutku, albo resetuje cały system :).
W końcu to tylko rozwinięcie koncepcji eventów :), bo obsługa błędów to po prostu kolejny krok.
Chociażby zapalenie diodki error :).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2013, o 13:42 
Offline
Nowy

Dołączył(a): 03 paź 2012
Posty: 14
Pomógł: 0

Właśnie obsługuję DS1307 (RTC) i ma taką przypadłość że jak wyładuje się bateryjka podtrzymująca czas to nie idzie komunikacja z układem.



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: 5 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO