Zmienne przechowywane są w pamięci SRAM, chyba ze zapisujesz je do EEPROM. Dane w pamięci SRAM przy stabilnym zasilaniu i braku innych wpływów zewnętrznych mogą mieć stałą wartość przez cały czas życia scalaka. Jednak przy bardzo krytycznych danych musisz się liczyć z tym ze pojedyncze bity danych w pamięci SRAM mogą ulec zmianie. W krytycznych sekcjach...
Witaj Pojęcie o budzeniu procka masz raczej wątłe, przecież procek budzi się tylko przerwaniem... a dokładniej jednym z bardzo niewielu (watchdog, przerwanie zewnętrzne, otrzymanie danych...) Jeśli poczytasz pdfa to dowiesz się jak wybudzić procka, szczególnie dobrze jest to rozpisane dla M128. Uprzedzam już, ze z tak głębokiego trybu (przerwaniem na...
Witam, chcąc zaimplementować oszczędzanie energii w moim Arduino zdecydowałem się na użycie watchdoga. Jak wiadomo odmierza on do 8 sekund, więc chcąc "spać" przez 60 byłem zmuszony zaimplementować go kilka razy pod rząd. Przy wybudzeniu celem mojego programu jest zczytanie wartości czujników oraz RTC a następnie wyświetlenie tego na ekranie LCD. 1....
Dobra nie będą Cię więcej męczył tylko powiem. To nie będzie reset. Podczas sprzętowego resetu są asynchronicznie resetowanie wszystkie rejestry specjalne. Czyli piny są ustawiane jako Hi-Z, Timery są zatrzymywane, ADC/I2C/SPI/UART zatrzymywane, przerwania wyłączane itd. itp. Skok pod adres 0 nie zrobi tego. K***a. Nic nie zrobi. Żeby to zrobić trzeba...
Poprawiłem tytuł na bardziej oddający problem i zgodny z regulaminem p. 3.1.15. LordBlick Jestem początkującym w języku C i ogólnie w programowaniu procesorów.Dlatego prosze o wyrozumiałość. Chciałem zrobić timerek zasilany z baterii, który co 8sek ma zmienić stan portu. Przymierzam się do zastosowania trybu Powerdown, ale najpierw muszę poradzić sobie...
chciałem zrobić wstawkę asemblerową dla watchdoga ale to już nie istotne bo nauczyłem się ustawiać poszczególne bity w rejestrach i rozumiem że to wystarczy... ale problem istnieje przesiadłem się na atmega1284p tu jest watchdog do 8 s no i dla 8 nie działa 4,2 i 1s również nie działa, działa dla 0,5 i mniej - dlaczego??? dla 0,5 s wdr Wdtcsr = &B00011101...
W WDTCLKUEN wpisujesz najpierw 0 potem 1? W czasie karmienia przerwania masz wyłączone? Pochwal się jednak kodem. Albert
Ja też miałem takie cyrki z przerwaniem. napisałem więc program w ten sposób: '///////////////////////////////////////... '////////// TERMOSTAT /////////////// '///////////////////////////////////////... $crystal = 4000000 'rezonator 4MHz $regfile "attiny2313.dat" 'attiny 2313...
No tak ale reset to jest chyba reset i procesor się resetuje. Mam ustawioną opcję tylko resetu sprzętowego, ba ATtina ma możliwość jeszcze generowania przerwania. Bezpieczniki ustawione są jak załączniku. Nawet sprawdzam na początku programu czy reset pochodzi z watchdoga, ale tak nie jest. A co do resetowania watchdoga to wiem o tym po prostu tu watchdog...
Czyli wyłączenie WatchDoga jest na takim samym poziomie bezpieczeństwa jakie zapewnia sam WatchDog, bo zawsze można wyobrazić sobie takie działanie programu że WatchDoga jest kasowany a jednak program nie działa zgodnie z naszym zamiarem. Jak dla mnie prawdopodobieństwo tego, że program wpadnie w pętlę, w której będzie w sposób nieuprawniony resetował...
Witam Układ STM32F103 usypiam za pomocą instrukcji __WFI(), usypianie i wybudzanie za pomocą zewnętrznych przerwań działa prawidłowo. Teraz chciałbym dołożyć watchdoga do tego układu. Po zastosowaniu IWDG układ resetuje się co 26s, w sleepie nie ma jak go wyzerować. Sprawdziłem też WWDG z załączonym przerwaniem, niestety to przerwanie się nie zgłasza...
Cześć Mam kilka pytań odnośnie esp32 i występującego w nim RTOS 1)Czy prawdą jest, że używając przerwań (np. od timera) najlepszym zwyczajem jest sprawienie żeby tylko budziły task który "odwali" całą robotę? Bo to że ISR mają być najkrótsze to oczywiste, ale czy przerzucając nawet krótką instrukcje w task jesteśmy jeszcze lepszymi programistami? 2)Jaki...
Witam Chciałbym wreszcie zacząć używać watchdog`a w swoich programach, ale do tej pory miałem problemy ze zrozumieniem go (może nadal mam) Proszę na podstawie poniższego pseudokodu odpowiedzieć czy prawidłowo jest umieszczony w kodzie ?? $noramclear 'dyrektywa zapobiegająca wyzerowaniu zmiennych uzytych w programie Config Watchdog = 2048 'konfiguracja...
Funkcja SystemInit zawiera ustawienia, które powinny być wykonane przed zainicjowaniem (często czasochłonnym) środowiska dla programu. Zwykle umieszcza się w niej programowanie źródła zegara, parametrów pamięci i watchdoga. Wzorcową funkcję SystemInit znajdziesz np. w CMSIS core dla Twojego mikrokontrolera. W środowisku Keil istnieje sprytny mechanizm...
Zwiechy nie tyle arduino co ATmega, wiadomo że najstabilniejszy mikrokontroler to nie jest. Proszę mitów nie powtarzać, tylko poprawnie projektować urządzenia i stosować wersje układów odpowiednie do zastosowań oraz ich parametrów pokazanych w dokumentacji. A sieć paść może zawsze, to da się wykryć wcześniej. Chodzi głównie o serwer który będzie przetwarzał...
Witam wszystkich, robię prosty układzik na uC atmega. Zadaniem go będzie odczyt temp z czujnika ds18b20 i ustawianie zewnętrznego przetwornika dac po spi. Wszystko praktycznie napisałem, bo części programu były wykorzystywane w innych układach, które pracują, z spi problemu nie ma, z odczytem ds też. Ale chodzi o to, żeby cały układ pobierał jak najmniej...
Tak jest !!! tak jak napisałeś ! Z praktyki uzywałem tylko właczenia, ( nie wykorzystuję trybu idle , więc nie musiałęm wyłączyć ), A jeszcze jedno nie polecam resetować watchdoga w obsłudze przerwania timera -> program może być w " malinach" a przerwania będą się wykonywac i resetować watchdoga, ja umieszczam je patrząc jak wykonuje się prog. Jeśli...
Jak zweryfikować jedno lub drugie? Mógłbyś nieco rozszerzyć/nakierować? W konfiguracji jest tyle różnego rodzaju zmiennych, że dla początkującego trudno jest od razu wszystko objąć. Stąd niestety mogą się pojawić dość trywialne problemy. EDIT: Wygląda na to, że udało się znaleźć i wyeliminować problem. Reset był powodowany przez hardware'owego watchdoga....
Wybudzaj przerwaniem watchdoga nie resetem. Ja bym to zrobił tak (w C, w bascomie pewnie też tak się da): W głównej pętli: - konfiguracja watchdoga z przerwaniem na jak najdłuższy czas- - wejście w power down - pętla nieskończona z ciągłym przechodzeniem do idle. W przerwaniu watchdoga: - wyzerowanie watchdoga - inkrementacja zmiennej odliczającej od...
Zaciekawił mnie układ opublikowany w Edw 12/03 "zamek na karte TPSA". Zrobiłem, działa..... ale niestety czasami sie wiesza. Ponieważ to pierwsze moje spotkanie z 90s2313 i jezykiem C może ktoś mi pomoże dołożyć do poniższego kodu watchdoga, tak żeby układzik sie nie wieszał ? Bede bardzo wdzieczny. Dodam że kompiluje to CodeVision AVR C Compilerem....
Sory. Zamykam temat, zawieruszyłem w jednym z przerwań polecenie resetujące watchdoga, to będzie przyczyna. Dw crazy-phisic, poznaję to po tym co procek robi w układzie po starcie, co chwalenia się to chyba nie ma czym same zera i jedynki w rejestrz, chyba z osiem?.....
zastąp signal i stary vektor INTERRUPT0 SIGNAL (SIG_INTERRUPT0) { x++; } na nowsze ISR i INT0_vect ISR (INT0_vect) { x++; } tu masz wszystkie przerwania a co do watchdoga hmm... żeby użyć #include <util/delay.h> musisz dać wcześciej #define F_CPU 8000000UL albo dodać do kompilatora -DF_CPU=8000000UL gdyż jak...
W przerwaniu INTx ustawić watchdog w tryb przerwania na czas około 1 sekundy i wrócić do power down. Po przerwaniu od watchdoga sprawdzić stan wejścia i podjąć odpowiednie kroki. PS. W attiny każde wyprowadzenie może wybudzić procesor. Lepiej używac pin change interrupt moim zdaniem.
Oczywiście - można. Ja stosowałem podobne rozwiązanie z lpc11xx, budzony z trybu power down rozwiązaniem w postaci timera taktowanego zegarem watchdoga z ultraniskim poborem prądu. I ładnie mi to działało. Coś podobnego realizuję też w STM32, tyle że wykorzystując wewnętrzny RTC i resetowanie rdzenia na RTC Alarm. Mając dobrze dostosowany do projektu...
Ok sprawa się nieco wyjaśniła. Mikroklocek nie idzie spać po użyciu WFE ale za to robi to po wywołaniu WFI. Ostatecznie mój kod, który wprowadza rdzeń w uśpienie wygląda tak jak poniżej i w tej formie to działa [syntax=c] /** * Entering STOP2 power save mode. In this mode all clocks except LSI and LSE are disabled. StaticRAM content * is preserved,...
To co chcesz zrobić jest niesamowicie skomplikowane, więc jeśli nie masz wielkiej potrzeby tak robić, to może warto rozważyć ten programowy reset - na przykład poprzez watchdoga - program po restarcie sprawdzałby co spowodowało reset i jeśli był to watchdog, to znaczy, że powinien zrobić coś innego niż po zwykłym resecie. To jest rozwiązanie o wiele...
Witam Wyłączenie przerwania nie wchodzi w grę mam tam reset watchdog-a Resetowanw watchdoga w przerwaniu , to ... oględnie mówiąc głupota. . Myślę że pozostaje mi rozwiązanie 2 ale czy Kolega zgada się z moja teorią o przerywaniu transmisji danych do LCD? Rozwiązanie nr. 2 jest dobre , ale pod warunkiem , że będziesz używał LCD WYŁĄCZNIE w przerwaniu....
Moze nastepuje reset µkontrolera od watchdog-a?
Witam Napisałem kawałek kodu do obsługi przerwań IRQ Zasada miała być taka po wywołaniu przerwania (zwarcie PIO_PA2 do masy) miał zmienić się stan diody na PIO_PA27. Niestety program nie działa poprawnie (przerwanie nie jest wykonywane). Tytułem wstępu to tyle. Poniżej kod, który powinien realizować przerwania. main.c Proszę o wszelkie podpowiedzi,...
Witam, jeszcze proszę praktyczne rozwiązanie takiego problemu, gdyż program jest praktycznie ukończony, ewentualnie drobne poprawki kosmetyczne:), ale w obecnej wersji odczyt i zapis wykonywany jest z poleceniem "wait", przez co wskazywane temperatury nie są czasem poprawne - wyskakuje BRAK ds'a. Już nie mam pomysłu jak to zrobić, proszę tylko o jakieś...
Z tym przerwaniem masz rację, chyba za bardzo zasugerowałem się postem hotdoga. Przeniosłem zasypianie do pętli nieskończonej i już jest dobrze. Mam małe doświadczenie z przerwaniami i dlatego trochę się w tym jeszcze motam. A te zera są dla przejrzystości, szczególnie się to przydaje np tu przy WDP3..0 - jak kiedyś będę modyfikował kod lub korzystał...
Nie wiem czy dobrze kobinuję, przy takiej konfiguracji bardzo szybko odświerza mi LCD prawie nic nie widać. Nie wiem też jak ugryść wyświetlanie poszczególnych podprogramów jednym przyciskiem. Zastosowałem skoki opisywane [url=]Tutaj [syntax=vb]$regfile = "m16def.dat" 'informuje kompilator o pliku $crystal = 8000000 'informuje kompilator o częstotliwości...
Witam, mam problem z wywołaniem funkcji w przerwaniu. Na chwilę obecną debugowanie odpada, gdyż mam mały problem z odpaleniem debugowania. Po wywołaniu przez procesor przerwania, albo się on wiesza albo niepoprawnie działa funkcja. To samo dzieje się gdy wkleję do przerwania zawartość funkcji. Podczas kompilacji nie sypią się żadne warningi dotyczące...
Witam, Chciałbym skonfigurować przerwanie od Timer 2/3, aby było wywoływane co 125ns (8 MHz). Pracuję na wewnętrznym oscylatorze z włączona pętlą PLL -> częstoliwość 32MHz. Gdy do rejestrów PR3 i PR2 wpiszę 16 000 000 (do PR3 starszą część, do PR2 młodszą) to dioda pulsuje z częstotliwością 2Hz (1s świeci i 1s nie świeci). Gdy wpiszę do tych rejestrów...
A czy kolega jest w stanie powołać się na konkretny dokument? Pomysł ze sprzętowym watchdogiem wydaje mi się sensowny, bo jeśli program zatrzyma mi się w przerwaniu Timera, to wtedy przerwanie z żadnego innego Timera nie zadziała i softwareowe zabezpieczenie nie ma sensu.
Witam Proszę o pomoc w zindentyfikowaniu problemu. Otóż jestem w trakcie nauki programowania uC AVR i chciałbym w swoim programie umieścić programowy reset za pomocą watchdog'a. Zależy mi na kompletnym resecie żeby program "na świeżo" wystartował. Po zasięgnięciu do noty katalogowej uC znalazłem opis jak to działa i jak to zdefiniować. Ponieważ korzystam...
Witam W dokumentacji pisze tak: "To enable the WDT, a user must write 01EH and 0E1H in sequence to the WDTRST register (SFR location 0A6H)." Czyli taki kod powinien go załączyć?: mov 0A6H,01EH mov 0A6H,0E1H Dobrze to rozumiem? Idąc dalej: "When the WDT is enabled, the user needs to service it by writing 01EH and 0E1H to WDTRST to avoid a WDT overflow."...
Witam Usypiam mikrokontroler w pewnym newralgicznym miejscu programu: Dodano po 2 Czyżby jedyną opcją było wybudzanie mikrokontrolera co np. mniej niż te 13 sekund i resetowanie watchdoga? Dodano po 1 Wygląda na to, że jedyny sposób to uruchomienie timera o nazwie LPTIM, który działa gdy procesor jest uśpiony. Więcej informacji o nim w nocie AN4865...
A którą wersję Bascoma używasz? 1.11.9.0 Timer1_int: Counter1 = 54040 ' 10 razy na sekunde .... Return Nie wiem dokladnie ile cykli w bascom-avr jest zuzywane na odlozenie wartosc rejestrow na stos dlatego wybralem wartosc 54040 zamiast 54016 jako bardziej zblizone do 0.1s / stos + 0,09979167s / moze ktos wie ile dokladnie cykli jest tracone przed...
Witam. Mam pytanie odnośnie wybudzania mikrokontrolera z trybu np. power down poprzez watchdoga: Jaki jest sens stosowania watchdoga do wybudzania mikrokontrolera. Ja to rozumiem tak, że mikrokontroler po uśpieniu powinien zostać wybudzony na skutek jakiejś zewnętrznej przyczyny (np. wystąpieniu przerwania zewnętrznego) Mógłby ktoś podać przykład stosowania...
A czy to też nie działa : Config Watchdog = 16 Start Watchdog Disable Interrupts być może Bascom odblokowuje przerwania w starcie watchdoga?
Witam, Bazuje na projekcie ze strony Freddie Chopin dla stma F4 z dodanymi bibliotekami STM32F4xx_StdPeriph_Driver. Zdefiniowałem sobie konfigurację timer'a w następujący sposób: [syntax=c]void Timers_Config(void){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TI... ENABLE); NVIC_InitTypeDef NVIC_InitStruct; NVIC_InitStruct.NVIC_IRQChannel = TIM1_CC_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptio...
Pamięć Eeprom może się wysypać przy zasilaniu nie gwarantującym poprawnej pracy mikrokontrolera. Raz w moim sterowniku też Eeprom się posypał podczas burzy kiedy napięcie sieciowe przerywało bo wiatr szarpał przewody. Wtedy dopiero doczytałem o bitach konfiguracyjnych BODLEVEL i BODEN Można je tak ustawić, że mikrokontroler będzie utrzymywany w stanie...
A przypadkiem nie włącza go przerwanie Timer-a ? When the SM bit is cleared (zero), the SLEEP instruction forces the MCU into the Idle mode, stopping the CPU but allowing Timer/Counters, Watchdog and the interrupt system to continue operating. This enables the MCU to wake up from external triggered interrupts as well as internal ones like Timer Overflow...
Szkoda że z takiego fajnego tematu zrobił się taki bełkot. Wyraziłem się jasno ja nie chcę ratować programu Watchdogiem nie chcę również oszczędzać przy jego pomocy na zabezpieczeniach samego procka itp. Pewnie się ze mną zgodzicie Watchdog służy do zabezpieczania procka przed błędami i wypadkami, których nie da wyeliminować na drodze programowej i...
Za taki Watchdog może służyć np. CD4060, z odpowiednio dobraną częstotliwością pracy. Do jednego z wyjść Q przyłączasz nóżkę Reset. Do wejścia Reset licznika przyłączasz port mikrokontrolera, koniecznie przez jakiś inwerter (np. tranzystor PNP + 3 oporniki). A gdzie umieścić zerowanie licznika? To zależy od tego, na czym opiera się "życie" programu...
No proszę bardzo // Program skompilowany pod AVRStudio 4 // To działa po dotknięciu int0 do plusa // a w praktyce to nawet po dotknięciu końcówką miernika .INCLUDE "m32def.inc" .org 0x0000 rjmp Reset .org INT0addr // ustawienie wektora dla int0 rjmp ob_przerw // -//- .org 0x2a Reset: //wektor dla reset tutaj skacze proc po resecie ldi R24,high(RAMEND)...
Szkoda, że koledzy zamiast wskazać sensowne rozwiązanie piszą "wybierz ARM i problemy magicznie znikną". Jeżeli dobrze rozumiem, to problem jest taki: Funkcja przesyłająca dane po SPI jest wywoływana z jakiegoś przerwania oraz z programu głównego. Jak to zrobić, aby blokować wywołania na czas transakcji? Dlaczego? Ponieważ do SPI są przypięte 2 porty...
Jedyne co mi przychodzi do glowy to to, ze watchdog resetuje procka w polowie wysylania konkretnego bajtu. W wyniku tego rozpada sie synchronizacja miedzy kompem a procem i komp odbiera polowe poprzedniego bajtu i polowe nowego (niekoniecznie dokladnie polowe, moze byc np 2 bity i 6 bitow albo kazda dowolna inna konfiguracja. Moze tez odbierac kawalem...
Caly program wyglada tak: Teraz nie mam pojecia czemu ale jesli przerwanie jest aktywne, to nawet zanim nastapi program sie po prostu wiesza :| Moze masz wlaczonego watchdoga w confbitach ?
A moze wiesza sie sama obsługa I2C lub jakes przerwanie, a WATCHDOG jest i tak resetowany w pętli głównej więc nie dochodzi do resetu procesora.
Nie zgadzam się z Twoją opnią, która sprowadza się do tego, że skoro jest dostepny C, to zapomnijmy o asemblerze. Masz rację, jeśli dotyczy to projektów amatorskich (hobby) lub krótkoseryjnych, w których ważniejszy jest czas wykonania prototypów niż korzyści ekonomiczne. Dziwnym trafem znakomita wiekszosc projektow jest pisana w jezykach wysokiego...
Dopisałem, ale jak mam teraz inicjalizować procesor? Wkleiłem wstawkę asm z helpa (dopisując przed ; ' , bo bascom nie akceptuje ; jako komentarza). Mam błąd 60 - duplicate label _basicstart i _clearram. Proszę o pomoc, bo asm nie znam. Dodano po 5 Wiem już dlaczego był ten błąd. Doczytałem w helpie, że ta dyrektywa nie usuwa całej inicjalizacji, tylko:...
Idziecie nie w tym kierunku co trzeba. Trzeba zająć się odpowiednią obsługą komunikacji a nie watchdog'a. 1. Jeśli odbiór ma wykorzystywać Input to jest coś takiego jak: $Timeout = value 2. Komunikację radziłbym wykonać w oparciu o przerwanie od Urxc.
A ni jest tak, że włączenie silnika i wogóle pracujący silnik czasami resetuje ci procka? Daj długi delay na początku to szybko to zauważysz. Nie masz włączonego watchdoga którego nie kasujesz? Czy masz dobrze skonfigurowane rejestry od przerwań? Może włączyłeś jakieś przerwanie a nie zrobiłeś jego obsługi? Może nie masz podciągnięcia na wyjściu sterującym...
Witam, Problem, z którym się do Was zwracam jest troszkę zagmatwany ale będę się starał opisać wszystko jasno i klarownie, bo sam nie mam już sił. Jest procesor, atmega88, na etapie budowania poszczególnych modułów docelowego programu. Uruchomiłem całkiem ładnie obsługę RC5 (może nie do końca super ale działa). Później uruchomiłem sprzętowe TWI (M88...
Jeśli WatchDog jest domyślnie wyłączony to ja go nie konfigurowałem. Także fusebit WDTON jest nie ustawiony. Z resztą:[syntax=c]WDTCSR |= (0 << WDE) | (0 << WDIE) | (1 << WDCE); //Turn WatchDog off wdt_disable();[/syntax]Nic nowego nie wniosło do działania. Usypiam do głębokiego żeby nie zużywać baterii której głównym zadaniem jest...
No ale dlaczego miałby w przypadku przerwania się nie wyzerować? Toż polecenie ustawiające go na jakiś określony czas to tylko miejsce w którym się przepełni i będzie liczył od zera. A czasu masz tyle na ile ustawiłeś watchdoga.
Chciałbym zrobić przerwanie od Analog Watchdog, które będzie wywoływane gdy napięcie na kanale 10 przetwornika ADC1 wyjdzie poza zakres 1V-2V. No i cóż, przerwanie nie chce występować... Sprawdzałem w debuggerze i w ogólę nie wchodzi do przerwania, więc problem jest zapewne w konfiguracji. Sam ADC1 oczywiście działa i mierzy napięcie. Konfiguracja ADC1...
delay w przerwaniu wrzuciłem tylko w celu sprawdzenia czy timer poprawnie skonfigurowany i czy wchodzi do obsługi przerwania. Przy następnym projekcie wymagajacym oszczedzania energii na pewno zrobie na zewnetrznym przerwaniu :) Dzięki wszystkim za pomoc. Temat zamknięty.
Zainstalowałem AVR Studio4 i lecę od początku z google i pdf na temat ASM i AVR Powiedzcie chociaż czy w dobrym kierunku zmierzam? Bo jak w złym to odpuszczam i daje sobie spokój, pobawię się migającymi diodami w Bascomie. Tam gdzie nie ma komentarza to nie wiem co to znaczy i co robi ale było w pdf lub innych opisach, jeżeli ktoś może mi wyjaśnić instrukcje...
Domyślnie WGD jest wyłączony. Czy przypadkiem właśnie go nie włączasz? Wtedy , jeśli w kodzie jest nieobsługiwany, po resecie program działa najkrótszy możliwy czas (sprawdź w nocie jaki). Może to wyglądać, ze dioda szybko miga a tak naprawdę WDG resetuje uC. W debugerze widziałbyś czy nie jest wykonywany reset. W Arduino musisz ratować się półśrodkami,...
Witam, Napisałem program, który wprowadza uC w stan uśpienia. Wszystko działa poprawnie, ale do tej operacji używam dwóch przycisków. Jeden służy mi do usypiania (PA1), a drugi, jako przerwanie do wybudzania uC (PD2-INT0). W jaki sposób mogę zrobić to na jednym przycisku podpiętym pod PD2? Poniżej kod. [syntax=c]#define F_CPU 8000000UL /*czestotliwosc...
Przerwanie od WD TRZEBA włączać za każdym razem przed komendą SLEEP bo wejscie w przerwanie automatycznie kasuje bit który zezwala na przerwanie i następny okres WD po prostu bez tego zresetuje uC. Tak jest w trybie Interrupt+Reset, wtedy pierwsze przepełnienie odpala przerwanie a drugie i następne reset. W trybie Interrupt bit WDIE nie jest kasowany....
Włączanie i wyłączanie przerwań w pętli głównej lub jakiejś funkcji, czyli poza ISR może być stosowane w przypadku krytycznego kodu. Kod krytyczny to taki, który musi się wykonać ze ściśle określonymi zależnościami czasowymi. Tym samym wystąpienie przerwania w trakcie wykonywania tego kodu zakłóciłoby te zależności. Tutaj oczywiście nie ma to sensu....
Próbowałem ustawić wyzwalanie zboczem FALLING instrukcjami Bascoma, oraz wprost w rejestrach. Nie dawało to nic. Nie wiem, czy dalej wyzwalało się poziomem, czy przyczyna była inna. Poniżej fragmenty programu, które według mnie są istotne. Może ma tu jakieś znaczenie fakt, że pin INT1 jest w trakcie przerwania zmieniany na wyjście i z powrotem na wejście....
Witam, jeśli ten schemat odzwierciedla stan faktyczny jeśli chodzi o elementy, szczególnie dyskretne to nie dziw się, że masz takie efekty. Jeśli chcesz aby przynajmniej odrazu w diametralny sposób zmienił się stan to zrób przynajmniej kilka podstawowych kroków: 1. przed stabilizatorem 7805 koniecznie wepnij 2 kondensatory - jeden elektrolityczny o...
Watchdog to jedno, odmierzanie czasu to drugie. Na razie skup się na przejściach między stanami systemu, co gdzie włączać i wyłączać, na jakie zdarzenie czekać w każdym stanie. Zresetować watchdoga jest prosto (np. w main po wyjściu ze stanu uśpienia), trudniej jest zapewnić, że system zachowa się odpowiednio po zresetowaniu w każdym możliwym stanie....
Tak wiem, że do watchdoga. Zmieniłem koncepcje, nie chciałem mieć dołączonego preskalera żeby mieć jak najwyższą częstotliwość. Przepraszam, że błędny komentarz pozostał. Oto cały kod obsługi przerwania: ORG 0x00 goto START ORG 0x04 movwf W_TEMP ;kopia rejestrow swapf status,W movwf STATUS_TEMP btfsc T0IF goto TIMER btfsc INTF goto INTEF goto WYJSCIE...
Witam! Napisałem programik którym liczę ilość cykli procesora pomiędzy dwoma punktami programu, na zasadzie obliczenia różnicy pomiędzy dwiema wartościami licznika Timera1A ustawionego z preskalerem 1. Niedawno potrzebowałem zmierzyć ile cykli potrzebuje uC od momentu wystąpienia przerwania, a rozpoczęciem jego obsługi i stworzyłem takie coś. #include...
Witam, Nie będzie działać poprawnie po popełniłeś jeszcze jeden błąd. Do momentu uśpienia wszystko jest ok, ale teraz następuje zmiana na porcie C, uP wstaje z uśpienia wykonywanie jest przerwanie pcint i teraz następuje powrót z przerwania. Powrót wykonywany jest jest nie do instrukcji SLEEP jak założyłeś a do pierwszej instrukcji po niej. Czyli następuje...
1. Czy nie powinieneś ustawić pinów przerwań jako wejśc (ja dla pewności tak robię) 2. Ustaw w rejestrze MCUCR jaki ma mieć charakter (na stan lub na zmianę stanu). 3. Sprawdź, czy przewód z pinu przewania nie "wisi" w powietrzu. Obsługa przerwań działa znakomicie i łapie wszelkie stany z powietrza. 4. Jak już ogarniesz to pewnie będziesz musiał zrobić...
witam. od kilku dni probuje rozwiazac pewien problem. mianowicie ucze sie programowac avr'y i postanowilem zrobic budzik. jednak problem zaczal sie gdy zaczalem dzialac na przerwaniach. na wejscie int2 podany mam sygnal o czestotliwosci 1Hz. ma on co sekunde powodowac przerwanie w ktorym jest odczyt zegara oraz wyswietlenie go na wyswietlaczu 2x20 znakow....
Nie wydaje mi się że to problem z watchdogiem, przyznam się że do tej pory nie miałem potrzeby korzystania z niego i nigdy go nie uruchamiałem;) Standardowo chyba nie jest włączony watchdog? OK. problem lezal w makefile. Poczatkowo program składał się z kilku plików zrodlowych, teraz przerobilem makefile zeby kompilowal tylko jeden plik i widać popełniłem...
Póki co wykombinowałem by numer programu zapisać w EEPROMie i zresetować procesor watchdogiem jak gaskoin polecił. Teraz działa. mirekk36 pięknie mnie tu zjechałeś. Rzeczywiście, pojęcia nic mam co robię i za głupi jestem, żeby na forum zapytać co jest nie tak. Twoja pomoc bardzo mi pomogła. Wielkie dzięki.
Jeśli chcesz gotowego rozwiązania to napiszę jak sam robię takie systemy: Deklaruję pewną strukturę globalną, koniecznie volatile, w której umieszczam flagi w zależności od tego ile ich potrzebuję, np.: [syntax=c]volatile struct sZmienna { unsigned char Pomiar :1; unsigned char Timer :1; unsigned char Odswiez_LCD :1; //itd. }Zmienna;[/syntax] Następnie...
Osobiście gdybym musiał wykonać taki projekt Attiny2313, i wybudzać go za pomocą zewnętrznego przerwania, to zamiast 555 dałbym Attiny13A. Przykładowo możesz go uśpić na 8 sekund, wybudzenie watchdogiem żeby zwiększył stan zmiennej i znów poszedł spać, w przypadku odpowiedniej jej wartości wygenerował przerwanie.
Zmieniłem = na |= teraz wygląda to tak: ADC1->SQR1 |= 0<<20; ADC1->SQR2 = 0x0; ADC1->SQR3 |= (kanal_IN << 0); ADC1->CR1 |= 0<<16;//0000: Independent mode. ADC1->CR1 |= 1<<8;//SCAN mode. ADC1->CR1 |= 1<<6;//Włączam generowania przerwania na ADC1->SR bit 0 AWD po zgłoszeniu watchdoga. ADC1->CR1 |=...
Do bootloader'a wracam przez reset watchdog'a. Czyli SCB->VTOR lepiej dawać przed skokiem do aplikacji? W sumie dobry pomysł. Chodzi Ci o ten temat? Czytam ale nic nie mogę wygrzebać z niego co by pomogło w moim problemie. Dodano po 15 Odczytałem rejestr NVIC->IABR[1] i okazuje się że w aplikacji widnieje przerwanie od USART2 które wykonało się w bootloader'ze....
Witam, Jestem początkujący jeśli chodzi o programowanie ARM wiec proszę o wyrozumiałość. Mam problem z procesorem LPC 1768, konkretnie jest to płytka Mini DK-2. Od pewnego czasu walczę z problemami w przerwaniach i nie mogę sobie poradzić. Przewertowałem setki tematów na forach polskich i zagranicznych, być może źle szukałem, wiec każda wskazówka i...
Witam, Mam problemz AtMega z tematu. Ustawiam konfigurację Timerów wg manualki: tryb CNC; prescaler; zezwolenie na przerwania CompareMatch. Po ustawieniu tego odblokowuję przerwania przez "sei();" i.. procesor się resetuje. Dodam też, że taki sam kod działa bez problemów na AtMega 16/32/64. Czy przy pisaniu kodu na te procesory (324/644/1284) trzeba...
Witam. Niestety program który chcę napisać nie działa już w początkowej fazie. Nie wiem dlaczego, dlatego proszę aby ktoś na to zerknął i powiedział co jest nie tak. Generalnie program ma działać tak, że po wciśnięciu przycisku program leci do przerwania, w przerwaniu sprawdza czy przyciśnięcie było krótkie lub długie, po czym ustawia odpowiednią zmienną...
na wyświetlacz timera nie potrzeba, jeśli to zwyklły 16x2 to on nie wymaga zbyt wiele. Timery wtedy możesz na inne rzeczy wykorzystać. Jak odczytujesz temperaturę? Wykorzystujesz watchdoga, resetujesz go właściwie? Pytasz o watchdoga - nie konfigurowałem go, czy on jest z automatu włączony? sensors.requestTemperatures(); temperatura = sensors.getTempCByIndex(0);...
Witam, mam problem z obsługą przerwań zewnętrznych INT0 oraz INT1 w symulatorze (Simulator). Piszę w AVR Studio 4.19, gdyż Atmel Studio nie ma symulatora dla ATtiny87. Popatrzcie na ten banalny kod (okroiłem pierwotny kod do absolutnego minimum): [syntax=c] #include <avr/interrupt.h> unsigned char i; ISR(INT0_vect) //interrupt at PB6 { i++; }...
Jak to jest z tym zawieszeniem ? Kiedyś zrobiłem układ sterownika z zegarem czasu rzeczywistego (zegar programowy) i po zastosowaniu zbyt długich procedur w przerwaniach procek po kilku minutach zawieszał się. Zaraz po zawieszeniu procesor podejmował pracę tzn. wykonywał DO<>LOOP ale wszystkie zmienne były wyzerowane, wszystkie piny (o ile pamiętam)...
poprowadzi mnie ktoś za rączke przy uruchomieniu psa w s52? (asembler) całkiem od podstaw, tzn poczytałem troszkę o zerowaniu licznika i wiem żeby nie umieszcać tego w prodedurze przerwań. Mam kilka pętli, główną i kilka "obok" w których ustawiane są parametry pracy, oraz wykrywanie błędów. W sumie jest ok 4 króciutkich pętli i można by było tam umieścić...
Witam Zakupilem zestaw uruchomieniowy ZL25ARM+ ZL24ARM w sklepie Kamami. Mam problemy z obsluga przerwania. Najprosciej mowiac chcialbym aby po zgłoszeniu przez watchdog'a zakonczenia liczenia (Timer Mode). Jednak tak sie nie dzieje i nie wiem w czym tkwi problem. Wrzuce tutaj troche kodu: void main() { #ifdef DEBUG debug(); #endif...
Jak się reseta to albo watchdog, albo wektory przerwań nie obsłużone i idzie w maliny... Sorry innej możliwości nie ma, chyba, że się stos kończy i włazi na ram...
Wiem ze w PHP operatory sa takie same jak w c, dlatego ucze sie C na uC, a nie np BASCOM'a ;] (choc C lepsze ;]). Dzięki za pomoc, teraz jest ok. Dodano po 14 A jednak nie, wystąpiła jeszcze bardziej komiczna sytuacja. Scislej: Gdy nacisne przycisk, do pamieci zapisywany jest czas wciscniecia, gdy w krótkich odstepach czasu nacisne kilka razy, mam po...
Czyżby ta etykieta jest wykonywania podczas przerwania?
Witam! chciałbym użyć watchdoga w mojej aplikacji. Program działa tak, że jest sobie pętla główna programu i wykonywane są w niej pewne rzeczy a pozostała część działa na przerwaniach. Watchdoga chciałbym resetować w pętli głównej tak aby zawieszenie programu w procedurach obsługi przerwań również powodowało resetowanie procesora. Problem jaki napotkałem...
nie jest usatawiony, robiłem testy z jego ustawieniem i wtedy nie musze wogóle uruchamiać watchdooga zeby działał, działa cały czas i prawidłowo. Zastanawiam sie czy moje problemy nie mają związku z przerwaniami.
Jeśli piszesz w WinAVR i otworzysz plik w asemblerze to zobaczysz, że każde nie używane przerwanie prowadzi do resetu. Nieużywane tzn. nie posiada funkcji obsługi przerwania. Przerwanie takie od np. przepełnienia timera może nastąpić jeśli zostanie odblokowane, ale jak mówisz w tym przypadku to nie to. Możesz po prostu wyłączyć watchdoga i upewnić się...
Napisałem programik w celu testowania czasu w przerwaniu ADC. #include <stdint.h> #include <avr/io.h> #include <stdlib.h> #include <avr/interrupt.h> int main(void) { sei(); DDRB=255; DDRC=255; ADMUX = _BV(REFS0)|_BV(REFS1); ADCSRA = _BV(ADEN)|_BV(ADIE)|_BV&...
Witam, W dokumentacji dowolnego mikrokontrolera ATmega z łatwością można odnaleźć tablicę z wektorami przerwań, np. taką: 1 $0000 RESET 2 $0002 INT0 External Interrupt Request 0 3 $0004 INT1 External Interrupt Request 1 4 $0006 INT2 External Interrupt Request 2 5 $0008 INT3 External Interrupt Request 3 6 $000A INT4 External Interrupt Request 4 7 $000C...
Generalnie w fateku jest funkcja 90 i 91 WDT i RSWDT gdzie ustawiamy czas po którym wyrzuci błąd(max 1,2s) lub resetujemy, ale tutaj się zgodzę z kolegą powyżej. Przecież funkcję CALL, LBL, RTS możesz wywoływać nieskończoną ilość razy i sterownik będzie realizował cały program, a nie tylko liczenie. Jeśli natomiast masz coś ważnego to użyj przerwania...
dzieki za slowa otuchy :) Nie przejmuj się, to normalne, że są błędy oprogramowania oraz sytuacje nieprzewidziane przez programistę. Od tego między innymi jest Watchdog, aby nad tym móc zapanować. Gdyby było tak idealnie jak pisze nasz kolega TMF, to Windowsy byłyby idealne - a jednak nie są :D Watchdog to narzędzie, które jak każde inne można wykorzystać...
Poradziłem sobie - winny był monitor PAULMON, który nieprzystosowany do pracy z DS89C430 nie miał przekierowania przerwania od portu szeregowego 1 (wektor 003Bh). Po wywołaniu przerwania program głupiał i skakał do kodu monitora. Przerobiłem jakiś inny, prostszy monitor i wszystko działa. Jeżeli będziecie pisać monitor na ten procesor, umieścicie kod:...
Korzystam z przykładowych projektów dostarczonych przez ST w programie IAR. Po lewej stronie okna programu znajduje się okienko z drzewem folderów i pośród nich znajdują się dwa pliki ze 'startup' w nazwie: startup_stm32f10x_md.o i startup_stm32f10x_md.s (zawartość plików znajduje się poniżej). To o te pliki chodziło? Zawartość dość znacznie się różni....
W STM32 można ustawić przerwanie po przekroczeniu pewnego zadanego napięcia na ADC - popatrz na opis trybu "analog watchdog". 4\/3!!