Bascom, częstotliwość zegara, preskaler i przerwania

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
Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Bascom, częstotliwość zegara, preskaler i przerwania

Post autor: M@ciej » 15 lut 2009, 15:34

Witam serdecznie :)

Już jakiś czas programuję w Bascomie i nadal mam kłopoty z obliczeniem czasów trwania impulsów i przerwań w zależności od ustawionego zegara taktujacego procek. Czy zna ktoś jakąś stronę, gdzie byłoby to dobrze opisane?

Z góry dziękuję za podpowiedzi :)

Awatar użytkownika
RcTomek
Moderator
Posty: 243
Rejestracja: 27 wrz 2007, 21:15
Lokalizacja: Głogów / Wrocław

Post autor: RcTomek » 15 lut 2009, 15:46

Wszystko najlepiej opisane jest w kartach katalogowych Atmela. Nie mówię tego złośliwie; Atmel naprawdę bardzo przystępnie opisuje architekturę oraz działanie swoich podzespołów.

Najlepiej jest przeliczyć częstotliwość taktowania na okres, następnie przemnożyć przez wartość podziału oraz zadaną pojemność licznika. W ten sposób otrzymamy długość [czas] zliczania np. timera.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 15 lut 2009, 16:15

No nie do końca się zgodze z kolegą że Atmel ma takie wzorowe noty katalogowe. To zależy jaki procek, starsze faktycznie są bardzo dobrze i jasno opisywane w nich, ale nowsze to już raczej wertowanie stron i setki odnośników do nich, a okazuje się często że i tak co szukamy jest w jakieś osobnej erracie czy nocie aplikacyjnej. Wiem co przeszedłem z ATTINY 45 , nota do tego procesora to koszmar. Z drugiej strony w przypadku TINY BASCOM też strasznie kuleje i jest po ograniczany, właściwie to ZERO wsparcia.

Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Post autor: M@ciej » 15 lut 2009, 17:19

Mi chodziło o zrobienie licznika impulsów oraz prostego miernika częstotliwości na Atmedze16 lub 32 i chciałbym wiedzieć, jak to wygląda przy częstotliwości taktowania 1,2,4,8 i 16 MHz. Jak ustawić preskaler i jaką wartość wpisać wstępnie do licznika TimerX.Przydałoby się to zebrać w jedno miejsce,nawet dla potomnych.

Ja po prostu się w tym gubię :(

[ Dodano: 2009-02-15, 18:21 ]
do Ddevil:

Co to jest ta pojemność licznika,bo nie kojarzę?

Awatar użytkownika
RcTomek
Moderator
Posty: 243
Rejestracja: 27 wrz 2007, 21:15
Lokalizacja: Głogów / Wrocław

Post autor: RcTomek » 15 lut 2009, 18:52

kayron pisze:No nie do końca się zgodze z kolegą że Atmel ma takie wzorowe noty katalogowe. To zależy jaki procek, starsze faktycznie są bardzo dobrze i jasno opisywane w nich, ale nowsze to już raczej wertowanie stron i setki odnośników do nich, a okazuje się często że i tak co szukamy jest w jakieś osobnej erracie czy nocie aplikacyjnej. Wiem co przeszedłem z ATTINY 45 , nota do tego procesora to koszmar. Z drugiej strony w przypadku TINY BASCOM też strasznie kuleje i jest po ograniczany, właściwie to ZERO wsparcia.
Nowe (np. m162, m88) też są dobrze opisane. Spis treści jest rozwijaną listą podzieloną tematycznie. Bynajmniej ja potrafię w miarę szybko znaleźć potrzebne informacje.
M@ciej pisze:Mi chodziło o zrobienie licznika impulsów oraz prostego miernika częstotliwości na Atmedze16 lub 32 i chciałbym wiedzieć, jak to wygląda przy częstotliwości taktowania 1,2,4,8 i 16 MHz. Jak ustawić preskaler i jaką wartość wpisać wstępnie do licznika TimerX.Przydałoby się to zebrać w jedno miejsce,nawet dla potomnych.
W takim razie powinienieś jeden Timer skonfigurować jako licznik impulsów podawanych na pin Tx (np. T0, T1; nie mylić z TxD ;)). Drugi natomiast powinien generować podstawę czasu według której będzie można obliczyć mierzoną częstotliwość.
Głównie chodzi tu o konfigurację bitów CSx2...0 w rejestrach TCCRxn.
Licznik impulsów:
CSx2...0 = 110 - końcówka Tx reaguje na zbocze opadające
CSx2...0 = 111 - ------------------||----------------- narastające

Podstawa czasu - konfiguracja np. Timera0, aby co 10ms wywoływał przerwanie sprawdzające ilość zliczonych impulsów:
przykładowo dla kwarcu 8MHz preskaler ustawiamy na 1024 i skracamy cykl zliczania do 78. W ten sposób uzyskamy przerwanie co niecałe 10ms ((8MHz^-1)*1024*78~=10ms). Dla podanych przez Ciebie wartości kwarców trudno dobrać 'okrągłe' wartości. Do odmierzania czasu najlepszy jest kwarc zegarkowy 37.768kHz, który przy podziale prze 64, bez skracania cyklu licznika, da przerwanie co 0.5s.

P.S. Pojemność licznika = maksymalna wartość, jaką możemy do niego wpisać. Dla 8-bitowych 0..255 (2^8), 16-bitowych 0..65535 (2^16)
Ostatnio zmieniony 15 lut 2009, 18:55 przez RcTomek, łącznie zmieniany 3 razy.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 15 lut 2009, 18:53

Pojemność licznika to maksymalna liczba do jakiej może zliczać. Np licznik 8 bitowy, może zliczać do 255 a dla 16 bitowego to 65768. tak więc w pierwszym przypadku po resecie licznika, możesz zliczyć 255 impulsów, po czym następuje jego restart.
PS. Ani Mega 162, ani M88 nie są nowymi procesorami, i ich noty są czytelne. Ale poczytaj sobie note takiej wspomnianej TINY 45.

Awatar użytkownika
RcTomek
Moderator
Posty: 243
Rejestracja: 27 wrz 2007, 21:15
Lokalizacja: Głogów / Wrocław

Post autor: RcTomek » 15 lut 2009, 19:09

kayron pisze:PS. Ani Mega 162, ani M88 nie są nowymi procesorami, i ich noty są czytelne. Ale poczytaj sobie note takiej wspomnianej TINY 45.
Nie wiem co Cię razi w nocie tn45 - 192 strony, info jak w każdej innej. Seria Xmega albo nawet ARM'y też są opisane podobnie do starych AVRów... Starczy, bo offtopic się robi.

Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Post autor: M@ciej » 15 lut 2009, 19:23

Teraz już znacznie jaśniej. Czyli jest wzór:

t[ms]=(1/fz)*preskaler*x, gdzie X jest dopełnieniem licznika, czyli tą wartością wpisywaną wstępnie.


Nie bardzo rozumiem jeszcze z ta podstawą czasu, ale chyba chodzi o zliczenie ilości impulsów w danym interwale podstawy czasu,tak?

Awatar użytkownika
RcTomek
Moderator
Posty: 243
Rejestracja: 27 wrz 2007, 21:15
Lokalizacja: Głogów / Wrocław

Post autor: RcTomek » 15 lut 2009, 19:51

M@ciej pisze:Nie bardzo rozumiem jeszcze z ta podstawą czasu, ale chyba chodzi o zliczenie ilości impulsów w danym interwale podstawy czasu,tak?
Dokładnie tak.

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 16 lut 2009, 7:05

Ja chciałem tylko dodać jeszcze, że wszystkie obliczenia bedą błędne jeśli nie ustawimy poprawnych wartości w FUSEBIT ( źródło przebiegu, podział itp).

Awatar użytkownika
RcTomek
Moderator
Posty: 243
Rejestracja: 27 wrz 2007, 21:15
Lokalizacja: Głogów / Wrocław

Post autor: RcTomek » 16 lut 2009, 13:50

Trafna uwaga, całkiem zapomniałem o fusach :oops:

ODPOWIEDZ