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



Teraz jest 7 lut 2026, o 22:20


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 29 gru 2014, o 00:00 
Offline
Użytkownik

Dołączył(a): 27 lut 2013
Posty: 230
Pomógł: 4

Witam wszystkich serdecznie.

Mam problem który mnie dręczy od kilku dni. Rozchodzi się o komunikację po kablu między Atmegą 16 a Terminalem PuTTY.

Napisałem "prosty" program który sprawdza jaki klawisz został wciśnięty na klawiaturze PC i gdy jest to "1" to zwiększa zmienną "a" i wyświetla jej wartość.

Opis problemu:

Przy wciskaniu klawisza "1" raz za razem co jakiś czas ale nieregularnie resetuje się procesor. Wnioskuje to po tym że wyświetla się napis "Start" na terminalu, który jest przed pętla "while(1)" .

Obrazek


Dane techniczne:
Atmega 16 na zestawie EvB 4.3 firmy AND-TECH
Kwarc zewnętrzny 16 Mhz
zestaw jest wyposażony w układ FTDI FT232RL
do procesora nie ma nic więcej podłączone chodzi tylko o czystą komunikacje.
Zasilanie z USB lub z 7805 - sytuacja ta sama
Prędkość transmisji też właściwe nie ma znaczenia może da się zauważyć że przy wyższych prędkościach jak by rest występował częściej. Ale jest to bardzo losowa sytuacja.

UBRR obliczam według tego poradnika:
http://mirekk36.blogspot.com/2013/01/rs232-ubrr-jak-prawidowo-obliczac-trick.html

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


Wykorzystuję bibliotekę z niebieskiej książki (lekcja 07) zmieniłem tylko wzór na ten co wyżej.

plik main.c 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.


Bardzo proszę o pomoc w tym problemie pewnie jakiś babol w kodzie posiadam niebieską książkę przeczytałem dział od rs kilka razy ale nie mogę wychwycić problemu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 gru 2014, o 01:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

A czy kolega wyłączył WATCHDOG ?

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 gru 2014, o 01:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Niepotrzebnie odblokowane przerwania (sei()) mogą powodować takie problemy, ponieważ nie ma funkcji do obsługi przerwań odbioru/nadawania.

Można dodać:

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: 29 gru 2014, o 16:43 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

@atmel biblioteka mk_uart.c używa przerwań do odbioru i nadawania tak, więc trzeba włączyć przerwania.

proponuję zwolnić trochę obieg pętli głównej odczytującej zmienną c ( wstawić testowo nielubiany np. _delay_ms(300) )


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 gru 2014, o 16:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Nie miałem styczności z Mirkowymi bibliotekami, dlatego przepraszam za nieświadome wprowadzanie w błąd :oops:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 gru 2014, o 21:55 
Offline
Użytkownik

Dołączył(a): 27 lut 2013
Posty: 230
Pomógł: 4

Cytuj:
A czy kolega wyłączył WATCHDOG ?


tak wyłączyłem według tego poradnika: http://mirekk36.blogspot.com/2012/10/watchdog-avr-prostsze-niz-myslisz.html

ale to nic nie zmieniło

Cytuj:
proponuję zwolnić trochę obieg pętli głównej odczytującej zmienną c ( wstawić testowo nielubiany np. _delay_ms(300) )


to już pomaga sporo bo naprawdę bardzo rzadko pojawia się ten problem ale nadal potrafi się pojawić.

Rozbiłem kod na dwa, wysyłałem cały czas zmienną powiększaną w każdym obiegu pętli a linijki odpowiedzialne za odbieranie dany z PC zakomentowałem, nie wstawiałem żadnego delaya i wszystko działa bez żadnego resetu.

Potem zmieniłem kod na odbieranie danych z terminala ale już nic nie wysyłałem do niego, gdy odebrałem "1" zmieniałem stan diody na przeciwny. Przed pętlą główną zapalam inną diodę która sygnalizuje mi reset procka. I w tej sytuacji jest problem wstawienie delaya pomaga widać poprawę od 50 ms ale cały czas potrafi się zresetować nawet jak delay wynosi 500 ms

------------------------ [ Dodano po: 1 minucie ]

atmel napisał(a):
Nie miałem styczności z Mirkowymi bibliotekami, dlatego przepraszam za nieświadome wprowadzanie w błąd :oops:


Spoko nie ma za co przepraszać każda sugestia jest bardzo cenna ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 sty 2015, o 21:08 
Offline
Użytkownik

Dołączył(a): 27 lut 2013
Posty: 230
Pomógł: 4

Sytuacja rozwiązana

Problem polegał na tym że, ja wrzucałem delaya w funkcje warunkową if i to nie do końca działało. Wystarczyło dać delaya do pętli głównej i to tylko 1 ms i wszystko działa jak należy dzięki jeszcze raz za sugestie, ;)

Pozdrawiam w nowym roku



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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO