A bez przerwań jak to zrobic??
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...
Bzdura. Zmienna jest volatile. Twój "optymalny kod" nie ma nic wspólnego z założeniami. Prawdopodobnie nie wiesz co znaczy volatile I dlaczegozostal użyty. Twój "super kod" idealnie się nadaje do sprawdzania zmiennej w przerwani u
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,...
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...
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...
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...
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.
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.
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...
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,...
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 :)
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...
No to, jak napisał xury , dowolny timer + tryb CTC (z odpowiednimi wyliczeniami) i masz przerwanie generowane co 1s.
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.
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ść...
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,...
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....
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.
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ę...
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....
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...
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.
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...
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ół...
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ć...
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 {...
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...
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ć>?
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...
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 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...
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...
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...
Konfiguruję Systick tak aby generował przerwanie co np. 1 sekundę (nie chcę aby to robił za często bo ma odliczać czas nawet do 12h a to dość dużo "tików") Wcale nie tak dużo. Zakładając zliczanie w zmiennej uint32_t i przerwanie SysTicka co 1ms, zmienna przekręci się po ponad miesiącu (49 dni i 17 godz) ;) Przy zliczaniu sekund starczy na trochę ponad...
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...
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ś...
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.....
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...
Spróbuj na razie: [syntax=c] char tekst[10]; sprintf(tekst,"%d", sekunda)[/syntax]
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...
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...
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...
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ę.
[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...
Potrzebne konkretne! ( początkowe rozwiązanie ) Odliczanie czasu ma nastąpić po przerwaniu obwodu ,jak podłączyć triaka z układem czasowo/sterującym ? .
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)...
Szczerze to nie wiem czy musi być NO_BLOCK. Chciałbym zrealizować odliczanie czasu. Cały czas się uczę tego wszystkiego. Zmienne do odliczania czasu [syntax=c] volatile uint64_t milisekunda=0,sekunda=0;[/syntax] Przerwanie INT0, TIMER2 do regulacji fazowej. INT0 do detekcji przejścia przez zero wykorzystuje. Przerwanie INT1 do enkodera pełno krokowego...
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,...
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...
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...
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...
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)...
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....
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...
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...
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...
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...
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ą...
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...
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...
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...
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....
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...
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...
Wspaniały przykład na to jak nie należy realizować projektów. I nie chodzi o tragiczny program, ale o wyjątkowo nieefektywny sposób realizacji samego zadania. Kolego, przeszukaj Forum, a znajdziesz przynajmniej kilka takich projektów. W skrócie: - nie potrzebujesz zapisywać danych do EEPROM co 1s, ani co 1,5s, ponieważ czas możesz zliczać w RAM, a zapis...
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...
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...
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...
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...
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<...
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...
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...
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...
? 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...
użyj Counter0 zamiast Timer0 i będzie OK ;) reszta jest cacy. PC ------------------- aaaaa i jeszcze: On Timer0 Przeladuj_timer0 Enable Timer0 Przeladuj_timer0: incr Cykl_t0 Return To jest niezbędne bo jak Ci się przepełni Timer0 to będzie zonk ;) Potem jak sprawdzasz zliczoną wartość mnożysz Cykl_t0*65535 i dodajesz Counter0 czyli to co zliczył od...
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ą...
Przesyłam Ci przykład kodu, który działa chyba podobnie do tego, który jest Tobie potrzebny. Musisz go sobie przystosować, bo ja nie mam Twojego urządzenia, żeby sprawdzić jak to działa. [syntax=vbnet]Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim Start As Date Start = Time Application.EnableEvents = False Do DoEvents Loop Until Time...
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...
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...
Mam problem z systemem XP pro. Często po włączeniu sie do sieci czy to przez karte sieciową , czy przez zwykly modem po jakimś czasie (za każdym razem innym ) pojawia się niewielkie okienko z następującą treścią." Trwa zamykanie systemu. Zapisz wszystkie rozpoczęte prace i wyloguj się. Wszystkie nie zapisane zmiany zostaną utracone. Zamknięcie zostało...
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...
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...
Witam Mam pewien problem z odmierzaniem czasu za pomocą ATmegi. założeniem był prosty licznik czasu pracy urządzenia. Za pomocą timera odliczam określony czas po przepełnieniu timera zwiększam zmienną w pętli tak żeby uzyskać sekundę, następnie kolejna pętla zwiększająca minuty itd. Użyłem Atmega8 częstotliwość taktowania to 8MHz z wewnętrznego źródła....
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 ?
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...
Witam Dzięki wszystkim za dotychczasową pomoc. Ale problem nadal jest. Podmieniłem tacho w silniku na inne. Założyłem nowy silnik pompy spustowej. Przelutowałem dwa przekaźniki te, które są przy wyjściu na złącze od silnika. I nadal nic. Po załączeniu wirowania pompa spustowa chwilę pracuje i za moment silnik załącza się na sekundę i stop jedno i drugie....
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...
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...
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...
mam odblokowane zobaczy wyżej w kodzie. Winą był Timer1 który generował przerwania. Zastosowałem do skanowania klawiatury zamiast Timera i przerwań pętle Doo i Loop oraz Inkey() jesli Inkey >0 to Input itd. Teraz działa jednak nadal jestem zmartwiony bo drugie urządzenie które buduje musi korzystać z Timera gdyż odlicza w sekundach czas 5 trybów w których...
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,...
Rozumiem, przerwanie wyzwolic co 1sek i w nim incrementowac sekundy minuty i godziny. Hmm...tylko mam problem z klawiaturka;/ I nie wiem od czego zaczac;/ pomozecie? WOgole z klawiatura mam problemy;/ Mikroprocerow ucze sie od okolo 4 miesiecy ale mam na zadanie zrobic jakis projekt i wybralem zegar...mam juz odliczanie sekund, tylkol ta nieszczesna...
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)....
Sprawa z odmierzaniem czasu jest teoretycznie prosta ale trzeba brać pod uwagę kilka spraw. PO pierwsze musisz sobie wybrać jakiś timer i zliczać jego przepełnienia w przerwaniu. Musisz to robić w przerwaniu żeby odmierzany czas był zawsze taki sam. Zliczasz ilość tych przerwań do obliczonej wartości w zależności od częstotliwości zegara i dzielnika...
Witam. Przeglądnąłem masę wątków na temat timerów w DSM51 i niestety nie do końca wszystko zrozumiałem. Muszę napisać program, który będzie odliczał czas, aż do momentu naciśnięcia odpowiedniej cyfry od 0 do 9. Generowanie losowe tej liczby zostawiamy na bok. Chodzi mi głownie o timer. Wiem jak go ustawić, wybrałem tryb timera 16-bitowego. W momencie...
przerwać sekunda pcf8583 przerwać sekunda zmywarka odliczać
ustawienie czułości makita ładowarka dc18sd mazda kontrolka poduszka
samsung renaissance samsung renaissance
Jak wymienić żarówkę w lodówce Bosch? Błędy WS w Mercedes Axor - diagnostyka i rozwiązania