Miganie diody wywołane przerwaniem timera.



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Jarek" <jarek54129_at_nospam_poczta.fm>
Subject: Miganie diody wywołane przerwaniem timera.
Date: Mon, 10 Apr 2006 18:49:38 +0200


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



Poprzedni Następny
Wiadomość
Spis treści
From: "Konop" <konop13_at_nospam_gazeta.pl>
Subject: Re: Miganie diody wywołane przerwaniem timera.
Date: Tue, 11 Apr 2006 17:39:44 +0200


Config Portb = &B11111111 ' cały port B
jako wyjście
Portb = &B00000000
Config Portd = &B1111100
Portd = &B111111
Config Timer1 = Timer , Prescale = 64


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

Enable Interrupts
Enable Timer1
Timer1 = 125

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 :/

On Timer1 Label1 Nosave


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!!

Do
Loop
Label1:
Portb.0 = 1

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

Waitms 100
Portb.0 = 0
Waitms 100


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!

Return

Jak powinien wyglądać poprawnie bo raczej ten coś nie bardzo chce
działac... Z góry dzięki za pomoc

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




Poprzedni Następny
Wiadomość
Spis treści
From: "Jarek" <jarek54129_at_nospam_poczta.fm>
Subject: Re: Miganie diody wywołane przerwaniem timera.
Date: Tue, 11 Apr 2006 17:58:46 +0200


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