Ten odczyt musi być dokładnie co kilka sekund? Nie wystarczy do tego millis()?
Wojtek - wchodzisz tutaj: [url=http://www.frank-zhao.com/cache/avr... z kalkulatorem 16MHZ z preskalerem 1024 oznacza że: - 1 sekunda nastąpi po 15625 cyknięciach timera - przerwanie następuje przy przepełnieniu jeśli wybierzesz OVERFLOW, ale może tez nastąpić przy COMPARE, od tego zależy jaką wartość wpiszesz do timera (czy odejmiesz...
Sprawdzałem Twój kod inicjalizacji timera + przerwanie -> wszystko jest ok. Musisz mieć błąd w zliczaniu sekund lub w wyświetlaniu. Tak na marginesie to po co ustawiasz bit OCF2 w TIFR? Nie korzystasz z porównania (compare match), więc nie potrzebnie robisz to ustawienie. Wystarczy TIFR=(1 << TOV2);
Kod, który pokazałeś wrzuciłem na zestaw testowy z Atmega644P i działa tak jak powinien. Co prawda na kwarcu 16MHz, ale miganie diodą występuje kilka razy na sekundę. Pobawiłem się też wartością OCR1A i zachowuje się zgodnie z oczekiwaniem. Zwiększenie OCR1A zwalnia miganie, zmniejszanie przyśpiesza. Powinieneś zatem szukać błędu gdzieś indziej, w sprzęcie,...
nie pamiętam, jak tam w C to wyglądało, ale warunkiem jest sprawdzanie bufora klawiatury (pascal: keypressed) i dopiero wystąpienie wartości w buforze musi zaskutkować jego zczytaniem poprzez np cin.
Ano dlatego, że gdy wciskasz przycisk w procku wywoływane jest przerwanie... A że trwa ono sekundę... o tyle "wydłuża" się czas tego delaya w pętli głównej... Po tej sekundzie (gdy masz wciśnięty przycisk) wywoływane jest kolejne przerwanie - kolejna sekunda... itd... Rozwiązanie... wywal delaya z przerwania. Edit: Maksymalny czas opóźnienia wynosi...
Wyobraź sobie, że przerwanie występuje co 500ms a do procka podłączona jest dioda. Co pół sekundy dioda zapala się i gaśnie. Okres przebiegu to będzie czas świecenia i wygaszenia diody czyli jedna sekunda. Jeśli przerwanie było by generowane co sekundę okres wynosił by wtedy dwie sekundy.
Ostatnio postanowiłem zrobić sobie zegar na arduino uno i wpadłem na pomysł aby generować przerwanie co sekundę przy pomocy WDT Proponuję, abyś zapoznał się z informacjami zawartymi w: https://folk.uio.no/jeanra/Microelectron...
No tak. Ja korzystałem ze sprzętowego i2c, który MUSI być na portach PC4, PC5. A Ty korzystałeś z PC3, PC4. Po usunięciu linii, o których pisałeś, zacząłeś wykorzystywać programowe i2c, które może być na dowolnych portach. Gdybyś w helpie Bascoma poszukał frazy $lib "i2c_twi.lbx" to by Ci się wyjaśniło :). Spróbuj teraz to zrobić. Ale ładnie pokombinowałeś...
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"...
Jeśli nie wykorzystujesz tych samych pinów co kwarc zegarkowy to nic się nie będzie gryzło... O ile dobrze pamiętam wystarczy podpiąć kwarc 32,768kHz bez kondensatorów pod TOSC1 i TOSC2... Raz po uruchomieniu uC odpalasz timer2 w trybie asynchronicznym i tylko włączasz albo wyłączasz przerwanie od przepełnienia... Ustawiasz preskaler tak żeby przepełnienie...
Czy aby na pewno częstotliwość przerwań od timera powinna wynosić 1kHz? Skoro masz (w teorii) 24MHz podzielone przez 24000 (preskaler), to faktycznie zegar dochodzący do samego timera będzie równy 1kHz, ale wg mnie przerwanie timera będzie co dwa jego cykle, bo timer liczy tak: 0 ... 1 (przerwanie) ... 0 ... 1 (przerwanie) ... EDIT: sekundy... normalnie...
Chodzi o to, że po pierwszym przerwaniu TCNT1 będzie miał wartość 0, czyli zliczy potem 65536 impulsów. Zaś do generowania, jak Ty chcesz, przerwań co określony odcinek czasu służy tryb CTC. Wtedy w rejestrze OCR ustawiasz ilość impulsów, które chcesz zliczyć, i wygenerować odpowiednie przerwanie.
jako ze jestem początkujący to po prostu robię kopiuj i wklej z innych przykładów ;) nie do końca rozumiejąc o co chodzi (C to czarna magia na razie jeszcze). dlatego przydałby ci się jakiś dobry kurs C ;) A w uproszczeniu jak zamienić SIGNAL na ISR - po prostu na razie zamiast SIGNAL pisz ISR tylko podawaj nieco inne nazwy wektorów tych przerwań....
1) Masz dwie obsługi od dwóch przerwań a odmaskowujesz w TIMSK tylko jedną... 2) instrukcje cli() i sei() są wykonywane automatycznie po przyjęciu przerwania, więc nie musisz ich wstawiać ręcznie.
a jak zatem rozumieć priorytety przerwań związane ze slotami? Nie jestem biegły w ARM7, powtórzę, ale polegam tu na tej publikacji: http://engenuics.com/wp-content/uploads/... a szczególnie na tym fragmencie: 4. On the LPC214x processors, two hardware priority groups are available. The high priority interrupt is referred to as...
Problemik z PWM i Przerwaniem Timera. Czy możliwe jest żeby PWM sobie działał, a Timer generował normalne przerwanie? Z tego za zauważyłem to nie bardzo. TCCR1A = (1<<WGM10) | (1<<COM1A1) | (1<<COM1A0); //8bit PWM, phase correct TCCR1B = (1<<CS12) | (1<<WGM12); TCNT1H = 0x57; TCNT1L...
Procedury w pdf są raczej średnio przemyślane, do odbioru najlepiej użyć przerwania Rx Complete , przykład użycia mozna znaleźć w przerabianym przeze mnie na AVRasm2 MiniDDS : http://www.elektroda.pl/rtvforum/viewtop... :arrow: rafiks : Kompilator asemblera przyjmuje, gdy ma włączoną opcję ' -c ', tylko mnemoniki z małej litery...
Jeśli do tego włączysz przerwania, ustawisz licznik T1 w tryb porównywania z kasowaniem, to dokładnie co 1 sekundę wywoła się przerwanie przepełnienia licznika T1. Dalej to już tylko odpowiednia obsługa tego przerwania.
Wpisać magiczne "volatile" volatile int sekunda=0;
... i skoro ja mu wyłączam INT0, to co prawda go nie obsluguje, ale gdy tylko aktywuję przerwanie INT0, następuje obsługa przerwania sprzed sekundy? Wg mnie, tak być nie powinno, a jednak tak się dzieje. Jak to możlwie? Czy któs zna odpowiedź? Poprostu przed włączeniem przerwania dobrym zwyczajem jest skasowanie ewentualnej flagi tego przerwania. Ja...
Źle podchodzisz do problemu - zmienna i (czyli numer wyświetlanej cyfry) powinna być zmienną globalną, którą w przerwaniu od timera zwiększasz, a następnie wykonujesz blok switch (i) { ... }. Oczywiście delay w przerwaniu to "bluźnierstwo" :) Preskaler ustaw sobie na 64, wtedy przerwanie od timera dostniesz ok. 400x na sekundę, czyli odświeżanie całego...
Witam . Zadanie jest trywialne . Potrzebujesz 3 zmiennych i dwóch przerwań zewnętrznych plus przerwanie do wyświetlacza. Po starcie procka ustawiasz wartość jednej z zmiennych która będzie równa ilości przerwań wyświetlacza w czasie 10 sekund . Podczas aktywacji przerwania od T1 aktywujesz przerwania od INT0 i INT1 . INT0 zwiększa jedną zmienną a INT1...
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,...
Nie nie. On ma przerwać sygnał na powiedzmy 2 sekundy, po otrzymaniu zasilania. On nie ma go zmieniać. Może tak? https://obrazki.elektroda.pl/2273251200_...
Generujesz sobie na timerze przerwanie co sekundę i w obsłudze przerwania zwiększasz zmienną sekunda o i i sprawdzasz czy nie osiągnięto 60. Jeśli tak to zerujesz i wysyłasz do wyświetlacza.
Pingi w normie, czasami tylko urywa, przeważnie jest to przerwanie na ułamek sekundy, więc w pingach niewidoczne. Jak coś przerywa w pingach to już widać że jest problem ze stabilnością łącza. Zrób diagnostykę WinMTR i speedtest - [url=http://tplink-forum.pl/faq-sieci-ko...
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.
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.
Pewnie że nie będzie działać, ustawiłeś Preskaler =256 a więc przy zegarze 16MHz przerwanie od Timer0 będzie pojawiać się z częstotliwością 62500 razy na sekundę. (16000000/256 = 62500). Zalałeś modem zapytaniami o CSQ i biedny nie ma czasu na odpowiedź.
Sprawdź, czy MHDD widzi dysk - komenda EID. Jeśli tak, to naciśnij dwa razy klawisz F4, aby uruchomić test, przerwij go po 2-3 sekundach klawiszem ESC. Zrób zdjęcia lub zrzuty ekranu wyniku każdej z komend.
Sprawdź w manualu opis rejestru DBGMCU_CR (DBGMCU->CR). Musisz sobie w nim ustawić odpowiednie bity, aby timer został zatrzymany gdy zatrzymany jest rdzeń. Problem który obserwujesz wynika z tego, że timer domyślnie nie jest zatrzymywany gdy debugger zatrzymuje rdzeń. Jeśli np. masz przerwanie od przepełnienia co 1 sekundę, to podczas tegoż debuggowania...
Wartość początkową ustalam odejmując 256 i 125, stąd TCNT0 = 131. Dlaczego tak to liczysz? Używasz trybu normalnego Timera0. Timer 0 w trybie normalnym liczy od 0 lub wartości początkowej ustawionej w rejestrze TCNT0 do wartości 0xFF. Przy 8 MHz i podziale przez 256 obliczenia wyglądają następująco: 8Mhz/256 = 31 250 31 250/256 (od 0 do 0xFF) = 122...
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...
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...
Zły pomysł, zły kod. Użyj jednego timera w trybie zliczania impulsów zewnętrznych i podłącz wyjście wentylatora do jego wejścia. Drugi timer zaprogramuj na zgłaszanie przerwań co 1 sekundę (timer 0 tego nie potrafi), w procedurze przerwania odczytaj wartość licznika, wyzeruj licznik i wyświetl wartość. Nie jest to idealne rozwiązanie, ale o niebo lepsze...
Co ile masz przerwanie od timera bo jak się domyślam stan klawiatury odczytujesz kilkadziesiąt razy na sekundę?? Napisze to po raz kolejny: Wywal odczyt po IIC klawiatury z obsługi przerwania!!! I rób to tak samo jak odczyt czasu w programie głównym na podstawie flagi. Po drugie po co odczytujesz za każdym razem czas z PCF'a??? Skoro masz przerwanie...
BlueDraco Ci napisal dlaczego - program chodzi w kółko w while() i ustawia 400 jak adc jest pomiedzy wartościami. przerwanie raz na 1/4 sekundy moze zwiekszyc lub zmniejszy tą wartosc o 1 ale w w następnej petli znowu ustawisz 400. A petla chodzi szybko dookola :)
Zmierzyłem stoperem czas od załączenia układu do włączenia diody(GPIOC, GPIO_Pin_0) i wyszło dokładnie 5 sekund.
1. Nie definiuj zegara w kodzie tylko w opcjach kompilatora: http://mikrokontrolery.blogspot.com/2011... 2. Problem natomiast pojawia się wówczas, gdy funkcja obsługi przerwania wykonuje się długo. Docelowo będzie sterować portami przez około 16 sekund. Przerwanie ma się wykonywać krótko i tego zawsze się trzymaj, bo łatwo...
W trybie CTC timer liczy tylko do wartości ICR (lub OCR) i się zeruje. Nie przepełni się. Skąd ma się wziąć przerwanie od przepełnienia?
1. Poczytaj ogólnie o timerach. 2. Poczytaj o trybach timerów, Tobie radziłbym CTC. 3. Poczytaj o przerwaniach. 4. Z Timera co sekundę będziesz wysyłać przerwanie. 5. Ustaw pin z przełącznikiem jako wejście. 6. Podciągnij wewnętrzny rezystor do pinu albo daj jakiś rezystor po drodze - nie zwieraj bezpośrednio do masy. 7. Ustaw port z diodą jako wyjście....
W przerwaniu od Timera musisz zatrzymywać Timer. TCCR1B = 0; 14745600 taktów / 28799 = 512 takty 512 / Prskaler = 0,5 takta. Jak nic 2 sekundy. Do OCR1A wpisuj liczbę 57598 to wtedy będziesz miał 4 sekundy.
Proponuje oddzielić zliczanie czasu od wyświetlania, będzie czytelniej i dokładniej. Program główny niech zajmie się wyświetlaniem, a przerwanie tylko naliczaniem czasu. Następnie zmniejszyć ilość przerwań, poprzez ustawienie prescalera w rej. option, wpisując do niego 1 zmniejszasz liczbę przerwań dwukrotnie, przy 2 czterokrotnie, 3-ośmiokrotnie 4-szesnastokrotnie,...
Przecież kazał ci 256Hz podzielić przez pojemność Timera2 czyli 256 (kombinacji). Wychodzi 1 Hz czyli jeden cykl (przerwanie) na sekundę.
Wszystko ok, tylko ja potrzebuję przerwanie 500ms ( waitms nie wchodzi w grę ), a komenda Config Clock = Soft , Gosub = Sectic robi mi przerwanie co sekundę. Dondu to jeszcze wytłumacz mi łopatologicznie dlaczego kwarc 14745600. Wystarczy mi dokładne przerwanie co 500ms.
na podstawie flagi z przerwania INT2 na początku pętli głównej wchodzić w uśpienie. Ale pętla główna jest wykonywana powiedzmy 0.5 sek. Co sekundę wykonywane jest przerwanie od Timer2. Więc procesor będzie w uśpieniu tylko ok. 50% czasu. Ale problem z długim wykonywaniem się pętli głównej wystąpi tylko za pierwszym razem po zaniku zasilania (ustawienie...
W przerwaniu delay na 10 sekund? Przerwanie ma działać jak najkrócej. Do poczytania: http://mikrokontrolery.blogspot.com/2011...
Witam Buduję układ w którym będę potrzebował generować przerwanie z bardzo dużą dokładnością, tak aby na każdą sekundę przypadało 8 i 2/3 przerwania, albo inaczej, aby w 3 sekundach pracy układu generowane było 26 przerwań, ważna jest tu precyzja pracy, więc jakieś przybliżanie timerami odpada. Może i rozwiązanie jest banalne, ale nic nie przychodzi...
Najczęściej taki efekt daje przerwane uzwojenie któregoś TR WN inwertera.
W takim przypadku lepiej chyba uruchomić timer żeby liczył np sekundę i co sekundę odświeżać LCD, zrezygnować z przerwań ADC i robić to w biegu (lub też timerem jedynie ustawiać flagę co np pol sekundy czy ileś tam)
Skoro 122 wywołuje zmianę stanu diody co sekundę, to gdy doliczysz do 0.244 to będziesz miał przerwanie co 2ms :D Pojedyncze przerwanie jest wołane co 8 milisekund. Albo zmień preskaler albo użyj innego timera i po ludzki włącz ctc
Liczymy to prosto - (liczba instrukcji poświęcona na obsługę jednego przerwania * liczba przerwań na sekundę)/liczba instrukcji realizowanych przez MCU na sekundę. Przy multipleksowaniu najwygodniej jest aby przy kolejnych przerwaniach wyświetlać kolejne wyświetlacze - dlatego, że intensywność świecenia to w przybliżeniu czas świecenia/czas całkowity....
Prawda (dokładnie 2^15 Hz). Tylko podłączasz go do TOSC2 i TOSC2 a preskaler nastawiasz na /128 co daje ci przerwanie co 1 sekundę.
Udało mi się podłączyć kwarc 10Mhz i teraz jest w miarę dokładnie:P Dzisiaj mam zamiar zrobic prosty zegarek i zostawić to na noc w celu sprawdzenia dokładności. Mam jednak problem z kropką. Przerwanie jest co sekundę i nie wiem jak zrobić, aby kropka zaświecała się i gasła w ciągu sekundy. Jedyny mój pomysł to zrobić przerwanie co 0,5 sekundy, w każdym...
Procesor nie zauważy pewnie tego nawet jak będziesz miał przerwanie po każdej konwersji. Przy 180MHz jak pisał (at)Marek_Skalski będziesz miał 180000taktów. Do średniej wystarczy :D
Nic nie aktywujesz w ustawieniach standardowych będzie działać. Fabrycznie włączone jest automatyczne zamykanie w tej centrali po chyba 20 sekundach.
272 to taka nieciekawa wartość do mnożenia. Ja zrobiłem tak: Przerwania z TIM0 i TIM1 TIM0 zlicza impulsy z wejścia zliczającego, i gdy się przepełni jest króciutkie przerwanie inkrementujące parę 3 rejestrów. TIM1 zgłasza przerwanie równiutko co pół sekundy. Na samym początku obsługi przerwania jest odczytywana wartość impulsów z TIM0, i jest on resetowany....
Nawet gdyby wcisnąć tam tą konwersję to nie w przerwaniu, ale w pętli głównej. Jednym z problemów wprowadzonych w kodzie jest korzystanie z wolnego porównania == - powinieneś użyć and Powinieneś użyć rtc - miałbyś przerwanie co sekundę i byłby spokój - nawet źle zaprojektowane pcb może ci wprowadzić więcej niż te 3% niedokładności kwarcu, dużo też zależy...
Cóż. Nie wiem jak generujesz sygnał taktujący licznik. Bo jeśli negujesz 1 pin , to rzeczywiście, przerwanie masz co sekundę, ale zbocze narastające (taktujące licznik) co 2 sekundy, stąd 0,5 Hz :]
Jeśli nachodziłyby na siebie przerwania, to nic byśmy nie mogli odczytać na wyświetlaczu, bo dane byłyby cały czas zapisywane do driver'ów i nie dochodziłoby do końca funkcji, gdzie dane są zatrzaskiwane. Według moich obliczeń, to tak wygląda: mamy kwarc (albo oscylator wewn.) 8MHz, to mamy 8 000 000 cykli zegarowych na sekundę. Przy preskalerze /64...
Jeśli chcesz mierzyć czas pracy załączonego urządzenia to przerwania i metoda sumowania czasu kolejnych cykli pętli programowej maja podobną dokładność. Jeśli chcesz mieć dokładną sekundę, minutę, itd to tylko przerwania
Przerwanie z RTC co sekundę a w nim magiczna sekwencja "myUnixTimeVariable++;"?
mozesz tez przy wiekszym nieco udziale rdzenia (ale wtedy bedzie już w pełni automatyczne i jedyne co musisz liczyć to co ile transmisja do ADC ma być wyzwalana). Czas ten musi być większy niż czas transmisji + 210ns. Zauważ że w przypadku 100k I2C ta częstotliwosc nie może być wieksza niż ~590Hz a w przypadku 400k 2370Hz. Jezeli potrzebujesz większej...
PROCEDURA KOPIOWANIA PILOTA Stań przy bramie w odległości 2-3 metrów od napędu. 1. Na NOWYM pilocie naciskasz dowolny przycisk na 5-6 sekund, po czym go zwalniasz (tym samym radioodbiornik w bramie wprowadzony zostaje w tryb programowania). 2. Na STARYM (czyli już działającym pilocie) naciskasz 3 razy po jednej sekundzie dowolny przycisk (dzięki temu...
Faktycznie, trochę niezrozumiale... Najlepiej zrobić to tak - ustawiasz przerwanie aktywowane zboczem opadającym. Przerwanie wywołuje funkcje która czeka x ilość mikro sekund (delayMicroseconds()) po czym załącza triaka. Do napięcia którym chcesz sterować podłączasz transoptor który na wyjściu daje stan niski za każdym przejściem sinusoidy przez 0....
Też tak myślałem ale tak się nie dzieje. Najwyższy priorytet ma przerwanie od Timera 0, potem przerwanie od sekund zegara RTC i na koniec dopiero przerwanie od EINT1. Program się uruchamia prawidłowo i zawiesza się tak jak pisałem wcześniej po kilku sekundach. Przerwań od EINT1 wogóle nie uruchamiam. Zapewne masz rację z tym, że adres powrotu jest zamazywany...
Timer 8-bitowy przepełnia się po zliczeniu do 256 a preskaler dzieli maksymalnie przez 1024 więc z prostego mnożenia wynika, że częstotliwość zegara, która spowoduje przepełnienie timera po 1 sekundzie to 1024x256=262144 Hz. Jeśli taktujesz mikrokontroler wyższą częstotliwością to na tym timerze nie zrobisz przerwania co 1 sekundę. Oczywiście timer...
Komenda RC5Send jest napisana na podstawie tej noty aplikacyjnej [url=http://www.mcselec.com/index.php?op... #105 - Sending RC5 and SONY IR codes . Timer jest skonfigurowany chyba jako CTC, jeżeli procek posiada drugi kanał dla timera1 to mógłbyś wykorzystać przerwanie TIMER1_COMPB. Można też próbować zmodyfikować...
Mikrokontroler taktowany jest 2.66MHz, więc jeśli TOP określimy na 26666 to przerwanie powinno być 100 razy na sekundę. R
I dla tego właśnie ja nie podalem tego z przerwaniem :]
Właśnie udało mi się usunąć w Case MXM 190 usterkę polegającą na wyłączaniu biegu podczas jazdy i wyświetlenie komunikatu Cp i N. Była ona prozaiczna. W gnieździe stacyjki wygrzane styki powodowały na ułamek sekundy przerwanie połączenia. Przerwa powodowała wyłączenie napędu i wspomniane komunikaty. Wskazówką była nieco dłuższa przerwa, silnik na ułamek...
Nie da się tego precyzyjnie wyliczyć. Dekodowanie impulsów z enkodera na M328 odbywa się programowo - np. tak, że impulsy z jednego kanału generują przerwania (nie jest to idealne rozwiązanie, ale na początek nie komplikujmy). W efekcie to jak często mogą się one pojawiać zależy od czasu jaki MCU spędza w funkcji obsługi tego przerwania, ale także od...
Witam Proponuję zrobić to troszkę inaczej. Przerwanie zaprogramuj tak aby ustawiało jakiś bit co jedną sekundę. Program główny ma mieć taką konstrukcje. czy sekunda: jeżeli tak to mrugnąć 5x diodą wyzerować czy sekunda jeżeli nie skok na czy sekunda czy sekunda 2: jeżeli tak to buzer 4x wyzerować czy sekunda jeżeli nie to skok do czy sekunda...
O to tego nie rozumiem, jeszcze raz poproszę ;) Dlaczego dla przerwania "co jedną sekundę" odejmuje 1 a dla przerwania "co 4 sekundy" mnożę przez 4? Dodano po 5 Bo w takim wypadku dla 1 sekundy powinno być razy 1 a nie minus jeden bo w przypadku 4 sekund też zliczam od zera.
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ę...
Jeśli przerwanie wykonuje się 1000 razy na sekundę, to do ilu trzeba w przerwaniu doliczyć, by minęła sekunda? :) Opisz dokładnie co chcesz zrobić, bo nie za bardzo rozumiem z czym masz problem.
Ale jeśli mniejsze, to już po 1 takcie zliczania powinno wyskoczyć z przerwania a tak nie jest. Taktowanie timera to 16MHz/1024 = 15625Hz. Pojemność timera to 256, więc przerwanie pojawia się z częstotliwością 15625/256 = ~61Hz. Aby uzyskać opóźnienie ok. 1 sekundy przerwanie musi pojawić się 61 razy i dopiero za 62 zapalić lub zgasić diodę. I tak...
Stwierdzenie dotyczące RTC wynika z tego, że timer2 może pracować asynchronicznie z zewnętrznym kwarcem zegarowym. Można mu podać 32768Hz, t2 będzie takim zegarem (lub wynikającym z działania prescalera) taktowany - to jak wykorzystasz timer zależy od ciebie: możesz np ustawić go w trybie CTC przy prescalerze /128, wtedy będzie się przepełniał równo...
Jak masz jakieś pojęcie o programowaniu to nie powinno być problemu. Najlepiej zrobić to na timerze i przerwaniach. Sam program byłby dosyć prosty w działaniu. Ja zrobiłbym tak. Przerwanie z timera przychodzi jakieś 100 000 razy na sekundę. Robisz 1 zmienną na liczenie przerwań i porównujesz z 2 zmienną która określa jasność świecenia. Przez wszystkie...
Widzę, że moje programy znajdują uznanie i dobrze. Co do podawania impulsów na uC to nie można zmieniać dowolnie końcówek bo timery mają wejścia przypisane do konkretnych wyprowadzeń. Dla M8 są to T1 - 11, T0 - 6. Trzeba to brać pod uwagę przy projektowaniu układu. Dotyczy to końcówek używanych jako alternatywne. Po przeróbce czas odmierza T0 (8bit)...
Najprościej można to zrobić w Windows 7 i w Viście. Tu jest dostępne narzędzie Waitfor.exe. Na przykład polecenie waitfor xyz /T5 opóźnia przetwarzanie dalszej części kodu o 5 sekund. W XP należy zastosować pomocniczy plik wsadowy np. sleep.cmd o treści: ping 127.0.0.1 -n %1 -w 1000 >NUL Poleceniem call sleep 5 przerwiesz przetwarzanie pliku wsadowego...
Tak był błąd w przypisaniu zmiennych na odwrót. Mnie ciekawi tylko gdzie są wartości początkowe timerów ? Aco za tym idzie skąd to przekonanie że timer1 wywołuje przerwanie co sekundę ? Co do Timera0 też nie jestem pewien czy przerwanie jest co 4ms ? A jaka jest częstotliwość taktowania ? i gdzie jest dyrektywa $crystal ? W dodatku w podprogramie obsługi...
Wykorzystując timer 16-bitowy oraz preskaler 65535 chciałbym wywołać przerwanie co 1 minute(59,6 sekundy) i w efekcie naprzemiennie zapalać i gasić diodę: [syntax=cpp] void Clock_init(void); void GPIO_init(void); void Tim1_init(void); int main(void) { Clock_init() ; GPIO_init(); Tim1_init(); while(1){;} } void Tim1_init(void) { TIM_TimeBaseInitTypeDef...
Niestety nie dało to poprawy - zwiększyłem do 128 ( takich wartości używam dla kart SD ). Zastanawiam się, czy przerwanie INT1 co sekundę od PCF8563 nie przeszkadza ?
Myślę, że pierwsze podejście jest jak najbardziej poprawne. Chodzi o to by po pierwszym przerwaniu wystąpił jakiś czas nieczułości na kolejne przerwanie zewnętrzne. Może on być nawet znacznie dłuższy- nie sądzę by ktoś chciał klikać przycisk do wyświetlania kilka razy na sekundę. Wybudzanie mikrokontrolera cyklicznie co 400ms z pewnością nie poprawi...
to rozwiązanie z czasami, rozumiem. U mnie raczej żadne przerwanie nie wcinało się podczas 1wread, ponieważ korzystam tylko z przerwania t2 generowanego raz na sekundę i na początku przerwania wykonuję 1wread potem zapuszczam kolejną konwersję i wracam w kolejnym przerwaniu po sekundzie.
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...
Jeszcze w programie occt zmieniłem tryb testu z duży zestaw danych na średni oto wyniki w 44 sekundzie przerwałem test
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...
Jeśli chodzi o funkcję 'comfort" czyli domykanie szyb z pilota, to pamiętam, że miałem podobny problem i wystarczyło zaprogramować pilot. W tym celu wystarczy włożyć kluczyk do stacyjki i przekręcić na pozycję I, tak aby nie zaświecił się zapłon. Następnie wciskasz ( nie pamiętam tylko czy przycisk zamykania czy otwierania zamków) i przytrzymujesz go...
A więc tak - na 10 minut ma załączyć i po tym czasie przerwać na 5 sekund. Cyklicznie. Przerwanie może być mniejsze niż 5 sec. Ewentualne opuźninie coś około parunastu sekund. Jeżeli jest większe to można by ustawić na 9-8 minut zamiast na 10 i było by po problemie. Prosił bym o jakiś schemacik z miare czytelnym oznakowaniem bo co tu ukrywać - moja...
A po co go ciągle testować? Ustawić jedno przerwanie co np. sekundę i wtedy sprawdzać stan ADC. Własnie o tym mówię. Odpalanie przerwaniem czy pętla busy wait - zasada jest identyczna. A to nie ma buzzerów z generatorem? Gdzieś pewnie są, ale czy akurat w tym projekcie? Kilka mA w stanie standby nie powinno być problemem W takim wypadku nie ma co się...
Transformator(30A) jedzie już do mnie. Tak się zastanawiam nad przykładowym kodem. W moim układzie za czas odpowiada bardzo dokładny zegar. Co sekundę występuje przerwanie. Czy wystarczy mi średnia pomiarów z sekundy z użyciem biblioteki emon.lib? Czy zastosować inną metodę.
przerwanie trwające 5 Sekund. Czysta porażka. wiem że tak być nie powinno ale to jest już n-ta wersja kodu i już się wkurzyłem że może mignie tekst i nie widać, stąd taki czas. Zauważ że nawet nie czyściłem LCD żeby tylko wyłapać chwilę gdzie wejdzie w przerwanie ale tego nie robił :/ Ile razy Twój program będzie wchodził w przerwanie ( zanim zawiesi...
Przerwanie jest 4 razy na sekundę W ciągu 7 minut jest 420 sekund czyli w sumie 1680 przerwań Zmienna jest typu bajt także przepełni się 6 razy Zostaje od 1680-1530=150
Proponuje włączyć timer ustawić tak żeby przerwanie nadchodziło co sekundę(chociaż nie pamiętam w tym momencie co jaki czas maksymalnie można ustawić przerwanie od timera ) , w przerwaniu odczytać ilość jednych i drugich impulsów, wyświetlić i wyzerować. Nic lepszego nie przychodzi mi do głowy
Witam Oczywiście tyle będzie przerwań na sekundę. Ja bym to zrobił na innych wartościach. Prescaler ustawiłbym na 1024 i zliczanie 108 impulsów przez licznik. Uzyskuje się w ten sposób przerwanie co 10ms (100 na sekundę), które można wykorzystać do odczytu klawiatury i łatwego robienia różnych układów czasowych z dokładnością 10ms. Do tego jest korzyść...
Proste - w przerwaniu timera jakieś 50 razy na sekundę oglądasz bieżący stan każdego przycisku, porównujesz z poprzednim, który zapamiętałeś i jak wykryjesz, że poprzednio był zwolniony a teraz jest wciśnięty - robisz to, co trzeba (włączasz/wyłączasz cośtam).
Tak też robię :) Wszystko się zgadza oprócz tego, że nie sprawdzam przerwania po I2C. Kwestia jest taka, że ten zegar generuje przerwanie jednokrotnie, więc w obsłudze przerwania w procesorze trzeba ponownie ustawić pewne flagi by zegar wygenerował kolejne przerwanie za sekundę i tak w kółko. Problem w tym, że nie wiem czemu po pewnym nieustalonym czasie...
atmega8 bascom przerwanie sekundę pakiety sekundę podświetlanie sekundę
cewka mildton kabel ethernet przerywa whirlpool kontrolka
pilot uniwersalny samokopiujący pilot uniwersalny samokopiujący
Piec Beretta Junior: Cykliczne podawanie zimnej wody Wymiana uszczelki w ekspresie Zelmer Maestro