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



Teraz jest 22 lut 2025, o 19:09


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 24 lis 2014, o 11:48 
Offline
Nowy

Dołączył(a): 11 wrz 2014
Posty: 15
Pomógł: 0

Witam. Mój mikrokontroler (atmega8) odbiera dane z czujnika analogowego poprzez pin ADC3, a następnie przetwarza je i wysyła przez RS232 do mojego komputera. Tu wszystko działa :) Pojawia się problem gdy do układu podłączam minIMU-9 v2. Składa się on między innymi z żyroskopu z którego chcę pobrać dane. Mam problem ze znalezieniem urządzenia slave(l3gd20). Na początku włączam interfejs i2c nadając mu częstotliwość (w moim przypadku 760hz), pojawia się błąd przy starcie. Następnie wysyłam adres urządzenia (7bitów + 1bit zapisu)i tu mi wyskakuje kolejny błąd (nie może się połączyć z układem).
Dodam, że wyskakują mi cały czas takie same dane z l3gd20 jak na załączonej fotografi. Czyli -1,-515,ciag danych, a potem same zera.
Taktowane kwarcem 16MHz. Rezystory podciągające do SCL oraz SDA (10k).
Załączam mój cały kod oraz schemat.

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

ObrazekObrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lis 2014, o 13:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sie 2013
Posty: 137
Lokalizacja: śląskie
Pomógł: 13

To tylko info. odnośnie schematu linie SCL,SDA to podciągasz do VCC a nie do VDD
(chyba że to tylko jakiś błąd drukarski? :o )

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lis 2014, o 22:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 mar 2014
Posty: 580
Lokalizacja: Jastrzębie-Zdrój
Pomógł: 71

Waldek_jb napisał(a):
To tylko info. odnośnie schematu linie SCL,SDA to podciągasz do VCC a nie do VDD
(chyba że to tylko jakiś błąd drukarski? :o )


No chyba że Vcc = Vdd = 5V, to problemu nie ma.

z Niebieskim pozdRowieniem,
Doman89



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lis 2014, o 15:37 
Offline
Nowy

Dołączył(a): 11 wrz 2014
Posty: 15
Pomógł: 0

Do Vin podłączyłem 5V, więc VDD jest wyjściem i ma 3,3V. ("VIN - Napięcie zasilania od 2,5V do 5,5V; VDD - Gdy napięcie zasilania jest wyższe niż 3,3V, wówczas wyprowadzenie może służyć jako źródło zasilania o napięciu 3,3V i wydajności do 150mA. Jeżeli wartość napięcia zasilającego znajduje się w przedziale 2,5V - 3,3V, wóczas należy podłączyć je bezpośrednio do VDD, pozostawiając VIN niepodłączone."). Próbowałem rezystory podłączyć do Vin, ale to nic nie dało.
Żeby nie było wątpliwości co do podłączenia, to wrzucam zdjęcie z l3gd20 datasheet i schemat minIMU-9 v2.
Pierwszy raz wrzuciłam cały mój kod, a to może być trochę dużo do analizy więc wrzucam sam kod do obsługi i2c.
Jeżeli chodzi o adres l3gd20, to (z datasheet):110101+SDO(jeżeli jest podłączone do Vin to "1", a ze schematu minIMU wynika, że jest)+R/W(u mnie WRITE, więc"0") więc = 11010110
Wiem, że I2C_Init(); oraz initL3GD20i2c(); powinno się wykonać tylko raz, a więc po za pętlo "WHILE" to ma być, ale dla testów robię to w pętli. Próbowałem po za pętlą, ale było bez zmian.

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


Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lis 2014, o 14:06 
Offline
Nowy

Dołączył(a): 11 wrz 2014
Posty: 15
Pomógł: 0

Kod do obsługi transmisji szeregowej RS232 oraz czujnika analogowego jest dobry. Podłączenie też jest dobre, ponieważ jest proste :) Widzę, że nikt nie widzi błędu w kodzie który obsługuje i2c, a więc można przyjąć, że nie ma w nim błędu.
Mogą być następujące błędy:
1. Mikrokontroler nie potrafi jednocześnie obsłużyć transmisji szeregowej RS232 oraz i2c.
2. Jakiś jest problem z częstotliwością i2c 760 Hz, to według datasheet wartość maksymalna, ale można ją zmniejszyć. Do tego w linijce 49 w jednej książce widziałem, że trzeba podzielić częstotliwość przez 100, czyli: I2C_SetBusSpeed(760/100), więc teraz nie wiem jaką częstotliwość powinienem dać :(
3. Adres slave jest zły.
Więcej możliwych błędów nie widzę, jeżeli ktoś będzie znał odpowiedz na którykolwiek podpunkt, to będę wdzięczny :) Przypominam, że cały czas nie mogę nawiązać połączenia ze slave'm, po wysłaniu do niego adresu układ nie odpowiada , a więc funkcję "read_gyroscope()" nie trzeba brać pod uwagę przy tym błędzie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sty 2015, o 18:24 
Offline
Nowy

Dołączył(a): 11 wrz 2014
Posty: 15
Pomógł: 0

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

Teraz działa mi dużo rzeczy ( w "initL3GD20i2c()" nie wyskakuje mi już błąd wysyłania sygnału START oraz błąd przy wysyłaniu adresu, ogólnie w tej funkcji nie wyskakuje mi żaden błąd :) ). Natomiast w funkcji: "read_gyroscope()" mam parę błędów.
W tej funkcji:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

na 10 przypadków mam 3 błędy, więc według mnie jest wszystko dobrze.
Jak już napiszę całą funkcje:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

to mam masę błędów. Wyskakuje mi błąd przy wysłaniu sygnału START, NACK i ACK. A na dodatek w x_gyro, y_gyro oraz z_gyro są te same liczby. Wygląda to tak jak by ACK nie działało, albo coś przed nim nie działa.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 maja 2015, o 08:33 
Offline
Nowy

Dołączył(a): 11 wrz 2014
Posty: 15
Pomógł: 0

Już parę miesięcy temu rozwiązałem ten problem, ale wstawię poprawny kod dla ludzi którzy mieli problem z MINIMU- 9 v2:

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

Jak widać błąd był przy adresie urządzenia. Do tego podawałem złą częstotliwość dla pracy TWI/i2c, bo jakieś 50 hz zamiast 100 hz.
Temat uważam za zamknięty :)



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 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