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...
No właśnie Atmega8 ma dwa timery, na nóżce 6 i 11mozna zliczac impulsy, a w dokumentacji czytamy: Two 8bit counters One 16bit counter Czyli ten trzeci na której nóżce moze zliczać? Normalnie sie go używa jak innych? Config Timer0 = Counter , Edge = Rising Config Timer1 = Counter , Edge = Falling Wystarczy wpisac? Config Timer2 = Counter , Edge = Rising...
100Hz wziąłem z - Ocr1a = 2857 (1,4kHz), a w Ocr1b = 3333(1,2kHz) to układ generuje tylko pierwszą częstotliwość z OCR1A, no bo 2957 taktów przychodzi szybciej i TIMER1 się zeruje, a wiec nigdy nie ma przerwania z OCR1B,przez co nigdy nie zmiana się stan końcówki PB.2 - Ocr1a = 3333(1,2kHz), a w Ocr1b = 2857(1,4kHz), to oba układy generują mniejszą...
Bluedraco no właśnie nie, do pwm używam timera 2. Timer 1 to tylko licznik więc zostaje mi tylko timer 1 16bit Zrobiłem tak bo t2 jest 8 bitowy i nim steruje silniki przez l293. Więc wyprowadzenia PB1 i PB2 mam zajęte. Na początku myślałem że mogę się bawić z przerwaniami tylko naPB1 2 i 3 , teraz wiem że tak nie jest. Przepraszam za błedy, ale tak...
Program zegara z synchronizacją z DCF z Bascomie jest trywialny, ponieważ Bascom posiada komendy do obsługi DCF. Zrobiłem na procku atmega8 z kwarcem 8 MHz. Wyświetlanie na dwulinijkowym LCD: Godzina: hh:mm:ss Data: dd/mm/52 'Zegar DCF77 $regfile = "m8def.dat" $crystal = 8000000 'Sygnał z odbiornika DCF podłączony do Portb.2 Config Dcf77 =...
Atmega jest taktowana zewnętrznym kwarcem 12MHz, żeby jeden tick timera trwał ~1us. 1. Czy timer 8-bitowy przyjmujący zewnętrzne impulsy, może je przyjmować w takich samych odstępach czasowych jak 16-bitowy? Niestety na etapie projektowania nie zauważyłem, że żeby użyć 16-bit timera do przyjmowania impulsów zewnętrznych należy użyć nóżki T1, a nie T0,...
mam już od dłuższego czasu problem mianowicie generator częstotliwości dzisiaj bardzo się zdziwiłem gdy nie ładuje do timera wartosci początkowej wszystko jest ok, dioda sobie miga co ok 2 sek i jest spoko gdy natomiast załaduje do timera1 16Bit np 1000 co w zauważalny sposób nie powinno zmienić częstotliwości migania diody ona zaczyna migać jak oszalała...
Witam. Uczę się obsługi Timera 0 w Atmega16. Napisałem sobie prosty kod który ma co ~ 2µs zmieniać stan piny na porcie D. Zegar przyjąłem 14,7456MHz. Oczywiście wszystko robię symulacyjnie w Proteus 7.8. Więc tak, preskaler ustawiłem na 0 i do rejestru TCNT0 wpisuję liczbę 225. A wzięła mi się ona stąd że: 14 745 600 : 30 = 491520 czyli prawie...
Witam! Mam dość nietypowy problem z AVR-kami. Ostatnio używałem Timera na ATTiny2313. Ustawiłem preskaler /256, kwarc 8MHz, timer 16bit w trybie porównania i przerwanie. Wartość do porównania była ustawiona na ok. 31250. Ostatecznie powinienem otrzymać przerwanie z częstotliwością ok. 1Hz. To zwiększało licznik i on był wyświetlany. I tu pojawił się...
Timer-1 16bit pracuje jako PWM dwa kanały OC1A i OC1B chyba że chcesz mono wtedy wystarczy jeden kanał . Timer 8bit musisz ustawić tak żeby generował przerwanie z taką częstotliwością jak próbkowanie dźwięku a w przerwaniu ładujesz próbki do PWM . Ok , tak zrobię . Wiesz ja już robię , to chciałbym to zrobić w miarę "fajnie" i , żeby to w miarę też...
ATmwga 8 ma 3 timery... 2x 8-bit i 1x 16bit... Timer2 może pracować z kwarcem zegarkowym... Timer1 jako PWM... A timer0 jako licznik...
Witam, proszę o wyjaśnienie zasady działania sygnału PWM [syntax=c]int main(void) { DDRB |= LED1 | LED2; //Wyjścia LED //Inicjalizacja Timer1 (PWM) TCCR1A |= (1<<COM1A1) //Zmiana stanu wyjścia OC1A na niski przy porównaniu A | (1<<COM1B1) //Zmiana stanu wyjścia OC1B na niski przy porównaniu B | (1<<WGM11); //Tryb 14 (FAST PWM, TOP=ICR1)...
Witam. Na forum jestem nowy, ale Atmege8 gryzę już od roku:). Zakładam że czytałeś datasheet'a od Atmega8 i niestety nie udało Ci się zrozumieć.Jeżeli tak to Ci pomogę. Po pierwsze w Atmega8 masz trzy timery/countery: -Timer0 8bit -Timer1 16bit -Timer2 8bit Timer1 i Timer2 możesz wykorzystać jako PWM,gdyż mają wbudowaną taką funkcje. Wiadomo że 16bitowy...
//timer 1 16bit konfiguracja (ICP1) TCNT1=0; //ustawienie poczatkowej wartosci timera 1 TCCR1B |= (1<<ICES1); //pomiar na narastajacym zboczu TIMSK |= (1<<TICIE1) | (1<<TOIE1); //zezwolenie na przerwanie od ICP i od overflow TCCR1B |= (1<<CS12) | (1<<CS10) ; //prescaler 1024...
Widzę, że moje programy znajdują uznanie i dobrze. Co do podawania impulsów na uC to nie można zmieniać dowolnie końcówek bo timery mają wejścia przypisane do konkretnych wyprowadzeń. Dla M8 są to T1 - 11, T0 - 6. Trzeba to brać pod uwagę przy projektowaniu układu. Dotyczy to końcówek używanych jako alternatywne. Po przeróbce czas odmierza T0 (8bit)...
To nie Bascom jest przyczyną tylko źle napisany program ;). 1. odczyt timera1 16bit odbywa się po przez rejestr pomocniczy TEMP, ten rejestr jest też używany przez inne procedury i funkcje i jeśli jest użyty to właśnie niszczona jest wartość High timer1 bo ona tam jest wpisana gdy używasz komendy. wpisując tak timer1 do tablicy możesz gubić High timer1....
Jeżeli nie używasz przerwań to ich nie włączasz. Wprawdzie nie włączasz głównego, ale włączasz od timera (TIMSK1), dlaczego? Wzór z dokumentacji dla CTC: F = Fclk / (2 * N * (1+OCR1A)) = 16000 / ( 2 * 8 * 2000 ) = 16000 / 32000 = 0.5Hz Sterowanie pinem OC1A dla CTC: [syntax=c]TCCR1A = 1<<COM1A0[/syntax] .
Czy dla uzyskania przerwania co 0,5s, 1s, lub 2sek musze użyc w przypadku Atmega8 timera1 16bit, czy mogę to też jakoś zrobić na 8-bitowym timerze0? Zakładam częstotliwość zegara 1Mhz-4MHz. (pracuję nad mruganiem diody :) widocznym dla oka przy uzyciu przerwania od timera)
The extreme values for the OCR1x Register represents special cases when generating a PWM waveform output in the fast PWM mode. If the OCR1x is set equal to BOTTOM (0x0000) the output will be a narrow spike for each TOP+1 timer clock cycle. Setting the OCR1x equal to TOP will result in a constant high or low output (depending on the polarity of the...
ok. już kumam. ale mam problem. nie wiem jak ustawic licznik 16bit. chcę mierzyc czas miedzy przerwaniami ale timer dochodzi do 255 i sie zeruje i zaczyna od nowa.
Ldi Acc, 1;(...) Out TCCR1A, Acc Tym sposobem ustawiasz licznik w tryb PWM, Phase Correct, 8-bit . Strona 120, Tabelka 53 pdf-a od ATmega8515 . -- Pozdrawiam, Daniel
Jaka jest maksymalna częstotliwość pracy kwarca wewnętrznego Atmegi8? ATmega nie ma w środku kwarc u , tylko oscylator RC, to tak gwoli ścisłości. Mam ustawione 4Mhz i kiedy ustawiam prescaler w timerze 16bitowym na 64 (TCCR1B|=1<<CS11|1<<CS10;) tak aby przerwanie spowodowane przepełniniem timera było wywoływane mniejwięcej co 1s 4000000/64/2^16...
zrób to mniej więcej tak: .INCLUDE "m8def.inc" .cseg ; początek segmentu pamięci programu .org 0 rjmp RESET ; wektor ZEROWY (po resecie) .org OVF0addr ; wektor przerwania od przepełnienia Timera0 rjmp Przerwanie_T0 ; i tu właśnie skok do obsługi tego przerwania RESET: LDI R16, HIGH( RAMEND) OUT SPH, R16 LDI R16, LOW( RAMEND) OUT SPL, R16 ; porządek...
Witam, Mam Atmege88 i chciałem spróbować napisać obsługę przerwania wew. zegara 16bitowego. Korzystając z książki, która traktuje o atmedze8 i dokumentacji do atmegi88 udało mi się napisać taki oto mnw. kod: #include<avr/io.h> #include<avr/interrupt.h> //(...) ISR(TIMER1_OVF_vect) { // moj kod przerwania } ISR(BADISR_vect)...
Nie możesz tylko używać Timera2 do innych celów, bo właśnie jest on używany przez RC5 Funkcja GETRC5 domyślnie wykorzystuje Timer0 a nie Timer2. Oczywiście można to zmienić w konfiguracji, jednak autor tego nie czyni. Zatem pozostają mi dwie opcje, albo przestać używać timera0 do odliczania 1s odcinków czasu i zaprzęgnąć do tego timer2 (co może nie...
Będzie szło jeżeli ze mną wytrzymasz :D Tyle że ten wzór dotyczy częstotliwości na wyjściu OCRx (sorki niepotrzebnie Ci to pokazałem). Policzmy to tak: 8MHz / preskaler / 10Hz 8.000.000 / 256 / 10 = 3125 Gdybyś użył preskalera 8 to OCR1A musiało = 100.000 ale niestety jest tylko 16bitowe. Stąd trzeba użyć większy preskaler. Zacznij pisać program: TIMSK...
Tak myślałem, otałem sie o produkcje poligraficzną na maszynach offsetowych:D Główny problem to najniższa prękosc liczenia. Poza tym dość prosto, zewnętrzny kwarc jako podstawa czasu, wenętrzny ma za duże odchyłki. Timer 16-bitowy jako timer zliczający interwał czasu w którym odbywa się pomiar, drugi timer jako licznik impulsów z fototranzystora. Reszta...
bity b.7 = COM1A1 i b.6 = COM1A0 dotyczą wyjścia OC1A bity b.5 = COM1B1 i b.4 = COM1B0 dotyczą wyjścia OC1B a ich znaczenie to gdy 0 i 0 wyjścia OCX są odłączone od timera i pełnią rolę portu in/out zależnie od ustawień kierunku. 0 i 1 to "toogle" czyli OCX zmienia się stan na przeciwny gdy "compare match" nastąpiło porównanie. 1 i 0 to "clear" czyli...
Co sie stało jasne? Ja mam oscyloskop i nic nie jest jasne. Oscyloskop jest jasny ;) Jaki prąd opto? LEDa? Dostatecznie duży. Jak już pisałem, przebieg wyzwalania jest wzorowy - sygnał na bramce kończy się przed dojściem napięcia do kolejnego zera (triac ma ok 300-400us na zamknięcie - a nawet jeśli prąd nie zdąży wygasnąć po przejsciu przez kolejne...
W ATmega8 masz 3 timery:TIMER0(8bit bez funkcji PWM),timer1(16bit z 2 kanałami PWM),i timer2 (8 bit z jednym kanałem PWM) i do tego musisz się zastosować. Wyjścia PWM to PORTB.1, PORTB.2 i PORTB.3 Możesz jeszcze zrobić programowy PWM np. na timer0 i będziesz miał PWM na wyjściu na jakim tylko chcesz. [syntax=basic4gl][/syntax] $regfile = "m8def.dat"...
Witam serdecznie. Co poprawić w kodzie aby wykorzystywać 3xPWM z płynną zmianą, bo jak dotąd pwm od t1 działa płynnie a przy t2 przycina, co poprawić ?? #include <inttypes.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/sleep.h> #include "iocompat.h" /* Note [1] */ enum { UP, DOWN };...
Witam wszystkich, jestem początkujący w AVR i potrzebuje porady. Napisałem program do zliczania czasu (timer0) oraz generacji prostokąta na 40khz (timer1- fast pwn 16bitowy) Ogólnie to atmega pracuje na 1Mhz nie daje kwarcu.. Moje pytanie czy jest możliwość zrobienia generatora na 40kHz na innym timer0 lub timer 1 (8 bitowe) bo timer 1 jest 16-bitowy...
Wielkie dzięki za kolejną odpowiedź :) Kod poprawiony, program działa, "duszków" nie ma, DISP_AN_PORT |= ~(1<<DIGIT2) zastąpione speed już nie musi być volatile Zamieszczam cały kod poniżej. [syntax=c] //#define F_CPU 1000000 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define DISP_AN_PORT PORTC #define...
Witam. Co wy na to ? Bardzo fajne, raz wklepać a potem używać, ale mam pytanko, co robi kompilator kiedy z tego dzielenia wychodzą części ułamkowe? Część ułamkowa jest obcinana, bo i tak nie da się jej wpisać w 8-bitowy rejestr licznika. Chcąc osiągnąć jeszcze większą dokładność, można próbować na mniejszej skali preskalera (np. 256) i/lub większej...
Witam. Zbudowałem obrotomierz na Atmega8. Sprzętowo działa poprawnie by sie wydawało. Lecz odczyt obrotów samochodu jest z przedziału 6 - 30 obr/min. Wydaje mi się ze mam bład w samych obliczeniach wyniku. Mój obrotomierz działa następująco przy założeniu 1 impuls na obrot (w rzeczywistosci 1,5 imp/obr): impuls z cewki podawany jest na przerwanie int1....
Od swojej strony napiszę: mam ale nie dam (bo projekt komercyjny) To co chcesz zrobić to banalna sprawa, nawet z badziewnym bascomowym RC5 ci się uda. 1) Masz 3 kanały PWM, więc 1 zawsze jest 8bit, a 2 pozostałe 16bit też deklarujesz jako 8bit (upraszcza to całą sprawę) 2) Robisz 3 zmienne trzymające wartość dla 3 kanałów R, G, B i gdy któraś się zmieni...
Witam. Po bardzo długiej przerwie z mikrokontrolerami chce uruchomić timer1 (16bit) który będzie wystawiał przerwanie od przepełnienia co 1 sekundę . Wszystkie informacje mam z noty aplikacyjnej a jednak dalej nie działa (dioda testowa jest sprawna więc można pominąć sprzęt. Proszę o wytłumaczenie. Pozdrawiam [syntax=c]/* * main.c * * Created on: 15...
Witam, Dzisiaj zmierzyłem się z tym samym problemem, choć kod na ATTINY13 przerabiałem samodzielnie. Taktowanie wewn. 9,6MHz. Oprócz użycia zaktualizowanych wzorów na obliczanie czasów bitów i pół-bitów trzeba było zwiększyć tolerancję: #define DD_RC5_TOLERANCJA_US 350 Po tej zmianie zaczęło działać poprawnie. Jak widać więc attiny13 ma "pecha" do tych...
To już się dowiedziałem, przed twoim postem (google jednak nie boli :D) ale dzięki :) miałem teraz inne pytanie ( stworzyłem nowy temat http://www.elektroda.pl/rtvforum/topic14... ) bo brak timera 16bitowego już rozwiązałem :D Myślę, że ten temat już można uznać za zamknięty :)
linuxtorpeda Błąd pojawia się w tym, że zmienna sek nie zmienia wartości. 1. Skąd te 100 ms straty? 2. Poza tym, że doliczanie sekund należy przenieść za drzewo warunków odpowiadających za min godziny wszystko działa ok - zmienne inkrementują na końcach warunków. 3. Natknąłem się na ten temat, poprawię. 4. Nie wiedziałem, ok. 5. Tak mi łatwiej organizować...
z tym wpisaniem wartości stosu najpierw do SPH a potem do SPL to koledze Nawigator może troszeczkę pomyliło się z taką koniecznością ładowania 16bitowych liczników do timera w czasie działania - gdzie jest rzeczywiście potrzeba zachowania odpowiedniej kolejności, ale przy stosie nie ma takiej potrzeby cli jest teoretycznie nie potrzebne przed inicjalizacją...
Witam, napisałem program na moja atmege8l który ma za zadanie co 5s zapalać i gasić diodę z wykorzystaniem 16bitowego Timera1 w trybie CTC. Wyliczyłem, że jeśli mam uC taktowany 8MHz to przy zastosowaniu prescalera 256 flaga OCF1A powinna być ustawiana co 1hz, przy ustawieniu rejestru OCR1A na 31250. Jeśli za każdym ustawieniem flagi będę ją kasował...
Absolutnie zgadzam się, że nacisk należy odsunąć od generowania okrągłych 33kHz. Sprawdziłem w nocie katalogowej i ATMEL gwarantuje bez procedury kalibracyjnej tolerancję 3% w moich warunkach (25*C,5V, 1MHz internal). Miód - malina.Wystarczy. Przecież to 33kHz +/- 1kHz! Rzeczywiście dobrą praktyką byłoby pozostawienie w spokoju 16bitowego timera. W...
Już wszystko kapuję. Wstyd się przyznać ale zapomniałem do ilu zlicza 16bitowy Timer... :) Mam jeszcze jedno pytanie. Czy w takiej formie: timer1=0 do if timer1=15625 then 'lista rozkazów timer1=0 end if loop bedę miał bardzo blisko 250ms przy ustawieniu timera jak w listingu z pierwszego postu? Moje obliczenia do tego: 4000000/64/4=15625
Poniżej wklejam działający kod obsługi czujnika ciśnienia MPL115A2 - może komuś się przyda. Komentarzami nie należy się przejmować, część udało mi się przetłumaczyć w oparciu o inne znalezione przykłady. Teraz ( 23:55 19/04/2013 ) w południowej części Krakowa pokazuje 995 hPa Byte . Jak najlepiej podzielić zmienna typu Long ?
Proszę szanownych kolegów o potwierdzenie mojej koncepcji; Atmega8 z kwarcem 4.194304MHz, Timer2 konfiguruję na CTC z presk.1024 co daje mi 4096Hz Do timera2 wpisuję 127 i na OC2 mam 32Hz (31,25ms) Teraz te 32Hz podaję na T1 timera1 (16bit) skonfigurowanego jako CTC z ext.source, i z wpisaną wartością 1919. Na wyjściu OC1 stan zmieniać się będzie co...
Tak przy okazji, to zamień timery miejscami, niech 8 bitowy timer 0 generuje nośną a odliczanie czasu pozostaw 16bitowemu timer1, zrobisz sobie dzielnik przez 8 i masz jedno tyknięcie na 1us. ;) proste I niestety nie mam żadnych doświadczeń z VMLab, bo nie używam żadnych symulatorów niestety ;)
Programuje uC rodziny AVR hobbystycznie na razie, ale często mam problemy poprawnością działania moich programów, czasami zdarzają mi się jakieś kolizje zdarzeń w programach, przez co jakaś funkcja czy procedura nie działa prawidłowo lub jest pomijana, diody migają nie równo, multipleksowanie wyświetlaczy 7seg działa nieprawidłowo i pokazują się artefakty......
Widziałem Twój sterownik. Pomogłoby mi gdybyś mógł dosyć szczegółowo opisać dwa przerwania timera1 i 2 oraz dlaczego takie a nie inne ustawienai liczników? Czy dobrze widzę,ze do odmierzania impulsów używasz licznika/timera2 czyli 8bit? fajnie byłoby gdybym miał jakieś odniesienie do dalszej pracy, bo musze obsłużyc w sumie 6 serw z dokladnoscia ok...
Który tryb uśpienia zastosować żeby uśpić procek na 1 sekundę? Pracuję z kwarcem 8Mhz więc konieczne chyba będzie zastosowanie licznika 16bitowego żeby uśpić procesor na 1sekundę. Czy w jakimś trybie uśpienia działają przerwania od timera1. Czy możliwe jest tylko stosowanie licznika asynchronicznego? Najlepszym rozwiązaniem byłoby użycie watchdoga,...
Wziąłem się w końcu za ten obrotomierz lecz mam pewien problem. Nie mogę użyć Timer0 bo używam go do przerwań w menu i obsługi przycisków. Pozostaje mi timer1 który jest 16bitowy i liczy do 65536. I teraz wystarczy preskaler na 256? Pamięć mi się kończy - mam zegar z ustawianiem czasu, 3 temp., woltomierz, a to wszystko w przełączalnym menu na 4 ekrany...
Napisałem program który generuje impulsy (40kHz) na porcie za pomocą timera0. Mam pytanie czy i w jaki sposób moża zrobić żeby ciąg impulsów podzielić na "paczki" po 5 impulsów z odstępami ok. 100Hz. Jezeli bym zaprzągł do tego licznik 16bitowy to by mi sie przepełniał co 122Hz i odpalał timer 0 na jakiś czas i to by mi w sumie wystarczało ale nie mam...
timer 16bit timer atmega8 atmega8 timer
odpowietrzyc wtryski moduł zigbee unifon zacisków
moment dokręcania korbowodów awaryjne pompy ciepla
Jak zresetować lodówkę Bosch - instrukcja krok po kroku Mercedes W203 - Klapa bagażnika zamknięta, wyświetlacz pokazuje otwartą