A bez przerwań jak to zrobic??
kamyczek: tego nie wiemy, bo nie widzimy kodu. Na zdrowy rozsądek timer powinien działać ciągle, również w czasie obsługi przerwania.
Ja aby byc pewnym czy procek dziala czy nie zrobilbym mruganie dioda na przerwaniu. Dac odliczanie 1 sekundy i wszystko byloby jasne.
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...
W zasadzie to jest jeszcze nieco bardziej skomplikowane. Można ustawić jakiś tryb CTC-albo od ICR albo od COMP- i po osiągnięciu tej wartości licznik się wyzeruje. Ale jeśli się wyzeruje np. po osiągnięciu wartości wpisanej w ICR to jeśli wartość wpisana w COMP będzie mniejsza niż w ICR to też wygeneruje żądanie obsługi przerwania w TIFR. Jeśli na to...
A nie łatwiej jest policzyć DO ilu ma liczyć a nie OD ilu? :) i robić przerwania COMP a nie OVF? Ja tak robię i na kwarcu 4MHz timer1 odlicza sekundy bardzo ładnie. Ale u Ciebie timer1 wydaje się mieć dobrze ustawianą wartość. Przy prescalerze 256 musisz mieć 15625 taktów zegara, aby osiągnąć sekundę. W drugim coś mi nie gra. Odliczasz od 0x0F czyli...
Poza tym to: TCNT0 = 130; Powinna być pierwszą instrukcją w przerwaniu, a tak w ogóle polecam poczytanie o trybie CTC - nie będzie trzeba martwić się o ciągłe ładowanie wartości timera. EDIT: A problemem właściwym jest nadmiarowy średnik, o tu: if(licznik == 375); jak go wywalisz to będzie w miarę OK. A zmienna nie musi być w tej sytuacji volatile,...
Witam Możesz również zastosować zewnętrzne dzielniki w postaci np. CD4040. Oczywiście dwa timery do zliczania przerwań i jeden do odliczania 1 sekundy. W każdym razie przy wejściowym dzielniku prawdopodobieństwo kolizji (wystąpienia dwoch przerwań jednocześnie będziem mniejsze. Przy tych układach da się uzysakć realnie dokładność 2Hz a rozdzielczość...
Ustaw okres PWM na timerze 1 tak, żeby był podwielokrotnością sekundy, czyli n * okres = 1 sekunda W przerwaniu timera odliczaj od n do 0, a jak odliczysz - wywołaj procedurę, który ma być uruchamiana raz na sekundę i przeładuj licznik na n. Aha, no właśnie ktoś coś podobnego napisał powyżej, tylko ja proponuję zostawić timer 1, który pędzi PWM.
Co jest źle w tym programie? Moim zdaniem wszystko, masz źle zaprojektowany algorytm, napisałeś wszystko w procedurze obsługi przerwania (włącznie z funkcjami wait). Pozatym program tak jest napisany że jeśli licznik "Licz" doliczy do 5 (sekund) to zacznie się wyświetlanie. Pozatym zamiast tego while dużo wygodniej użyć for.
Nie do końca tak, obsługa przerwań powinna być możliwie krótka, ale realizować założone zadanie. Same ustawienie flagi i pooling w main jest tak samo złym podejściem jak delay w przerwaniu. Ale nie komplikujmy :) Jeśli masz odliczać co 1 sekundę, to dlaczego po prostu przerwanie timera nie zrobisz co sekundę, przy każdym przerwaniu dekrementujesz licznik...
Wartość dla 1 sekundy: OCR1A=((częstotliwość procesora)/preskaler)-1 Wartość dla 4 sekund OCR1A=((częstotliwość procesora)/preskaler)-4 Jedynka w podanym przeze mnie wzorze nie oznacza 1 sekundy. Jeden trzeba odjąć z innych względów. Po prostu licznik nie zaczyna liczyć od 1 tylko od 0, więc odliczanie np. do 5 oznacza (0 1 2 3 4 5), czyli 6 impulsów....
Witam wszystkich serdecznie. Wraz z kolegą od kilku dni głowimy się nad pewnym problemem i nie potrafimy znaleźć idealnego rozwiązania. Naszym zadaniem jest zaprogramować układ STM32F4 Discovery tak, aby działał jak alarm. Otóż wymyślona przez nas zasada działania mówi, że po wykryciu ruchu (wciśnięciu przycisku) układ powinien odliczać 10 sekund dając...
Liczy co 2 bo użyłeś w obsłudze przerwania Incr _sec, a instrukcja Config Clock sama odlicza sekundy, minuty i godziny w systemie 24h.
Wszystko co napisałem powyżej pozostaje w mocy. Tryby normalny i CTC działają przy odmierzaniu czasu podobnie: obydwa tryby odliczaja ileś tam tyknięć rejestru TCNT i generują przerwanie. W przypadku trybu normalnego to liczenie następuje od wartości ustawianej w TCNT do wartości 0 (256), a w trybie CTC od wartości 0 do OCR (lub ICR). Zacznijmy od tego,...
Najprościej to chyba tak: [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> #define TIMERSTART 6 volatile uint8_t FLAGA_50 = 0; volatile uint8_t FLAGA_1000 = 0; // funkcja obslugi przerwania TIMER0_OVF 8MHz / 64 * 250 wychodzi co 2ms // dla innego taktowania nalezy ustawic inny preskaler i/lub inne liczniki stawiania flag ISR(TIMER0_OVF_vect)...
Rtc co sekundę wysyła sygnał który można podać na przerwanie lub ma dowolne wejście procesora i sprawdzać stan w głównej pętli. Odczytanie stanu rtc co sekundę zajmie nie więcej niż 0.1-1% czasu pracy procesora.
Timer + przerwania + funkcja obsługi przerwania ISR(), a nie sprawdzanie jego flagi. Zobacz przykład: http://mikrokontrolery.blogspot.com/2011... A ode mnie w prezencie 25pkt, bo masz zero, ale używasz języka C :)
Moim zdaniem koncepcja powinna być taka: 1. Obsługa przetwornika analog-cyfra. Na początek dobrze żebyś umiał dobrze zmierzyć liczbę impulsów. Nie wiem dokładnie jaka jest specyfika Twojego sygnału, jaką amplitudę mają owe szumy, skąd się biorą i czy nie warto by ich po prostu potraktować filtrem dolnoprzepustowym, a jeśli mają odpowiednio niską amplitudę...
Jestem początkującym, więc za dużo Ci nie pomogę z kodem, ale jedno wiem na pewno ;) Odlicza Ci 2 sekundy, bo tak ustawiłeś OCR1A. Mając kwarc 14,745,600 Hz, ustawiłeś preskaler na 1024. Czyli 14400 cykli, to 1 Hz. Przy 28799 w Twoim programie, masz prawie 2 sekundy. To tak w międzyczasie, póki inna osoba Ci pomoże.
Nie należy odliczać na timerze sprzętowo 5 sekund, bo i tak musisz odliczać na timerze czasy krótsze do innych celów - 5 s odliczysz programowo w przerwaniu timera zgłaszanym np. z częstotliwością 100 lub 1000 Hz. Preskaler wygodnie jest ustawić tak, żeby okres zegara wejściowego timera wynosił np. 1 us lub 10 us - wtedy łatwo liczy się i programuje...
Spróbuj na razie: [syntax=c] char tekst[10]; sprintf(tekst,"%d", sekunda)[/syntax]
Ja również zrobiłem kiedyś zegar na tym mikrokontrolerze. Działa już bezawaryjnie od około 2005 roku. Ja uczyłem się programować ten układ na podręczniku "Podstawy programowania mikrokontrolera 8051" panów Gałka. Tam właśnie jest opisane użycie tajmera do odliczania czasu - korzystając z kwarca 11,0592 można bardzo prosto uzyskać przerwania co dokładnie...
podczas przegladania internetu-SDI-pojawia się komunikat "trwa zamykanie systemu.zapisz wszystkie programy...,Zamknięcie zostało zainicjowane przez Zarządzanie NT/SYSTEM.Windows musi byćuruchomiony ponownie ponieważ UsługaZdalne Wywołanie Procedur RPC została nieoczekiwanie przerwana" zegar odlicza 59 sekund i win się zamyka . nie zauważyłem tego komunikatu...
przycisk musisz trzymac, bo procek wisi w funkcjach opozniajacych (delay()). uzyj przycisku ktory ma przerwanie, wtedy problem bedzie rozwiazany. ewentualnie musisz swoje odliczanie sekund przerobic - na przyklad na timer w tle, ktory daje przerwanie, w ktorym to przerwaniu sa zliczane owe sekundy - tym sposobem tez bedzie rozwiazane. procek na raz...
Witam, piszę całkiem spory (w moim mniemaniu) program do sterowania silnikiem i paroma jeszcze innymi rzeczami (aktualnie na ATmega32L i 8MHz wewnętrznego oscylatora) i mam niezrozumiały dla mnie problem z obsługą przerwania od timera, kod obsługi przerwania wygląda mniej więcej tak: ... .org 0x0012 rjmp t1Ovf ... t1Ovf: push r16 push r17 in R16,...
Zrób to tak: [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 4000000 Config Timer0 = Timer , Prescale = 256 'onfiguracja timera, przescaler 256 On Timer0 Odmierz_1s 'włączamy timer0 Dim Licz_8ms As Byte 'definiujemy zmienną pomocniczą Dim Sekundy As Byte Enable Interrupts 'włączamy zezwolenie na przerwanie Enable Timer0 Load Timer0 = 125 'ładujemy...
Wracajac do tematu czy moglbym prosic przynajmniej o pseudo kod obslugi przykladowo drgania w przyciskach , wysterowania przekaznika np przez 2s oraz komunikacji 1wire jednym timerem (atmega8 ma az 2 timery wiec pewnie szybko skoncza sie jego mozliwosci chcac napisac kod bez zatrzymywania) Cały dowcip polega na tym że z tego 8 bitowego timera możesz...
Przeczytaj te artykuły: http://mikrokontrolery.blogspot.com/2011... http://mikrokontrolery.blogspot.com/2011... Timer2 jest 8 bitowy więc zlicza 256 stanów. Ustawiając preskaler timer2 na maksymalną wartość 1024 z poniższych obliczeń otrzymasz: ilość sekund = 1/(32768 /1024 /256)...
Przy podawaniu ciągu impulsów o stałej szerokości serwo powinno stań po osiągnięciu zadanego kąta. Stawiam na źle ustawioną częstotliwość procesora w bajtach konfiguracji. Spróbuj np. odliczać po 50 przerwań timera i migać diodą - powinna zmieniać stan co sekundę.
Miało być: if (-- div_1s == 0) - poprawiłem w listingu powyżej. Zmienna div_1s służy do odliczania sekundy, czyli po wyzerowaniu inicjujesz ją na wartość równą częstotliwości przerwań. 150Hz to decydowanie za mało do poprawnej obsługi wyświetlacza. Częstotliwość przerwań powinna wynosić ok. 300 lub 400 * liczba_cyfr - inaczej wyświetlacz "pływa" lub...
Na moje oko, to w tym programie nic nie działa poprawnie - deklarujesz stałe w procedurach jako zmienne lokalne,a więc procesor musi je tworzyć od nowa przy każdym wejciu w procedurę, odświeżasz wyświetlacz w takim tempie, że nie zdąży zaświecić - kolejne zapisy różnych danych do portów. Sekundy odliczasz od -1. Przerwanie chcesz zgłaszać co 43 cykle,...
Facet, zacznij od przejrzenia jakieś dokumentacji do '51. Nie dziwne, że Ci tyle późni bo przerwanie jest u Ciebie generowane co 71,111111 ms, a nie tak jak zdaje się chciałeś co 66,66666ms. Po pierwsze to trzeba ładować każdorazow licznik w obsłudze przerwania, a po drugie to dlaczego chcesz liczyć takie bezsensy jak 66,6666ms? Nie prościej odliczać...
Witam Możesz to zrobić w podprogramie albo w przerwaniu. Jeśli w podprogramie to po pojawieniu się sygnału do otwarcia bramy daj sygnał do jej otwarcia, zapal lampę i skocz do podprogramu, w którym zapalisz lampę odczekasz sekundę, zgasisz ją, odczekasz sekundę i powtórzysz to np. 3 razy. Problem polega na tym, że jeśli będziesz w takim podprogramie...
Potrzebne konkretne! ( początkowe rozwiązanie ) Odliczanie czasu ma nastąpić po przerwaniu obwodu ,jak podłączyć triaka z układem czasowo/sterującym ? .
Robię pewien projekt a dokładnie stacje lutownicza na regulacji fazowej i enkoderze i regulator PID. Regulacje zrobiłem enkoder działa regulator PID też. Chciałem dodać też pomiar prądu, ale wpadłem też na pomysł zeby zrobić odliczanie czasu działania urządzenia. Dodałem ten kod programu, przerwanie co 1ms z atrybutem NO_BLOCK. W sumie teraz wykorzystuje...
Witajcie koledzy, mam problem z przesiadką z Atmega8 na Atmega168. Ślęczę nad datasheetami jednej i drugiej i już nie ogarniam. Fragment mojego kodu z Atmega8 odpowiedzialny za przerwania: [syntax=c] TCCR1B=(1 << CS10 |1 << CS11 | 1<< WGM12); TCCR2=(1 << WGM21 | 1 << CS22); OCR2=50; OCR1A=15625; SREG=(1 << 7); TIMSK=(1...
jeszcze jedna uwaga do kodu: ISR(INT0_vect) { ... for(a=0; a<500; a++) if (bit_is_clear(PINB, 2)) count++; if(count>=150) switch_mode(); ... } Poradziłeś sobie z drganiami przycisku, ale na przyszłość wystrzegaj się czekania w przerwaniu, gdyż stopujesz cały mikrokontroler na ten czas....
Zmienna sek powinna być volatile: http://mikrokontrolery.blogspot.com/2011... ssek natomiast zrób statyczną w funkcji przerwania: unsigned tam gdzie liczby nie będą ze znakiem. Wprawdzie ani godziny, ani minuty, czy też sekundy nie przekroczą maksymalnych ich wartości, ale porządek warto mieć. Poza tym, taktujesz swój mikrokontroler...
No to, jak napisał xury , dowolny timer + tryb CTC (z odpowiednimi wyliczeniami) i masz przerwanie generowane co 1s.
Witam. Napisałem pewien program działający na atmedze8. Do PD3 podłączyłem przycisk, do PB1 diodę katodą. Program w przerwaniu taktowym asynchronicznie odlicza czas inkrementując zmienną co sekundę. Po wciśnięciu przycisku (PD3) na (PB1) ma się pojawić stan niski czyli dioda ma świecić przez określony czas (t) i tak się dzieje, program działa bez zarzutu...
tak, przyciskiem. Po przerwaniu na czas jego wykonania wyłącz przerwania przez CLI a potem włęcz ponownie przez SEI. niestety nie pomogło. Dodam jeszcze że te przerwania się właściwie potem wykonują... teraz dopiero to zauważyłem. Przykładowa sytuacja 1) Licznik odlicza w górę. Przerwanie. Następuje zmiana kierunku licznika 2) Licznik odlicza w dół...
bo dane na porcie szeregowym pojawiają się dopiero po zakończeniu ruchu( domyslam się, że to przez funkcję delay) i to w "bliżej nieokreślonym" języku. Tak jakbym pomylił się w określeniu prędkości w Serial. begin . Drugą częścią komplikacji jest to, że nie ma mam pojęcia ( gdy uda mi się rozgryźć enkoder ) jak opisać ograniczenie obrotu. To co jest...
Po pierwsze, timer liczy od 0 do 255, ale to oznacza 256 impulsów pomiędzy przepełnieniami, czyli powinno być 256, a nie 255 * 128us. Po drugie zaokrągliłeś wynik z 32.64 do 32 przed dzieleniem, co w efekcie dało niedokładny wynik ilości przepełnień. W rzeczywistości częstotliwość przerwań można obliczyć dużo prościej: ( 8000000 / 1024 ) / 256 = ok. 30,5176.....
Nie czytałem dokładnie tematu, ale przedstawię jak ja kiedyś sobie poradziłem z podobnym przypadkiem. Problem: spieszy o 0,5 sek/h Policzmy jaką masz odchyłkę na 1 godzinę w taktach zegara: 0,5 sek * 14.745.600taktów / 1h = 7.372.800 taktów/h A ponieważ robisz w tym czasie 3600 przerwań, a każde odlicza 256 taktów to oznacza, że na każde przerwanie...
Przepraszam za śmietnik ale próbowałem chyba wszystkich możliwości i trochę kombinowałem :) [syntax=c] #include <Timers.h> #include <DallasTemperature.h> #include <OneWire.h> #include <Wire.h> #define ONE_WIRE_BUS 6 //Ustawienia pinu termometru OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); #include <LiquidCrystal_I2C.h>...
Można było pokusić się o podtrzymanie samego procesora, ale n.p bateria nie wystarczyła by na długo, a nie można przecież uśpić procesora (odliczanie czasu). Też zrobiłem zegar na ATtiny2313 ale właśnie z podtrzymaniem. Po wykryciu zaniku zasilania mikrokontroler wyłącza wszystko co zbędne i zmniejsza sobie taktowanie, pozostawiając jedynie przerwania...
Program ma działać następująco: 1. Wyświetl stałą wartość początkową - jakieś 4 cyfry bez znaczenia jakie np 1234 2. Zacznij odliczać czas - to ma być realizowane za pomocą timera T0, który ma zgłaszać przerwania 3. Wyświetlaj sekundy na dwóch cyfrach z prawej i minuty na dwóch cyfrach z lewej W punkcie 2 napisano, że T0 powinien odliczać czas, czyli...
timera powinien ustawiać flagi (np stan=port_z_czujnikami) i koniec przerwania (żadnego wyłączania przerwań i innych śmieci). Drugi timer odlicza sekundy (czy tam inne dt dla kolejnych diod), led_port(i)=schody(i) (środkowe 6 bitów, więc trzeba przesunąć i maskować); + flaga wejścia Generalnie ta idea jest bezsensowna. Zauważ że absolutnie zupełnie...
Schemat: http://tuxgraphics.com/common/src2/artic... Nie ustawiałem fusebitów, ale mam pewność, że częstotliwość się zgadza, gdyż odliczanie sekundy z przerwania działa idealnie (kod z jednego z programów autora schematu). Co do kodu do UARTa, oczywiście zmieniłem 8 na 12,5. Generalnie na sprzęcie ładnie hula serwer HTTP, klient...
A co i z czym miałoby się gryźć przy jednym przerwaniu? Przekombinowujesz. Podałem rozwiązanie, które (bez zmiennych czasów) wymaga trzech linii kodu w funkcji main (wywołanie SysTick_Config, ustawienie SleepOnExit i _WFI()) i po 5 linii kodu na przekaźnik w obsłudze przerwania. Nie ma żadnych powodów, by przy tak niekrytycznym czasowo działaniu urządzenia...
Dzieki Atom1477 miałeś racje chodziło o fusebit divide clock by 8. Teraz waity odliczają sie poprawnie .program tez chodzi ok. tylko te przerwania które miały być co sekundę sa teraz wyzwalane według oscylatora wewnętrznego a chce zeby były jak w 8 z kwarcu 32768 czy Config Timer2 = Timer , Prescale = 256 , Async = On jest nieprawidłowa konfiguracją...
W jednym z tematów znalazłem coś takiego: Proponuję nie wprowadzać ludzi w błąd. Dokładny pomiar czasu przy pomocy uC '51 tylko i wyłącznie na kwarach 11,0592 itp i żadnych 12 ani 24 MHz!! Nie wierzę, twierdzę wręcz, że to herezja :D Jest tam też link do FAQ http://www.elektroda.pl/rtvforum/viewtop... a w tym FAQ czegoś mi brakuje....
[syntax=basic4gl]Config Timer0 = Timer , Prescale = 1024 Enable Timer0 : On Timer0 Przerwanie0 Dim Tmp As Word Tmp = 0 Dim Ptimer1 As Word Ptimer1 = 0 Do If Klawisz = 0 Then If Ptimer1 = 0 Then Ptimer1 = 100 End If If Ptimer1 < 95 And Klawisz = 0 Then Tmp = 1 End If End If If Tmp = 1 And Ptimer1 < 85 And Ptimer1 > 70 Then If Klawisz = 1 Then...
Dziękuję za odpowiedzi. Kubbaz co do INT0 i INT1, to są one podłączone na płytce z AVT pod LCD. Więc do testów chciałem skorzystać z wolnego INT2. Jak już będzie jako tako działać, to zrobię wtedy już nową płytkę i będzie można wykorzystać wszystkie wejścia przerwań. Niestety stronka podana przez Ciebie nie działa (bład 403- brak praw dostępu). Co do...
Zakładam, że problem jest w obsłudze przerwania od Timera0. Spróbuj troche zmodyfikowanej wersji, po prostu podmień podprogramy i daj znac. Ponizej podprogram: Sekunda: [syntax=basic4gl]stop Timer0 TCNT0 = 131 Gosub Wyswietl Incr Wys '*****Liczymy 1 sekunde**** Incr 2ms If Wys = 8 Then Wys = 0 End If If 2ms = 501 Then 2ms = 0 Sekundyj = Sekundyj - 1...
tak on ma odliczyć tylko krótki odcinek czasu Dodano po 4 ustawie go tak żeby odliczał 1,2 sekundy i wystawił przerwanie które wyświetli brak sygnału. TCNT1 = 0x00; while(PIND&(1<<RF12_IR... sygnał ma przychodziś co 1 sek i program wyskakuje z tej pętli jeśli nie, to timer dojdzie do 1,2s i wyświetli się brak sygnału {...
a czy trzeba jakoś zaincjować ten RTT? w nocie katalogowej pisze żeby wpisać do rejestru RTTC_RTMR wartość 0x0008000 to wtedy okres odliczania będzie równy ok 1 sekundzie. a AIC też trzeba jakoś zkofigurować żeby przyjował przerwanie od RTT ?Czy trzeba coś jeszcze konfigurować>?
Sekundę można odliczać na timerze1 (16-bit)... Już gdzieś na forum pisałem ale niech będzie... Tryb fast pwm, ICR1 jako TOP równe 62499... Prescaler na 64 i włączone przerwanie OVF... Będzie wywoływane co sekundę... oczywiście dokładność nie będzie rewelacyjna...
nie jestem pewien czy warunek if(miesiac >2 ...) jest właściwy...nie powinno być if (miesiąc=2 ....)? Narazie zrobiłem sobie zwiększanie zmiennych (począwszy od sekund do lat) od zadanej daty i godziny do aktualnej daty i godziny... [syntax=basic4gl]TU BYŁ MÓJ NIEISTOTNY JUŻ I NIEDZIAŁAJĄCY KOD[/syntax] Dodam, że po obliczeniu jaki czas minął, stoper...
Czas odczytu DS jest określony na 750ms, przecież nie mogę wyłączyć przerwań na taki czas... Chodzi Ci o to, że będę sobie sam sekundę odliczał timer1, a potem zwiększał jakąś zmienną która będzie odp za moje sekundy i tak dalej? Trochę zabawy zwłaszcza że każdy mies ma inna liczbę dni itp. Chyba, że coś nie zrozumiałem do końca. Edit: Sprawdzałem teraz...
witam. dziś także juz nerwa złapałem z tym timer0 i wierzyłem ze na elektrodzie będzie jakieś rozwiązanie, ale z tego co czytam nie tylko ja tak mam;/ .wracając do tematu: 1.próbowałeś zmienić port dla 1-wire? 2.jesli problemem jest już zamiana pinów to być może załączenie timer1 pomoże i na nim odliczanie sekundy,przykładowe uruchomienie: Config Timer1...
1ms spokojnie przerwanie zewnętrzne Ci zliczy (piny 2, 3) https://www.arduino.cc/reference/en/lang... dalej myślę, że musisz odliczać czas np. licznik 1 i przerwanie powiedzmy co 1 sekundę (konfigurujesz przez rejestry TIMER1), tam sobie liczysz sekundy i za każdym razem (może być w loop() ) przeliczasz...
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ś...
Witam. Ja nie programowałem AVRów, lecz '51, możliwe, że opisany tu sposób da się również wykorzystać w AVRach. Problem bym rozwiązał w ten sposób, że w procedurze obsługi przerwania zewnętrznego umieściłbym start timera, oraz włączenie podświetlenia. Timer byłby odpowierdnio załadowany w ten sposób, że po czasie równym 2 sekundy generowałby swoje przerwanie....
Czysto informacyjnie - licznik domyślnie liczy w górę, stad odejmowanie wartości CTC(właściwa wartość do odliczenia przez licznik) od 65535. PS: LordBlick czyli w końcu twierdzisz (nie używam CTC),że powinna być wartość 49910? Nie twierdzę nic w tej kwestii, ponieważ obsługa tego przerwania w Bascom nie jest dokładna i nie nadaje się do odliczania sekund...
Witam, Chciałbym napisać program (w Codewarriorze) który na wyświetlaczu 2x16 na grónej linijce będzie odliczał sekundy a na dolnej wyświetlał dane zczytywane z klawiatury matrycowej. Jak to najprościej zrobić? Wydaje się że trzebaby użyć przerwań wewnątrz których byłby napisany podprogram który by co sekundę zmieniał stan sekundnika, a w głównym programie...
Witam Mam jakiś błąd w programie ale nie mogę dojść gdzie. Przed mian'em mam obsługę przerwania dla SIG_OUTPUT_COMPARE1A która teoretycznie powinna się wywoływać co 1s. Timer1 ustawiony w tryb compare na preskalerze 256, ustawienia timera są na początku maina. SIGNAL(SIG_OUTPUT_COMPARE1A) // sygnal porownania od timera 1A { sec++; sec%=60;...
Zacznij od tego aby na przerwaniach od timera, np 1ms liczyć czas przez jaki przycisk jest naciśnięty, niech będzie to zmienna "czasGora". Jeśli zwolniony zerujesz czas. Gdy jest naciśnięty przez 2000ms, ustawiasz flagę "rozjasnianie". W przerwaniu gdy flaga ta jest ustawiona zwiększasz wypełnienie PWM do MAX. Pierwsza część zadania zrealizowana. Następnie...
http://obrazki.elektroda.pl/7011174400_1... Cześć ! Dziś chciałbym zaprezentować swój najnowszy projekt, którym jest świąteczna choinka LED. Jako, że według świątecznego zwyczaju swoich bliskich obdarowujemy prezentami ów ozdoba została wykonana dla moje dziewczyny, która bardzo lubi klimat świąt i wszystkie ozdoby z nimi związane....
Powtarzam: w tym programie sporo rzeczy jest źle. Pokazałem Ci powyżej wyświetlanie w 5 liniach kodu. Przy podłączeniu segmentów do dwśch portów wystarczy zamiast tablicy bajtów zadeklarować np. tablicę struktur dwubajtowych. Wartości cyfr do wyświetlania też powinny byś w tablicy - wtedy Twój kod skraca się np. 10-krotnie. Timer musi pracowaś w trybie...
Witam. Próbuje napisać zegarek na PICu. Używam oscylatora 4 MHz. Nie wiem jak zrobic odliczanie jednej sekundy. Pisałam o tym na innym forum i otrzymałam taka odpowiedź: "Jeśli używasz kwarcu 4 MHz to ustaw preskaler na dzielenie przez 64. W takim przypadku do licznika/timer'a będą przychodziły impulsy o częstotliwości 15625 Hz (1000000 / 64 = 15625)....
Już działa!!! ;) ,a przynajmniej osiągnąłem zamierzony efekt. [syntax=basic4gl]$regfile = "attiny2313.dat" 'wybór procesora attiny2313 $crystal = 8000000 Config Pinb.1 = Output 'buzzer mający piknąć 3 razy po odmierzeniu czasu nop Buzzer Alias Pinb.1 Dim Sekundy As Byte Dim Minuty As Byte Sekundy = 0 Minuty = 0 Buzzer = 1 Config Timer1 = Timer , Prescale...
? nie wiem co to za koslawy kod. Po 1, nie uzywa sie goto. 2, Ja na twoim miejscu bym uzyl timera 2 w trybie asynchronicznym, z zegarkowym oscylatorem. Ustawil przerwanie z timera na 1 sekunde. Pozniej w przerwaniu dodal bym zliczanie do 30 sekund. Gdy nie ma 30 Sekund osiagnietych flaga=0, gdy jest powyzej 30 flaga=1. Przycisk 1 by startowal odliczanie...
Poruszę tylko 2 sprawy: 1)Jeżeli do odmierzania 1 s użyłeś Timer2 "napędzany" kwarcem 32768Hz , to po kiego grzyba procedurę odliczania sekund podkładasz pod przerwanie INT0 :?: On Int0 1s Zamiast włączać przerwania INT0 , włącz przerwania Timer2. On Timer2 1s Config Timer2 = Timer , Async = On , Prescale = 128 Enable Time2 '... 2)Myślałem, że już widziałem...
Witam, czy może ktoś spojrzeć na poniższy kod i napisać mi co w nim źle napisałem? Moim zamiarem było ustawienie przerwania na Timer2 z zewnętrznym kwarcem zegarkowym, aby co sekundę zmieniał wartość jakiejś zmiennej i wyświetlał ją na LCD. Niestety nie wiem dlaczego ale program nie odlicza mi sekundy ale mniej więcej minutę ;] Poniżej uproszczony kod...
Kolego jacynka84 . Układy MCS-51 nie posiadają konfigurowalnego preskalera. Jest tylko dzielnik przez 12. Wykonałem go na procesorze 89c2051 z 12MHz kwarcem. Program sam do niego pisałem i wydaje mi się że powinno być wszystko dobrze bo wyliczenia się zgadzają a jednak jest chyba coś nie tak. Gdyby BASCOM był idealny to działałoby to porawnie - z błędem...
To część programu do obsługi pewnego sterownika. Jest tam to co Cie interesuje. $regfile = "m8def.dat" $crystal = 8000000 Config Lcdmode = Port 'w pliku raportu będzie informacja o trybie pracy Config Lcdbus = 4 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portc.4 , Rs = Portb.0...
Witam. Szukalem na forum podobnego wątku, ale nie znalazłem. Chciałem więc zapytac, jak odmierzać czas w dół. Użytkownik wprowadza np. liczę minut i na lcd wyświetlamy odliczanie do zera. Mozna coś takiego zrobić na timerach? edit: Może zbyt ogólnie sie wyraziłem. Wiem, że coś takiego można zrealizować za pomocą odpowiedniej struktury, a potem za pomocą...
Oczywiście reset, wymieniłem zasilacz na inny i to samo. Wyłączyłem quick boot to dzieje się to samo tylko że po POST jest odliczanie paru sekund i mogę je przerwać by odrazu botował zmieniałem też kolejność uruchamianych grafik i to samo, też wydaje mi się że to chyba normalne w tej płycie, chodź dziwne. I dalej nie wiem dlaczego klient miał czarny...
https://obrazki.elektroda.pl/6848039300_... Ogranicznik czasu pracy to dość banalne urządzenie włączane pomiędzy mechanicznym włącznikiem ciśnieniowym a pompą, mające ochronić ją przed przegrzaniem (skutkiem suchobiegu). Zasada działania: 1. Po włączeniu zasilania przekaźnik jest włączony i zaczyna się odliczanie 100 sekund (w normalnej...
Witam Mam problem z programem zliczającym przepełnienia timer2. Do lini TOSC1/2 podłączony mam kwarc zegarkowy 32,768kHz, chciałbym wykorzystać przerwanie od przepełnienia tego licznika do odliczania równej sekundy oraz wyświetlić wynik na ekranie LCD. Oto kod programu: long int licz=0; void init_timer(void) //Inicjalizacja timera { TIMSK...
Mam problem jestem początkujący napisałem program który ma za zadanie regulować włączanie wiatraka i czas z jakim ma dmuchać , jednocześnie mierzy temperaturę i nie działa tak jak powinno : Temperatura pokazuję co jakiś czas błędny pomiar np 124 , 32 , 98 procek się resetuje chińskie znaki raz na jakiś czas w programie można było ręcznie zmieniać czas...
wyświetlanie czasu PORTD=cyfry[minuty%10]; PORTC=jednosci_minut; _delay_us (100); PORTD=cyfry[minuty/10]; PORTC=dziesiatki_minut; _delay_us (100); PORTD=cyfry[godziny%10]; PORTC=jednosci_godzin; _delay_us (100); PORTD=cyfry[godziny/10]; PORTC=dziesiatki_godzin; _delay_us (100); zamień na...
Zadanie jest tak proste (przynajmniej dla mnie), że trudno tu cokolwiek podpowiedzieć. Zacznij od algorytmu blokowego. Jeśli chodzi i sam program to skorzystałbym z dostępnego licznika i obsługi przez niego przerwań, po solidnym zwielokrotnieniu odliczałby odcinki czasu 1s. W ten spososób powstanie podstawowa jednostka czasu która po zwielokrotnieniu...
Hehe, znalazłem już błąd tylko go musiałem potwierdzić. Ustawiłem na 30min i odliczyło co do sekundy... Soft już zaktualizowany. Nie wiem co mi strzeliło do głowy zmniejszać timer w przerwaniach z liczeniem do 99 (nigdy wcześniej tak nie robiłem) jak jednak powinno być 100 jednostek odliczanych, aha już wiem jakiś tam pośredni test z migającą diodą...
Witam. Tak ustawiam Timer2 [syntax=c] void initTimer2(void) { /* Funkcja inicjująca timer2 w tryb asynchroniczny wykorzystujący kwarc 32,768kHz timer2 odpowiada za odliczanie czasu generuje przerwania co 8 sekund ==== Rejestr ASSR w Timer_Counter_2 ====== */ TIMSK2 = 0;//Disable timer2 interrupts ASSR &= ~(1 << EXCLK); ASSR |= (1<<AS2);//Enable...
Takie podejście jest fatalne. Wyłączaj przerwanie od przycisku w obsłudze tego przerwania. Włączaj je ponownie w przerwaniu timera. W praktycznie każdym urządzeniu potrzebujesz przerwania timera. Na czas uśpienia może go nie być, ale w czasie aktywności jest niezbędne. Kiedy urządzenie nie śpi, przerwanie timera odlicza wszystkie czasy i w odpowiednich...
Twoje obliczenia: 1MHz / 1024 / 256 ≈ 3,81Hz czyli co 262ms Wnioski pozostawiam Tobie. Skoro ma zapalać diodę co sekundę, to wystarczy przerwanie co pół sekundy i zmiana stanu pinu na przeciwny. Wtedy zawsze będzie mrugać prawidłowo. Ale ponieważ: Dobra, to da się to w ogóle jakoś osiągnąć poza zastosowaniem zmiany stanu ^= w przerwaniu? ... to...
I kolejny krok do przodu :) Kondensator 100nF na pinie kwarcu zapewne wpływa bardzo na częstotliwość pracy timera2, ale tego jesteś świadomy. Należy więc najpierw rozwiązań problem niestartowania Timer2, by pozbyć się kondensatora i palucha :) Tutaj funkcja projektu który niebawem opublikuję: [syntax=c]void dd_timer2_rtc_ini(void){ //Funkcja inicjująca...
zmieniłem kod programu: [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include "hd44780.h" #include "stdlib.h" char Buffer[20]; int TCNT0_WART=0; volatile unsigned long imp_curr=0; volatile unsigned long imp_prev=0; uint32_t displ=0; int main(void) { //TCCR0 |=(1<<CS00)|(1<<CS01)|(1<...
Cześć, mam problem ze zmywarką jak w tytule - Samsung DW50R4051BB. Po włączeniu programu (np. szybki=20 minutowy) zmywarka nabiera wodę i płucze/myje przez 8-10 minut. Później przez chwilę jest cisza i zmywarka znowu zaczyna dobierać wodę, która w pewnym momencie zaczyna wyciekać przez drzwiczki. Po ich otwarciu jest jej po prostu za dużo. Wydaje mi...
Niestety Kolego "elektronik.b" nie rozumiesz tego programu, wklepujesz co popadnie i to nie zadziała. Jak na początek przygody z mikrokontrolerami wybrałeś sobie FATALNIE napisany program... nie robi się multipleksowania w pętli głównej i to jeszcze odlicza interwały pauzami. Nawet jak w jakiś cudowny sposób ogarniesz wyświetlanie bez migania, to ten...
Start: -nadawanie wartości stałym i bitom -zezwolenie na przerwania itp. (timer pierwszy ustawiony na odliczanie 1ms) Loop: -czy było przerwanie? jeśli nie, skacz do Main_loop jeśli było przerwanie: -zapomnij o przerwaniu zliczam 1000, przerwań (4 x po 250) w celu uzyskania 1s jezeli wciaz nie ma 1000, jump -> Main_loop, jeżeli jest już 1000 skaczę...
http://obrazki.elektroda.pl/7565365900_1... Jakiś czas temu na alledrogo kupiłem układzik który nazywa się "Wyłącznik sensorowy Exterminator". Stwierdziłem - przecież będzie prościej, pewnie i taniej a na pewno szybciej. Po oględzinach okazało się jednak, że mimo tego co zapewniał sprzedawca nie można odbezpieczyć układu przy otwartych...
Myślę, że to mogłoby być coś takiego jak: przekaźnik w naturalnym stanie rozłączenia instalacji dwa przełączniki: - uruchamiający odliczanie - uruchamiający instalację ----------------- Może coś takiego? Jest to w stanie wyłączonej instalacji (sorry za oznaczenia - nie jestem elektronikiem ale mam nadzieję że czytelne, oczywiście nie dałem przez to...
Możesz to zrobić na dwa sposoby. 1. W przerwaniu zmienisz stan tego portu. 2. Przerwanie ustawia ci pewną flagę że nastąpiło odmierzenie 1 sekundy a w pętli głównej programu testujesz tą flagę i jak wystąpi to zmienisz ten port a flagę kasujesz I cała filozofia. Czy to jest jasne ?
witam ponownie mam do was prosbe mam do napisania Zegarek w bascomie 8051 ni mam tu moj programik moze rzucilby ktos okiem czy nie ma bledow :wink: Dim Sekundy As Byte 'deklaracja zmiennej SSEKUNDY jako liczby z zakresu 0...255 Dim Minuty As Byte 'deklaracja zmiennej MINUTY jako liczby z zakresu 0...255 Dim Godziny As Byte 'deklaracja zmiennej GODZINY...
Dla 8Mhz przy preskalerze 256 potrzebujesz 31250. Możesz wykorzystać np tryb CTC. Rejestr licznika zerujesz. COMPA ustawiasz na 31250. Preskaler wybierasz na 256 (timer startuje natychmiast). Włączasz przerwanie COMPA. Oczywiście mowa tu o liczniku 16-bitowym. Podane ustawienia odliczają jedną sekundę. Dla trzech sekund preskaler 256 nie wystarczy...
Zacznij od dodania przed [syntax=csharp]digitalWrite(LED_PIN, LOW); // switch on LED[/syntax] ustawienia zmiennej np "czas" na wartość np w sekundach przez jaki ma wyjście byc aktywne. W setup() dopisz ustawienie timera najlepiej w tryb ctc na np 10ms (zależy jakie zrodzielczości cie interesują). W przerwaniu zrób dzielnik aby uzystać sekundę, np: [syntax=c]ISR(...
odliczanie czasu przerwania setne sekundy timer sekundy
rejestracja przebiegu timer lodówki turbinka junkers
platforma wibracyjna lokalizacja rozdzielnicy
Latarka akumulatorowa LED – wybór, akumulatory 18650/21700, ładowanie USB-C, marki Cree, Olight Bluetooth w RCD300 Grundig – adaptery, integracja, montaż, kompatybilność