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



Teraz jest 31 maja 2020, o 19:44


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 33 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 10 sty 2020, o 11:57 
Offline
Użytkownik

Dołączył(a): 14 kwi 2018
Posty: 35
Pomógł: 0

Witam,

mam pewien problem z biblioteką MK_I2C, przy próbie uruchomienia jej w trybie Master dla ATtiny4313 dla wartości 100kHz przy taktowaniu 14745600 Hz dostaje wartość -1.

Co robię nie tak?

Oto moje ustawienia biblioteki:
#define I2C_MODE 0

#define USE_SOFT_I2C 1 // soft I2C only for MODE = 0 (Master)

#define iSCL PB7
#define iSDA PB5

#define SCL_PORT PORTB
#define SCL_DIR DDRB
#define SCL_PIN PINB

#define SDA_PORT PORTB
#define SDA_DIR DDRB
#define SDA_PIN PINB



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2020, o 12:12 
Offline
Moderator
Avatar użytkownika

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

Może najpierw warto sprawdzić w nocie PDF swojego procka czy masz w ogóle TWI(I2C) ? czy tylko USI ?

_________________
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: 10 sty 2020, o 12:14 
Offline
Użytkownik

Dołączył(a): 14 kwi 2018
Posty: 35
Pomógł: 0

Liczyłem, że może uda się mi uruchomić bibliotekę w trybie Master ale softwarowym. Teraz zauważyłem że jednak to się nie uda. Nie ma możliwości modyfikacji kodu w celu dostosowania go do trybu master dla małych mikrokontrolerów?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2020, o 12:32 
Offline
Moderator
Avatar użytkownika

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

A co za problem żeby to działało w trybie I2C Software ? Żaden problem. Co więcej procek ma USI a więc też da się to pewnie wykorzystać

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

Przy okazji jak robisz I2C Soft to po co sprawdzasz ustawienia Bitrate ? to jest tylko dla trybu sprzętowego

_________________
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: 10 sty 2020, o 12:36 
Offline
Użytkownik

Dołączył(a): 14 kwi 2018
Posty: 35
Pomógł: 0

Można prosić o jakieś wskazówki jak uruchomić to w trybie Master dla tego ATtiny? Chodzi oczywiście o tryb soft.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2020, o 12:55 
Offline
Moderator
Avatar użytkownika

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

ustawić tryb software I2C i to wszystko ;) nic więcej nie trzeba robić. Tylko nie zaglądaj tam do tej funkcji która pokazuje ci -1 bo ona nie jest do soft i2c

_________________
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: 10 sty 2020, o 12:58 
Offline
Użytkownik

Dołączył(a): 14 kwi 2018
Posty: 35
Pomógł: 0

#define USE_SOFT_I2C 1
I to tyle? Żadnej dodatkowej inicjalizacji?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2020, o 13:05 
Offline
Moderator
Avatar użytkownika

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

Ja nie za bardzo rozumiem o czym kolega pisze? Pomijam już że w otrzymanym pliku ZIP jest przykładowy kod. I nie wiem też skąd pytanie o to czy nie trzeba inicjalizować ? Jak to nie - skoro jest funkcja do inicjalizaji ... Oczywiście że trzeba inicjalizować

_________________
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: 10 sty 2020, o 13:07 
Offline
Użytkownik

Dołączył(a): 14 kwi 2018
Posty: 35
Pomógł: 0

Trochę się nie zrozumieliśmy, ale już wiem wszystko ;) Dzięki za pomoc :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2020, o 13:14 
Offline
Moderator
Avatar użytkownika

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

a no to powodzenia - powinno spokojnie śmigać.

_________________
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: 10 sty 2020, o 14:21 
Offline
Użytkownik

Dołączył(a): 14 kwi 2018
Posty: 35
Pomógł: 0

A więc jednak nie musiałem nie zrozumieć wszystkiego...
Bibliotekę uruchamiam w ten sposób:

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


Następnie w main.c definiuje sobie adresy urządzeń slave oraz uruchamiam I2C dla 100kHz:

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


Chciałbym móc odczytać dane z czujników INA219A, jednak jak widać w terminalu powyżej zawsze wartość wynosi 255 bez znaczenia czy kanał wyjściowy pobiera prąd czy też nie. Czy jest ktoś w stanie wytłumaczyć mi mocno łopatologicznie jak powinienem wykorzystać ten czujnik? :cry:

Obrazek

Oraz link do dokumentacji czujnika:
http://www.ti.com/lit/ds/symlink/ina219.pdf



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2020, o 17:09 
Offline
Użytkownik

Dołączył(a): 22 lut 2014
Posty: 205
Lokalizacja: Poznań
Pomógł: 22

Wygląda na to, że nie przesyłasz adresu rejestru, z którego chcesz odczytać wartość. Podajesz jedynie adres układu INA219. W define widzę, że zdefiniowałeś adres rejestru ale z niego nie skorzystałeś.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2020, o 17:30 
Offline
Użytkownik

Dołączył(a): 14 kwi 2018
Posty: 35
Pomógł: 0

Adres z którego chciałbym odczytać dane do zmienna o nazwie registerPointer, a w #define dodałem sobie polecenia read oraz write, wartość tych definicji to adres urządzenia + 1 lub 0 w zależności od tego czy chce coś czytać czy zapisywać jednak wciąż dostaje tylko maksymalne wartości dla danego typu zmiennej np 255 jeśli czytam tylko bajt.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2020, o 17:38 
Offline
Użytkownik

Dołączył(a): 22 lut 2014
Posty: 205
Lokalizacja: Poznań
Pomógł: 22

Okej faktycznie nie zauważyłem, wydaje mi się, że kod powinien wyglądać tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


A wartość INA1_read = INA1_ADRESS + 1

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


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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2020, o 17:48 
Offline
Użytkownik

Dołączył(a): 14 kwi 2018
Posty: 35
Pomógł: 0

Zastosowałem się do Twoich rad, jednak wartość wciąż wynosi 255. Nie potrafię znaleźć nigdzie dobrego przykładu uruchomienia tego czujnika :/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2020, o 18:10 
Offline
Użytkownik

Dołączył(a): 01 lis 2013
Posty: 283
Pomógł: 29

Układ czujnika jak ma podpięte nogi adresowe A0 i A1 ?

Poczytaj po tym linkiem. Masz ładnie wszystko opisane.
http://www.jarzebski.pl/arduino/czujniki-i-sensory/cyfrowy-czujnik-pradu-mocy-ina219.html
Musisz sobie zaglądnąć do biblioteki. Co prawda jest to arduinowa biblioteka, ale wyciągniesz z niej sposób obsługi układu.

_________________
Pozdrawiam,
sq8mvy, Paweł



Ostatnio edytowano 10 sty 2020, o 18:13 przez gizmo5418, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2020, o 18:12 
Offline
Użytkownik

Dołączył(a): 14 kwi 2018
Posty: 35
Pomógł: 0

Jeśli chodzi o podłączenie układu to wykorzystuję pierwsze 4 adresy dostępne w nocie katalogowej (chodzi mi o sposób podłączenia ich w układzie), korzystałem już z tej strony niestety opisany tam kod dotyczy Arduino :/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2020, o 18:19 
Offline
Użytkownik

Dołączył(a): 22 lut 2014
Posty: 205
Lokalizacja: Poznań
Pomógł: 22

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

powinno być uint16_t

Tak jak kolega wyżej napisał, musisz nam teraz dostarczyć informacji na temat hardware.
Wrzuć jakiś schemat, zdjęcia itp.
Korzystasz z własnego projektu płytki, czy kupiłeś jakieś gotowce?

Najlepiej odłączyć pozostałe 3 INA219 i zająć się najpierw obsługą jednego. Wykomentuj także obsługę ich w kodzie.

Wrzuć obecny kod.
:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2020, o 18:34 
Offline
Użytkownik

Dołączył(a): 14 kwi 2018
Posty: 35
Pomógł: 0

Korzystam z własnego projektu oto schemat układu (należy pozbyć się jednego MAX485 fizycznie go już nie ma).
Obrazek

A oto cały kod main (korzystam z biblioteki MK_I2C):

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


Niestety nie mam fizycznej możliwości odłączenia czujników dlatego też tylko zakomentowałem pozostałą część kodu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2020, o 18:48 
Offline
Użytkownik

Dołączył(a): 22 lut 2014
Posty: 205
Lokalizacja: Poznań
Pomógł: 22

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2020, o 19:05 
Offline
Użytkownik

Dołączył(a): 14 kwi 2018
Posty: 35
Pomógł: 0

Niestety, ale wartość odczytywana z urządzenia wciąż jest niezrozumiała.
Efekt w terminalu:

Obrazek

Wartość przed ACK to wartość pochodząca od czujnika INA.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2020, o 19:25 
Offline
Użytkownik

Dołączył(a): 22 lut 2014
Posty: 205
Lokalizacja: Poznań
Pomógł: 22

Niestety nie mam dostępu do biblioteki Mirka :(
Zobacz czy w funkcji i2c_read_word jest dodawane 1 do adresu.

------------------------ [ Dodano po: 15 minutach ]

Jaki masz spadek napięcia na R13?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2020, o 19:41 
Offline
Użytkownik

Dołączył(a): 01 lis 2013
Posty: 283
Pomógł: 29

W takim wypadku, czyli pisząc obsługę układu, bardzo przydatny jest analizator stanów logicznych lub oscyloskop. Jak na dłoni by było widać, co wysyłasz do układu - adres, nr. rejestru i co jest zwracane.

Jak jesteś w posiadaniu choć jednej z tych rzeczy, to podpinaj i szukaj błędu....

_________________
Pozdrawiam,
sq8mvy, Paweł



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2020, o 19:44 
Offline
Użytkownik

Dołączył(a): 22 lut 2014
Posty: 205
Lokalizacja: Poznań
Pomógł: 22

Zgadzam się z gizmo5418



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2020, o 20:17 
Offline
Użytkownik

Dołączył(a): 14 kwi 2018
Posty: 35
Pomógł: 0

Właśnie zabieram się za sprawdzenie linii SDA i SCL.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2020, o 22:04 
Offline
Moderator
Avatar użytkownika

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

Przede wszystkim ... przede wszystkim to trzeba zrozumieć i piszę o tym już w Bluebooku, że nie ma na świecie jednej UNIWERSALNEJ biblioteki i2c do wszystkich scalaków/urządzeń świata. Ja nie mam czasu na wnikanie w PDF'a tych scalaków INA ale od przestudiowania noty bym zaczął. Następnie sprawdził gotowe funkcje w bibiotece do przesyłania danych i ew dopasował je do scalaka jeśli zajdzie taka potrzeba. Jedyne co mogę powiedzieć to w tej bibliotece nie podaje się żadnych oddzielnych adresów do zapisu i do odczytu tylko jeden bazowy adres a biblioteka sama dba o najmłodszy bit mówiący o operacji read/write.

Jeszcze raz powiem w Bluebooku opisuję dokładnie o co chodzi i pokazuję właśnie DWA różne przykłady scalaków oraz wyjaśniam różnice komunikacji między nimi, na co zwracać uwagę i jak postępować ... Trzeba tylko poczytać.

_________________
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: 10 sty 2020, o 22:35 
Online
Użytkownik

Dołączył(a): 02 gru 2015
Posty: 390
Pomógł: 19

Mirku ten scalak spokojnie da się odczytać twoimi funkcjami i2c_read_buf i i2c_write_buf wiem bo napisałem sobie bibliotekę do niego i działa bez problemu .
Autor wątku albo podaje zły adres układu albo odczytuje zły rejestr albo źle zainicjalizował ten scalak.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sty 2020, o 23:18 
Offline
Użytkownik

Dołączył(a): 14 kwi 2018
Posty: 35
Pomógł: 0

Jest szansa abyś mógł podzielić się jakimiś wskazówkami lub kodem?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2020, o 00:20 
Offline
Moderator
Avatar użytkownika

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

tonygryps napisał(a):
Mirku ten scalak spokojnie da się odczytać twoimi funkcjami i2c_read_buf i i2c_write_buf wiem bo napisałem sobie bibliotekę do niego i działa bez problemu .

No proszę ;)

Ale to też pokazuje jednak, że warto najpierw poćwiczyć dobrze i2c na prostszych układach ... poczuć to , nawet wprost ćwiczenia z książki przejść - to daje praktykę, nie zaś od razu zrobić własną płytkę PCB gdzie można jeszcze w projekcie elektronicznym babole porobić. A tu na schemacie widać babole - może nie duże no ale kto podciąga każdy pin SDA i SCL oddzielnym rezystorem 10k ??? To przy 4 scalakach - mamy połączone 4 rezystory równolegle i jaką mamy rezystancję podciągającą na każdej linii ? 10K ?

Wprawdzie to akurat nie powoduje jeszcze tutaj takiego problemu - ale jakby człowiek najpierw potestował sobie na jakimś zestawie uruchomieniowym, np ATB ;) Podejrzał schemat takiego zestawu - jak się podłącza scalaki na magistralę i2c itp ... zrobił prototypa. To później i własne PCB by się całkiem inaczej zaprojektowało.

_________________
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: 11 sty 2020, o 08:09 
Offline
Użytkownik

Dołączył(a): 14 kwi 2018
Posty: 35
Pomógł: 0

Nawet najlepszym zdarzają się błędy, a ja się za takiego nie uznaje. „Wiem, że nic nie wiem.” Będę dalej walczył z tym układem może uda się coś zdziałać z funkcjami operującymi buforami :)



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: 33 ]  Przejdź na stronę 1, 2  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 6 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