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...
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...
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...
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,...
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...
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...
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...
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ą:...
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...
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...
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...
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...
Ś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 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...
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...
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....
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.
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....
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...
A nie lepiej na czas modyfikacji zmiennej wyłączyć na moment odpowiednie przerwanie ?
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...
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...
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ć...
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ąś...
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...
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...
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...
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...
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 -...
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...
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 , 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...
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...
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...
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ę...
Ż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...
(...) 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...
(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ć...
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....
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]...
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ć,...
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 ! 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...
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...
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"...
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...
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 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 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...
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, Niestety ostatnio od kilku miesięcy mam bardzo mało czasu na swoje hobby i zabawę z prockami więc teraz tak z marszu ciężko mi sobie przypomnieć jak dokładnie działałem z tym PowerDown w swoim pilocie ale wkleję poniżej swój kod taki jaki działa do dzisiaj w tym moim pilociku i to bardzo dobrze działa - moż coś to pomoże. Niestety kod jest w...
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ą...
Witaj Twoje obliczenia wyglądają na poprawne jednak wydaje mi się, że to cli() jest w złym miejscu. Z ustawień timera widze, że mierzysz "powolne" sygnały. Zatem twój program może nie zdążyć złapać przerwania od INT lub złapie tylko zbocze opadające, ale narastającego już nie, bo zostanie wyłączone globalne przerwanie. Poniżej przedstawiam mój kod który...
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...
"...\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ł...
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...
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,...
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...
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...
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...
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ę....
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, 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...
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...
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...
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...
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...
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...
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"...
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ę...
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 -...
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...
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...
http://obrazki.elektroda.pl/5385398300_1... Zaprezentować dziś chcę projekt lampki RGB który wykonałem na pracę zaliczeniową z systemów wbudowanych. Moim zdaniem osiągnięty efekt jest zadowalający więc może ktoś będzie zainteresowany wykonaniem urządzenia według mojego projektu. Jako, że jest to pierwszy zrealizowany przeze mnie projekt...
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...
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ą...
Witam wszystkich Elektrodowiczów! Chcę uruchomić Timer na ARMie LPC11C24. Zrobiłem standardową inicjalizację Timera, jak w każdym przypadku, ale on nie chce ruszyć za żadne skarby. Zegar magistral AHB jest ustawiony na 48 MHz (kwarc zewnętrzny 12 MHz, dzielnik PLL P = 2, M = 4 i dzielnik AHB = 1). Prosty programik, który będzie migał diodą LED co 1...
Witam Szanownych kolegów. Nie dawno zacząłem przygode z programowaniem. Zapoznałem się z kursami na wkrętaku, oraz z kursem na Hobby Robot. Narazie wszystko opiera się na symulacji w proteusie, umiem już multipleksować cyfry na wyświetlaczu, lecz nie rozumiem funkcji bin2bcd, i nie umiem tego połączyć z następującym kodem tak, aby to jakoś działało....
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 -...
Witam, Coś ostatnio mało ludzi odpowiada mi na pytania w Bascomie, więc postarałem się napisać swój program w C. Liczę więc na pomoc specjalistów od GCC ;) chciałbym zrobić pilot IR do mojego aparatu fotograficznego Olympus. Ze stronki lirc sprawdziłem sobie co i jak ma być dla pilota RM-1. Powiem nawet że chyba rok temu zrobiłem to w assemblerze i...
A ktoś z was próbował przesyłać Z GPIO do RAM? Już coś ruszyło, ale ciągle nie do końca. Ruszyło z DMA2 w trybie peripherial-to-memory. Inicjalizacja DMA: [syntax=c] void DMA_init(void) { //Włącza zegar RCC->AHB1ENR |= DMA_STREAM_CLOCK; //Reset/wyłączenie strumienia DMA (kasuje bit EN) DMA_STREAM->CR &=~ DMA_SxCR_EN; while(DMA_STREAM->CR & DMA_SxCR_EN);//czeka...
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ć...
http://obrazki.elektroda.pl/7995180000_1... Witam! Jakiś czas temu rozpocząłem naukę pisania programów na mikrokontrolery AVR w języku C++. Przeczytałem wiele tutoriali, poradników, itp., aż w końcu doszedłem do pisania własnych, prostych programów. Po kilku takich „pseudoprogramach” zdecydowałem, że teraz czas napisać coś...
delayX to procedury opóźniające w przerwaniu akurat ma służyć odczekaniu do wygaśnięcia drgań styków przycisku. Według sugestii zamieszczam program bez definicji rejestrów i trybu SPECIAL, żeby nie zaciemniać, a to akurat nie ma wpływu na działanie. .CSEG ; początek segmentu programu .ORG 0x00 ; wektor przerwania od resetu rjmp Reset .ORG 0x04 ; wektor...
[syntax=c]#include <avr/io.h> #include <avr/pgmspace.h> #include <avr/eeprom.h> #include <util/delay.h> #include <avr/interrupt.h> #include <string.h> #include <stdlib.h> #include "LCD/lcd.h" //dyrektywy dla preprocesora //dioda #define LED_PIN (1<<PC7) //do którego pinu podłączona dioda #define BUZZ_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...
Po powrocie z urlopu uruchomiłem przetwornik. Program na razie w okrojonej wersji aby przetestować sam ADC i wyświetlanie na trzech LEDach siedmiosegmentowych. Przetwornik w zasadzie pracuje i pokazuje prawidłową wartość, ale dwie kwestie mnie niepokoją i prosił bym o pomoc w ich wyjaśnieniu. Otóż, pierwsza sprawa to wahania napięcia. Podczas pracy...
wyłączenie przerwać stm32 wyłączenie przerwać globalny zmienna
naświetlać emulsja drzwi zmywarka candy hasło biosie laptop toshiba
schemat lutownicy transformatorowej diagram schemat
Błąd przekaźnika 9E27 w systemie CWU - diagnostyka i rozwiązania Ustawienie krzywej grzania Buderus - zmiana początku