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



Teraz jest 8 lut 2026, o 00:27


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 14 sie 2015, o 20:01 
Offline
Nowy

Dołączył(a): 14 sie 2015
Posty: 3
Pomógł: 0

Witam.
Jako że programowania uczę się od miesiąca z niebieskiej książki to mam mały problem z rzeczą podstawową.
O tuż problem jest z przerwaniem z Timera0 z trybu CTC. Problem ten pojawił się przy okazji wykonywania ćwiczenia z "Multipleksowanie LED" na ATtiny2313. (4Mhz)
W moim mniemaniu ten prosty program powinien obsługiwać przerwanie. Z nosem w dokumentacji ustawiłem odpowiednio bity timera tak aby przerwanie z porównania odbywało 200 razy na sekundę - czyli miganie segmentu D na przemian z innymi.
Tymczasem sa zapalane jedynie segmenty A z głownej pętli, a przerwanie nie działa.
Pewnie to coś błahego ale już 2 dzień się s tym borykam ;/

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: 14 sie 2015, o 20:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2013
Posty: 119
Lokalizacja: Cinisi
Pomógł: 12

brakuje u Ciebie pętli while i program zaraz po resecie kończy swój żywot ;)

------------------------ [ Dodano po: 3 minutach ]

ps. poczytaj dobrze BB, jestem tam opisane, że każde przerwanie musi się wykonać jak najszybciej, a u Ciebie trwa ono sekundę. I teraz popatrz, chcesz wykonywac 200 razy na sekundę przerwanie a ono samo w sobie trwa około 1 sekundy, więc trochę problem tutaj jest. Pozdrawiam

_________________
sig off :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sie 2015, o 21:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 gru 2011
Posty: 204
Lokalizacja: Boguchwała
Pomógł: 3

rafi3812 napisał(a):
Jako że programowania uczę się od miesiąca z niebieskiej książki to mam mały problem z rzeczą podstawową.

Ja nadal ćwiczę BB, testuję i przerabiam przykłady już 4 lata. Wszystkie lekcje testowałem i przystosowywałem je do różnych procesorów AVR.
Ćwiczenia wykonuję na zestawie ATB i na stykówkach. Wszystko śmiga jak książka pisze. Jak robisz takie błędy, że zapominasz o głównej pętli "while" w programie.....to za szybko idziesz do przodu. Nie przeskakuj tematów w tej książce, dobrze jest poćwiczyć wszystko od początku do końca.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sie 2015, o 23:00 
Offline
Nowy

Dołączył(a): 14 sie 2015
Posty: 3
Pomógł: 0

Faktycznie babol i faktycznie może za szybko chce się tego nauczyć ;/
Nie mniej jednak zastosowałem się do uwag i niestety nie działa. seg.A sie pali a seg.G miga natomiast seg.D z procedury przerwania nie reaguje.

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


jeśli jest tu kolejny głupi błąd zrobiony z rozpędu to muszę przyhamować trochę, a już mnie to wciągnęło :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 sie 2015, o 09:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2015
Posty: 310
Pomógł: 18

Tutaj niema błędu fizycznego! Odpowiedź na pytanie - co to jest przerwanie? - to impuls Fcpu (tik) zdarzający się co 1/200Hz. Czy Ty zauważysz zmiany seg.D, gdy TOG dokonuje się co 1/100Hz [s]?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 sie 2015, o 15:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2013
Posty: 119
Lokalizacja: Cinisi
Pomógł: 12

Zgadzam się z 1Yokoon, aby preskaler był 256 to ma być ustawiony tylko bit CS02, wszystko jest na stronie 77 tutaj http://www.atmel.com/Images/doc2543.pdf
Kolego rafi3812, program działa i to poprawnie, działa tak jak go napisałeś ;) tutaj nie ma się czym zamartwiać tylko teraz dobrze się przypatrz na to co stworzyłeś i jak to będzie działać. W tym momencie Twój preskaler ma wartość 64 do tego podział na 78, więc 4Mhz/64/76=~801Hz i z taką częstotliwością się wykonuje Twoje przerwanie więc jedynie co możesz teraz zauważyć to mniejsza jasność segmentu D.

_________________
sig off :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 sie 2015, o 18:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2013
Posty: 119
Lokalizacja: Cinisi
Pomógł: 12

Racja, przeoczyłem i zamiast patrzeć na CS01 i CS02 sprawdziłem na CS00 i CS01. Jednak po nocce ciężej się funkcjonuje ;)

_________________
sig off :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 sie 2015, o 22:46 
Offline
Nowy

Dołączył(a): 14 sie 2015
Posty: 3
Pomógł: 0

Wirnick napisał(a):
[...] Czy Ty zauważysz zmiany seg.D, gdy TOG dokonuje się co 1/100Hz [s]?
Fakt zmian nie zauważę ale jasność segmentu była by o polowe słabsza to już coś. Ale program pisany na szybko i w lekkiej frustracji ;)

Racja że ustawienia preskalera są złe-głupi błąd. Poprawiłem i działa tak jak sobie tego życzę.
Wielkie dzięki za pomoc w takiej błahej sprawie. Niestety ostatnio mam czas jedynie pod wieczór by programować i człowiek jest wstanie przeoczyć najoczywistsze rzeczy. Jeszcze muszę poprawić kod z ćwiczenia 3 z BB- trochę w nim namieszałem starając się odnaleźć przyczynę nie działania.
Tak czy siak wielkie dzięki :D ;)



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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