Miganie diody wywołane przerwaniem timera.

Apr 10, 2006 2 Replies

Witam. Ucze programować się w bascomie i zachciało mi się zrobić miganie diody które będzie wywołane przerwaniem Timera1 poczytałem i wydłubałem taki program:



Config Portb = &B11111111 ' cały port B jako wyjście Portb = &B00000000 Config Portd = &B1111100 Portd = &B111111



Config Timer1 = Timer , Prescale = 64



Enable Interrupts Enable Timer1



Timer1 = 125



On Timer1 Label1 Nosave



Do Loop


Label1:



Portb.0 = 1 Waitms 100 Portb.0 = 0 Waitms 100



Return



Jak powinien wyglądać poprawnie bo raczej ten coś nie bardzo chce działac...



Z góry dzięki za pomoc



A jaki masz kwarc?? Bo jak coś w stylu 1MHz, a procek zapewne AVR (bo tego też nie podałeś!!) to przerwanie zostanie zgłoszone po około 16ms od startu :D... . No chyba, że ten Timer jest 16bit, to już lepiej... ale to musiałbyś napisać o jaki procek chodzi

Skracasz cykl Timera?? Hmmm... no są dwa wyjścia - dla Timera 8-bit skracasz o połowę czyli już masz 8ms... a dla Timera 16-bit to skrócenie jest nieznaczne :/

Czemu NoSave?? Poki główna pętla jest pusta, to może to nie przeszkadzać, ale w przyszłości może przeszkadzać!! Uważaj na to!!

Jesteś pewny, że podpiąłeś LEDa do odpowiedniego pinu??

Ostatnia linijka jest zbędna!! Po wygaszeniu diody opóźnienie do kolejnego zapalenia wykona Timer!! Marnowanie czasu w przerwaniu to poważny błąd w przypadku większości (bardziej rozbudowanych) programów!

A sprawdzałeś w symulatorze programowym?? Generalnie napisz jaki to procek oraz co i jak działa!! I czy działało coś prostszego?? Spróbuj może zrobić program taki, który w pętli ma taki zestaw komend: Do portb.0=1 waitms 250 portb.0=0 waitms 250 Loop

Powinien migać diodą ale bez używania przerwań. Druga sprawa:

-zadeklarowałeś BASCOMowi jakiego kwarcu używasz?? Bo bez tego nie możesz użyć komendy waitms, gdyż czasy mogą być zupełnie inne od zamierzonych!!

-jestes pewny, że dobrze dobrałeś częstotliwość kwarcu i prescale?? choć w przypadku przykładowego programu dzięki obecności waitms powinno to i tak działać!!...

-nie pamiętam już za dużo z Bascoma... czy linia Enable Timer1 oznacza włączenie zegara, czy zezwolenie na przerwania?? bo MUSZISZ zezwolic na przerwanie z timera 1, a czy go musisz włączać czy nie - to nie pamiętam, sprawdź w katalogu, albo poszukaj jak to się robi w BASCOMie :)... chyba komenda START....

Pozdrawiam Konop

Ciach :-)

Więc tak mam procek ATTINY 2313 i kwarc 4Mhz przy dzieleniu przez 64 a później danie do timera1 = 125 powinno wg. mnie dać impuls co 2ms. Miganie diody led działa... pisałem pod ten procek już inne programy ale przerwania mi nie wychodzą.. jedyne co udało mi się z przerwań zrobić to przerwanie zewnętrzne poprzez int0 a z tym timerem to nie bardzo wiem jak zrobić przerwanie po przepełnieniu czyli jeżeli timer (akurat w tym przypadku) zliczy 125 impulsów... może ktoś by mi mógł napisać program który by działał?? A ja bym już z niego sobie załapał jak to robić... Z góry dziękuje za pomoc

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required