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



Teraz jest 23 sty 2026, o 18:59


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 13 lut 2013, o 18:44 
Offline
Użytkownik

Dołączył(a): 27 lis 2012
Posty: 291
Pomógł: 6

We wcześniejszym wątku "I2C - Nie czuję TWI_start() rozdz. 5.9.1 z "niebieskiej" " nie mogłem zrozumieć tego kawałka
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
W pierwszej chwili wydaje się , że jak wpisałem 1 do TWINT-a w pierwszej linijce, to druga jest niepotrzebna, bo program zawsze ją obejdzie. Tak jak np. w poniższym kawałku, while(...) też jest niepotrzebne.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Dodatkowo przy opisie TWI_start() na str 279 nie mogłem zrozumieć zdania z pdfu dokumentacji ATMELA32
Cytuj:
Wyzerowanie (bitu TWIN - dop. autora) polega na ustawieniu tego bitu na 1
Dla mnie to brzmiało tak jak np "zgaszenie lampki polega na jej zapaleniu" itd.
W końcu zacząłem szperać w literaturze i doszedłem do wniosku że że ten tekst
Cytuj:
Wyzerowanie (bitu TWIN - dop. autora) polega na ustawieniu tego bitu na 1
jest skrótem czegoś takiego.Słońce zaświeciło i wszystko stało się jasne i logiczne!
Cytuj:
- wartością początkową TWIN w rejestrze TWCR jest 0
- wpisanie 1 do TWIN powoduje, że zostaje zapoczątkowany ciąg zdarzeń określony przez wpisanie pozostałych jedynek do TWEN i i TWSTA -->zostanie przeprowadzona akcja startu I2C.Najważniejsze - Na początku następnej instrukcji tj while(...) bit TWINT zostanie wyzerowany! I to jest to że "wpisanie 1 do TWINT-a powoduje jego wyzerowanie!"
- Gdy ponownie TWINT = 1 to oznacza , że proces startu został przeprowadzony prawidłowo! Program przejdzie while(...) i będzie robił swoje
Proszę zauważyć,że teraz TWINT=1. Chcąc zapoczątkować inną akcję np TWI_write(znak) należy ponownie wpisać 1 do TWINT-a (chociaż jest w nim 1!). Znowu rozpocznie się ciąg zdarzeń który wpisze znak do czegoś tam. Też z TWINT-a zrobi się 0 i ponownie 1, gdy znak zostanie gdzieś wpisany.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lut 2013, o 19:48 
Offline
Moderator
Avatar użytkownika

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

no tak ale to już kolega wiedział też z innych tematów ;) .... wałkujemy już troszkę temat, że w AVR'ach najczęściej kasowanie bitu w jakimś rejestrze flag odbywa się przez wpisanie do niego jedynki właśnie, pomimo że siedzi w nim jedynka. Po cóż się zastanawiać więc jak to jest - że skoro jest jedynka to muszę wpisać jedynkę żeby wyzerować albo jak to działa w procku - skoro to już jest hardware jego wnętrza. Tak ma być i już.

Więc proszę pamiętać za chwilę przy przerabianiu kolejnych modułów, że będą identyczne sytuacje z kasowaniem tych bitów w rejestrach flag ;)

_________________
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: 13 gru 2016, o 00:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 gru 2014
Posty: 88
Pomógł: 2

Ja cie sune ale kwiatki, znowu kolega mig101 odwalił kawał logiki, która jest opisana w pdf ale jakże inaczej, powinno być tak:
1. najpierw to co napisał mg101,
2. a następnie pdf.
Należy się pomógł ale nie widzę przycisku - jeżeli to możliwe admina proszę o przyciśnięcie za mnie.

Dzięki mg101 i Mirek ".. że w AVR'ach najczęściej kasowanie bitu w jakimś rejestrze flag odbywa się przez wpisanie do niego jedynki właśnie, pomimo że siedzi w nim jedynka .."



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2016, o 12:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 gru 2014
Posty: 88
Pomógł: 2

No nie mogłem się powstrzymać chęć postawienia kropki wygrała:
1.Wartością początkową TWIN w rejestrze TWCR jest 1

2.SET BIT-y TWINT, TWEN, TWSTA; TWCR = (1<<TWINT) |(1<<TWEN) | (1<<TWSTA):
TWEN 1 -> włacz TWI
TWSTA 1 ->wyślij sekwencję startową jeżeli linie są wolne (stan H)
TWINT 1 -> i to słynne masło.. należy ustawić 1 żeby wyzerować czyli:
SET TWINT, startuje TWI wykonując CLR TWINT

3.Pętlunia while (!(TWCR & (1<<TWINT)));
dba o to by chwila trwała tyle ile trzeba, tak długo jak długo TWINT=0 inaczej mówiąc dokładnie tak długo dopóki nie zostanie WYSŁANA sekwencja START

4. Sekwencja START nadana TWINT 1 koniec pętli while i koniec działania funkcji START.



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

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