Witam!
Zwracam się do Was z drobnym pytaniem. Generalnie to mój pierwszy projekt na nieco większą skalę więc całkiem możliwe, że o wielu podstawowych rzeczach mogę nie wiedzieć. Chciałbym, aby mikrokontroler (Atmega328P w Arduino Pro) pobierała przyspieszenia przez TWI oraz wysyłała je przez USART do modułu karty microSD OpenLog.
Spotkałem się z pewną trudnością (jak udało mi się ustalić) przy komunikacji TWI. W momencie jej nastąpienia program niejako się resetuje. Lepiej będzie wytłumaczyć na podstawie kodu:
Wynikowy plik .txt zawiera same kolumny, w których napisane jest "AccelX AccelY AccelZ". Błąd nie może być spowodowany komunikacją USART, gdyż specjalnie rozbiłem zapis tego na kilka komend - druga to enter, trzecia to cr. Po odblokowaniu przerwań następuje wywołanie dwóch funkcji związanych z akcelerometrem. Po ich przejściu do .txt powinno zapisać się "No dalej....
" lecz... nie zapisuje się. Dioda na OpenLogu miga co ok. 5 sekund (ma oznaczać zapisanie danej) prawdopodobnie z powodu delaya umieszczonego na początku maina.
Pisząc te funkcje do obsługi akcelerometru korzystałem z biblioteki TWI_Master dostarczonej przez Atmel . Jej dokumentacja jest w języku angielskim, toteż mogłem coś źle zrozumieć (darmowa, więc umieściłem ją w załączniku).
Plik Akcelerometr.h:
I funkcja z pliku Akcelerometr.c : (Druga jest baaaaardzo podobna)
Jeśli chodzi o plik TWI_Master.h oraz TWI_Master.c dodałem je w załączniku (również chyba nie naruszam praw autorskich) wraz z przykładowym main.c. W pierwszym z nich zmieniłem wartość dotyczącą prędkości transmisji na 100kHz.
Bardzo prosiłbym o pomoc. Nie mam pojęcia gdzie popełniłem błąd.
EDIT: Czy to możliwe, iż powodem może być zasilanie? Arduino Pro mam w wersji 3,3V, podczas gdy w schemacie (w załączniku) akcelerometru na linii CS jest napisane 5,0V?
Pozdrawiam,
Zwracam się do Was z drobnym pytaniem. Generalnie to mój pierwszy projekt na nieco większą skalę więc całkiem możliwe, że o wielu podstawowych rzeczach mogę nie wiedzieć. Chciałbym, aby mikrokontroler (Atmega328P w Arduino Pro) pobierała przyspieszenia przez TWI oraz wysyłała je przez USART do modułu karty microSD OpenLog.
Spotkałem się z pewną trudnością (jak udało mi się ustalić) przy komunikacji TWI. W momencie jej nastąpienia program niejako się resetuje. Lepiej będzie wytłumaczyć na podstawie kodu:
Kod: C / C++
Wynikowy plik .txt zawiera same kolumny, w których napisane jest "AccelX AccelY AccelZ". Błąd nie może być spowodowany komunikacją USART, gdyż specjalnie rozbiłem zapis tego na kilka komend - druga to enter, trzecia to cr. Po odblokowaniu przerwań następuje wywołanie dwóch funkcji związanych z akcelerometrem. Po ich przejściu do .txt powinno zapisać się "No dalej....
Pisząc te funkcje do obsługi akcelerometru korzystałem z biblioteki TWI_Master dostarczonej przez Atmel . Jej dokumentacja jest w języku angielskim, toteż mogłem coś źle zrozumieć (darmowa, więc umieściłem ją w załączniku).
Plik Akcelerometr.h:
Kod: C / C++
I funkcja z pliku Akcelerometr.c : (Druga jest baaaaardzo podobna)
Kod: C / C++
Jeśli chodzi o plik TWI_Master.h oraz TWI_Master.c dodałem je w załączniku (również chyba nie naruszam praw autorskich) wraz z przykładowym main.c. W pierwszym z nich zmieniłem wartość dotyczącą prędkości transmisji na 100kHz.
Bardzo prosiłbym o pomoc. Nie mam pojęcia gdzie popełniłem błąd.
EDIT: Czy to możliwe, iż powodem może być zasilanie? Arduino Pro mam w wersji 3,3V, podczas gdy w schemacie (w załączniku) akcelerometru na linii CS jest napisane 5,0V?
Pozdrawiam,
