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



Teraz jest 30 wrz 2025, o 12:03


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 15 paź 2013, o 12:24 
Offline
Nowy

Dołączył(a): 03 kwi 2013
Posty: 7
Pomógł: 0

Witam, a więc po kolei... Mam płytkę Arduino Leonardo ale wykorzystuję ją wyłącznie jako platformę sprzętową dla Atmega32U4 z USB i programuję tradycyjnie tzn. avrgcc i najnowszy toolchain C. Arduinowego bootloadera zostawiłem i flash'uję ją przez kabelek USB.

Chciałem uruchomić na tej platformie przykład z blogu Pana Mirka - ENKODER AVR - callbacków ciąg dalszy cz.2. Musiałem zrobić małe zmiany przy podłączeniach pinów oraz obsłudze TIMERA (wszakże inny procek). No i niby działa... tzn sam enkoder i procedury jego obsługi działają perfekcyjnie ale tylko kiedy odłączę port USB od laptopa!
Jeżeli płytka jest podłączona do USB to dokładnie w momencie uruchomienia obsługi przerwań "sei();" program restartuje się (na LCD ponownie wyświetla się "start..."). Na to zachowanie nie ma wpływu sposób inicjalizacji timera - jeżeli wywalę uruchamianie funkcji "encoder_init()" to problem dalej występuje (restart następuje dokładnie w chwili wykonania polecenia sei();)

Macie jakieś pomysły, wskazówki co to może być? Bawię się tym prockiem od kilku dni dopiero i ta sytuacja jest dla mnie dość zaskakująca. Może coś w fusebitach? Nie zmieniałem ich - są takie jak defaultowo programują w Arduino...

P.S.
- restartuje się tylko program - nie załącza się bootloader (jakby to miało miejsce po naciśnięciu fizycznego reset)
- jeżeli zaraz po sei() wstawię cli() to nie ma restartu.
- przed chwilą sprawdziłem taki scenariusz: włączam układ bez podłączonego USB, uruchamia się, pięknie chodzi enkoder z przyciskiem. Po chwili podłączam wtyk USB - procek zaczyna resetować program. Wyłączam kabel - nic się nie zmienia - dalej resetuje.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 paź 2013, o 16:30 
Offline
Nowy

Dołączył(a): 03 kwi 2013
Posty: 7
Pomógł: 0

Układ mam podłączony do LCD więc mam taki jakby podgląd - powstawiałem sobie delay'e i ładnie widać że dokładnie w momencie sei() program zaczyna lecieć od nowa (inicjalizuje się lcd, wyświetla znowu napis powitalny itd).

Coś może być na rzeczy z tymi przerwaniami (od USB?) bo wstawiłem sobie do kodu takie oto linijki:

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


...mają za zadanie wyłączyć USB i faktycznie po tym zabiegu restarty ustają. Z tym że na razie robię to po omacku bo jeszcze zupełnie nie ogarniam tego USB. Np co konkretnie jest za te restarty odpowiedzialne? No ale w każdym razie miałoby to znaczyć że w Atmega32U4 należy pamiętać żeby coś pokonfigurować w rejestrach od USB przed włączeniem przerwań bo inaczej narażamy się na kłopoty? Byłoby to chyba trochę dziwne.

Jeżeli chodzi o operacje na rejestrach to w moim kodzie nie mam raczej nic specjalnego - jedynie lekko zmodyfikowana (na potrzeby Atmega32U4) obsługa timera

Kod:
TCCR0A = (1<<WGM01);               // tryb CTC
TCCR0B |= (1<<CS01)|(1<<CS00);         // prescaler 64
OCR0A = (uint8_t)(F_CPU / 64 / 1000 );           // 1ms  --> poprawka do VIDEO
TIMSK0 |= (1<<OCIE0A);


no i teraz dodałem tylko ten fragment wyłączający USB.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 paź 2013, o 23:06 
Offline
Nowy

Dołączył(a): 03 kwi 2013
Posty: 7
Pomógł: 0

Sprawdziłem rejestry i wgląda na to że bootloader faktycznie coś tam poprzestawiał. Wg datasheet defaultowo USB ma być wyłączone a w rejestrach jest dokładnie na odwrót czyli załączone. Więc już wszytko jasne. Dzięki za pomoc :)



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

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