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



Teraz jest 13 kwi 2026, o 17:11


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 24 sty 2018, o 20:57 
Offline
Nowy

Dołączył(a): 25 lut 2014
Posty: 14
Pomógł: 0

Cześć, pisze gdyż mam problem z moim MPU6050. Używam Atmegi16 taktowanie 8MHz.
Udało mi się nawiązać komunikację z układem jednak mam problem z odczytem danych.
Testowałem na początku tylko wysyłanie wartości AcX do terminala, gdy wartości na terminalu były ujemne (czujnik pochylony do dołu) odczyt był prawidłowy gdy natomiast ustawiłem go poziomo odczyt się zawieszał. Tak samo dla innych wartości, gdy próbuje odczytać teraz np. 3 wartości AcX, Acy oraz AcZ, 1 raz uda mi się je odczytać i potem zawieszenie.
W pętli while mam podpiętą migającą diodę i gdy zwiesza się "komunikacja" ona przestaje migać tak jakby program wysypywał się z pętli while.
Być może coś źle ustawiłem w konfiguracji lub jakiś błąd w kodzie typowo czy mógłby ktoś zerknąć i nakierować mnie na rozwiązanie ?
main.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i2c.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: 25 sty 2018, o 02:10 
Offline
Nowy

Dołączył(a): 16 cze 2014
Posty: 21
Lokalizacja: Wrocław
Pomógł: 3

Jeśli Ci się zawiesza, może być to dlatego że funkcja TWI_read_buf oczekuje w pętli while na dane a ich nie dostaje. Z tego co pamiętam ja przy takiej konfiguracji (co prawda na ARM) odczytywałem po 2 bajty z układu. Spróbuj więc odczytać na razie zamiast 14 tylko 2 bajty.
Jeśli to się uda to wtedy odczytuj po 2:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i tak dalej.
Jeśli to nie będzie przyczyną problemu poszukamy dalej.

A i jeśli to nie będzie to, w funkcji np. TWI_read_buf wstaw gdzieś do testów zapalanie diody. Jeśli się zapali wstaw zapalanie linijkę niżej itd. do momentu aż się nie zapali. Takie pseudo debugowanie :D


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2018, o 18:45 
Offline
Nowy

Dołączył(a): 25 lut 2014
Posty: 14
Pomógł: 0

Hej, dzięki za nakierowanie na problem. Udało się go rozwiązać :) Linijka po linijce jak sugerowałeś.
Nie był to problem z funkcją TWI_read_buf, tylko z funkcją USART_Transmit_int.

Funkcja itoa była problem, a raczej rozmiar bufora (buf[2]) w funkcji itoa. Miał za mały rozmiar i widocznie przy konwersji nie mieścił wystarczającej ilości znaków. Po zwiększeniu jego wielkości do 10 działa bez problemu jak na razie bez problemu.

A tak nawiasem mówiąc jaki powinien być optymalny rozmiar bufora dla tego zastosowania? Można założyć że dla 1 cyfry otrzymywanej będzie to 1 bajt bufora ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2018, o 19:39 
Offline
Nowy

Dołączył(a): 16 cze 2014
Posty: 21
Lokalizacja: Wrocław
Pomógł: 3

Jest tak jak piszesz. Bufor w tym wypadku przechowuje po prostu znaki (każdy znak podanej liczby). Więc jeśli liczba odczytywana z żyroskopu (i wysyłana przez uart) jest np. z zakresu od -32768 do 32767 to w najgorszym wypadku rozmiar bufora powinien wynosić 6 bo -32768 ma 6 znaków.


@down
Oczywiście zapomniałem o \0 :D



Ostatnio edytowano 11 lut 2018, o 22:18 przez Maly, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2018, o 20:55 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2606
Pomógł: 129

A \0?



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 0 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