atmega8

Jan 08, 2006 13 Replies

Mam kilka pytanek...



Mam sobie atmege8 taktowan± kwarcem wewnetrznym 1Mhz.


  1. Jak ustawic timer0 zeby sie wypelnial co 10ms? Jak poustawiac TCCR0, TCNT0, TIMSK i inne??

Potrzebuje po prostu wywolywac kod co 10ms - jak to szybko i bezbolesnie zrobic??;) [waitms itp odpada...]


  1. Jak zmienic czestotliwosc kwarca wewnetrznego (podobno mozna ja ustawic nawet na 8Mhz)



Pawe³



Cześć

Ad 1 datasheet strona 70, wywoływanie kodu w przerwaniu

Ad 2 datasheet strona 28

U¿ytkownik "Krzysiek Kubicki" snipped-for-privacy@gazeta.plBeZTeGo napisa³ w wiadomo¶ci news:dprav9$jg$ snipped-for-privacy@news.onet.pl...

A mozna jakis przykladzik kodu (c) - bo tam nie ma przykladu...;(

Pawe³

Tego kodem nie robisz tylko zmieniasz programatorem.

Uzytkownik "AdelA" snipped-for-privacy@b.c napisal w wiadomosci news:dprh72$2ii$ snipped-for-privacy@atlantis.news.tpi.pl...

A da sie to jakos pakietem winavr zrobic (averdude?)??

A co do pkt 1...? na prawde przydal by sie kawalek kodu bo nie kumam tego do konca ;)

Pawel

Użytkownik sikurasaka napisał:

A dataszit nie wystarcza? przecież tam jest wszystko opisane. Musisz ustawić odpowiedni podział timera przy odpowiednim zegarze i to wszystko. to nie jest nawet kawałek kodu. Przy odpowiednim zegarze musisz wpisać odpowiednią cyfrę w odpowiedni rejestr timera. i koniec. Włączasz przerwanie i je obsługujesz. Zwróć tylko uwagę, żeby przerwanie nie trwało dłużej niż częstotliwość jego wywołania.

Właśnie, a co się stanie, jeśli tak będzie? Czy przerwanie w momencie obsługi przerwania spowoduje przerwanie tej obsługi i kolejne rozpoczęcie jego obsługi?

Nic sie nie stanie, przerwania nie przerwiesz, natomiast zostanie ono zgloszone po zakonczeniu obslugi bierzacego przerwania. Ale z czasem opoznienie bedzie narastac, az co ktores przerwanie wypadnie.

Do tego należy dodać, że program główny nie będzie miał zbyt wielkiego polotu :-).

Użytkownik T.M.F. napisał:

No chyba, że na początku obsługu przerwania będzie rozkaz sei

Pozdrawiam Grzegorz

No ale wtedy grozi przepelnienie stosu.

U¿ytkownik "sikurasaka" snipped-for-privacy@op.pl napisa³ w wiadomo¶ci news:dpr81r$nqs$ snipped-for-privacy@news.onet.pl...

A mam jeszcze jedno pytanie...

Napisalem program i windows podaje ze HEX ma 20KB. Odpalam averdude i tam mi podaje ze to tylko 6KB...

O co chodzi?;) [Rozmiar hexa to rozmiar normalny, a nie zajmowane miejsce na dysku...]

Pawe³

Windows widzi tylko rozmiar pliku. 6KB danych daje się zapisać w 384 liniach tekstu po 16 bajtów po 2 znaki hex na bajt plus 12 znaków plus CRLF na linię = 17664 bajty plus linia końcowa. Jeżeli w danych w pliku hex są nieciągłości, plik jest jeszcze dłuższy. Stąd te 20KB pliku może odpowiadać 6 KB danych. Popatrz w specyfikację formatu pliku Intel Hex to ci się wszystko rozjaśni.

Użytkownik T.M.F. napisał:

Jak w każdym systemie z przerwaniami wielopoziomowymi i podczas stosowania procedur rekurencyjnych ;-)

ATmega8 trochę tego stosu ma. Gorzej z np ATtiny15 gdzie jest miejsce na tylko cztery adresy powrotu.

Jeśli system jest dobrze zaprojektowany i nie dopuszczamy do sytuacji, że przerwania są zgłaszane częściej niż czas ich obsługi to wszystko będzie dobrze. W przeciwnym razie nawet jeśli stos się nie przepełni, to program główny nie bedzie miał okazji się wykonać :-)

Pozdrawiam Grzegorz

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required