Nie nie rób się kaczką albo sie prześpij ahahahahahaha :D OCIE1B zamieniasz na OCIE1A OCR1B zamieniasz na OCR1A zamieniasz wektor TIMER1_COMPB_vect na TIMER1_COMPA_vect kasujesz wszędzie to TCNT1=0 bo nie ma sensu Dla Timer0, w przerwaniu, pod linijką "dot ++ ; " dopisz TCNT0 = 6; To też można na palcach policzyć: 8MHz to jest na sekundę a sekunda ma...
Zapala najpierw jedną diodę, później drugą. Nie ma robić nic konkretnego oprócz pokazania tego, że instrukcje po delay przestają być wykonywane. Jeżeli wyłączę przerwania to nawet jeśli będzie tu _delay_ms(10000); zapali się pierwsza dioda, a po 10 sekundach druga.
To znaczy że litery i wynik temperatury znika na ułamek sekundy i znów ie pojawia Ustaw poprawnie timer. Miałem to samo. Link: http://www.elektroda.pl/rtvforum/topic20...
(nie mam w tym momencie czasu aby przyjrzeć się temu bliżej, postaram się odpowiedzieć następnym razem pełniej) Masz napisane: TCCR1A = (1<<WGM10) | (1<<COM1A1) | (1<<COM1A0); //8bit PWM, phase correct TCCR1B = (1<<CS12) | (1<<WGM12); 8-bit PWM, phase correct ma wlaczone tylko WGM10. Tak jak Ty masz WGMy ustawione to wynika,...
1. W jakim języku piszesz? 2. Kalkuluje się to tak: Masz kwarc 16 000 000 Hz (16 MHz) i dajesz sobie jeden z dopuszczonych prescalerów, np. 64 i wtedy timer zlicza Ci impulsy z częstotliwością 16 000 000 / 64 = 250 000 Hz, czyli jeden impuls timera to 4*10^-6 s lub inaczej aby odmierzyć 1s musisz zliczyć 250 000 impulsów, Jako, że Timer0 jest 8 bitowy...
Witam Musze w czasie jednej sekundy (ewentualnie 0,5s) zliczyc ilosc impulsow podawanych na dwa porty UC. Zastanawiialem sie nad uzyciem do tego Timera_1 tylko nie wiem czy mozna go wykorzystac podobnie jak do pracy w trybie PWM (dwukanalowym). Ewentualnie moze jest jakas inna mozliwosc. Spodziewane paczki impulsow w granicyi od 1 do 1000 na sekunde.
Wynik jest w pełni zadowalający,ale ........ co 47 wychylenie wskazówki (czyli co 47 sekunda w power safe) procesor się zawiesza i pobór prądu rośnie do 5mA, lub cyklicznie co 47 sekunda rośnie na chwilę do 5mA i znów 47 sekund i znów 5mA. Wszystko powyłączałem, żadne inne przerwanie nie jest aktywne które mogło by go wybudzać, czy timer czy INT. Nie...
A jak często musisz odświeżać informacje na wyświetlaczu? Może wystarczy raz na np. dwie sekundy? Masz przecież wolny jeszcze timer - możesz wykorzystać go w przerwaniu aby odświeżał wyświetlacz. Taka chwilowa "niedyspozycja" kontroli będzie w zasadzie nie zauważalna dla silnika.
Pozwolę sobie umieścić post pod postem żeby wiadomość dotarła do zainteresowanego. Jeszcze lepszym wyjściem dla takiego zegara będzie zastosowanie dedykowanego rezonatorka 32768Hz (32,768KHz) Wartość 32768 to w zapisie binarnym dokładnie piętnaście bitów. Jeśli więc Timer będzie zliczał generowane impulsy to po 32768 uzna że mineła sekunda :D Bascom...
(at)tmf - podejrzewam, że pobór jest całego układu w tym podświetlenia LCD więc może pobierać 0.2A; Hero - czy procek się grzeje? Czy masz watchdog timer wykorzystywany? Czy masz BOD?
Żeby nie zapomnieć na końcu to już tutaj napiszę, że liczy się to w programach bo one się rzadziej mylą, ale zrozumienie tematu jest oczywiście ważne. Jest kilka, a w pełni darmowych, kalkulatorów do tego. Timer jest urządzeniem sprzętowym wbudowanym w mikrokontroler. Najczęsciej taktowany jest w taki sposób, że sygnał zegarowy taktujący mikrokontroler...
Poprawiłem schemat. Czy mógłby mi ktoś wytłumaczyć jak tu mierzyć czas programowo?(nie rozumiem zasady działania i posługiwania się timerami). Okresami zajmę się później, najpierw zwykły przelot kulki. Zdecydowałem się ostatecznie na użycie ATmega 328P-PU.
Dla konfiguracji resetowania się watchDoga po 4 sekundach : Mcusr = &B00000000 'Zerowanie rejestru aby wyłączyć bit 3 czyli WDRF. 'Dokonywanie jakichkolwiek zmian w WatchDogu musi dokonywać się w ściśle określonej sekwencji wpisów do rejestru 'WDTCSR. Jako pierwszy krok trzeba zrobić wpisanie wartości 1 do bitu numer 4 nazywanego WDCE.Pozostałe bity...
Poprawny i dokładny stosunek podziału to 921600, czyli np. 14400 * 64 albo 3600 * 256 albo 900 * 1024. Jak widzisz nie ma żadnego problemu z zaprogramowaniem timera na taką częstotliwość.
Witam dopiero zaczynam przygodę z programowaniem mikrokontrolerów i mam pytanie odnośnie odmierzania czasu na uc atmega 16. Odmierzam czas przy pomocy timera1 kwarc 16MHz. Z obliczeń wynika, że przy preskalerze 1024 muszę odliczyć 15625 impulsów więc ładuję do timera wartość 49911 i wtedy uc odmierza mi około 4 sekund zamiast 1, natomiast gdy prescaler...
Czy RTC (zegar czasu rzeczywistego) używający Timera 2 w trybie asunchronicznym , działa nawet wtedy gdy wyłączone sa przerwania globalne ? ... kwarc, preskaler oraz Timer2 nie potrzebuje przerwań ale to nie wystarcza do zrobienia całego RTC to wystarcza do zrobienia przerwania co 1 sekundę a reszta zegara musisz zrobić programowo i to właśnie na przerwaniu...
Do int0 żeby zapalić diodę, a do przerwania od timera żeby wyzerować TCCR1B (wyłączyć licznik gdy minie sekunda) i wtedy wyłączyć diodę.
Właśnie przed chwilą też uruchomiłem zegar na ATMega8 choć wykorzystujący kwarc 32kHz (tzw. zegarkowy) niezależny od generatora głównego procesora. Jeżeli chcesz pozostać przy swoim pomyśle (równie dobrym) to w BASCOM-mie po kompilacji przejdź do opcji programatora gdzie będziesz miał trzy zakładki FlashROM ,EEPROM i Lock and Fuse Bits. Więc wybierz...
Napisał, że program nie działa tak jak chce, ale nie napisał czy w jakikolwiek sposób sprawdził czy układ wykonuje obsługę przerwania. Choćby przez zapalenie LEDa. W podanym przykładzie zmiana częstotliwości nastąpi dopiero po 15 sekundach. Czy autor czeka tyle? A może fusa ma ustawionego na 1Mhz i zmiana nastąpi za 120 sekund? JarekC
Krótka podpowiedź: ustaw sobie któryś timer żeby się przepełniał co 1 sekundę albo jakąś WYMIERNĄ część sekundy (należy ustawić odpowiedni podzielnik zegara CKSL i wartość w OCRx) i następnie albo uruchom przerwanie od zegara i w programie przerwania będzie ci się odejmować od zmiennej (powiedzmy sekundy--; ) albo testuj programowo flagę timera i jak...
Z tego co wyczaiłem to mega popędzana jest kwarcem 14,7456 MHz (kwarc do USART)... Timery ustawione są tak, że przerwanie wywoływane jest co 0,05s stąd podstawowa zmienna zliczająca do sekundy zwiększana jest co drugie wywołanie przerwania (odpowiadają za to variable i variable1)... Spróbuj przeanalizować ten kod i skonfrontować go z dokumentacją do...
Witam Mam dziwny problem z konfiguracją timer1 w atmedze644pa w trybie CTC. Kod jest następujący: [syntax=c] #define TIMER1_OCR 10801//10799//10800 // 1 sekunda void timer_init(void) { TCCR0A=(1<<WGM01); TCCR0B=(1<<CS02)|(1<<CS00); OCR0A=TIMER0_OCR; TIMSK0=(1<<OCIE0A); TCCR1B=(1<<CS12)|(1<<CS10)|(...
Więc tak. Odcinek 1 sekundy ma być bardzo dokładny, czy nie musi? Jeżeli procek będzie pędzony z wewnętrznego oscylatora, to czas 1 sekunda nie będzie bardzo dokładny. Musisz zmienić fusebity, aby procek był taktowany z 4MHz, bo teraz jak sam widzisz pracuje na 1MHz.
Przerobiłem tak, żeby wysyłał testowo tylko jedną wartość ( losową ) co 8 sekund Dodano po 18 Dołożyłem Clear Serialin0 Com1_str = "" czyli [syntax=vbnet] $regfile = "m328pdef.dat" $crystal = 8000000 $hwstack = 100 ' rozmiar stosu sprzętowego $swstack = 100 ' rozmiar stosu programowego $framesize = 128 $baud = 19200 '************ Uart 0 Config Serialin0...
Absolutnie żadne Start Timer0 nie jest tu potrzebne. Wystarczy, że tak będzie skonfigurowane przerwanie: [syntax=basic4gl]Config Timer0 = Timer , Prescale = 256 On Timer0 Sekunda Const Przerwanie = 131 Counter0=Przerwanie Enable Timer0 Enable Interrupts . . . end Sekunda: Counter0=Counter0+131 . . . Return [/syntax] ...i unikaj jak ognia "drukowania"...
Mam problem ze zliczaniem czasu przez timer w układzie PCF8583. Na starcie programu ustawiam timer: I2cstart I2cwbyte 162 I2cwbyte 0 'rejestr kontrolny I2cwbyte &B00000100 'alarm aktywny I2cstop I2cstart I2cwbyte 162 I2cwbyte 8 'rejestr kontrolny timera I2cwbyte &B01000010 'zapis rejestru alarmu 'odmierzanie sekund ' włączony alarm timera I2cstop I2cstart...
Witam! Piszę program który ma co 8 sekund ma wysyłać wynik pomiaru ADC po SPI. Co lepiej zastosować: a) -ckdiv8(lub więcej) -watchdog z przerwaniem jako timer -power down b) -timer 2 w trybie asynchronicznym z przerwaniami -power save ?
Witam. Może spróbuj tak po wywołaniu przerwania ( u Ciebie co sekunda) Odczytaj termometr DS. A następnie wydaj rozkaz pomiaru temperatury. W następnym przerwaniu odczytasz go o tak w kółko.
Może ja wyjaśnię jaśniej. Generujesz przerwanie od timera np. co 800ms, czy 1s. I w przerwaniu wykonujesz operacje: 1. Odczyt temperatury do zmiennej 2. Komenda Convert_T Odpowiadając na Twoje pytanie - 750ms to MINIMALNY czas między CONVERT_T a odczytem (dla 12-bit). Więc odczyt po 1, 2, 3600 sekundach po CONVERT_T nie jest błędem. Dzięki takiej metodzie...
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,...
Witam dopiero zaczynam przygodę z programowaniem mikrokontrolerów i mam pytanie odnośnie odmierzania czasu na uc atmega 16. Odmierzam czas przy pomocy timera1 kwarc 16MHz. Z obliczeń wynika, że przy preskalerze 1024 muszę odliczyć 15625 impulsów więc ładuję do timera wartość 49911 i wtedy uc odmierza mi około 4 sekund zamiast 1, natomiast gdy prescaler...
Ściągnij sobie z tej strony program kalkulator avr http://www.elportal.pl/index.php?module=... [syntax=basic4gl] $crystal = 1000000 $hwstack = 80 Config Timer1 = Timer , Prescale = 64 Dim Sek As Byte 's Enable Timer1 Enable Ovf1 On Ovf1 Czas Stop Timer1 Enable Interrupts Sek = 0 Do If pinc.0 = 0 then Load Timer1 , 49911...
Nad takim też myślałem ale to nie jest to. Chodzi o to, że pin wejścia będzie podpięty pod linie 5V w komputerze i jeśli będzie wykryty sygnał (to 5V) to wtedy na pinie przykładowo 13 będzie przez określony czas stan wysoki. Przez określony czas tylko. A jeśli stan tej lini 5V zmieni się na zero to wtedy znów na ten określony czas będzie stan wysoki...
Dzieki za pomoc. Wykonalem projekt jednak swoim sposobem tj. uzywajac czujnika pojemnosciowego, ktory jest podpiery do ne555. Czestotliowsc generowana przez ne555 jest zalezna od pojemnosci. Impulsy sa zliczane counterem w atmedze przez czas 1 sekundy ktory jest z kolei odliczany przez timer.
...jak ja mam to napisać?? Nie mam pojęcia o Timer'ach! Kubbaz napisał coś o tym ale słabo czaję... Pierwsze zdanie z postu kolegi matgaw , możesz włożyć między bajki , bo ma sie nijak do rzeczywistości , jeśli mówimy o ATMega8 i podobnych :D Poniżej dowód w postaci najprostszego zegarka na M32 , ale na M8 też powinien działać. $regfile = "m32def.dat"...
Na nie możesz policzyć? Chyba że nie wiesz jak :D Masz 8MHz. A przerwanie przychodzi z częstotliwością 125Hz (dlatego trzeba 125 razy odliczyć aby wyszła 1 sekunda). Preskaler Timera 256. 8000000/256/125 = 250. I dlatego jest Load Timer0 = 250 Teraz chcesz kwarca 7372800. Więc musisz tak kombinować aby uzyskać jakąś sensowną liczbę przerwań i sensowny...
Dopiero uczę się pisać w bscomie, a o tym ponownym ładowaniu timera pisało w pomocy. Timer przeładowuje się 125 razy na sekundę. Dodaje przeładowania timera i kiedy mam 125 dodaje 1 sekunde. To że wewnętrzny oscylator jest niedokładny wiem, ale aż takie przekłamania chyba nie powinny wystąpić.
$regfile = "m162def.dat" $crystal = 11059200 Config Graphlcd = 240 * 64 , Dataport = Portb , Controlport = Portd , Ce = 5 , Cd = 4 , Wr = 6 , Rd = 7 , Reset = 4 , Fs = 5 , Mode = 8 Cursor On Cls Dim D As Word , Z As Byte Config Timer2 = Timer , Prescale = 1024 Load Timer2 , 240 On Timer2 Sekunda Enable Interrupts Enable Timer2 Do Loop Sekunda:...
Witam wszystkich. Chciałem podzielić się swoją modyfikacją programu, schematu oraz płytki pcb tego zegarka. Myślałem o stworzeniu nowego tematu, ale stwierdziłem, że lepiej tutaj w odpowiedzi wszystko umieścić (jeśli moderatorzy stwierdzą inaczej, to stworzę nowy temat) Oto co zmieniłem: - dodałem obsługę jednego czujnika DS18B20 - wyeliminowałem problem...
Dodano po 40 Czemu bledne podejscie?? sam sie ucze i nie wiem do konca pewnych rzeczy
No dobra, czas napisać, jak to zrobić prosto i efektywnie: Używamy jednego przerwania - timera, zgłaszanego kilkadziesiąt..kilkaset razy na sekundę (w typ przypadku, o ile nie ma multipleksowania LED, może być np. 100 Hz). żadna pętla główna nie jest do niczego potrzebna. W procedurze obsługi przerwania odczytujemy wynik ADC, "robimy filtr dolnoprzepustowy",...
Co do wyłączenie światła po 30 sek. Dodaj dodatkową zmienną bit która będzie ustawiana np: na 1 po wyłączenia światła przez timer po 30 sekundach a dzięki niej nie będzie ponownie włączane światło przez wciąż otwarte drzwi (stan niski na wejściu uC). Dopiero zamkniecie drzwi ( stan wysoki na wejściu uC) spowoduje zmianę tej zmiennej na 0 dim 30SEK as...
Przejrzyj m.in. te strony: ATMEGA: 2, 97, 98,99,101 ATTINY: 2, 108, 109,110,112 tam są opisy rejestrów TCCR(timer counter register) Dodano po 49 w datasheecie oczywiście
Osobiście do swojego zegara dodałem moduł WiFi na ESP8266 w postaci płytki NodeMCU. ESP pobiera aktualny czas i datę z serwera NTP a następnie wysyła w postaci DCF do zegara. Nie trzeba wykonywać żadnych przeróbek na PCB. Koszt płytki na portalu aukcyjnym to ok 20zł. Wykorzystałem gotowy kod Hiroki Mori zamieszczony pod adresem: https://github.com/yamori813/ntp2dcf77.....
Wpisać magiczne "volatile" volatile int sekunda=0;
Zależy, co rozumiesz pod pojęciem "krytyczne czasowo" ;) Ale ok, dajmy spokój. A co do przykładu, imho najdokładniejsze będzie coś pomiędzy - przerwanie i licznik wystąpień plus timer odmierzający np. sekundy i ustawiający flagę zakończenia pełnej sekundy. Wtedy w pętli głównej obliczenia i zerowanie flagi pełnej sekundy (w tle cały czas impulsy się...
Ogólnie widziałem że używasz real-time do domierzania opźnień. nie, do opóźnień jest przerwanie timera 1 co 50ms. KEYBOARD_KEY_TIMEOV z przerwania obsługi klawiatury, jak po 15 sekundach nic nie naciśnięto, wystawiany jest kod klawisza : KEYBOARD_KEY_TIMEOV. natomiast propozycja milis() niestety nie przyniesie oczekiwanego rezultatu. najlepiej jest...
ok, poprawiłem i dioda się zapala, ale timer tutaj jest prymitywnie badziewny. Lepiej byłoby to zrobić tak, że dioda zapala się po kilku sekundach. Tylko wtedy trzeba zrobić odmierzanie czasu na timerze...Teoretycznie czytałem o tym i wiem jak to zrobić, preskaler na pewno na 1024, kwarc mam 16MHz, więc dzieląc częstotliwość przez preskaler otrzymam...
Ja wolę przerwania: Dim Sekunda as byte Config Timer1 = Timer , Prescale = 256 On Timer1 Odmierz_1s Enable Interrupts Enable Timer1 do loop end Odmierz_1s: Counter1 = Counter1 + 34286 Incr Sekunda Return Podałem ci "szkielet" programu do odmierzania 1 sekundy za pomocą timera1. Pamiętaj że procek musi go posiadać i musi być taktowany przez oscylator...
Dokładnie tak jak pisze Kolega emarcus. W moim przykładzie w programie operujemy na zmiennych minuty, sekundy. Ale do programowania czasu konwertujemy i tak wszystko do sekund. W ogólności można zrobić odwrotnie, tj. używać tylko zmiennej wyrażonej w sekundach i np. co sekundę konwertować tę wartość na wartość minut i sekund w celu ich wyświetlenia,...
Witam W zasadzie już zbliżam się ku koncowi stacji meteorologicznej z wykorzystaniem atmegi8 i PC. Z uwagi na funkcje jakie musze wykorzystać a wiec timer i USART wystapił problem. Wykorzystując timer1 generuje przerwanie co sekunde i licze czas aktualny. Podczas połączenia z komputera wysyłam na zasadzie: 1 znak z PC, a w odpowiedzi z Atmegi string...
Udało mi się zapisać pierwszą stronę pamięci, potem modyfikowałem program i chciałem zapisać kilka stron - za każdym razem zapisywała się tylko 1 strona poprawnie aż w końcu zapisuję tylko pierwszą stronę i to błędnymi danymi. Długa noc przede mną... wrzucam w zasadzie cały testowy kod, przepraszam za bałagan bo jest w nim pełno zakomentowanych kawałków...
Witam, mimo zdefiniowania zmiennej F_CPU = 16000000UL w Toolchain na Atmedze 328P, po uruchomieniu symulatora zakładka procesor wskazywała prędkość taktowania na 1 MHz. Zmieniłem to ręcznie, ale problem z prędkością dalej pozostał. Ze strony http://www.et06.dk/atmega_timers/ kalkulator wyliczł mi, że dla przerwań występujących co sekundę powinienem...
To jest proste jak świński ogon :D ahahahaha, ale napisz kawałek kodu. Czy masz tam jakiś LCD czy nie, czy masz tam jakiś Timer ustawiony do odmierzania sekundy czy Wait`ujesz :D Czy w dokumentacji czujnika pisze, że nadaje tez na końcu niewidoczne w terminalu znaki 13 lub 10? EDIT: aaa masz tu taki prosty. Napisałem przy śniadaniu więc błąd mógł się...
tzn. mam tak: Config Timer2 = Timer , Prescale = 64 ' 1 sekunda = 500 Timer2 = 6 On Timer2 Czas '250 x 8us = 2 ms , 256 - 250 = 6 Enable Interrupts Enable Timer2 w podprogramie Timer2 mam tak: Czas: Timer2 = Timer2 + 6 Incr Licznik_sd Incr Licznik_symbol_sd If Licznik_sd = 60000 Then 'Licznik dla zapisu co 120 sekund ( 60000 x 2 ) Flaga_sd_save...
Uwag miałbym więcej, ale może nie wszystko na raz bo nie ma czasu :D Nie wyświetlaj w kółko tego co ma się pokazywać bo w czasie kiedy będziesz wyświetlał mikrokontroler może coś przegapić. Ogólna zasada jest taka że komendy LCD używa się wtedy kiedy coś ma się zmienić na LCD Po co tyle tego Locate 1, 1 ? Można to zapisać tak: Call Odswiez_lcd a sub...
teraz musze jescze przerobić układ aby odliczał mi sekundę Config Timer0 = Timer , Prescale = 64 On Timer0 Sekunda Sekunda: Load Timer0 = 250 Incr Jednostki_czasu If Jednostki_czasu = 250 Then 'mam sekunde Jednostki_czasu = 0 End If tak chyba będzie dobrze?
Ok, poniżej przykład odliczania jednej sekundy, w zmiennej 'ilesekund' co jedno przerwanie zegara będzie dodawana jedna sekunda. Oto kod: Dim ilesekund As Byte ilesekund = 0 Config Timer2 = Timer , Async = 1 , Prescale = 128 On Timer2 Sekunda Enable Interrupts Enable Timer2 Do 'tutaj możesz dać warunek, np. if ilesekund=60 (1 minuta) to coś...
O, i taka krytyka jest mi wlasnie potrzebna ;) Dzieki za uwagi :) Manuala sobie postudiuje ale najpierw musze sobie znalezc w pdf-ie zeby moc wydrukowac bo z html-a nie bardzo sie chce czlowiekowi uczyc. Co do typow - rzeczywiscie - nie pomyslalem o tym :) I nie sadzilem, ze jest inna funkcja zmieniajaca osobno inne typy int :) Co do odmierzania czasu...
Nie rozumiem, dlaczego LED miałyby coś podgrzewać, to po pierwsze. Po drugie, zacznij od przerwania timera i np. 100 razy na sekundę zaświeć kolejną diodę i zmierz napięcie z kolejnego czujnika, a w następnym cyklu wyłącz tę diodę i zaświeć następną itd.
$regfile "m8515.dat" $crystal = 8000000 Enable Timer1 Config Timer1 = Timer , Prescale = 256 On Timer1 Sekunda Timer1 = 34286 dim sek as byte do loop Sekunda: Timer1 = 34286 Incr Sek Return Powinna byc rowna sekunda (wyliczone przez kalkulator avr) Ps. Timer startuje w momencie jego konfiguracji wiec jesli nie chcesz go uzywac odrazu,...
Cóż, a gdybym co sekundę synchronizował zegar w Atmedze (z danych GPS). W takowej odpaliłbym Timer i liczył np. od 0 do 15 milionów, - 15 milionów cykli to była by jedna sekunda, jednakże po ++ zmiennej dodałbym warunek przerywający cykl liczenia (w momencie otrzymania impulsu) i w ten sposób obliczył sobie część sekundy? Jeżeli licznik dobije do 15...
Witam Używam Attiny2313 do pomiaru dwóch temperatur z DS18B20. Wynik ( Integer ) przesyłam bez żadnej obróbki przez UART przewodem 40 cm do Atmega328. Atmega rozbija odebrane dane i jest obróbka Kod Attiny2313 $regfile = "attiny2313.dat" $crystal = 8000000 $baud = 4800 '********************* Konfiguracja magistrali 1-Wire Config 1wire = Portd.5...
Witam W Atmega 644 mam: EQU not found, probably using functions that are not supported by the selected chip Według noty Timer0 i Timer2 są 8-bitowe, więc można je "zamieniać" i mają oddzielne preskalery.
Program ma dużo błędów i jest źle napisany. Po pierwsze nie wiem w jakim celu używasz pętli while. Po drugie nie wiem jakie jest taktowanie procesora (zakładam że 1MHz a nie 1 000 000MHz :) ). Do takiego zadania wybrałbym prescaler timera0 na maksa (1024), i nie skracał cyklu. Wtedy miałbym przerwanie o częstotliwości ok. 3,8Hz (co ok. 0,26 sekundy)....
Miałem chwilę więc chciałem napisać szybko program na Aduino Mega2560, ale potem sobie przypomniałem, że tam mikroskopijny kwarc a błąd przy 16MHz dla 115200 jest za duży. Wziąłem więc Mega128 bo była wolna i pod ręką. Napisałem program w którym przez Charmatch odbieram string "1234567890" po odebraniu Entera. Żeby było uczciwie to jeszcze odpaliłem...
Tak, jak już pisałem, nie tędy droga. Trzeba zrozumieć, ze Menu czyli interfejs programu z człowiekiem powinno być tylko jego nakładką graficzną. Nie może być tak, że kiedy jesteś w Menu to program zaniedbuje cały system, na przykład nie pilnuje zadanych temperatur. Pomyśl co by było gdyby termostat sterował grzałką w akwarium a Ty sobie radośnie wszedłeś...
Projektuje uklad w ktorym potrzebuje osiem nizaleznych generatorow ktorych czestotliwosc bedzie zmieniana z klawiatury ( 8 klawiszy + i 8 klawiszy - ). klawiatura obslugiwana jest w przerwaniu. Chcialbym aby podczas obslugi klawiatury nie bylo zadnych zaklocen przebiegu i dodam ze przytrzymanie kalwiatury skutkuje zwiekszaniem lub zmiejszaniem czestotliwosci...
Dzięki za tak szybkie odpowiedzi :-) Rozumiem, ze zmienne zadeklarowales jako volatile, czy zapomniales o tym?:) Druga sprawa - komplikujesz. Ustaw 16-bitowy timer tak, zeby np. mial impuls co 1us, albo czesciej, w zaleznosci jaka potrzebujesz rozdzielczosc. Tak, zmienne mam jako volatile, ale rzeczywiście nie policzyłem, że counter tak szybko się przepełnia...
Możliwe że niektóre komendy wykorzystywane przy obsłudze karty SD zmieniają parametry konfiguracyjne RFM12b. Obsługa dla SPI w przykładzie który podałem wcześniej jest programowa. Więc jeśli masz wolne wyprowadzenia możesz przerzucić się na inne piny. Tzn. kartę SD zostawić na HARD SPI, a RFM puścić na SOFT SPI ? Zauważyłem też problem z timerem w...
Dołączę się do tematu! Nigdy jeszcze nie korzystałem z RTC, a właśnie muszę to zrobić, postanowiłem wykorzystać AT90LS8535... mój problem jest taki, że muszę zrobić układ, który użytkownik będzie mógł zaprogramować tzn. w jakich godzinach i w jakich dniach tygodnia (w cyklu tygodniowym: pon, wt. itd.) uP ma uruchamiać podłączone urządzenia... Pytania:...
Programujesz w Atmega timer 16 bitowy. Przy częstotliwości pracy 1MHz i preskalerze 1024 będziesz miał 1024 sygnały do zegara licznika na sekundę. Ustawiając wartość licznika 16 bitowego na 0fff dostaniesz przerwanie co około 1 min. Robisz sobie 2 rejestry jeden praca drugi zwłoka i sprawdzasz przy każdym przerwaniu jaki to tryb i czy liczba przerwań...
Mam taki problem: chcę w programie wykorzystywać przerwania od przepełnienia dwóch timerów (0 i 1). W timer0 mam obsługę wyśw. LED i opóźnienie dla klawiatury a w timer1, z założenia wywoływanym co 100ms, coś jakby zegar z minutami i sekundami, choć nie jest to najważniejsze bo to program testowy. Problem w tym, że przerwanie od timer1 wcale się nie...
Działa u Ciebie cały czas? Ja wrzuciłem do symulatora i działa tylko zaraz po uruchomieniu, tzn. jeden cykl 5-sekundowy. Jak na początku podam załóżmy 4 impulsy to po 5 sekundach zaswieca sie 4 razy port, ale następne 5 sekund już nie dziala :|
Witam Oglądam sobie dokumentację do PCF8563 i brakuje mi w nim generowania przerwań (na pinie INT) co sekundę jak robi to PCF8583. Wolałbym nie używać pinu CLKOUT skonfigurowanego do pracy przy 1 Hz. Kiedy używam PCF8583 ATMEGA w przerwaniu zewnętrznym generowanym przez PCF odczytuje sekundy, a jak trzeba to minuty i ... tak dalej. W PCF8563 widzę teoretycznie,...
Dodatkowy wpływ na błąd ma niedokładność częstotliwości generatora kwarcowego. Błąd w sekundach na dobę, wyraża się wzorem: \Delta=86400*(1-\frac{fwzr}{f}) \Delta - błąd w sekundach na dobę (wartość ujemna oznacza spóźnianie się) fwzr - częstotliwość wzorcowa (czyli to co ma być np. 4000000 Hz) f - częstotliwość rzeczywista kwarcu lub generatora kwarcowego...
Koledze chyba nie chce sie samemu poszukac. Ja nie znam sie na AVRach a po pietnastu sekundach znalazlem wszystko co potrzeba, np. The USART Transmitter has two flags that indicate its state: USART Data Register Empty (UDRE) and Transmit Complete (TXC). BF
[syntax=csharp]#include <avr/io.h> #include <avr/interrupt.h> #include "hd44780.h" volatile char dziesiatka = 0; volatile int sekunda = 0; char tekst; int main (void) { TCCR1A = ((0 << WGM11) | (0 << WGM10)); // ustawienie timer1 na CTC mode TCCR1B = ((0 << WGM13) | (1 << WGM12) | (1 << CS12)); // ustawienie...
(at)Rzeczo Dobra rada - zapomnij, że istnieją funkcje delay. Zaprogramuj timer, tak, aby co sekundę wywoływał przerwanie. W funkcji jego obsługi zapalasz kolejne diody - robisz przesunięcie bitów z wsuwaniem jedynki. Przy okazji możesz sobie włączyć buzzer, a wyłączysz go w przerwnaiu compare timera, po upływie pożądanego czasu. Zaletą teog rozwiązania...
Witam. Chciałem sobie zrobić prosty zegarek. Napisałem kod, podłączyłem wszystko na mojej płytce testowej i niby działa, ale ... Za szybko odmierza czas. 1 sekunda trwa tutaj dużo krócej. W ciągu 1 minuty w rzeczywistości, naliczy 170 sekund. ATmega ma ustawiony fusebit na wewnętrzny oscylator 8Mhz, do XTAL1 i XTAL2 mam podłączony kwarc zegarkowy. Kod...
Usiłuję napisać program takiego miernika i podczas analizy konfiguracji timer-ów w różnych tego typu projektach a szczególnie w jednym (ale o tym później) pogubiłem się trochę i pojawiły się wątpliwości. Do testów używam platformy arduino nano (atmega328p, 16MHz, 5V) i na chwilę obecną napisałem coś takiego: [syntax=c]#include <Wire.h> #include...
procesor atmega 32 całe to odliczanie czasu w sumie nie będzie widoczne w programie ale bardzo ważne więc chodzi mi bardzie o prostotę kodu Proszę poprawić swoje posty - regulamin p3.1.13 .
(at)dondu Twoje artykuły czytałem dokładnie ;-) Z kodu poniżej wycięte ustawianie portów (bonie widziałem żadnej różnicy w zużyciu prądu). Procek ustawione fusami na 8MHz wewnętrzny z podziałem przez 8 [syntax=vbnet] $crystal = 1000000 ' ustawiamy prędkość zegara $baud = 9600 ' ustawiamy prędkość transmisji $hwstack = 220 ' ustawiamy wielkość stosu...
odnosnie zegarka to ja bym to zrobil na timer1 - 16 bitowy licznik, i uzaleznil to od przepelnienia tylko nalezy ustawic preskaler na 256 wpisac poczatkowa counter=conter+34286 oczywiscie przy rezonatorze 8 MHz 8000000/256/(65536-34286) = 1 sekunda pozniej tylko zliczanie a i jeszcze jedna sprawa nalezalo by zmienic wartosc dwojkowa na kod BCD :)
Już działa:) Jeżeli chodzi o same ustawienia i inicjalizację Timera0 oraz przerwań to okazało się tak jak mi się wydawało że wszystko miałem dobrze. Jak zwykle w takich przypadkach błąd okazał się błahy i leżał w zupełnie innym miejscu. Otóż przy definiowaniu wektorów przerwań nie używałem definiowania ".org". Początek mojego programu wyglądał tak:...
Piszę ponownie, ponieważ jako, że z układem nie mam już problemu mam problem z napisaniem programu. W swoim rozwiązaniu chciałbym użyć dwóch przerwań od TIMER0 oraz zewnętrzne INT0. Teraz tu moje pytanie czy te dwa przerwania zaimplementowane w ten sposób jak poniżej, nie wpłyną na niedokładność pomiaru i czy jest może na to lepszy sposób. Mój kod:...
Witam, A zegar atmegi? Czas potrzebny na wykonanie 32768 przerwań to 1 sekunda co daje czas na jedno przerwanie 30.5 mikrosekundy. Sprawdź w dokumentacji ile at8 zużywa taktów zegarowych na wykonanie jednego przerwania. Należy pamiętać że przy pisaniu w C nie masz kontroli na tym co robi kompilator. Zapisanie rejestrów na stosie przy wejściu w przerwanie...
wlasnie problem nie polega na tym bo jak uzywam timera w trybie normal wszystko gra choc to dziwne wiem 8O jak napisze cos takiego: .INCLUDE "m32def.inc" .CSEG .ORG 0 rjmp Reset reti reti reti reti reti reti reti reti reti reti reti reti reti reti reti reti reti reti reti Reset: ldi r16, high(RAMEND) out SPH, r16 ldi r16, low(RAMEND) out SPL, r16 sbi...
Witam Mam płytkę Loggera GPS + SD + PCF8563. Jeśli chodzi o GPS i zapis na SD wszytko jest OK. Problemem jest ( i to pierwszy raz się z czymś takim stykam ) odczyt danych z z układu PCF8563. Otóż dla pewnych wartości sekund, odczytana wartość czasu - godziny jest większa o 40 ( czterdzieści ). Czyli jeśli czas jest 22:40:02 to jest wyświetlany poprawnie,...
witam kolegów może ktoś z Was podpowie mi jak zliczyć ilość naciśnięć switcha za pomocą timera w procku ATMega? czytam i czytam i nie mogę załapać - dużo jest o przerwaniach i pomiarze czasu, ale mnie chodzi tylko o to żeby zliczyć pojedyńcze impulsy - naciskam pryszcza i do pamięci, za kilka sekund naciskam 5 razy - ma się dodać do tego co juz było...
Witam - mam nie lada problem Atmega8, kwarc 4 MHz i przekaźniczki podłączone do pinów Atmega zlicza sobie czasy poszczególnych trybów pracy - wylicza wskaźnik OEE oraz Wykorzystania (maszyny) i wyswietla za pomocą pwm na woltomierzach. Wszystko "gra i buczy" ale chciałbym aby pokazywała mi wskaźniki tylko z ostatniej godziny a nie jak teraz "na żywo"...
Witam. Mam następujący problem - chciałem użyć timera 2 do pracy asynchronicznej z zewnętrznym rezonatorem kwarcowym (zegarkowym) o częstotliwości 32,768 kHz. Czyli ATmega powinna być taktowana wewnętrznym szybkim oscylatorem, a jedynie ten timer zegarkowym. Kod: #include <avr/io.h> int main (void) { DDRD |= (1 << 0);...
Witam. Słuchajcie, zamówiłem podobną obudowę w folplexie. Wymiary - szerokośc 150 mm, wysokosc 100 mm, głębokośc 85mm - plexa biała grubośc 5 mm - cena 25 zł. Rozważałem czerwoną plexę, ale mieli tylko gr. 3mm - no i efekt podświetlenia byłby niewiadomy. Mój zegareczek ma ATmega 32, 8 cyfr na MAx 7219, godzina: minuta: sekunda, dzień-miesiąc-rok, budzik,...
Witam Testując kod Kolegi pusiek1974 do odbioru czasu i daty NTP, chciałem go rozbudować i dostosować do swoich potrzeb. Na początek jako, że kod używa Wait'ów, których chciałem się pozbyć, chciałem dodać wywołanie przez flagę od Timer'a. [syntax=vbnet]$regfile = "m16def.dat" $crystal = 8000000 $hwstack = 64 $swstack = 64 $framesize = 64 Baud = 19200...
$lib "glcdks108.lbx" $lib "double.lbx" '$lib "i2c.LBX" $crystal = 16000000 $regfile = "m32def.dat" $include "font8x8.font" Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 2 , Ce2 = 3 , Cd = 5 , Rd = 6 , Reset = 1 , Enable = 7 Disable Adc Config Pinb.1 = Input 'wtryskiwacz...
Szanowni koledzy czy ktoś z was może mi powiedzieć jaką mogę osiągnąć precyzję przy odmierzaniu czasu przy wykorzystaniu układu ATmega16 z zewnętrznym zegarem 8.000 MHZ(rezonator kwarcowy)? Morduje to już drugi dzień i nie mogę zrobić tego w sposób precyzyjny - na każde odmierzone 10 minut atmege spieszy o ok 20s - taka zwłoka jest dla mnie niedopuszczalna...
Jest możliwość zrobienia stopera/minutnika z poczwórnym wyświetlaczem 7-segmentowym używając mikrokontrolera z rodziny atmega? Wyświetlacze najlepiej multipleksować w przerwaniach timera, żeby mieć pewność, że każda cyfra będzie wyświetlana jednakową ilość czasu. Odmierzanie czasu dla stopera/minutnika oczywiście też trzeba oprzeć na przerwaniach timera....
Tak trudno się domyślić że to są setne sekundy, gratuluję mm - setne sekundy :-) W jakim języku? Jidysz? Gby było GG:MM:SS:ss to można by sie domyśleć ale mm? Na płytach CD czas podaje sie w formacie godziny,minuty,sekundy,ramki z ofsetem 0:00:02:000. Można więc mieć wątpliwości o co chodzi. Dodano po 7 Setne sekund , timery z sekundami są i to dużo...
Witam! Z tego co zauważyłem, a to: '-------------------------obsługa przerwań--------------------------------... '''''''''''''''''''''''sekunda - przerwanie od zegara'''''''''''''''''''''''''' Calasekunda: Cala_sekunda = 1 Stop Timer0 Impp = Tcnt0 Tcnt0 = 0 Start Timer0 Liczba_taktow = Capture1 Capture1 = 0 Return wg. mnie powinno być: '-------------------------obsługa...
Witam, Potrzebuję wykonać prosty układ z przekaźnikiem, który mierzy temperaturę i w zależność od jej wartości zmienia stan przekaźnika, po czym układ ma przejść w stan oszczędzania energii na czas 5 sekund, po tym czasie ponownie ma wykonać wcześniejszą czynność. Sam pomiar temperatury i sterowanie przekaźnikiem są bardzo proste, ale nie wiem jak skonfigurować...
atmega8 timer sekunda timer atmega przerwa programować timer atmega
amplituner pioneer gramofon parametr maszynowy strumienica zamiast katalizatora
zgrzewarka transformatorowa pralka electrolux ewt1262tdw
Mercedes Vito W639 A/C Fans Not Starting – Fuse, Relay, Sensor, SAM Faults Oznaczenia termików KSD301, G4A w pralko-suszarce – jak odczytać i dobrać zamiennik