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



Teraz jest 22 lis 2024, o 22:23


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 19 kwi 2024, o 17:19 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1081
Pomógł: 73

Cześć, potrzebuję podłączyć czujnik BH1750 do mikrokontroler AVR zasilane go napięciem 5V.
Moduł BH jest na płytce PCB z wbudowanym stabilizatorem napięcia do 3,3V.
Pytanie czy na liniach I2C muszę robić konwersję napięć?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 kwi 2024, o 20:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1030
Lokalizacja: Trójmiasto
Pomógł: 189

Zależy jak AVR będzie obsługiwał I2C. Na module wejścia I2C są podciągnięte do 3,3V. AVR zasilany 5V, napięcie powyżej 3V powinien bez problemu rozpoznać jako logiczne 1. Więc od tej strony jest OK. Natomiast pytanie czy na AVR będziesz korzystać ze sprzętowego modułu I2C czy programowego. Niestety duża ilość spotykanych programowych implementacji I2C ma poważny błąd w działaniu. Ponieważ uC podczas banglowania pinami wykorzystuje pin jako wyjście i wystawia stan wysoki na wyjściu bądź niski. A przecież wystawiając stan wysoki podasz na moduł BH 5V! Według specyfikacji standardu I2C, uC podczas banglowania pinem stan wysoki musi wymuszać rezystor podciągający, czyli AVR winien ustawić pin w stan wejścia z wysoką impedancją, a stan niski ustawiać pin jako wyjście w stanie 0.
Podsumowując, jeśli AVR będzie w sposób właściwy gadał po I2C to możesz podłączyć bezpośrednio, czyli albo sprzętowy moduł I2C procka, albo poprawna biblioteka programowa, tylko uwaga: podciąganie lini I2C tylko do 3,3V które masz już na module, NIE możesz podciągać linii dodatkowo do 5V.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 kwi 2024, o 21:28 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1081
Pomógł: 73

xentis napisał(a):
Zależy jak AVR będzie obsługiwał I2C. Na module wejścia I2C są podciągnięte do 3,3V. AVR zasilany 5V, napięcie powyżej 3V powinien bez problemu rozpoznać jako logiczne 1. Więc od tej strony jest OK. Natomiast pytanie czy na AVR będziesz korzystać ze sprzętowego modułu I2C czy programowego. Niestety duża ilość spotykanych programowych implementacji I2C ma poważny błąd w działaniu. Ponieważ uC podczas banglowania pinami wykorzystuje pin jako wyjście i wystawia stan wysoki na wyjściu bądź niski. A przecież wystawiając stan wysoki podasz na moduł BH 5V! Według specyfikacji standardu I2C, uC podczas banglowania pinem stan wysoki musi wymuszać rezystor podciągający, czyli AVR winien ustawić pin w stan wejścia z wysoką impedancją, a stan niski ustawiać pin jako wyjście w stanie 0.
Podsumowując, jeśli AVR będzie w sposób właściwy gadał po I2C to możesz podłączyć bezpośrednio, czyli albo sprzętowy moduł I2C procka, albo poprawna biblioteka programowa, tylko uwaga: podciąganie lini I2C tylko do 3,3V które masz już na module, NIE możesz podciągać linii dodatkowo do 5V.


Dzięki, cenne uwagi. Będę wykorzystywał softwareowy I2C ale to Mirka biblioteka więc pewnie będzie działać ok :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 kwi 2024, o 17:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1030
Lokalizacja: Trójmiasto
Pomógł: 189

Jarecki napisał(a):
Będę wykorzystywał softwareowy I2C ale to Mirka biblioteka więc pewnie będzie działać ok :)
Jeśli tę z bluebooka to niestety muszę Cię rozczarować. Ale tak na prawdę łatwo to poprawić zgodnie z tym co napisałem wcześniej.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 kwi 2024, o 22:22 
Offline
Moderator
Avatar użytkownika

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

xentis napisał(a):
Jeśli tę z bluebooka to niestety muszę Cię rozczarować......


Tak potwierdzam - zawsze zapominam poprawić tego drobiazgu w sofcie do pobrania - ale w końcu się zmobilizuję ;)
wystarczy jednak w niej zrobić drobną podmianę w makrach ustawiających stan wysoki, czyli takie coś w pliku "i2c_soft.h"

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



zamienić na taką postać gdzie operujemy rejestrem kierunku:

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


aha no i funkcję i2c_init() z bluebooka też trzeba poprawić:

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


na taką gdzie piny SDA i SCL zostają wejściami po resecie procka a wyłączamy wewnętrzne podciąganie

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


natomiast biblioteka z naszego sklepu jest od początku poprawnie zrobiona:

https://sklep.atnel.pl/pl/p/0581_0582-M ... teka-C/244

Obrazek

_________________
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: 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