Wewnętrzny oscylator RC jest mocno niedokładny. Z pewnościa musisz kupić zewnętrzny kwarc, ale na ATmedze8 32mhz raczej nie pociągniesz :P Bardziej zalecane jest jednak kupienie kwarcu zegarkowego 32.768 kHz i podłączenie pod piny TOSC1 i TOSC2 które wykorzystuje specjalnie dostosowany pod to Timer2 w trybie asynchronicznym. Wtedy uC można taktować...
W tym trybie timery są wyłączone - może działać tylko Timer 2 z zewnętrznym, kwarcem zegarkowym. Najpierw czytaj Datasheet, potem wymyślaj oprogramowanie... ;)
Witam serdecznie, chcę taktować timer Atmega8 zewnętrznym kwarcem zegarkowym, a sam uC taktować wewnętrznym oscylatorem RC. Tylko nie wiem jak mam skonfigurowac Atmega8 abz to osiagnac, pewnie trzeba cos w fusebitach zmienic, ale nie wiem co.. Prosze o pomoc. Pozdrawiam!
proponuję popularny PCF8583, do niego podłączamy np baterię 3 V jako podtrzymanie i tyle http://alfa.iele.polsl.gliwice.pl/elenot... pozdr KN
No tak, ale nie umożliwia zliczania zewnętrznych impulsów.
Nie korzystałem nigdy z trybu asynchronicznego, ale właśnie w tym, że jest on asynchroniczny wydaje mi się, że leży Twój problem. W szczególności myślę tutaj o dostępie do rejestrów timera w tym trybie. Poszukaj na ten temat informacji. Może tu coś znajdziesz: http://www.atmel.com/dyn/resources/prod_... Drobna rada: [syntax=c]//zamiast...
I dlatego właśnie zacznij od przerwania timera, np. coś ok. 100 Hz.
Bo nie tak się używa przerwań zewnętrznych. Można po pojawieniu się przerwania od zbocza narastającego wystartować timer, w przerwaniu zmienić na zbocze opadające i gdy pojawi się zbocze opadające zatrzymać timer, odczytać jego stan do zmiennej volatile wykasować i ponownie ustawić na zbocze narastające. Mozna też wykorzystać oba dostępne przerwania....
Jaką masz częstotliwość przerwań timera? Testowanie stanu przycisków powinno następować z częstotliwością rzędu 30..50 Hz jeśli pamiętasz tylko jeden stan wstecz. Jeśli masz większą częstotliwość, to albo testuj je w co którymś przerwaniu, albo wsuwaj stan do zmiennej i wykrywaj sekwencję stanów (bitów) np. 1110.
zastosuj atmega 88PA Faktycznie jest to dobre rozwiązanie. Bez zewnętrznych elementów, można wykorzystać watchdog timera. Dzięki.
Zły pomysł, zły kod. Użyj jednego timera w trybie zliczania impulsów zewnętrznych i podłącz wyjście wentylatora do jego wejścia. Drugi timer zaprogramuj na zgłaszanie przerwań co 1 sekundę (timer 0 tego nie potrafi), w procedurze przerwania odczytaj wartość licznika, wyzeruj licznik i wyświetl wartość. Nie jest to idealne rozwiązanie, ale o niebo lepsze...
Witam, chciałbym przy użyciu Atmega8 i zewnętrznego kwarcu odmierzać i zliczać setne części sekund, sekundę mogę łatwo wyłapać z timera1 według przykładowych obliczeń 4000000MHz / 256 = 15625 65536 - 15625 = 49911 lub 8000000Mhz / 256 = 31250 65536 - 31250 = 34286 Nie mam jednak pomysłu jak....... Z góry dziękuję za pomocne wypowiedzi. Aby odmierzac...
To dwa sygnały na timery jako liczniki a trzeci sygnał na przerwanie zewnętrzne. A trzeci timer jako zegar.
No to daj na zliczanie zewnętrznych impulsów timer2(?). Może po jakimś preskalerze- nie liczyłem. Timer jako counter.
Diody masz podpięte bezpośrednio pod porty ATmega? Jeśli tak to lepiej dołóż sobie oporniki aby nie spalić wyjść ATmegi. Bezpośrednio przy procku daj kondensator 100nF. Przed stabilizatorem np. 1000uF, a za stabilizatorem 100u (to i tak za dużo, ale lepiej więcej niż za mało). Zliczanie zrealizowałbym w taki sposób: - Odpalić któryś z wewnętrznych timerów...
Sorry, Wiesz ja to sie z tym bawie tylko i program pisze w bascomie metoda prob i bledow. Nie ma większego znaczenia w jakim środowisku programujesz (Basic albo C). Istotny jest koncept projektu i sposób rachunkowy, reszta to tylko inna forma zapisu programu. Wybrałeś za narzędzia: Timer1 i jeden z interruptów zewnętrznych. Zatem jest tez bez znaczenia...
prescale 256 miałem dlatego że najpierw używałem timer0 a później zmieniłem na 2 a nie zwróciłem uwagi że timer2 ma prescale =128. a ja to robiłem ładując do niego 128 wiec i tak liczył poprawnie. Ale w atmega8 , w 168 nie działa mi zewnętrzny kwarc który oczywiście jest podłączony
No dla mnie tym następnym krokiem był przerzutnik T :) Również polecam :) Potem, sugeruje proste przerwania zewnętrzne, timer (tu duze pole do popisu, mozna sobie zrobić na nim mruganie diody, przyciskami sterowac częstotliwość), potem sterować jasnością z PWM. Dalej proponuje pobawić sie wewnętrznym eepromem, przydaje sie w dalszej nauce, potem zewnętrzny...
Ja precyzyjne odmierzanie czasu realizuję na zewnętrznym rezonatorze 8Mhz na Timer 1 w trybie CTC i polecam ten sposób zamiast zabawy w te kwarce zegarkowe.
Teraz spróbuję ustawić RTC na zewnętrznym kwarcu. Zanim zamknę temat może ktoś zechciałby podpowiedzieć na co tutaj zwrócić uwagę? (Myślę że to nie odbiega od tytułu tematu) A konkretnie - jaki kwarc? przy okazji jeszcze ten link: Czas - odmierzanie
Bo jak ma działać? Widać kolega nie do końca rozumie mechanizm przerwań, skoro czeka na przerwanie INT0, a włącza przerwanie przepełnienia Timera0. Adresem przerwania przepełnienia Timera0 jest OVF0addr, a nie INT0addr. Przerwanie od INT0 wyzwalane jest ZEWNĘTRZNIE zboczem lub stanem na fizycznym wejściu INT0 mikrokontrolera, a nie Timerem. Skąd ten...
mam kondensatory przy kwarcu. Procek mi rusza ale tak jakby timer'y miczego nie zliczały bo mam na jednym z nich zegarek i nie działa.Wyświetla mi tylko na wyświetlaczu 00:00:00 i dalej nic. Ale jak tylko przełącze sie na wewnętrzny oscylator to już wszystko liczy i działa.
Witaj, No save spokojnie możesz użyć.... pod warunkiem, że nie korzystasz w obsłudze przerwania z instrukcji Bascoma bo jeśli tak to nie odkładając rejestrów na stos, zgubisz ich wartości i w najlepszym przypadku będą się działy różne rzeczy. Ja bym napisał wstawkę w asemblerze odkładając wcześniej na stos używane rejestry w tym SREG. Możesz też użyc...
Bo niestety muszę zegarek rozbierać No niestety w tym trybie nie uzyskasz stabilnej sekundy, tym bardziej, ze Bascom w obsłudze przerwania może robić zbędne bzdury i jeszcze nie raz ten zegarek będziesz rozbierał. Do konstrukcji czasomierza najbardziej się nadaje asynchroniczny licznik Timer2 w trybie CTC, taktowany specjalnym rezonatorem kwarcowym...
Obsługę przycisków też zrób w przerwaniu timera, jak radzi BlueDarco - nie ma sensu obsługa przerwania zewnętrznego, bo zniszczy Cię drganie styków...
Ciekawe, czytałem już te tematy. czy bez tego kwarca 32khz sie nie obejdzie? Jednak nie łapię tych timerów. Generalnie timer służy jako licznik przerwań :), wewnętrznych albo zewnętrznych na pinie TO, zewnętrzne przerwania widziane są z portu TO, a wewnętrzne przerwania generuje prescaler - wewnętrzny przerywacz "sterowany" kwarcem zewnętrznym lub...
Nie pamiętam, jak działa makro sleep_mode(); ale przecież przechodzisz do trybu uśpienia w przerwaniu od timera a jak wiadomo wejście w dowolną procedurę obsługi przerwania blokuje globalne zezwolenie na obsługę przerwań, wiec prawdopodobnie w chwili uśpienia skutecznie blokujesz także przerwanie zewnętrzne, przez co nie możesz później wzbudzić procesora...
(at)Maryush Przede wszystkim użyj nowszego AVRa, ma to kilka zalet, m.in.: - mniejszy pobór prądu w stanie cuzwania i uśpienia, - możliwość wybudzenia procesora przez watch doga, w efekcie znika potrzeba stosowania timera w trybie asynchronicznym, zewnętrznych kwarców, itd.
Wewnętrzny zegar jest na tyle mało dokładny, że aby można było nim coś zmierzyć, należało by ustalić jego dokładną częstotliwość porównując z jakimś wzorcem, po czym zapisać poprawkę do osccal albo uwzględnić to w czasie przepełnienia t1 - a i tak dokładność nie będzie duża ze względu na wachania częstotliwości. Warto poczytać w dokumentacji jaką dokładnie...
Przede wszystkim to zastanów się dlaczego do generowania nośnej usilnie chcesz pisać jakiś kod programu i obciążać tym program główny procesora, skoro można to zrobić CZYSTO sprzętowo za pomocą timera. Tylko nie Timera0 bo ATmega8 jest biedna w porównaniu do ATmegai88 gdyż timer0 nie posiada w niej trybu CTC. Tymczasem masz jeszcze timer2 i wystarczy...
Opis fusebitow - http://www.tkdami.net/~voytek/programy/p... (nacisnij na link "problemy" w menu) - ustawiałem wg. tego mojego AtMega8 i wszystko działało dobrze Informacje o programowaniu AtMegi - m.in. opisane jest użycie timerów: http://www.freepgs.com/robkry/?t=avrgcc
Ależ się męczysz z tym timerem... :) Poczytaj [url=http://stsystem.elektroda.eu/progra... o timerze 2, tutaj [url=http://stsystem.elektroda.eu/progra... obsłudze wyjść, oraz [url=http://stsystem.elektroda.eu/progra...
jak chcesz takie duze czestotliwości mieżyć to musisz użyć timera żeby liczył zewnętrzne impulsy, wtedy drógim timerem wyzwalasz przerwanie co określony czas (im dłuższy tym lepszy bo pomiar dokładniejszy) liczysz ile było ilmpusów z zewnątrz w okreslonym czasie. wydaje mi się że tą metodą dało by sie mieżyć nawet do 100Mhz ale jest jedno zalożenie...
Zamiast ICR1 powinieneś użyć np. OCR1A i przerwania TIMER1_COMPA_vect. Rejestr ICR1 służy do czegoś innego. Zapamiętuje wartość timera 1 na przykład w momencie zmiany stanu logicznego na pinie ICP1. Wykorzystuje się go np. do pomiaru czasu między zdarzeniami zewnętrznymi.
Gate i Mode w konfiguracji timera nie występuje w bascomie na AVR. Prawdopodobnie może to być sposób wyzwalania/ zliczania timera (wewnętrzne lub zewnętrzne) plus jakieś inne tryby pracy.
Mozesz zrobić zewnętrzny przełącznik na wejsciu T0 i liczyć obroty na zmianę, np. kończy 1 zaczyna 2 itd. w kółko. Silniki mają dużą bezwładnosć i błąd pomiaru będzie znikomy. Pozdr. N.
A ogólnie działa serwo na funkcji delay ? U mnie serwo kiedyś na takich czasach delay nie działało, dopiero jak dałem kilka małych delay to zaczęło chodzić. Lepiej odmierzać czas za pomocą Timera . http://www.robotyka.net.pl/category/arty... -opisane tu są zarówno Timery jak i przerwania zewnętrzne z przykładami, może pomoże.
W realu wyświetla sie 0 i nic wiecej. Zgodnie z moimi wyliczeniami 8000000 -taktowanie kwarcu dzielone przez 256 -Timer0 jest 8bitowy, dzielone jeszcze przez 256 - prescaler, zliczone raz na 122 razy daje ok 1s. Czy licze coś nie tak? Zresztą nie chodzi mi o czas a o samo działanie timera bo pilnie potrzebuje go do projektu. Przerwania zewnętrzne mi...
Musisz powyłączać wszystkie niepotrzebne bloki uK : - komparator - ADC - Brown-out Detector - Internal Voltage Reference - Watchdog Timer Musisz również "zdefiniować" stany na portach czyli włączyć im rezystory podciągające do VCC lub podciągnąć je zewnętrznie do VCC lub GND za pomocą zewnętrznych rezystorów.
Trudno wszystko opisać, bo poruszyłeś na raz sporo problemów. Do przechowywania danych w stosunkowo niewielkiej ilości dobrym rozwiązaniem są pamięci FRAM - one nie tracą zawartości po wyłączeniu, a ilość zapisów jest praktycznie dowolna. M8 oczywiście możesz wybudzać z timera, lub RTC, który posiada. Więc żadne elementy typu zewnętrzny RTC nie są potrzebne.
Witam Otóż mam taki dylemat ... Mam taki prosty programik robiący mi za licznik modulo 8. Samo liczenie odbywa się w przerwaniu timer'a ale to nie jest kwestia którą chce poruszyć. Po wywołaniu zewnętrznego przerwania, nie da się go przez czas paru/parunastu sekund wywołać. Czego to może być wina ? (pomijając że moja). Czy przypadkiem nie powinno to...
Teraz już dokładnie przeczytałem wszystko. Jak byś miał więcej artykułów dotyczących programowania AVR to jeszcze coś zapodaj na forum, albo na pw. W artykułach mowa była o zewnętrznym generatorze podłączonym do wejść TOSC1 i TOSC2. W ATmega8 jest też wejściem rezonatora kwarcowego. Jak zrobić żeby ten timer był sterowany z dowolnego wejścia mikroprocesora...
Zewnętrzne wejście danego licznika jest przypisane do jednego konkretnego pinu i nie ma możliwości jego zmiany... niestety... Pzdr. N.
Mam problem z napisaniem programu rozpoznającego stany w sieci. Na wejście INT0 procesora podpiąłem sygnał z sieci 1Wire. Chciałbym rozpoznać trzy stany w sieci: - reset (czyli ściągnięcie linii danych do 0 na 480us) - nadanie 0 - (czyli 10us stan niski, 80us stan wysoki) - nadanie 1 - (czyli 80us stan niski, 10us stan wysoki) 0 i 1 następują po sobie,...
Ja bym proponował na początek przerwanie zewnętrzne INT w którym liczysz impulsy, oraz przerwanie timera w trybie CTC co około 1s w której jak kolega (at)bochnio wspomniał będziesz zerować licznik. Kolejny krok to mniej więcej tak:[syntax=c]if(licznik > 6) POTRB |= (1<<PB0); // ustaw stan wysoki gdy przekroczy wartość else POTRB &= ~(1<<PB0);...
Ok, a jak to się będzie miało do samego programu napisanego na 1Mhz ? Nigdy jeszcze z zewnętrznym kwarcem do czynienia nie miałem. W jaki sposób należy programowo z niego skorzystać? Normalnie Timer2 jest taktowany z tegosamego zegara co microkontroller. Aby uzyskac taktowanie z rezonatora 'zegarkowego' podłączonego do pinów XTAL1/XTAL2, potrzebujesz...
Dzięki za odpowiedź:) Czy można prosić o jakiś przykład wiem o co chodzi tak mniej więcej ale nie potrafię tego napisać w bascom Ja myślałem że muszę uruchomić dwa timery i je połączyć. Ale tu masz rację że jeden timer uzależni od siebie jedno i drugie. No i najważniejsze jak oddzielić wypełnienie od częstotliwości bo na jednym timerze to może być trochę...
Właśnie co do DAC mam pytanie. Gdyż atmega8 sama w sobie ma tylko ADC a czy działa to w odwrotną stronę. Chcę aby atmega mi podawała poziom napięcia na wyjściu np aby sterować tranzystor ale nie Zatkany Nasycony tylko płynnie. Muszę mieć zewnętrzny przetowornik cyfrowo analogwy? Ja jestem na niskim poziomie dopiero poznałem dość znacznie timery i teraz...
Generalnie nie nazywałbym tego tematu zegarem czasu rzeczywistego. Atmega jest spoko, jeśli stosujesz Bascoma to masz jak zwykle problem z precyzyjnym wyliczeniem czasu i cykli procesora więc ... . 1. Albo praca na timerze i przerwaniu ... 2. Albo zewnętrzny RTC :) - jako samodzielny układ scalony :) ; W skrajnym przypadku ... , stosowanie Atmegi może...
Z tabelki wynika wyraźnie że obudzić można z Power Save tylko za pomocą Timera z dodatkowym kwarcem lub TWI lub INT'a zewnętrznego. Innej możliwości NIE MA. Bez dodawania elementów nie obudzisz procka z Power Save.
Proponuje instrukcje warunkowe :) Mogą one znajdować się w pętli :D W C to by była prosta instrukcja warunkow switch(x){}; ale w Bascomie to pewnie na if(warunek) than xxx PS Na atmedze da sie zrobić całkiem przyzwoity zegarek :) Tylko na timerze 16 bitowym :) I wystarczy dobry kwarc zewnętrzny i dobrze dobrane kondensatorki i poślizg zegara na miesiąc...
Mam takie pytania: 1. Czy jest jakaś możliwość realizacji komunikacji z DS18B20, która nie będzie uzależniona od delay-ów? 2. Czy własne napisanie delay-ów może mi w czymś pomóc? 3. Jeżeli chciałbym zrealizować coś bardziej skomplikowanego to powinienem "dołożyć" jeszcze jeden µC, żeby uniknąć niespodzianek? Miałoby się to wiązać z przerwaniami...
Stwierdzenie dotyczące RTC wynika z tego, że timer2 może pracować asynchronicznie z zewnętrznym kwarcem zegarowym. Można mu podać 32768Hz, t2 będzie takim zegarem (lub wynikającym z działania prescalera) taktowany - to jak wykorzystasz timer zależy od ciebie: możesz np ustawić go w trybie CTC przy prescalerze /128, wtedy będzie się przepełniał równo...
Drgania styków kontaktronu postaram się wyeliminować sprzętowo. Nie odpuszczaj, zrób to programowo, chociażby po to by się tego nauczyć na przyszłość. To jest proste. Weź nie żartuj. Nie da się tego zrobić rozsądnie przy wykorzystaniu przerwania zewnętrznego i timera. Sprzętowe rozwiązanie w tym wypadku jest optymalne.
A AVRach oprócz nowej serii Xmega nie ma priorytetów przerwań. Obsługa przerwania blokuje wszystkie przerwania. Rozwiązaniem jest timer. Nie zwykłem wykorzystywać przerwań zewnętrznych do przycisków. Lepiej wykorzystać timer. Sprawdzając co np 100ms ich stan. 2x wykrycie kolejno mamy akcję. Dodatkowo w ten sposób łatwo zrealizować inna funkcje przycisku...
Czyli pilot działa, OK. Dobra mamy błąd w programie. wywaliłem wszystko co zbędne, sprubuj teraz, z tym kodem. $regfile = "m8def.dat" $crystal = 8000000 'Instrukcje konfiguracji peryferiów oraz urządzeń zewnętrznych Config Int0 = Low Level Config Rc5 = Pind.2 Config Lcd = 16*2 Config Lcdpin = Pin , Db4 = Pinc.2 , Db5 = Pinc.3 , Db6 = Pinb.2...
Jeśli nie potrafisz to zrób to prościej. Podłącz zewnętrzny kwarc 32,768kHz (zegarkowy); Config Clock = Soft Procedura zegara używa specjalnych zmiennych: _day , _month, _year , _sec, _hour, _min Wszystkie są typu Byte. Można je modyfikować bezpośrednio: _sec = 1 Sprawdź, o ile się spieszy (opóźnia). Różnicę koryguj warunkiem któregoś dnia np o północy.
Witam. Mam takie oto zadanie: po wciśnięciu przycisku ma zacząć się odliczanie czasu, po puszczeniu przycisku koniec odliczania. Wartość na bieżąco wyświetlana na LCD Z obsługą LCD spokojnie dam sobie radę, ale z timerów i przerwań jeszcze nigdy nie korzystałem. Prosiłbym o linka jeśli ktoś widział gdzieś podobny program albo opis konfiguracji timerów...
Mimo moich usilnych prób dalej nie wyświetla nic na LCD, zupełnie nic. Jak będzie tak dalej szło to dam zewnętrzny generator 1kHz na sygnał przerwania i zobaczę co się stanie dalej. Liczyłem na to że uda mi się wycisnąć przy zegarze 8MHz ten sygnał 125khz do generowania PWM 1,25khz. Połowy procedur jeszcze nie ma w programie a tu już za mało ma czasu...
za pomocą zwykłych timerów nigdy nie uzyskasz dokładnie jednej sekundy ponieważ są zbyt mało dokładne i timery niekiedy sie "spóźniają" bo uC ma też inne sprawy na głowie. Sytuacja poprawia se jeśli podłączymy zewnętrzny oscylator, a najlepiej podłączyć kwarc 32768Hz i taktować nim tylko Timer2 ustawiamy ASSR|=1<<AS2; i dajemy prescaler 128 i...
Muszę użyć układ dwóch timerów ponieważ w docelowym układzie zakres czasowy Timera1 będzie za mały. Czy procesor zliczy na T1 impulsy generowane na OC2 ? Obawiam się sytuacji, że przy wspólnym CLK gdzieś mi się zbocza miną pomiędzy OC2 a T1 i układ nie zatrybi... Oczywiście że zbocza te mogą się minąć, ale to jest bez znaczenia. Podczas synchronizacji...
Możliwe, że problem leży w sposobie wyzwalania INT0. U Ciebie jest to opadające zbocze, a to wymaga działającego zegara, który jest wyłączony w trybie power-down. Only an External Reset Proponuję zmianę trybu wyzwalania z toggle (ISC01=1, ISC00=0) na level (ISC01=ISC00=0) przed wejściem w power-down, i przywrócenie reakcji na zbocze po rozkazie sleep....
No właśnie potrzebuję przeklikać na zewnętrzny licznik, możesz pomóc jak to zrobić ? [syntax=c] $regfile = "m8def.dat" $crystal = 16000000 Config Pind.3 = Input Config Pind.0 = Output Config Timer1 = Timer , Prescale = 1 Do If Portd.3 = 0 Then ''''''' każdy impuls z timer1 jest na portd.0 End If Loop End [/syntax]
Jeszcze chyba potrzebne Enable Timer1. Poza tym, nie wiem po co masz ustawiane Edge, tu nie chodzi o wyzwalanie zboczem przerwania zewnętrznego. Poza tym nie definiujesz preskalera i po wyświetleniu wyniku warto byłoby wyzerować timer bo zacznie liczyć od tego co skończył, chyba, że tak chcesz.
Przede wszystkim nie wiemy, jak bardzo dokładna ma być ta 1 ms? A to 1 ms różni się dokładnością od innej ms? Przede wszystkim opisz o co tak naprawdę ci chodzi. Czy o stworzenie licznika odliczającego czas z rozdzielczością 1ms, czy o pomiar czasu jakiegoś zdarzenia zewnętrznego z dokładnością lub rozdzielczością 1ms? Jeśli to pierwsze to można wykorzystać...
Z timerem2 się pomyliłem, myślałem że jest 8 bitowy ;-). Przejrzałem DS i jak byk jest napisane: "Two 8- bit Timer/Counters with Separate Prescaler, one Compare Mode One 16- bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode" Atmega8 ma 2 wejścia zewnętrznego interruptu, INT0(PD2) i INT1(PD3), bramki są 4, jak "odpowiednio kombinować"...
Tak, rzeczywiscie mam ATmege8L. 3.4. korzystałem z programu SinaProg, w którym jest wbudowany kalkulator. Mówi on, że dla 'high freq.' trzeba ustawić fusebity CKSEL3...1 na 111, a CKSEL0 i SUT1...0 w zależności od czasu dodatkowego opóźnienia po resecie(jeśli dobrze to rozumiem): -SUT1...0=10 da 4,1ms ->zalecane przy szybkim naroście zasilania, -SUT1...0=11...
a może w podprogramie wywoływanym przy pomocy któregoś z timerów? Tak nie wolno robić, bo nawet jak się procesor zapętli to przerwania będą wykonywane i całość straci sens. Bo jeśli umieścimy reset Watchdog w miejscu gdzie program się zapętlił to okaże się że mimo błędu procek się nie zrestartuje. Niestety trzeba podejść do tego zdroworozsądkowo, czasem...
Witam Napisałem pilot na kształt RC5 w c wysyła 5 znakowy kod na atmega8 z zewnętrznym kwarcem 8MHz pytanie jak to odebrać tzn. chciałbym na INT0 na zbocze opadające ale jak złapać tym że coś już jest wysyłane i generalnie jak złapać RC5 ?? Planowane bez licznika, głównie to chodzi mi o to jak zapisać przechwycenie 1 i 0 oraz jak sprawdzić czy otrzymałem...
a ustawiłeś Fuse Bity?? Bo jeśli nie masz ustawionych to ATmega pracuje z częstotliwością 1MHz. Musisz ustawić Fusy na albo 8MHz na wewnętrznym generatorze albo ustawić Fusy na zewnętrzny kwarc. i mniej więcej kod by tak wyglądał: $regfile = "m8def.dat" $crystal = 8000000 Cursor Off Dim Czestotliwosc As Long Const Licznik = 22336 Config Timer1...
A timer 0 reaguje, tylko Ty nie dostrzegasz różnicy 131 cykli na 10 minut -) Tą wartość to jakby nie tylko raz trzeba było wpisać. Albert pomogło dopisanie linijki: [syntax=c] ISR(TIMER0_OVF_vect) { TCNT0=131; [/syntax] teraz obydwa liczniki idą równo, ale źle. Poszukałem i doczytałem i wiem, że zostaje mi kalibracja wewnętrznego oscylatora bądź zastosowanie...
witam! mam taki problem: chcę zliczać zewnętrzne impulsy, timer mam skonfigurowany w taki sposób: config Timer0 = counter, edge = falling, noice cancel = 1, na portd.4 mam ustawiny wewnętrzny pull-up i dodatkowo zewnętrzny rezystor podciągający 4,7k.do masy kondensatorek 100 nF. Licznik oczywiście mi liczy ale zlicza też przypadkowe impulsy. widać to...
ATmega8 posiada trzy liczniki/timery, z których dwa (T0 i T1) mają możliwość zliczania zewnętrznych impulsów, dołączanych do pinów 6 i 11. Wg atmelowskiego pdf'a częstotliwość zliczanych impulsów nie może być wyższa niż połowa częstotliwości zegara ATmegi. Dla bezpieczeństwa i zapewnienia prawidłowej synchronizacji podają wartość fclk/2.5 - co w Twoim...
Z częstotliwością zegara nic nie kombinowałem więc mega pracuje na 1MHz Zgodnie z [url=http://www.atmel.com/dyn/resources/... do ATmegi8 wewnętrzny oscylator ma dokładność +/- 3% a i to pod warunkiem że masz równe 5V i 25*C Pisza tam też że można to jeszcze trochę poprawić (dodatkowa kalibracja), ale osiągniesz maks...
Zadaniem programu ma być odmierzenie 1 sekundy (zmiana stanu na wy). Przerwanie od timera 2 przychodzi co 1ms. Kwarc zewnętrzny ~11MHz. Czy ktoś mógłby napisać dlaczego program nie działa? #include<avr/io.h> #include <avr/interrupt.h> int i=0; int main(void) { DDRC = 0b00001000; TCCR2=_BV(CS22); TIMSK = _BV(TOIE2);...
Jak dla mnie to przede wszystkim zamiast deley() wykorzystać jakiś zew. zegar RTC usypiać procka i wybudzać przerwaniem z RTC Nie trzeba używać zewnętrznego RTC - wystarczy podłączyć kwarc i użyć przerwania z wewnętrznego timera. Nie wiem, jak w przypadku Arduino, ale zastosowany w nim mikrokontroler to chyba ATmega8, więc jest taka możliwość (o ile...
Witam Jeśli potrzebujesz krótkich czasów to wystarczy timer 8-mio bitowy do dłuższych czasów 16-to bitowy. Taktowanie masz z tego co sobie ustawisz jako źródło zegara w fusebitach. Może to być kwarc podpięty pod uC, zewnętrzny generator podpięty pod uC, wbudowany generator RC. Im mniejsze czasy tym lepiej używać wiekszych częstotliwości kwarcu i ewentualnie...
Jeśli chodzi o piny INT (i tryb power-down) to też lipa, bo już mam taki schemat : ... Dodam że w grę nie wchodzi dodanie przycisku/oscylatora - po pierwsze 'too late', a po drugie płytka ma być mega mała i lekka . Do takich projektów podchodzi się od samego początku zupełnie inaczej niż do projektu zasilanego z zasilacza. Tutaj trzeba działać odwrotnie...
Profesjonalnie korzysta się zazwyczaj z zewnętrznych urządzeń, z którymi się komunikujesz... Poszukaj sobie Real Time Clock (RTC) w necie, to znajdziesz:D Niektóre mikrokontrolery mają wbudowane RTC lub można wykorzystać ich timery do budowy takiego zegarka. Jednak nie wiem jak wtedy z dokładnością.
PC6 (RESET) - opcjonalnie nóżka resetująca procesor PD0 (RXD) - odbiornik UARTA PD1 (TXD) - nadajnik UARTA PD2 (INT0) - przerwanie zewnętrzne PD3 (INT1) - przerwanie zewnętrzne PD4 (XCK/T0) - taktowanie USARTA albo impulsy dla timera VCC - zasilanie cyfrowe GND - masa PB6 (XTAL1/TOSC1) -do podłączenia kwarcu (wejście) PB7 (XTAL2/TOSC2) -do podłączenia...
Nie zmieści mi się zewnętrzny kwarc, dlatego pytanie dotyczy tego, co oferuje na pokładzie procek. Czyli pytanie brzmi: jakie kombinacje wewnętrznego zegara i preskalerów dadzą mi ( i jakie) najbliższe częstotliwości tej wymaganej tj. 38kHz. L Ale to się bardzo prosto wylicza ;) np ustawiasz sobie taktowanie wen. oscylatorem 8MHz (bo moim zdaniem dodawanie...
Bardzo złe podejście. Trzeba tu zastosować jeden układ licznikowy, jako Timer do odmierzenia czasu 1s i drugi jako licznik zdarzeń zewnętrznych. Przerwanie od Timera, zajmującego się czasem wzorcowym powinno być zgłaszane co 1s. W przerwaniu należy pobrać i zapamiętać w zmiennej globalnej zliczoną liczbę impulsów. Potem trzeba wyzerować licznik. W przerwaniu...
Witam Chciałem skonstruować sobie projekcik umożliwiający przećwiczenie timera i przerwań zewnętrznych. Nie chciał działać, więc ostatecznie uprościłem go do granic możliwości i dalej nic... Założenie jest proste: po wciśnięciu przycisku na pinie odpowiadającym INT0 następuje uruchomienie TIMER1, który naprzemiennie włącza i wyłącza diodę w odstępie...
Witam. Mam problem z przerwaniami w atmega8. Wcześniej nie potrzebowałem przerwań więc to zagadnienie mnie nie interesowało. Potrzebuję wywołać przerwanie zewnętrzne int0 które uruchomi timer1, a ten zacznie odmierzać czas. Proszę o pomoc. Pierwsza zasadnicza uwaga to nie zauważyłem w programie konfiguracji interruptu0- coś np. takiego: config INT0=...
No to jeszcze dorzucę, to co znalazłem w pewnym pdf-e Motoroli - aplikacja , zresztą bardzo podobna do tej j/w. Legenda : XTAL1 - wejście inwertera generatora XTAL2 - wyjście inwertera generatora Tak przy okazji - AVR - y posiadające wbudowany timer asynchroniczny (np. AT90S8535 , ATmega8535 , ATmega16 , ATmega8 itd.) już są przygotowane do bezpośredniego...
Witam. Mam problem z timerami (lub przerwaniami), a mianowicie - nie działają. Mam taki kod: [syntax=c] #define F_CPU 1000000UL #define PORTLED PORTD #define DDRLED DDRD #define DDRDISP DDRC #define PORTDISP PORTC #include <avr/io.h> #include <avr/interrupt.h> int main(void) { DDRLED |= ((1<<0)|(1<<1)|(1<<2)|...
Witam, pracuje nad małym systemem modułowym do sterowania w domu. Na ten moment mam : -klawiaturę Matrix do wpisywania kodu do drzwi (atmega88pa) -manipulator do temperatury (atmega164pa) -czujnik temperatury (attiny84a) Zamówiłem wszsystkie części i własny projekt płytek pcb. Klawiatura działa bez żadnego problemu, program wgrywa się i działa w 100%...
Witam Piszę na atmedze8 w bascomie program do odczytywania danych z odbiornika GPS. GPS jest podłączony RSem do Atmegi, obsługuje go sprzętowy UART. Transmisja jest realizowana z prędkością 4800, megę taktuje zewnętrzny kwarc 7,3728 Mhz (ale na wewnętrzym 4 Mhz też próbowałem). Oto kod obcięty o parę chwilowo nieistotnych rzeczy (definicje zmiennych,...
W swoim programie wykorzystuję m. in. TIMER i przetworniki ADC. Timer działa w trybie CTC, dane z przetwornika pobieram funkcją adc_get(): [syntax=c] int adc_get() { set_sleep_mode(SLEEP_MODE_ADC); cli(); sleep_enable(); sei(); sleep_cpu(); sleep_disable(); return ADC; } [/syntax] Dane z przetwornika są pobierane w pętli głównej, a timer ma za zadanie...
A zaglądałeś do DS ? Bo widzę, że niespecjalnie. Sygnał podpinasz pod nogę T0 a licznik konfigurujesz na zewnętrzny sygnał zegarowy. TCCR0 = (1 << CS02) | (1 << CS01); // External clock source on T0 pin. Clock on falling edge. i teraz w TCNT0 masz liczbę impulsów. Odpalasz jeszcze jeden timer i co chwilę obliczasz prędkość...
Poza uwagami kolegi (at)BlueDraco pomyśl nad przepięciem DSa na USART, którego nie wykorzystujesz. Dzięki temu z łatwością zrobisz nieblokującą obsługę 1-wire, dokładnie tak samo, jakby to kolega (at)BlueDraco zrobił na ARM. Poza tym zastanów się nad eliminacją układu RTC - w końcu mikrokontroler już ma go w sobie, tyle, że zachodzi potrzeba przeliczenia...
No właśnie, w nocie jest taka wzmianka że tryb asynchroniczny T2 niby jest zoptymalizowany dla oscylatora 32,768Hz A ja mam ochotę, podać mu sygnał zewnętrzny. Szukałem jakiś danych w nocie odnośnie właściwości elektrycznych, alem się nie doszukał :) Zależy jak mocno szukałeś i w jakiej nocie... Inna nota Atmel podaje: " External Clocking External...
nawiązując do powyższych wypowiedzi, postanowiłem kontynuować temat; lecz tym razem wesprze się prostym schematem przedstawiającym sposób w jaki są podłączone trzy diody https://obrazki.elektroda.pl/3374686000_... i wcześniej nadmieniony tester serw; https://obrazki.elektroda.pl/3440395900_... do analizy zagadnienia...
Szukałem odpowiedzi na to pytanie, lecz nie znalazłem, wiec postanowiłem rozpocząć nowy temat. Otóż mam problem z liczeniem kanałów DMX, a dokładnie z timerem0 którego używam w tym celu. Mikrokontroler to jak w temacie ATmega8, częstotliwość taktowania 8 MHz, ustawienia sprzętowego UART 250 000 baud. Według specyfikacji DMX najpewniej rozpoznać nowy...
Zamiast wbudowanych w język instrukcji opartych o pętle, proponuję wykorzystać timer i przerwania. Do taktowania mikrokontrolera warto wykorzystać kwarc zewnętrzny, lub generator kwarcowy. Druga sprawa to formowanie przebiegu przed podaniem na wejście licznika. W najprostszym przypadku bramka shmita + ew wzmacniacz na tranzystorze, wejście sygnału odseparowane...
Zamiast TIMSK = _BV(TOIE0); TCNT0 = 0x00; TCCR0 = _BV(CS01)|_BV(CS02); powinno być TIMSK |= _BV(TOIE0); TCCR0 |= _BV(CS01) | _BV(CS02); Przede wszystkim to zdajesz sobie sprawę, że ustawiłeś timer na zewnętrzny sygnał zegarowy podawany na pin T0...? Pytam bo nie wiem czy taki był plan czy się pomyliłeś......
Dzięki za rady. Nie ukrywam, że to jest jeden z moich pierwszych programów - nie licząc migania diodami i odczytu pomiaru z ADC na diodach :) Jeśli chodzi o "delay" to używam tej komendy tylko w funkcji w przerwaniu od przepełnienia timera. Ale jeśli nie powinienem to ok. Faktycznie - natknąłem się w internecie na informacje, że zamiast SIGNAL należy...
(at)rax90 Moim zdaniem porada kol. (at)BlueDraco jest szkodliwa, bo tylko wprowadza chaos. Sądząc po twoich postach, bez obrazy, ale wnioskuję, że jesteś mocno początkujący zarówno w temacie programowania mikrokontrolerów, jak i elektroniki. Więc nie skacz z kwiatka na kwiatek, bo nigdy tego projektu nie zrealizujesz. ATMega ma wystarczająco dobry...
Timer- np. Timer1- jako licznik zlicza impulsy zewnętrzne. Podane na odpowiednią końcówkę- T1 w wypadku ATmega8. Nie potrzebuje żadnego preskalera- bo preskaler dzieli impulsy z zegara- a tu nie ma co dzielić. Ustawiamy bity CS10-CS12 na external clock source- falling lub rising. Czy ustawiamy końcówkę T1 jako wejście- nie pamietam. Można ustawić. Ilość...
Teraz trochę inna kwestia. Chcę zrobić zewnętrzne przerwanie, które reaguje na wciśnięcie przycisku i wtedy dopiero ma się uruchomić w nim generowanie tych 2kHz (działa tylko przy wciśniętym switchu, . Częstotliwość jest obecnie generowana non-stop, tak jak kolega wspomniał nie potrzebne są przerwania. Tylko jak teraz do tego napisać w/w przerwanie...
zewnętrzny timer timer zewnętrzny timer atmega8
zmiana rozdzielczości laptop intel 855gm vaillant czujnik ciąg
silnik jednofazowy schemat uzwojenia antipollution system fault
Citroën C4 Picasso - Czarny główny wyświetlacz i sygnał dźwiękowy Jak przywrócić odbiór kanałów w telewizorze lub dekoderze