Kolizyjnosc przerwan Timera0 oraz Timera1 z poziomu BASCOMA

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
arusek
-
Posty: 12
Rejestracja: 26 lis 2004, 11:52

Kolizyjnosc przerwan Timera0 oraz Timera1 z poziomu BASCOMA

Post autor: arusek » 04 lis 2005, 21:56

Witam.
CZy jest ktos kto jest dobrze obeznany w obsludze przerwan z poziomu BASCOMA.
procek - ATMEGA8
Otoz moj problem polega na konflikcie tych dwoch przerwan.

Timer1 obsluguje mi odliczanie czasu np 100ms.
tzn po nastawionym czasie zalacza sie przekaznik poprzez podanie syg wysokiego na tranzystor.i ustawiana jest flaga zalczenia

Timer0 sluzy do podawania sygnalu prostokatnego o czasie 15us.
tzn po zalaczeniu przez Timer1 pinu sterujacego tranzystorem przekaznika.nastepuje zmaina syg na sterowanie tranzystrem syg prostokatnym w celu zmniejszenia poboru pradu przez przekaznik.

Po zlozeniu programu w calosc jakos te dwa przerwania komplikuja mi reszte programu.(programowanie czasu na 7seg,podglad itp)
jak obslugiwac timery aby oba poprawnie odmierzaly czasy i przerwania i sie nawzajem nie blokowaly?
Pozdrawiam
moj gg 5473355
meil Arusek(małpa)wp.pl
Stanowi to dla mnie bardzo powazny problem.Prosze o kontakt naprawde zorientowanych w temacie.
Z powazaniem
Arkadiusz G

Awatar użytkownika
Koppel
Użytkownik
Posty: 500
Rejestracja: 24 lip 2005, 18:05
Lokalizacja: Gliwice

Post autor: Koppel » 05 lis 2005, 11:26

Jaka jest częstotliwość zegara? Jeśli wywołujesz przerwanie co 15us, przy rezonatorze 4MHz będzieo ono się "odzywać" co 60cykli. Aby program wogóle miał szanse działać musisz zmieścić się w krótszym czasie z obsługą przerwania. Sensowne wydaje się poświęcenie na to max 30cykli. Jednak wtedy wykonywanie programu głównego będzie 2x wolniejsze niż w chwili gdy przerwanie będzie wyłączone.
Optymalizacja w BASCOMie to sprawa całkowicie mi obca. Mogę polecić jedynie dwa rozwiązania:
1. Napisanie procedury w asemblerze (pamiętać o NOSAVE i samemu zająć się zapisaniem potrzebnych rejestrów).
2. Wykorzystanie sprzętowego PWM - wtedy obsługa przerwania wogóle jest zbędna

arusek
-
Posty: 12
Rejestracja: 26 lis 2004, 11:52

Post autor: arusek » 06 lis 2005, 13:10

witam.
dzieki za odp.
Z tym pwm to dobry pomysl ale timer1 uzywam do odliczania 100ms. i timert0 nie obsluguje pwm.
a jezeli bym chcial przerzucic odmierzanie czasu 100ms na timera0 to czy osiagne taka sama dokladnosc w odmierzaniu czasu?

Awatar użytkownika
Koppel
Użytkownik
Posty: 500
Rejestracja: 24 lip 2005, 18:05
Lokalizacja: Gliwice

Post autor: Koppel » 06 lis 2005, 13:54

Pytanie zbyt ogólne. Jaka jest częstotliwość kwarcu? Dopiero znając jej wartość można odpowiedzieć na pytanie co się da a czego nie da zrobić dokładnie na timerach.
Proszę zwrócić uwagę na to, że istnieje jeszcze timer2 ;]

ODPOWIEDZ