Czy RTC (zegar czasu rzeczywistego) używający Timera 2 w trybie asunchronicznym , działa nawet wtedy gdy wyłączone sa przerwania globalne ? ... kwarc, preskaler oraz Timer2 nie potrzebuje przerwań ale to nie wystarcza do zrobienia całego RTC to wystarcza do zrobienia przerwania co 1 sekundę a reszta zegara musisz zrobić programowo i to właśnie na przerwaniu...
Do kolegów co podpowiadają mi użycie makr, tak jak pisałem wczesniej, uzywam Codevision a w nim nie ma czegoś takiego - chyba. Jak już wcześniej napisałem, moim zdaniem przy takich procedurach obsługi przerwań program powinien się wyrobić bez konieczności zagnieżdżania przerwań, a przyczyna złego zliczania może leżeć gdzie indziej. Możesz oczywiście...
Witam wszystkich, to mój pierwszy post na forum :) Od niedawna bawię się w programowanie AVRów. Zaprogramawałam na Atmedze16 coś w rodzaju programowanego termometru, tzn. aktualna temperatura jest mierzona przez czujnik DS18B20, porównywana z zaprogramowaną wartością, i jeśli zajdzie odpowiednia zależność (większa/mniejsza z dokładnością co do szerokości...
Do arturt134 Wyłączenie przerwania na czas odpowiadający pracy powiązanej z przerwaniem( oczywiście nie globalne wyłączenie przerwań, co byłoby po prostu odsuniętym przerwaniem bez zagnieżdżeń) jest dobrym rozwiązaniem. I skanowanie klawiatury zamiast przerwań też jest dobre. Ale nie mogę się zgodzić co do uniwersalności Twojego rozwiązania. Jest przejrzyste...
Witam serdecznie!! Potrzebuję uruchomić RS232 pomiędzy PICem a PC, do PC nic nie dochodzi, nawet 'krzaki' :/ Fragment kodu gdzie ustawiam RSa: void init_comms(void) { TRISC = 0x30;//ustawienie RC5, RC4 SPBRG = 25;//ustawienie baud rate 9600, przy 4MHz BRG16 = 0;//8-bit Baud Rate Generator BRGH = 1;//High speed SYNC = 0;//asynchroniczny...
Witam! Przyznam że trochę chaotyczny ten fragment kodu. Myślę że mógłbyś bardziej korzystać z makr jakie oferuje środowisko winavr, np. cli() - globalne wyłączenie wszystkich przerwań, sei() - jw. tylko odblokowanie i np. zamiast pisać: TCCR1B = 0x19; może nie krócej ale na pewno czytelniej jest: TCCR1B=_BV(WGM13)|BV(WGM12)|BV(CS10); co oznacza tryb...
sorki chodziło mi o sei() :| a pomerdało mi się z cli() czyli globalnym wyłączeniem przerwań. Jeśli dobrze zrozumiałem, to w procedurze obsługi przerwania np.INT1 nie można uruchomić np. przerwania od komparatora? To max zagmatwanie nie jest chyba takie tragiczne. Może na innym przykładzie będzie to bardziej jasne. Otóż chcę uruchomić w kodzie programu...
Chodzi mi o to że w bascomie żeby przerwania działały musisz włączyć globalną obsługę przerwań, i dopiero konkretne przerwanie. Do tego widzę że nie ma jak się wykonać podprogram "readir" bo masz wyłączoną globalną obsługę przerwań. Proponuję : [syntax=basic4gl] Config Rc5 = Pine.4 On Int4 Readir Config Int4 = Low Level Enable Interrupts Enable Int4...
Gdy procesor jest w trakcie wykonywania procedury przerwania, następne przerwanie nie będzie przyjęte , gdyż procesor (nie kompilator!) zeruję flagę globalnego zezwolenia na przerwania. Tak samo flaga bieżącego przerwania (tego, którego procedura obsługi jest wykonywana) zostaje automatycznie wyzerowana. Po zakończeniu przerwania flaga globalnego zezwolenia...
Mam problem z kolejkowaniem przerwań i wywłaszczaniem w STM32 Cortex M3. Otóż mam 2 timery, TIM6 oraz TIM12 o tym samym priorytecie (jeśli się wykonują, nie mogą się wywłaszczać, dlatego ten sam priorytet). Czasem używam globalnego wyłączenia przerwań i w tym czasie zgłaszają się oba, z tym że pierwsze ( po włączeniu IRQ) wywołuje o niższym numerze,...
No dobrze - o matko (sorki) moja kurza ślepota ale zwrócę uwagę na coś innego mocno niepokojącego w twoim kodzie. On się cały czas resetuje po przerwaniu. Po pierwsz po co ci cli() i sei() w przerwaniu (przecież wyłączenie innych przerwań po wejściu w każde przerwanie dzieje się z automatu) ale już wplecenie rozkazu: reti(); to wyciągnięcie dywanika...
W momencie zaistnienia jakiegoś zdarzenia wywołującego przerwanie zostaje ustawiona jego flaga. Jeśli przerwanie to nie jest zamaskowane i globalna flaga zezwolenia na przerwania jest ustawiona, to mikrokontroler skacze do odpowiedniej procedury obsługi przerwania i globalna flaga zezwalająca na przerwania zostaje automatycznie wyłączona do czasu zakończenia...
Idzmy głównym wątkiem bez cofania sie. Tak, uaktywnia ale już wiem, ze było ono przechowywane w SREG. To jest wyjaśnione. W SREG przechowywana jest informacja o fladze I, czyli fakt włączenia lub wyłączenia przerwań globalnych. Nie ma to nic wspólnego z "przechowywaniem" informacji o przerwaniach INTx. Instrukcjami operującymi na fladze I w SREG są:...
Cos takiego powinno działac , musisz pokombinować. SP to stack pointer czyli wskaźnik stosu,a stos to chyba wiesz co to jest :) SPL określa młodszy bajt SP. Instrukjca nosave powoduje że na stos nie beda wrzucane zadne rejestry robocze. SREG to głowny rejestr kontrolny . Proponuje zajrzeć do pdfa z opisem układu. SREG.7 wskazuje na 7 bit w tym rejestrze....
W aktualnej wersji programy wykonują co mają wykonać, a następnie z powodu braku pętli głównej, wykonują dodane na końcu przez kompilator: - wyłączenie przerwań globalnych, - pętlę nieskończoną, efektem obserwowanym jest "zawieszenie" się programu. Nie ma to wpływu na sam zapis, który próbujesz zrealizować. Po prostu program mikrokontrolera nie może...
jak pisałem wcześniej nie masz wyłączenia nigdzie przerwań I tu się zgadzam... i twój kod nie bedzie działał prawidlowo gdyż cały czas bedą wywoływane przerwania. Że powiem..."Aleeeeeż jasne":) No to kolega przeczyta czym się różni falling od low:) OK?:) Poza tym, jak już się czepiamy:P IMO powinno się najpierw załączyć zezwolenie na poszczególne przerwania...
jeśli chodzi o inne przerwania od układów peryferyjnych to poza ustawieniem rejestrów tego układu muszę włączyć to przerwanie i czy tu wystarczy funkcja z core_cm3 np. NVIC_EnableIRQ( RTC_IRQn ); tak I dlaczego nie musiałem włączyć globalnych przerwań żeby SysTick działał?;] Przerwanie SysTick jest w grupie exceptions, ich się nie da wyłączyć w NVIC....
Średnio chce mi się analizować ten kod, ale jeśli załączasz przerwania w przerwaniu od INT1 po wcześniejszym wyłączeniu przerwania od INT1 - jest poprawnym rozwiązaniem, gdyż nie ma możliwości wejścia do funkcji przerwania od INT1 podczas jej wykonywania niezależnie od okoliczności; tak ponowne zezwolenie na przerwanie od INT1 bez wcześniejszego zablokowania...
Jeśli wyłączona jest globalna flaga przerwań nie zostanie nigdzie zapisana informacja o zajściu przerwania, istnieje prosta relacja AND między tymi rejestrami i tylko gdy jest spełniona, ustawiane są odpowiednie bity konkretnych przerwań. The Global Interrupt Enable bit must be set for the interrupts to be enabled. The individual interrupt enable control...
jeśli pokazuje ci 2mA to jeszcze nie jest niestety w najpełniejszym trybie PowerDown. W tym najgłębszym trybie miernik powinien ci pkazywać 0,6uA a skoro są mili ampery to znaczy, że bardzo częto się wybudza ze snu Dodano po 3 w związku z tym, że wykonałeś kawał dobrej roboty to tutaj pokażę ci jak ja zrobiłem usypianie procka, jak widać jest to robione...
Głównie chodziło mi o sposób wysyłania poleceń 1 wire: Disable Int0 'wyłączenie przeszkadzającego przerwania 1wreset 1wwrite &HCC 1wwrite &H44 Capture = 1 Enable Int0 'załączenie przerwania po wszystkim Jeśli nie wiesz, które przerwanie może powodować u Ciebie problemy z 1 wire to możesz wyłączyć globalną obsługę przerwań. Czas po rozkazie odczytu temperatury...
Trochę nad tym posiedziałem (dużo czasu minęło od ostatniego postu, ale jakośtak nie było czasu) i mam nowe pytanie, otóż: chcę uzyskać taki przebieg (dla rozdzielczości 1024x768): http://obrazki.elektroda.pl/4684247700_1... a wyskakuje mi coś takiego: http://obrazki.elektroda.pl/7828016300_1... I chciałbym się dowiedziec, jak walczyć...
Jest w kodzie widoczna synchronizacja, to się inaczej to czyta Nie zaprzeczam, ale mowa jest o układzie embedded i to w dodatku 8-bitowym AVR. Jedyna dostępna forma "synchronizacji" w takich warunkach to wyłączenie/włączenie przerwań (Makro ATOMIC_BLOCK to właśnie dokładnie robi), czego IMHO w nadmiarze nie należy stosować. Szczególnie w przypadku,...
Witam, 1. wg. mojej wiedzy w tym konkretnym przypadku jest to operacja atomiczna (przypisanie do zmiennej 'Pomiar', domyślam się że to jakiś uint) i wyłączenie przerwań/przerwania nie jest konieczne. Gdybyś jednak miał np. strukturę Pomiar {int srednia_z_10, srednia_z_5; } to wtedy należałoby to zabezpieczyć. 2. Możesz wyłączać tylko jedno przerwanie(UART)...
Co do DSB(). W przykładach stosowałeś go ale nie wszędzie. A należy go stosować zawsze po włączeniu zegara, jeśli natychmiast dokonujesz zapisu pod włączane peryferium. W każdym rdzeniu Cortexa. Ja stosuje zawsze po włączeniu przez to nigdy o tym nie zapominam - taki nawyk. Tak samo należy go zastosować np po wyczyszczeniu flagi jeśli od razu masz zamiar...
Problem tylko, że po restarcie centralka nie będzie przechodziła w stan czuwania. Czekaj czekaj chcesz żeby centralka zapamiętała stan po wyłączeniu ? To musisz użyć pamięci nieulotnej np. eepromu.
Co do flagi przerwania sprawdzę czy się na to nabierze symulator. Będę mógł wtedy przeanalizować obsługę przerwania. Wiem że w procedurze obsługi przerwania muszę sprawdzić źródło przerwania. Według Ciebie piti___ flaga przerwania jest ustawiana jak w czasie obsługi jednego przyjdzie drugie. Muszę to dokładnie przeanalizować bo faktycznie to może być...
Witajcie! Chcę oprogramować przerwanie Int0 w ATMedze88 tak, aby przy wykryciu braku zasilania głównego - zmianie stanu PD2 z niskiego na wysoki procesor przechodził w tryb PowerDown natomiast gdy na PD2 pojawi się stan niski procesor wybudzał się. Wykrywanie obecności zasilania zrobiłem następująco: http://obrazki.elektroda.pl/6269322100_1...
Sorry za jakość. Eagle ma funkcję eksportu do pliku graficznego: http://mikrokontrolery.blogspot.com/2011... Dla sterowania ze wspólną anodą porty nie powinny być ustawione jako wejścia? Do nich przecież wpływa prąd od zasilania, przez diodę. Kolega myli dwie sprawy: 1. ustawienia jako pin wejściowy...
OK. W dokumentacji do XC8 (s. 198) sugerują by nie wychodzić z main. Być może w XC8 (wbrew tego co pisałem wcześniej zasugerowany C18) wyjście z main() powoduje reset. Wstaw zatem while(1); na końcu main(). Niezależnie od kompilatora ZAWSZE należy dodać nieskończoną pętlę główną i taką konkluzję należy autorowi tematu podać. Nie można bowiem liczyć,...
http://obrazki.elektroda.pl/6568132900_1... Wstęp: Potrzebowałem urządzenia, które sterowało by taśmami LED po otwarciu drzwiczek. Ceny gotowych urządzeń tego typu były dla mnie za wysokie (cena od 30zł w górę), ja potrzebowałem ok 5 sztuk. Pracując nad tematem wykonałem działające urządzenie oparte na gotowym odbiorniku podczerwieni...
Możesz w dowolnym momencie wyłączyć i włączyć globalne zezwolenie na przerwania.
Witam , Zaczynam z AS6, dotąd używałem 4.18 głownie z asemblerem Pytanie dotyczy możliwego błędu symulacji prostego kodu w AS6, do potrzeb zapytania sprowadzonego do wersji jak niżej : http://obrazki.elektroda.pl/4044092400_1... również wygenerowany kod obsługi jest poprawny http://obrazki.elektroda.pl/7240738500_1...
Witaj. Pytanie: Co wybudza mikrokontroler ze snu? Odpowiedź: Przerwanie. Jeżeli uśpienie mikrokontrolera realizujesz w funkcji przerwania przy wyłączonych globalnych przerwaniach (po wejściu w funkcję przerwania są automatycznie wyłączane), to mikrokontroler się nie zbudzi, bo ma zablokowane przerwania. Musiałbyś w takim przypadku przed uśpieniem włączyć...
Witam ! Napotkałem taki problem: Mój program wykorzystuje przerwanie z końcówki INT1. uC M32. Program w Bascomie. Zdarza się, że na wejściu INT1 pojawia się stałe zero i wtedy przerwanie wykonuje się na okrągło, co powoduje zwis programu i reakcję watchdog'a. Próbowałem po wywołaniu przerwania wyłączyć go poprzez Disable INT1 i właczać po pewnym czasie...
Witam! Spędziłem już dobre kilka dni na czytaniu specyfikacji, przykładów i różnych wypowiedzi innych ludzi, a problemu wciąż nie mogę rozwiązać. Pracuje na procesorze AT91SAM7S64 z programem CrossStudio i potrzebuje skonfigurować Timer0 tak by zliczał od 0 do rejestru RC w kółko i przy tym generował przerwanie. Z Timerem poradziłem sobie bez większych...
Dzięki, teraz działa ;). Poniżej zamieszczam działający kod dla potomnych: [syntax=c] TCC0_PER=0x1fff; //górna granica licznika TCC0_CTRLA=0x04; //włącz licznik z preskalerem na 8 TCC0_INTCTRLA=0x03; //największy priorytet przerwania PMIC.CTRL=0x04; // włącznie przerwań o najwyższym priorytecie sei(); //globalne włączenie przerwań PORTB_DIR=0xff; //portB...
1. idealnie to analizujesz, dokładnie tak zapis 16bit może być podzielony przez przerwanie 2. leczy się to przez rzeczywiście wyłączenie przerwań ORAZ jako baza zadeklarowanie zmiennej jako volatile (wielu wierzy tylko magiczna moc volatile - błąd). Przywrócenie przerwań jest IMHO ładniejsze, jak ma charakter "push stan przerwań / disable / algorytm...
Generalnie kod nie wygląda tak źle. Jak na początkującego, to muszę nawet pochwalić! Formatowanie poziome i rozdzielenie różnych części programu białymi znakami na duży plus. Bardzo wiele osób ma z tym problem, mimo tego, że nowoczesne IDE dbają o to praktycznie same. Kilka uwag się znajdzie, ale myślę, że będzie to konstruktywna krytyka. Po pierwsze...
Witam, przypadek następujący: Na init procesora i peryferiów ustawiam w rejestrze GICR bit odpowiadajacy za przerwanie INT0, po czym włączam globalnie przerwania (sei). Pin odpowiadajacy za INT0 ustawiony jest na wejscie bez pullup-a. W trakcie wykonywania programu dostaje przerwanie zewnętrzne i procesor skacze do obsługi przerwania, w którym jest...
Czy wiesz co to jest prolog i epilog w assemblerze? Czy wiesz co to jest stos? Z tego co wiem w obsłudze przerwania powinno stosować się krótki i prosty kod, natomiast w moim przypadku potrzebuję po wystąpieniu przerwania przejść do wykonywania programu w pętli. Od takich spraw są flagi (czyli np. zmienne globalne), którym w przerwaniu ustawiasz jakąś...
Żeby pisać na mikrokontrolery w C++ trzeba znać ten język bardzo dobrze. Niestety mikrokontroler to nie PC i nie "wybacza" nieprzemyślanych konstrukcji, które kończą się alokacją ogromnych ilości pamięci. Tak konkretniej to chodzi mi o nieprzemyślane używanie klas. C na mikrokontrolery jest znacznie łatwiejszy. A mógłby ktoś napisać w C++ i w C program...
(at)ElektrodaBot Czy w zwykłych wątkach (poza ISR) można użyć vPortEnterCriticalSafe() oraz vPortExitCriticalSafe() zamiast stosowania operacji atomowych? Bezpośrednia odpowiedź W zadaniach (wątkach) FreeRTOS działających pod ESP-IDF można wywoływać `vPortEnterCriticalSafe()` / `vPortExitCriticalSafe()` zamiast używać `std::atomic`, ale należy traktować...
Można sprzętowo zwiększyć wartość kondensatora przy fotorezystorze, albo programowo: 1. Dodać stałą oraz jedną zmienną globalną na początku softu: #define OPOZNIENIE 15 double jafil; 2. Zamienić linie: adcval = ADC; // odczyt wyniku z ADC na te dwie linie: jafil = (OPOZNIENIE * jafil + ADC) / (OPOZNIENIE+1); // filtr wartosci z ADC adcval...
1. Dla SysTicka nie włączasz NVIC, bo to przerwanie jest w NVIC zawsze włączone (w ogóle nie da się go wyłączyć inaczej niż wyłączając globalne zezwolenie na jakiekolwiek przerwania). 2. Generowanie przerwania włączasz w SysTicku [; Reasumując: - SysTick->LOAD - wartość "przeładowania" - SysTick->CTRL - dla takiego działania jak chcesz ustawiasz tam...
Hmmmm.... Kod wydaje się być OK... Kod to może i jest OK , tylko kolega grzesio14 , w programie głównym zapomniał o SEI - to raz , a dwa - nie wyskakuje się z przerwania do pętli głównej , bo stosik nie jest z gumy , a na dokładkę dzieje sie to po wyłączeniu przerwań przez CLI , tudzież przez proca , czyli kolejne już nie nastąpi.Po trzecie - w przerwaniu...
Dlatego, że nie używasz AS masz problem z ustaleniem przyczyny. Wystarczy uruchomić symulator, by zobaczyć, że Twój program wpada w zabezpieczenie dodawane przez kompilator polegające na wyłączeniu przerwań globalnych i zapętleniu się w specjalnie dodanej pętli. Symulator na początku zabawy z mikrokontrolerami, to podstawowe i bezpłatne narzędzie -...
Program wyłącza przekaźnik bo tak jest napisana pętla. Napisales program tak, że w setupie włączasz przekaźnik a w pętli po delayu go wyłączasz. Ogólnie stosowanie delaya szczegolnie w połączeniu z wyświetlaczem nie jest szczęśliwym rozwiązaniem. Gdy będziesz chciał zmienić stan przekaźnika to będziesz musiał trzymać przycisk wciśnięty przez 15 sekund,...
zgodność z M103C jest również wyłączona Dodano po 4 http://obrazki.elektroda.pl/6058123100_1... ustawienie fusów Dodano po 30 Podstawa programowa do obsługi tego przerwania wygląda wydaje mi się standardowo. Dodano po 2 Schemat czujki podałem wyżej. http://www.elektroda.pl/rtvforum/topic20...
Witam Napisałem poniższy prosty program który po 6 zmianach stanu na nóżce int0 (PB2) wykonuje przerwanie. include "tn15def.inc" .def acc = r16 ;nadanie rejestrowi r16 nazwy symbolicznej .def licz1 = r20 .def licz2 = r21 .def licz3 = r22 .org 0x00 rjmp pocz .org 0x06 rjmp timer0 .org 0x0B ; -- POCZĄTKOWE USTAWIENIA SPRZĘTOWE -- pocz: ldi...
Zastanawia mnie dlaczego przy obsłudze modułu RFM12 przyjęło się, że inicjalizację wykonuje się wszystkimi dostępnymi komendami (a nawet nie opisaną w dokumentacji 0xCC17)? Wydaje mi się, że powinno się inicjalizować jedynie to, co chcemy ustawić dostosowując moduł do naszych potrzeb. Przykładowo, moja inicjalizacja nadajnika wygląda tak: [syntax=asm]...
Witam dokonałem pewnych modyfikacji w programie. Zmieniłem odwołanie do odczytu temperatury. Proszę o informację jak najlepiej już uśrednionym odczycie przeprowadzić takie operacje: 1.177*t_usredniona Proszę umieszczać kod we właściwych(SYNTAX) znacznikach.
Witam. Jestem w trakcie pisania bootloadera po magistrali CAN dla STM32F103VE. Opieram się głównie na publikacji AN2557 zamieszczonej na stronie ST. Potrafię przesłać aplikację użytkownika po magistrali CAN do uC i zaprogramować pamięć Flash od wybranego adresu w górę. Na wstępnie odblokowuje pamięć Flash (FLASH_Unlock(); ) następnie podgrywam aplikację...
BlueDraco no i tu może być problem. Czyli lepiej operować na tych globalnych tablicach, ale na czas ich wykorzystywania wyłączyć przerwania czy to nie wpłynie znacząco jeżeli będę "używał" tylko początku bufora?
Hej, Mam pewną wątpliwość co do sposobu działanie przerwań w avr`ach i ich obsługi przez avr-libc 1.4.4. Co się stanie jeżeli w momencie, w którym procesor obsługuje jakieś przerwanie zostanie zgłoszone następne przerwanie. Z dokumentacji zrozumiałem że nie zostanie ono obsłużone od razu ponieważ ISR albo Signal mają wyłączone globalne zezwolenie na...
Dobrze, wytłumaczę więc jeszcze raz od początku o co mi chodzi tak żeby wszystko było jasne i zwięzłe. Rozchodzi mi się o akapit : If a logic high level (“one”) is present on an asynchronous external interrupt pin configured as “Interrupt on Rising Edge, Falling Edge, or Any Logic Change on Pin” while the external interrupt is...
Dzięki za komplement "młody ludź" :) wracając do xmegi zainstalowałem AtmelStudio 6.0 i bawię się w mruganie leda. Wkleiłem gdzieś tu z Elektrody taki kod przerwania od timera ale pojawiają się błędy. Proszę na przyszłość używać tagu ] do wklejania kodu... /syntax] . Poprawiłem, LordBlick [syntax=C]#include <avr/io.h> ISR(TCC0_OVF_vect){//test...
(...) YUBRR); USART_RX_init(); DDRC |= (1<<PC4); // Ustaw PB5 jako wyjście // Inne inicjalizacje... while(1) { if(odb_flaga) { PORTC ^= (1 << PC4); // Przełącz stan diody odb_flaga = 0; // Resetuj flagę } }} Dzięki za przesłanie aktualizowanego kodu. Wygląda na to, że...
Wszystko fajnie, tylko ciekawe co jeśli ten błąd assert() zostanie wykryty w przerwaniu? Albo w trakcie sekcji krytycznej? Albo zaraz po tym "resecie", ale jeszcze w trakcie inicjalizacji/zerowania sekcji .data/.bss lub działania globalnych konstruktorów, zgłoszone zostanie jakieś przerwanie? Fragment o roztrząsaniu na temat tego czy układ ma NVIC czy...
Z dokumentacji wynika że zbocze narastające i opadajace maja miec max 500ns dla 5V 2000ns dla 2V Nie "mają mieć" tylko "mogą mieć". To, jakie będą zbocza narastające i opadające nie zależy od programu, tylko od sprzętu (schemat, projekt PCB, długości przewodów itd.). Czas narastania i opadania zboczy należy uwzględnić w swoim programie, ale program...
Witam. Napisałem program w języku C, który steruje diodą LED i żarówką za pomocą pilota RC5. Proszę was o sprawdzenie kodu i poprawienie ewentualnych pomyłek. [syntax=c]// Pliki nagłówkowe #include <avr/io.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <util/delay.h> //Pozostałe pliki programu #include "IR_DECODE/ir_decode.h"...
Teraz nie rozumie juz nic. Z tego co bascom robi w powerdown.Wygląda jakby tylko włączał zezwolenie na tryby uśpienia. Czy ja coś źle odczytuje? Czy kolega Zumek mógłby napisać w ASM przejście do ST-BY dla tego Attiny? Bo według mnie było by to tak: $asm !IN R24,mcucr !ORI R24,0x20 !Out mcucr , R24 !IN R24,mcucr !ORI R24,0x50 !Out mcucr , R24 SLEEP...
Witam mam bardzo nietypowy jak dla mnie problem z układem który ostatnio wykonałem. Mianowicie jest to centralka alarmowa oparta o uC ATmega16. Działa na tej zasadzie że pod wejście PB2(INT2) podpięty jest kontrakton (zwiera do masy) do którego przykładam magnes i albo rozbrajam albo uzbrajam centralkę. Z grubsza to wygląda tak: PB2(INT2) skonfigurowane...
Witam. Parę pytań, przemyśleń, proszę o wypowiedzenie się. Temat dotyczy programowania embedded C głownie mikrokontrolerów raczej większych 32 bitowych. 1. Stosowanie wielu zmiennych globalnych jest bee Czy w świecie embedded bez dynamicznej alokacji pamięci da się inaczej? Zakładając, że mamy jakieś stałe duże struktury globalne (zawierające mnóstwo...
Siemanko. Uczę się programowania mikroprocków w języku C. Aktualnie jestem na lekcji przerwań i pojawił się dziwny błąd, którego nie potrafię rozgryźć, może bardziej zaawansowani koledzy potrafili by powiedzieć co źle robię bo nie mam już pomysłów. Otóż cały program ma działać tak że diodka jest wyłączona, po naciśnięciu przycisku ma zamrugać kilkukrotnie....
Bo nie masz WYŁĄCZAĆ przerwań tylko je WŁĄCZYĆ. Zaraz po wejściu do przerwania INTx ustaw globalne zezwolenie na obsługę przerwań. asm("sei"); Dobrze by też było tuż przed tym wyłączyć zezwolenie na obsługę przerwania INTx żeby samo siebie nie zagnieżdżało. I tutaj rejestr GICR faktycznie będzie potrzebny. Coś takiego: ISR INTx()...
"...\avr-objcopy.exe" -O ihex -R .eeprom... Zrobiłem to w automacie, ale spotkało mnie coś o czym wspomniał bart-projects tzn: Hex na PC`cie zajmuje mniej miejsca niż Bin bo w Bin albo cały obraz pamięci no i gdy nie miałem parametrów z "-R" to mój wsad dla małego procesora miał...
Gdyby w tym był problem - głównym sposobem znalezienia hazardu jest analiza wszystkich zmiennych używanych (tutaj) w przerwaniach. Każda która jest zapisywana z przerwania i z kodu głównego, nie wiadomo co "zwycięży". Dodatkowo każda operacja "odczyt i zapis" (zależnie od rozwinięcia nawet operator ++) może dać efekt nieokreślony (jeśli z drugiej flanki...
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)...
Witam. Niedawno zaopatrzyłem się w mikrokontroler atmega8, postanowiłem więc trochę się pobawić w rożne projekty. Próbuje zbudować program który jest podobny do systemu automatycznego oświetlenia w domu na czujkach PIR. Otóż, chcę aby przyciski wirtualizowały czujkę w taki sposób że naciśnięcie przyciska jest równo znaczne z wykryciem ruchu przez czujkę....
Witam Klawiatura zbudowana jest za pomocą sześciu przycisków monostabilnych, podłączonych do portu PF0-PF5. Równolegle z każdym przyciskiem jest włączony kondensator elektrolityczny o pojemności 1µF w celu eliminacji wpływu drgań styków. Aby nie odczytywać stanu linii cały czas, zdecydowałem się na wykorzystanie przerwania zewnętrznego !INT7. Jest...
Czy oprócz tego że w user mode nie mam dostępu do rejestrów systemowych są jakieś inne 'bonusy' za pracę w nim? Nie tyle chodzi o dostęp, co o fakt, że w trybie USER instrukcja MSR nie działa. W cstartup po koniec deklarowania stosów dla poszczególnych trybów mam: msr CPSR_c, #SYSTEM_MODE // switch to System mode, IRQ & FIQ enabled ldr sp, =__system_stack_end;...
Trochę tego tam używa - systick, pendsv, svc. Dodatkową (sporą) komplikacją jest też to, że distortos używa oczywiście dwóch stosów. Niemniej jednak w sytuacji skoku z bootloadera opartego na distortos do aplikacji opartej na distortos być może te rzeczy nie są takim dużym problemem, bo w końcu aplikacja też ich używa. Niemniej jednak np. systick powinien...
Witam, Znalazłem Data Logger na NodeMcu ets Jan 8 2013,rst cause:2, boot mode:(3,6) load 0x4010f000, len 1392, room 16 tail 0 chksum 0xd0 csum 0xd0 v3d128e5c ~ld U kolegi był wgrywany w zeszłym roku na starszej wersji IDE Arduino i wszystko działało. Czyżby nowa wersja blokowała przerwania. Nie wiem jak to dopasować. Jak usuniesz wszystkie wiersze...
http://obrazki.elektroda.pl/2645142000_1... Sterownik diod LED został wykonany w celu automatycznego lub zdalnego sterowania oświetleniem LED w zależności od jasności w danym pomieszczeniu. Układ sterowania oparty jest o mikrokontroler ATmega16/ATmega32 firmy Atmel, który w zależności od oświetlenia w danym pomieszczeniu steruje jasnością...
Do tej pory omówiliśmy znaczenie ostrożnej obsługi przerwań, metody solidnej strukturyzacji ISR oraz uwagi wymagane do zmiennych globalnych i lokalnych ( Uważaj na przepełnienia bufora danych Generalnie używamy programowych buforów do interfejsów komunikacyjnych. Na przykład, mikrokontroler może zapewnić podrzędny interfejs komunikacji szeregowej I²C...
OK, no to następne podejście z nadmiarowym kodem testowym odliczającym w kółko na ATmega8515 zamiast ADC - wyświetlanie bez zarzutu. Co do tego dziwnie wyświetlanego zera, to może masz zamienione a z g, b z f itp. W tej wersji łatwiej zapanować nad częstotliwością odświeżania segmentów - zbyt duża skutkuje podświetlaniem sąsiednich cyfr, zbyt mała -...
TCCR0 |= ((0<<CS00)|(0<&... // wyłączenie timera T0 Nie wnikam w całość w tej chwili (pętle trwające po 1500ms nie do końca pasują do mojej wizji przerwań:P), ale powyższy kod na pewno nie wyłącza timera - poczytaj o operacjach bitowych, (bitwise operators), bo w tej chwili powyższa linijka...
Fakt. Było kilka błędów. W chwili obecnej kod wygląda następująco: [syntax=c] //Porgram mierzy prędkość "przejazdu" między 2 fotokomórkami #define F_CPU 16000000uL #include <AVR/io.h> //biblioteka we/wy #include <AVR/interrupt.h> //obsluga przerwan #include <util/delay.h> //obsluga opoznien #include <LCD/lcd.h> #include "HD44780.h"...
jeśli flaga przepełnienia licznika jest ustawiona wynik należy odpowiednio skorygować nio właśnie ale jak ... bo prawdopodobnie na tym etapie się wyłożyłem :/ gdyż przy maksymalnym wychyleniu potencjometru tuż przed końcem zakresu zapala się led1 gasząc diodę 3 :P ale mimo tego małymi krokami udało się uruchomić timer, przerwanie INT1 wyzwalane zboczem...
Właściwie dwa pytania ale jedno z większym priorytetem ;) Otóż, projektuje odległościomierz. Zamysł jest następujący 1. Załączam tranzystor który steruje napięciem dla nadajnika. 2. Włączam zliczanie czasu 3. Gdy pojawi się sygnał na odbiorniku. Wyłączam naliczenie i prezentuje wynik. Timer skonfigurowałem, żeby przerywał co 1us jednak nie jest to zbyt...
Pisząc o sekcjach INIT miałem na myśli to co standardowo robi kompilator języka C a nie bootloader. A skoro bootloader pisany był w C to musi zawierać takie sekcje ;) To nie jest żaden standard C, tylko sposób działania avr-libc i avr-gcc. No to już tylko takie czepianie się słowek, i nie ma to akurat tutaj wielkiego znaczenia, ale oczywiście tak,...
Czy stan wysoki na tych wyprowadzeniach może być z takiego zakresu jak podałeś (0.2 - 1.0 s)? Stan wysoki na tych wyprowadzeniach ma się utrzymywać przez czas dobrany doświadczalnie po stworzeniu całego układu. Lecz będzie on wybrany z przedziału 200ms-1s. Prąd cewek elektromagnesu ma być dobrany tak by magnesy zawsze działały z pełną, możliwą do uzyskania...
http://obrazki.elektroda.pl/1404710300_1... Niniejszy projekt przedstawia system zdalnego sterowania ośmioma urządzeniami pracujący w podczerwieni. Kody sterujące przesyłane są w formacie RC5. Częstotliwość nośnej wynosi około 38 kHz. Nadajnik podczerwieni zasilany jest baterią CR2016 o napięciu 3 V. Aby wydłużyć czas pracy baterii procesor...
Witam! Mam problem z timerami w języku C (w moim projekcie) dlatego zwracam się do Was o pomoc. Napiszę od początku, żeby przedstawić o co mi chodzi. Zbudowałem kiedyś sterownik taśmy led RGB oparty na mikroprocesorze attiny2313, w którym za pomocą jednego przycisku zmieniam podstawowe kolory na pasku ledowym (czerwony, zielony, niebieski) oraz ich...
Generalnie cały ten twój układ trzebaby przeprojektować. Jeśli blokujesz przerwania na 750ms przy wyświetlaniu multipleksowym to nie spodziewaj się dobrych efektów. Postaraj się najpierw zrozumieć jak coś działa. W tym przypadku obsługę OW musisz zrobić sprzętowo, wykorzystując np. UART, co rozwiąże problemy z zależnościami czasowymi. Przykłady multipleksowania...
Witam, jeśli chodzi o programowanie uC to jestem początkujący. Mam problem z programowym pwm na attiny13a. Mój program bazuje na programie M. Kardasia z książki. Na atmedze16 działał dobrze, ale jak przerobiłem go na attiny13a wg noty katalogowej, to dioda nie świeci. Wiem, że na pewno coś przekręciłem. Jeśli chodzi o podłączenie do programatora i samego...
ostatecznie zrobiłem to na zmiennej globalnej inkrementowanej w przerwaniu od timera :) przerwanie: volatile unsigned int int_cnt; void interrupt int_t0(void) { if(T0IF) { int_cnt++; TMR0=131; /* przerwanie co 1ms */ T0IF=0; } } w programie użyłem dwóch zmiennych key i n_key aby móc wykonywać coś na załączenie przycisku...
Dobra światełka w końcu działają po 2 wybuchach złości na biurko, na razie tylko 2 tryby i bez generatora liczb losowych, ale raczej to rozwinę... po jakimś czasie: Kod bez błędów: [syntax=c]/* * main.c * * Created on: 14 wrz 2023 * Author: Dzieci */ unsigned char jasnosc = 32; //określa jasnośc diod #include <avr/io.h> #include <util/delay.h>...
Nie wgrywałem, ale owszem, program taki jak Ty proponujesz będzie działał, ale jeśli pętla w funkcji main będzie miała więcej operacji do wykonania to takie miganie może wystąpić. Swoją drogą, piszę nieco przesadzoną opinię, bo przecież nie tak trudno zaimplementować mój algorytm, a wtedy wogóle zapominamy o miganiu i o tym że wogóle LED trzeba odświeżać...
Witam! Przybywam z kolejnym problem mianowicie chciałem dziś aktywować sobie Automatyczne ryglowanie drzwi, DDS oraz wspomaganie ruszania na pochyłości. Podczas zapisu odruchowo przekręciłem kluczyk na off No i się stało :D DTC wypluł błędy: ===PCM DTC Brak=== Pomyślny odczyt DTC, nie było kodów błędów Moduł: Moduł sterowania pracą silnika (Power Train...
Witam, mam problem z dokładnością licznika czasu. Licznik ma mierzyć czas pomiędzy pojawieniem się napięcia większego od 512 na pinie PA7 a pojawieniem się zbocza narastającego na INT0. Licznik zlicza setne sekundy i sekundy. Późni się około 10 sekund na minutę. Korzystam z Atmegi32 o taktowaniu 8MHz. Wynik wyświetlam na wyświetlaczu. Napiecię na pin...
Procedura odczytu wartości jest całkiem zła, a ustawień przetwornika nie pokazałeś. Obecnie masz coś takiego: czytasz bez potrzeby w kółko nieważną wartość z ADC, a czytanie przerywasz po ustawieniu bitu gotowości, który być może został ustawiony już po odczytaniu nieważnej danej. Nie rozumiem dlaczego bit "DONE" miałby być ustawiony po odczytaniu...
Sprawdzałeś jak się ta transmisja zachowuje kiedy Twoje inkey() w ogóle nie jest używane ? Nie wiem co sobie wkompilowuje Bascom w procesor ale może używa jakiegoś przerwania które z kolei w ten czy inny sposób oddziaływuje na transmisje RS232. Dajmy na to jeśłi RS232 używa przerwań do odbioru lub wysyłania a jakaś inna procedura czy funkcja po wyjściu...
Nie wiem po co Ci ten zmienny przecinek - chyba nie ma problemu z policzeniem wszystkiego na liczbach całkowitych. Nie wiem też, na co miałbyś czekać w przerwaniu. Możesz do wszystkiego używać jednego timera, np. tego od PWM - to zwykle lepsze rozwiązanie niż zgłaszanie przerwań z kilku timerów. Sam zadecyduj, jak często chcesz wykonywać pomiary -...
Niestety to jednak nie w tym tkwi problem. Zmieniłem troszkę program dlatego opisze jeszcze raz o co chodzi ;) Usunąłem wszystkie błędy programu i o dziwo komunikacja jako tako działa, ale oczywiście jest jedno "ale" z którym jakoś nie potrafię sobie poradzić i nie wiem dlaczego tak się dzieje. ATmega16 (do niej podłączony jest klawisz i LCD) mierzy...
Mam problem z przełączaniem bitów Założenia programu są następujące Program przez określony czas ma włączyć 2 diody oznaczone Pompka1 i Pompka2 oraz wyłączyć Napowietrzacz po upływie czasu ma przełączyć tz: wyłączyć Pompka1 i Pompka2 oraz włączyć Napowietrzacz po upływie drugiego czasu znowu ma przełączyć. Niestety program nie działa dobrze Diody działają...
Proponował bym Ci na początek zrobienie komunikacji między PC a jednym z tych ATMEL-i. Wtedy będziesz wiedział o co chodzi. Mój program dla ATMEGA16 w BASCOM-ie wygląda tak: $crystal = 16000000 ' mam kwarc 16 Mhz $baud = 9600 ' prędkość na RS-ie Config Com1 = Dummy , Parity = None , Stopbits = 1 , Databits = 8 ' konfiguracja portu Echo Off ' nie chcę...
Dzięki kolego za kod, widzę że jest to kod obsługi jakiegoś zegarka, bardzo podobny kod znajduje się u M.Wiązania. 'Program multipleksowego sterowania czterema wyświetlaczami '7-segmentowymi LED poprzez dekoder 4543 'cyfra załadowana do A będzie wyświetlana na wyświetlaczu 1 'cyfra załadowana do B będzie wyświetlana na wyświetlaczu 2 'cyfra załadowana...
Cześć, jednak nie zadziałało. Napisałem program: przerwanie(pojawienie się na INT1 logicznej jedynki) zmienia wartość zmiennej na 1, w pętli programu zostaje sprawdzane czy wartość zmiennej wynosi 1, jeśli tak to mryga raz diodą i zeruje zmienną. Tylko nie rozumiem dlaczego gdy klikam przycisk w pilocie i przykładam do odbiornika podczerwieni to ta...
stm32 wyłączenie przerwań zmienne globalne globalne radio
komputer stacjonarny uszkodzony parametr maszynowy wyłączniki bezpieczeństwa podłączenie
theben instrukcja theben instrukcja
Podłączenie głowicy magnetofonu MDS 432: odczyt i zapis Rozkodowanie radia w Alfa Romeo 159 bez numeru seryjnego