Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

licznik czasu w ms na atmedze16

szpulek
-
-
Posty:15
Rejestracja:6 maja 2004, o 15:55
Lokalizacja:Gliwice
Kontaktowanie:
licznik czasu w ms na atmedze16

Postautor: szpulek » 26 kwie 2005, o 00:08

Witam,
od wczoraj usiluje napisac program korzystajacy z 16bitowego licznika w atmedze16, ktory dzielac zewnetrzny kwarc przez 1024 da mi 1milisekunde, a pozniej te milisekundy bede mogl sobie spokojnie zliczac..

widze to tak:

$crystal=7372800

Dim Czas As Long

Config Timer1 = Counter, Compare A = Set, Prescale = 1024
Compare1a = 7200 '7372800/1024 => 7200 czyli jedna milisekunda

Set Timsk.4
Set Timsk.0

Enable Interrupts

On Compare1a inkrementuj

Do
'
Loop

inkrementuj:
incr Czas
return

No i niestety nie umiem tego doprowadzic do dzialania, z przerwan jestem cienki jak barszcz.. Chcialbym miec tez mozliwosc kasowania tego licznika..
Czy jakas dobra dusza jest mi w stanie pomoc? Z gory bardzo dziekuje.

Pozdrawiam, szpulek.

Czajnik
-
-
Posty:264
Rejestracja:17 cze 2004, o 15:40
Lokalizacja:Kraków
Kontaktowanie:

Postautor: Czajnik » 26 kwie 2005, o 07:05

nie wykozystuj rejestru compare tylko ustaw normalne przerwanie po przepełnieniu a na poczatku kazdego przerwania zapisz do licznika wartosc max - ilosc impulsó ktore chcesz zliczyc czyli 655xx (nie pamietam:)) - 7200

szpulek
-
-
Posty:15
Rejestracja:6 maja 2004, o 15:55
Lokalizacja:Gliwice
Kontaktowanie:

Postautor: szpulek » 26 kwie 2005, o 08:52

Witam,
dlatego uzywam tutaj tego comapare, gdyz oprocz tego czasu bede mial jeszcze kilka operacji, ktore moga spowodowac przepelnienie, wiec musze miec to zrobione wlasnie w ten sposob..
wiem, ze da sie to tak zrobic, ale na podstawie helpa z bascoma nie umiem sobie z tym poradzic..
czy ktos to rozwiazal w taki sposob?

chcialbym, zeby to dzialalo tak, w compare ustawilem sobie liczbe, wynikajaca z kwarcu i dzielnika 1024, jezeli licznik osiagnie taka wartosc ma sie wyzerowac oraz urochomic ma wygenereowac, ktore zliczy mi wystapienie tych przerwan, czyli milisekund..

dobrze rozumuje?

pzdr, szpulek

Czajnik
-
-
Posty:264
Rejestracja:17 cze 2004, o 15:40
Lokalizacja:Kraków
Kontaktowanie:

Postautor: Czajnik » 27 kwie 2005, o 12:48

byc moze faktycznie uzywasz tego ukladu do jakiegos bardzo specyficznego zadania i musisz miec compare ale wydaje mi sei ze nie ma roznicy jak to zrobisz... bo prezciez zadna roznica czy bedzeisz zliczal od 0 do 7200 czy od (65536 - 7200) do 0 i czy przerwanie pygeneruje prezpełnienie czy rejest compare... sprobuj.... ja nigdy compare nie uzywalem ale opisany byl w ktoryms z ostatnich edw w kursie oslej łączki to tam poszukaj

szpulek
-
-
Posty:15
Rejestracja:6 maja 2004, o 15:55
Lokalizacja:Gliwice
Kontaktowanie:

Postautor: szpulek » 3 maja 2005, o 01:02

witam,
juz sobie z tym poradzilem, gdyby ktos potrzebowal:



dim czas as long

On Compare1a Inkrementuj_licznik_1ms 'przerwanie dla odliczenia 1ms w timer1
Compare1a = 7373 'zawartość licznika dla odliczenia 1ms przy kwarcu 7372800 Hz (zliczanie od zera)
Tccr1b = &B00001001 'ustawienie rejestru niezbędne do poprawnej pracy licznika: włącz Timer1 prescale 1 , zerowanie przy zrównaniu z CompareA
Enable Compare1a 'włączamy obsługę przerwania licznika

Enable Interrupts

do
loop

Inkrementuj_licznik_1ms:
'tutaj wejdzie co 1ms
incr czas
Return



pzdr, szpulek

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 29 gości