Atmega8 licznik impulsów

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
smyku22
-
Posty: 2
Rejestracja: 29 paź 2006, 13:03
Lokalizacja: Wrocław/Tomaszów Maz.

Atmega8 licznik impulsów

Post autor: smyku22 » 29 paź 2006, 16:58

Witam!

Od niedawna zajmuje się programowaniem mikroprocesorów. Chicałbym napisać program do pomiaru niewielkich częstotoliwości (rzędu kHz) z wykorzystaniem liczników i timerów. Widziałem już kilka kodów źródłowych, ale wszystkie napisane w nieznanym mi języku (bascomie). Ja swoje programy piszę w języku C. Ma ktoś może taki program (chodzi mi o kod źródłowy) oraz jakieś materiały dotyczące rozkazów w języku C dotyczących timerów i liczników?

Pozdrawiam!!!

cyber
-
Posty: 12
Rejestracja: 24 lip 2005, 11:14

Post autor: cyber » 29 paź 2006, 21:45

Podstawowe pytanie: jakiego kompilatora używasz?

smyku22
-
Posty: 2
Rejestracja: 29 paź 2006, 13:03
Lokalizacja: Wrocław/Tomaszów Maz.

Post autor: smyku22 » 30 paź 2006, 10:50

Używam kompilatora WinAvr.
W jaki sposób mam zrobić, ażeby licznik zliczał impulsy z konkretnego pinu w porcie, a nie z całego portu (czyli nie PORTB tyko PB1)?

Awatar użytkownika
jejek
-
Posty: 63
Rejestracja: 12 lip 2005, 8:16
Lokalizacja: Będzin
Kontakt:

Post autor: jejek » 30 paź 2006, 11:26

Ja bym użył przerwania zewnętrznego do zwiększania licznika impulsów (nóżka oznaczona INT0 albo INT1) a na przerwaniu timera dzieliłbym ilość impulsów przez czas, co da mi częstotliwość. Oczywiście trzeba jeszcze wyzerować licznik impulsów i uruchomić ponownie timer. Potrzebne są dwa przerwania a w programie głównym odczytujesz wartość zmiennej ustawianej w przerwaniu timera zawierającej częstotliwość.

Nie mam w robocie kompilatora to nie poratuję listingiem.

Jejek

Awatar użytkownika
Aro
Użytkownik
Posty: 677
Rejestracja: 30 paź 2006, 18:49
Lokalizacja: Świerczyniec | Wrocław
Kontakt:

Post autor: Aro » 31 paź 2006, 13:30

Programowanie w C wiele nie różni się od asemblera. Nie lepiej zacząc programowac w Bascomie? To wcale nie takie trudne.

WREALCON
-
Posty: 17
Rejestracja: 30 sie 2006, 21:44
Lokalizacja: Gliwice

Post autor: WREALCON » 31 paź 2006, 17:22

a jakie sa zalety Bascom'a nad C ??

ZbeeGin

Post autor: ZbeeGin » 31 paź 2006, 22:05

a jakie sa zalety Bascom'a nad C ??
To zależy dla kogo. Dla początkujących rzecz oczywista, jest prawie wszystko! Większość rzeczy dotyczących obsługi urządzeń zewnętrznych załatwia się jednym bądź dwoma poleceniami. Składnia jest na tyle prosta i przy odrobinie chęci w kwestii wcięć (PAMIĘTAJCIE O TYM!) taki program jest bardzo czytelny - tak jakby czytało się tekst z książki. "Stale" rozwijane środowisko i banalnie prosty zintegrowany programator. Dosłownie prostszego rozwiązania kwestii programowania i ustawiania bitów fuse nie widziałem. I szczerze mówiąc dziwię się, że niektórym udaje się tym programatorem zablokować procesor. :mrgreen: Symulator, to już kwestia dyskusyjna. Wolę czasami jak robi to AVR Studio, choć czytelne i proste kontrolki portów, lcd, adc, klawiatury matrycowej i terminal są rzeczami, które są na "plus" tego symulatora. Niestety czasami nie daje on pełnej kontroli nad wykonywanym kodem, dlatego w takich przypadkach wsparcie AVR Studio będzie koniecznością.

Dla kontrastu i dla zaawansowanych wspomnę, iż często przeszkodą jest rozwlekłość kodu jaki produkuje BASCOM. Prawie "zero" optymalizacji. Sam zresztą zaglądałem w biblioteki i wynikowe programy i... kod wygląda tak jak murek z cegieł. Cegła na cegle, plus odrobina zaprawy by się trzymały razem. Bascom kontroluje prawie wszystko, wstawki w asm muszą być pisane tak, aby nie zakłócić programu w Bascom Basic-u. Zatem rejestry na stos, poużywać i zdjąć ze stosu. Jeśli chciałoby się użyć licznika we wstawce to raczej tego lepiej nie robić, bo nigdy nie wiadomo na co będzie ten licznik potrzebny poleceniom Bascom Basic-a.


Oczywiście jest jeszcze sporo do opisania w tej kwestii, ale myślę, że wymieniłem to co najważniejsze.

ODPOWIEDZ