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



Teraz jest 11 sie 2026, o 18:09


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 30 paź 2013, o 11:44 
Offline
Użytkownik

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

W programowej implementacji I2C (4.10.2 "niebieska") bardzo ważne jest
Kod:
#define QDEL _delay_loop(1)
#define HDEL _delay_loop(2)
Pierwsza wprowadza opóźnienie o ćwierć przesyłanego bitu, druga o pół.Czyli te "delay-e" tak naprawdę decydują o szybkości transmisji mikrontroler<--> urządzenie I2C
W związku z tym mam pytania
1. Jak działają w/w "_delay-e"?
2. Skąd program wie jakie urządzenie ( "wolne?", "szybkie?") podłączone jest do mikrokontrolera? Program może korzystać tu np. z
Kod:
#include <avr/io.h>
. Ale to chyba za mało informacji dla programu. Przecież są różnie urządzenia I2C.



Ostatnio edytowano 30 paź 2013, o 12:09 przez mg101, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 paź 2013, o 11:51 
Offline
Moderator
Avatar użytkownika

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

mg101 napisał(a):
Skąd program wie jakie urządzenie


Myślę, że jak koledze odpowiem na to pytanie to inne się same wyjaśnią ...

program NIE WIE.

Bo niby skąd program ma coś wiedzieć ? To kolega jako programista MUSI WIEDZIEĆ i to przewidzieć. Ja pokazałem prostą implementację, którą na dodatek przygotowałem na konkretne taktowanie 8MHz ...

i jak dasz sobie kwarc/taktowanie 16MHz to już koniec - nie będzie działać - trzeba wtedy sięgnąć do tych delayów o które pytasz i je dwukrotnie wydłużyć - żeby działało ...

Poza tym przy programowej wersji I2C nawet nie rozpatrujemy za bardzo czy mamy podłączone urządzenie wolne czy szybkie (czyli czy np 100kHz czy 400kHz albo jeszcze szybsze) ....

programowa wersja ma po prostu działać - i zwykle dobrze żeby działała przynajmniej 100kHz - chociaż czasem może i wolniej działać bo to zwykle przy foft I2C nie ma żadnego znaczenia - ważne żeby działało

Dopiero przy sprzętowym I2C gdzie wspomaga cię moduł sprzętowy procka TWI, można pokusić się o obsługę wolnych czy szybkich urządzeń bo masz pan rejestry nawet do konfiguracji tych prędkości.

Tak to wygląda.

_________________
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: 30 paź 2013, o 12:05 
Offline
Użytkownik

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

mirekk36 napisał(a):
...Tak to wygląda.

Dzięki , prawie świta. Do szczęścia brakuje mi tylko co robią dokładnie te delaye . Domyślam się że opóźniają o kilkanaście cykli zegarowych. Na pewno HDEL to 2 razy więcej niż QDEL. Pozostało tylko doprecyzowanie to "kilkanaście"



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 paź 2013, o 12:23 
Offline
Moderator
Avatar użytkownika

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

mg101 napisał(a):
Do szczęścia brakuje mi tylko co robią dokładnie te delaye


tzn ja nie rozumiem do końca pytania :( .... jak to co robią ? ... wprowadzają opóźnienia

a dokładniej to jest to oczywiście opisane u źródła:

http://www.nongnu.org/avr-libc/user-man ... basic.html

------------------------ [ Dodano po: kilkunastu sekundach ]

bazują one na zliczaniu pojedynczych taktów zegara

_________________
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: 30 paź 2013, o 13:08 
Offline
Użytkownik

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

mirekk36 napisał(a):
...bazują one na zliczaniu pojedynczych taktów zegara

Dzięki
Po rozgryzieniu (tak mi się przynajmniej zdaje) http://www.nongnu.org/avr-libc/user-man ... basic.html
_delay_loop_1(1) powoduje opóźnienie 1x3 cykli zegarowych
_delay_loop_1(2) powoduje opóźnienie 2x3 cykli zegarowych
....
_delay_loop_1(100) powoduje opóźnienie 100x3 cykli zegarowych
...
_delay_loop_1(255) powoduje opóźnienie 255x3 cykli zegarowych
Co ciekawe to
_delay_loop_1(0) powoduje opóźnienie 256x3 cykli zegarowych Maksymalne opóźnienie= "przekręcenie licznika"! (a nie opóźnienie 0, jakby się wydawało)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 paź 2013, o 15:58 
Offline
Moderator
Avatar użytkownika

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

mg101 napisał(a):
Co ciekawe to
_delay_loop_1(0) powoduje opóźnienie 256x3 cykli zegarowych Maksymalne opóźnienie= "przekręcenie licznika"! (a nie opóźnienie 0, jakby się wydawało)


Raczej typowe, startuje licznik od zera w dół, dzięki czemu zlicza 256 razy ot tyle ;)

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Baidu [Spider] 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