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



Teraz jest 30 mar 2026, o 22:52


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 10 mar 2015, o 20:50 
Offline
Użytkownik

Dołączył(a): 11 kwi 2014
Posty: 196
Lokalizacja: Sandomierz
Pomógł: 0

Witajcie

Zacząłem pierwsze próby z TWI na atmega8. Napisałem na początek funkcje wysłania bitu start oraz stop. Wygląda to tak (narazie wszystko w pliku main.c)

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


A w funkcji main wystawiam bit startu po czym po chwili go zdejmuję (po 2000ms)

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


Sęk w tym że na linii danych SDA nie widać zmiany stanu na niski, linia SDA jak i SCL stoją w stanie wysokim.

Może ktoś podpowiedzieć jaki warunek jest niespełniony ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2015, o 21:27 
Offline
Użytkownik
Avatar użytkownika

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

A powiedz, masz podłączone jakiekolwiek urządzenie na magistrali TWI?

_________________
Migracja z punktu B do punktu C
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2015, o 21:38 
Offline
Użytkownik

Dołączył(a): 11 kwi 2014
Posty: 196
Lokalizacja: Sandomierz
Pomógł: 0

matw napisał(a):
A powiedz, masz podłączone jakiekolwiek urządzenie na magistrali TWI?

Na próbę nic nie podpiąłem jeszcze, chciałem na sucho wypróbować konfigurację, ale brak urządzenia nie powinien wpłynąć na wystawienie bitu start czy też samej ramki z adresem przez uP. Bit start polega na zmianie linii danych z 1 na 0 i jest wykonywany przez układ master w moim przypadku atmegę. Dopiero po wysłaniu adresu slave master oczekuje na odpowiedź.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2015, o 21:46 
Offline
Użytkownik
Avatar użytkownika

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

Nie mając nic podpiętego do sprzętowego TWI, program zawisnie w funkcji TWI_start(), a dokładnie tutaj:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Można to obejść np. wprowadzając dodatkowy licznik w tej pętli while(), który po przekroczeniu pewnej ustalonej przez ciebie wartości opuści tą pętlę nieskończoną.

Tutaj znajdziesz kawałek mojego kodu, który wykrywa błędy na linii TWI: topic9839.html

_________________
Migracja z punktu B do punktu C
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2015, o 21:55 
Offline
Użytkownik

Dołączył(a): 11 kwi 2014
Posty: 196
Lokalizacja: Sandomierz
Pomógł: 0

Wyjaśnij proszę skąd się to bierze, przecież wysłanie samego bitu startu polega tylko na zmianie stanu na linii SDA i tam gdzie jest tylko jeden master nie ma możliwości walki o arbitraż, więc nic nie powinno zakłócić wysłaniu bitu startu. Po zrealizowaniu tego znacznik TWINT powinien przybrać wartość zero.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2015, o 22:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

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

1<TWSTA

Pozdr.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2015, o 22:57 
Offline
Użytkownik

Dołączył(a): 11 kwi 2014
Posty: 196
Lokalizacja: Sandomierz
Pomógł: 0

Cytuj:
Witam
Masz błąd w przypisaniu bitów:
Składnia: [ Pobierz ] [ Ukryj ]
język c

TWCR = (1<<TWINT) | (1<TWSTA) | (1<<TWEN);

GeSHi

1<TWSTA

Pozdr.


I tu był błąd, dzięki za wskazówkę. Terasz działa poprawnie.
Drobna pomyłka ale wyłożyła wszystkie moje próby. Tyle razy analizowałem kod a nie zwróciłem uwagi na poprawność składni.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2015, o 16:18 
Offline
Użytkownik

Dołączył(a): 11 kwi 2014
Posty: 196
Lokalizacja: Sandomierz
Pomógł: 0

Stworzyłem sobie bibliotekę od obsługi TWI, ma ona zawartość

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


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


Jest to wysłanie polecenia reset do układu MS5611, i niestety nie działa to do końca jak należy. Na oscylogramie widać że pierwszy bajt danych jest wysyłany (SLA+W) ale drugi bajt tylko fragment.

Obrazek
Kilka poradników przeczytałem ale wszędzie praktycznie taka sama procedura obsługi TWI jaką ja zastosowałem tutaj w projekcie.

Czy może ktoś rzucić okiem i podpowiedzieć co jest nie w porządku z kodem ?



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

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