Jeśli funkcja obsługi przerwania powoduje ponowne wyzwolenie samego siebie, to jest to wynikiem tego, że flaga przerwania jest kasowana tylko podczas wchodzenia do przerwania. Podczas wykonywania funkcji obsługi przerwania flaga INTF0 może zostać ponownie ustawiona, co spowoduje ponowne wejście do ISR zaraz po zakończeniu (ISR_BLOCK nie powoduje zablokowania...
Jak zmienić tryb ADC? Tak jak pisałem wcześniej, trzeba pogmerać w rejestrach. W setupie dopisz: [syntax=c]PRR &= ~(1 << PRADC); ADMUX = (1 << REFS0) | (0 << ADLAR) | (0x00 << MUX0); ADCSRA = (1 << ADEN) | (1 << ADATE) | (1 << ADIE)| (0x04 << ADPS0); ADCSRB = (0x00 << ADTS0) | (0 << ACME);...
(at)Freddie Chopin: Flaga jest ustawiana wewnątrz funkcji 'przerwaniePoBicie()' i 'przerwaniePoBajcie()'. Problem w tym, że cli(); wewnątrz obsługi przerwania jest niepotrzebne, bo ta flaga zeruje się automatycznie na czas obsługi. Poza tym nie będzie efektu tej instrukcji, bo po powrocie z obsługi przerwania flaga I zostanie i tak automatycznie ustawiona....
Według mnie są to elementy od dociskania tonera, w twoim przypadku te elementy się połamały i toner nie jest dociskany czyli są luzy. Pod tonerem jest flaga która pełni dwie funkcje, jedna odpowiada za obecność kasety z tonerem a druga odpowiada za komunikat zacięcia papieru. Połamane elementy mają numery: JC72-00984A i JC72-00985A.
Ależ on to ma na timerze chyba, ta flaga flag_timer2, to jest pewnie globalna dla przerwania i funkcji.
Funkcja label i na gorze wybierasz czy ma to byc napis czy flaga
Jeśli zresetujesz urządzenie i podasz błędne hasło więcej niż 5 razy, zostaniesz zapytany, czy chcesz zresetować konfigurację urządzenia.... Myślę, że ze względów bezpieczeństwa powinna istnieć flaga włączająca / wyłączająca tę funkcję w konfiguracji
Flaga =0; powinno być przed funkcjami. po funkcjach od razu sprawdź stan flagi. Jeśli ustawiona oznacza to ze za długo wykonywane są funkcje,
Kod może nie najbardziej elegancki, ale można zrobić w taki sposób: void funkcja(void) { if(!flaga) { return; } instrukcje_do_zrobienia_przez_te_funkcje... flaga = 0; } int main(void) { flaga = 1; while(1) { funkcja(); } } I działa.
Nie można wystawić bitu na wejście i wyjście, możesz tylko odczytać stan. Jak chcesz sterować z poziomu panelu użyj flag. Łączysz równolegle z wejściem przez blok OR jeżeli również korzystasz z wejścia do obsługi tej samej funkcji. Pamięta o zasadzie że flaga do sterowania ni może mieć podłączonego wejścia tylko wyjście. http://obrazki.elektroda.pl/1836037800_1...
Jak wygląda wnętrze tej funkcji: uart_getc()
W warunku: [syntax=c]if( aktualnyPik++ <(pikniecia*2)) //sprawdzenie czy piknęło już tyle ile trzeba i zwiększana potem liczba piknięć (++) { digitalWrite(pin,!digitalRead(pin)); //tu jest odczytywany aktualny stan pinu i wpisywany odwrotny stanbuzzera=1; //flaga buzera, że aktywny, pozwala ponownie wywołać funkcję } else { aktualnyPik=0; //jeśli...
Dodaję go jako oddzielny sterownik, a nie jako podstawową funkcję. Więc nie flaga, ale może parametr polecenia. Pytanie brzmi: kiedy już ustalę, czy dana wartość na ADC jest wysoka czy niska, co muszę zrobić dalej? Wykryj zmianę, aby wykonać: addChangeHandler ADC < 50 toggelChannel 1 ?
W przerwaniu timera przełączane są klucze anod wyświetlaczy (PC0 do PC3) i w zależności od wybranego klucza ustawiany jest stan segmentów na porcie B. i to wszystko co się dzieje w przerwaniu. Porty oczywiście przykładowe. Funkcja Cyfry(klucz_start, klucz_stop) rozbija dowolną liczbę na pojedyncze cyfry i przypisuje do nich stan segmentów z tablicy...
Hmm, pierwsze co zdiagnozowałem to to że mój STM nie jest taktowany 72Mhz, bo w takiej konfiguracji: SysTick_Config((CLK_FREQ/1000) *200); flaga w poniższej funkcji : void SysTick_Handler(void) { static unsigned short count = 0; flaga = 1; } jest ustawiana co około 2s, a według obliczeń powinna być co 200ms...
A propos: zastosowałem flage w przewaniach lecz to nic nie dało. Sprawdzasz ją tylko raz w dodatku przed pętlą główną i przed wystartowaniem pierwszej konwersji. Jaki więc to ma mieć sens? Przeanalizowałeś i wypróbowałeś przykłady z artykułu, który Ci wskazałem w poście #4? Jeśli nie, to poświęć na to swój czas.
Po usunięciu PORTD=0; wszystko zaczęło działać jak należy. Oto działający kod: #include <avr/io.h> #include <avr/interrupt.h> volatile unsigned int flaga = 0; void Inicjalizacja(void)//inicjalizac... przerwań na porcie int1 { sei(); //Włączenie obsługi przewań // INT1 - zbocze opadające MCUCR = _BV(ISC11); //...
mam zaufanie że zadziała od ręki na tamtym procesorze, na moim mam wątpliwości. Zadziała tak samo (; Musisz tylko wywalić uruchamianie PLL i konfigurację GPIO, bo to się może różnić. Startup będzie identyczny. Makefile będzie identyczny. Tablica wektorów będzie identyczna. Skrypt linkera będzie w zasadzie identyczny, tylko musisz zmienić ilość pamięci...
Czytając o rejestrach liczników, jedyną taką flagą (którą znalazłem), jest TIMx_SR_UIF, czyli UpdateInterruptFlag. Co prawda nie będę włączał przerwania, ale jest to chyba jedyna flaga którą mogę w tym celu wykorzystać, czy też jest jakaś inna lepsza do tego celu? To jest właśnie flaga która jest Ci potrzebna. 4\/3!!
nie jest zółty I ma do tego prawo. Jest zależny od koloru przypisanego do numeru 27 w tablicy indeksów i wcale nie musi być żółty. Jeżeli chcesz uzyskać ilość kolorów większą od rozmiaru tablicy indeksów (około 56) użyj samo Color a po znaku "=" podaj kolor jako RGB(). [syntax=vb]ActiveCell.Interior.Color = RGB(255, 0, 0)[/syntax] W przykładzie komórka...
... jesli mamy zmienna modyfikowana jednoczesnie i w przerwaniu i w petki glownej musimy zadbac o wylaczy do niej dostep. Czyli przerwanie powinno być "powiązane" z wykonywaniem się pozostałych funkcji. Jeżeli flaga jest dalej ustawiona znaczy że jeszcze nie wykonała się funkcja która ją zeruje.
Najoptymalniej jest ustawić flagę a w pętli głównej jeśli ta flaga jest ustawiona to wywołać funkcję.
Musisz popatrzeć w helpie jak obsłużyć przerwanie od odbiornika UART, w jego obsłudze wpisać flaga = 1; znak = UDR0; w kodzie gdzie oczekujesz danej z RSa (składnia C) if (flaga == 1) { flaga = 0; cos_tam = znak; lub wywołanie funkcji } zmienna flaga została wprowadzona aby kilka razy nie użyć tej samej danej.
Prawie dobrze myślisz z tym że, flaga przepełnienia "C" ustawiana jest przy ADD (ADD ZL, DATA dodanie do młodszej części adresu) . Instrukcja ADC do rejestru ZH oprócz DATA dodaje również "C" czyli nasze przepełnienie. Mam nadzieje że wytłumaczyłem to w przyswajalny sposób :D PS. Flaga "C" ustawiana jest również przy ADC ale ona już nas nie obchodzi.
...czyli, po wywołaniu przerwania ustawić flagę, a w programie głównym gdy flaga będzie przypuśćmy = 1 (funkcja while - wend) to wykona się podprogram odczytu z DS-ów. Coś takiego? While flaga = 1 1wreset 1wwrite &H55 1wverify Dsid1(1) 1wwrite &HBE Tp = 1wread(2) reset flaga wend A w przypadku gdy jest więcej czujników, np. trzy? To...
Kondensatory przy rezonatorze należy podłączyć do GND a nie do Vcc. Oj, ale babol - przegapiłem go :) Dodam jeszcze, że to nadawanie 2 razy jest efektem drgań styków (jak się ich pozbyć podałem Ci link w poprzednim poście). Twoje przerwania długo trwają. Gdy styk drga, to wywoła pierwsze przerwanie, a po rozpoczęciu jego obsługi zerowana jest flaga...
Chcę przerobić projekt napisany w C na C++. Swoją logikę przeniosłem, ale nie wiem, co z interfejsami, np. UART. W C były dwie funkcje: wyslij(), odbierz() oraz globalna flaga informująca o tym, że odbiornik UART-a coś odebrał. Pytanie, jak do tego podejść w C++, czy są jakieś gotowe wzorce rozwiązujące ten problem, biblioteki? Wolę zapytać, jak się...
Czy przy włożeniu kartki do podajnika adf dzieję się coś na wyświetlaczu drukarki? Powinna byc tam niewielka flaga - czujnik obecności papieru.
Witam. Wydaje mi się że w tym przypadku to nie pomoże. Przewód pewnie robi za antenę i sciąga jakieś śmieci. Kolega Tomson pewnie impuls na INT0 traktuje jako wciśnięcie przycisku. W takim przypadku każdy impuls (rzędu pewnie nawet ns) wywoła przerwanie. Cała obsługa powinna wyglądać trochę inaczej. Otóż nawet krótkie wciśnięcie przycisku zwiera jego...
Mam problem z odpowiednim obsłużeniem przerwania UARTa w ATMega644PA. Główny program wywołuje pewną funkcję, która robi jakieś operacje w pętli (załóżmy kilkadziesiąt razy). W przerwaniu UARTA: [syntax=c]static volatile bool FLAGA; ISR (UART0_RECEIVE_INTERRUPT) { /* .... */ //sprawdzenie czy został przesłany znak o kodzie ASCII = 3 if(UDR0 == 3) FLAGA...
Ś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...
WDT można zresetować jedynie poprzez zewnętrzny reset. Jeśli nie zresetuje czyli nie zostanie wyczyszczona flaga WDINT to nie wskoczy mi do funkcji przerwania. Jedynie wystawi flagę WDTOF i wykona się dalsza część programu.
Teraz spłodziłem coś na chacie w bascomie ;-) Może w końcu ta koncepcja ruszy.... uwzględnia drgania styków, działa na innej zasadzie... powinna byc odporna na wszelkiego rodzaju czasy między puszczeniami wciśnięciami itp... w przerwaniu co 10ms sprawdzamy stan przycisku zadziałanie przycisku następuje najwcześniej po 10 jego sprawdzeniach (po 100ms)...
To ustaw jeden z timerów na przerwanie co 10ms. W przerwaniu sprawdzaj stan portu pod który masz wpiętą klawiaturę. Jak jest zmiana to ustaw odpowiednią flagę. W pętli głównej sprawdzaj czy ustawiona jest flaga klawiszy. Po obsłudze funkcji dla danego klawisza zeruj flagę.
Spojrzałem w ten kod i niestety jest tam o wiele więcej problemów. Typowy kod początkującego, ale OK - każdy kiedyś zaczynał i pisał takie potworki ;-) Co można naprawić? Już Ci to mówili w innym wątku: przede wszystkim wywalić czasochłonne operacje z przerwania. W ISR ustawiasz tylko flagę, a w pętli głównej sprawdzasz jej stan i, jeśli zachodzi warunek,...
Wszystko uwzględniłem. Przetestowałem funkcję dummy_timer, ale po chwili zastanowienia użyłem zwykłych opóźnień. Więcej wolnego miejsca w pamięci uC. Przełączanie stanów przerwania działa idealnie. Problem pojawia się przy dłuższym przytrzymaniu przycisku, uC jest w stanie uśpienia i nie reaguje już na wybudzenie. [syntax=c] #include "LCD.h" /*plik...
Na zrzutach przykładowe rozwiązanie: http://obrazki.elektroda.pl/4198947700_1... Wejście jako "bez akcji alarmowej" - tylko jedno, zgodnie z założeniem. http://obrazki.elektroda.pl/5059408000_1... Wyjścia 15 i 16 to wyjścia fizyczne, do których należy podłączyć silnik roletowy - zgodnie ze sztuką. JAK TO DZIAŁA? (w dużym...
dobrze kombinujesz, calosc jest opisana w datasheecie. pozatym nie wiem czemu chcesz z przerwania uruchamiac glowna procedure, skoro wystarczy zebys w przerwaniu przelaczyl diode, przestawil jakas flage i ponownie przeszedl do trybu sleep. jak nastepne przerwanie przyjdzie, sprawdza flage, jesli ustawiona to gasi diode i znow to samo (przestawiajac...
To zapewne nie przechodzi przez kompilację: Pułapka 1: Zerowanie bitu przez wpisanie jedynki Czyli zamiast zgasić flagę ustawiłeś ją ponownie :) Inna sprawa że robisz to niepotrzebnie, ponieważ flaga ta jest gaszona sprzętowo zaraz po wejściu do funkcji obsługi przerwania: Bit 6 – INTF0: External Interrupt Flag 0 ... The flag is cleared when the...
Z tego co mi sie wydaje (chc nie znam Bascom'a) Grc5 jest wywolana gdy dostaniesz pierwszy bit z odbiornika IR i funkcja GETRC5 odbiera tylko nastepne bity, wiec nie dostaje ostatniego bitu i sie kreci w kolko Mam jeszcze pytanie gdzie definujesz jakim zboczem ma byc uruchamiane przerwanie INT0 I po co wylaczasz przerwanie INT0 na poczatku funkcji,...
Najpierw musisz włączyć flagę dla tej funkcji.
[syntax=c]if(PINC & 0x01) //wykryto wciśnięcie przycisku { if (x) x = 0; //jeśli x jest większy od zera to wyzeruj x else x=1; //jeśli x = 0 to ustaw x=1 } if (x) { //tutaj ma być Twój program }[/syntax] Wciskasz przycisk i flaga X się ustawia. Program działa diody świecą, etc. Wciskasz kolejny raz i flaga X się kasuje a program przestaje działać. Wciskasz...
Korzystam z dev board STM3210B. Timer 2 konfiguruje następująco: [syntax=c] RCC_APB1ENR_TIM2EN_bb = 1; TIM2->PSC = 36000; TIM2 -> CNT = 0; TIM2 -> ARR = 0xFFFF; TIM2_CR1_CEN_bb = 1;[/syntax] po wykonaniu pewnej funkcji licznik zatrzymuje bitem CEN. i pobieram wartość CNT; Działa wyśmienicie. Teraz gdy zmienię licznik na TIM3 to: 1. otrzymuje inny czas...
Musisz wykorzystać jakaś pomocniczą flagę (zmienną). Wciśnięcie przycisku zmienia stan flagi na przeciwny. To jak zachowuje się wyjście układu zależy od stanu flagi.
Nie ma takiej wersji jak w pierwszym przykładzie przytoczyłeś. Kolejność parametrów (ich typów i znaczenia) jest udokumentowana i nie zmienia się dla tej funkcji. Flagę WS_OVERLAPPEDWINDOW w pierwszej wersji wstawiłeś w miejscu wskaźnika do nazwy klasy. Całkiem możliwe że pod adresem który ta flaga reprezentuje (0x00CF0000) przypadkowo był jakiś string,...
Najprościej to chyba tak: [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> #define TIMERSTART 6 volatile uint8_t FLAGA_50 = 0; volatile uint8_t FLAGA_1000 = 0; // funkcja obslugi przerwania TIMER0_OVF 8MHz / 64 * 250 wychodzi co 2ms // dla innego taktowania nalezy ustawic inny preskaler i/lub inne liczniki stawiania flag ISR(TIMER0_OVF_vect)...
To zalezy od modelu. W Samsungach, ktore korzystaja z mechanizmu KnoxGuard generalnie odblokowac bootloadera sie nie da. Da sie to czasem wymusic, czy to korzytajac z trybu EDL (w aktualnych wersjach softu juz zablokowane), czy bawiac sie za pomoca ISP, ale o ile nie korzystac sie z odpowiednio przygotowanego softu to telefony, i bootloader potrafia...
Wpisujesz do rejestru danych 0x60 i ze względu na 1 stopniowy FIFO, TXE jest ustawiany w następnym cyklu APB, więc chwilę później wpisujesz "losowy bajt". Bezpośrednio po wysłaniu polecenia (0x60), ustawiana jest flaga RXNE, ponieważ interfejs coś już odebrał, a Ty odczytujesz to coś = "śmieci" i wychodzisz z funkcji. Właściwe dane przyjdą dopiero w...
Tryb jest 4 bitowy(chyba),bo korzystam z programu powyżej kolegi sp3uqw piny ma mam podłączone nastepująco PD0->D0.....PD7->D7(atmega8) to chyba nie nie przeszkadza że mam podłączone wszystkie 8 pinów w trybie 4 bitowym?? a mój program wygląda tak: #include <avr/io.h> #include "funkcje.c" #define RS_ON sbi(DDRC,PC5);sbi(PORTC,PC5) #define...
Raczej w ogóle powinieneś zmienić sposób w jaki to realizujesz. Generalnie naciśnięcie przycisku powinno zmieniać jakąś flagę, po funkcji testowania przycisków powinieneś wywoływać w zależności od tej flagi funkcję zmieniania stanu portu wg życzenia.
Jeżeli używasz klasy Serial, to tam to już jest zaimplementowane. Jeżeli nie, tu uważaj na możliwe problemy linkera (duplicate reference, symbol already defined), bo domyślna funkcja main, ta, która w pętli odwołuje się do funkcji loop, ma referencję do klasy Serial i przez to, może nie być możliwe instalowanie własnej obsługi przerwania UDRE_vect,...
Chciałbym jeszcze coś dodać, bo moim zdaniem zapotrzebowanie na RAM to nie jedyny problem w przypadku zagnieżdżania przerwań. Nie znamy programu, więc trudno przewidzieć, czy sprawa dotyczy tego konkretnego przypadku. W przypadku zagnieżdżania przerwań należy jednak pamiętać o pewnych zasadach. Procedury obsługi przerwań, które ustawiają globalną flagę...
Zastanówcie się Koledzy, co się będzie działo, kiedy wrzucicie do UDR ostatni bajt do nadania. Kto i kiedy skasuje zgłoszenie przerwania TXD po wysłaniu tego bajtu? W obsłudze przerwania to nie nastąpi, więc przerwanie pozostanie zgłoszone i będzie obsługiwane na okrągło - patrz granica stron 137/138 aktualnej wersji (aa) doc2486.pdf Flaga przerwania...
Funkcja czekająca na odpowiedz powinna być odporna na brak jakiekolwiek odpowiedzi. W przypadku braku odpowiedzi z modemu Twój kod się "zapetli". Jak wygląda kod usr0_getc()? Nie widzę związku między ISR a tą funkcją. Zakładam również, ze flagi (flagGotLine i pozostałe) zadeklarowales jako volatile. Postaraj się zaimplementować pkt. 4 z mojej poprzedniej...
Wiec na komputerze byłoby coś takiego: [syntax=c] ..... byte tablica[1024]; //kazdy element tablicy przyjmuje wartosc od 0 do 255 ...... sp = new SerialPort("COM5", 9600, Parity.None, 8, StopBits.One); sp.Open(); sp.Write(tablica, 0, tablica.Length); //wysłanie tablicy przez port szeregowy (czy tak zadziała??). Wysyłam zawsze tablicę o takiej samej...
czasem sie rzuca np if (PORTB.RB0==0) flaga=1; i kiszka nie przejddzie patrzylem w pomocy i nic czasem znaczenie wielkosci liter no to kombinojue a czasami to nie wiem sam kompilator nie rozpoznaje czy co? A zadeklarowałeś w funkcji "main" zmienną "flaga" ? Pozdrawiam Mariusz
Myślałem o tym problemie z temperaturą i założyłem, że najprostszym sposobem na poradzenie sobie z tym bez zmian bazy kodu byłoby wykonanie addChangeHandler z poleceniem publishingFloat i pomnożenie tam wartości przez 0,1 przed opublikowaniem. Innym rozwiązaniem byłoby dodanie ogólnego mnożnika przed publikacją dla kanałów. Mimo to, proszę, zrób pull...
Pijopic : Mam spore doświadczenie w pisaniu na avr'y w C i asmie, więc wiem jak one działają. To co piszesz, jest bzdurą. Niezależnie od środowiska po wejściu do funkcji przerwania, flaga I jest kasowana sprzętowo, zawsze , co za tym idzie przerwania są blokowane. Funkcja przerwania kończy się zawsze za pomocą reti, które spowrotem ustawia flagę I....
Wygląda na to, że przypadkowo zachowałem przycisk podczas debugowania. Zauważyłem, że inne wtyczki w pliku nie mają ustawionych flag funkcji, więc zaktualizowałem JSON w oparciu o commit, który pokazałeś. Oto aktualizacja: { "vendor": "Prosto", "bDetailed": "0", "name": "16A 3680W Smart Plug with Energy Monitoring (EU)", "model": "WFU-08PM", "chip":...
mov EAX, szer (at)p1: INVOKE WriteConsoleA, hout, nag1, nag1L, OFFSET rout, 0 inc iter1 cmp EAX, iter1 Widać że raczkujesz, więc podpowiem że wywołując zewnętrzne funkcje, nie masz co liczyć że eax, ecx i edx pozostaną nienaruszone. Wyjątkami są ebx,esi,edi,ebp oraz flaga kierunku - masz gwarancję że funkcja ich nie zmodyfikuje i tego samego oczekuje...
Założyć flagę, zmieniać jej wartość po wykryciu zbocza na pinie przycisku i wykonywać funkcję tak długo jak zmieni się flaga, a nie stan przycisku. Potrzeba jaśniej?
Jasne, mogę przetestować. Zaimplementowałbym to w drv_spi.h/.c w funkcji SPI_Init jako parametr. Używany jest więc albo Soft SPI, albo specyficzna dla sprzętu. Następnie flaga konfiguracji lub inny sterownik, taki jak BL0942SPIS.
Nie wiem jak to działa gdy kasujesz TI w przerwaniu. To już poziom assemblera czy wcześniej sprawdzasz warunek pętli while(TI==0) {}; czy też w obsłudze przerwania jest kasowana flaga TI. Włącz debugger w keilu ustaw breakpoint w przerwaniu i zobacz jak program działa. Sądze że skasowanie linii "if (TI) { TI=0; }" rozwiąże problem :) Korzystanie z funkcji...
JacekCz - funkcja PlaySound i parametry to WinAPI. Flaga odtwarzania asynchroniczego powoduje właściwie granie w wątku samo z siebie. Natomiast autor napisał o NOSTOP powoduje, ze odtwarzanie nie jest przerywane, gdy pojawia się kolejne wywołanie funkcji (z treści nie wynikało, co chce osiągnąć, więc trudno byłoby podać to rozwiązanie).
Jak to zrobić: 1. włączasz przerwanie od timera w NVIC 2. Konfigurujesz timer, żeby generował jakieśtam przerwanie Odpowiedzi na pytania: 1. No bez timera raczej nie zrobisz przerwań co jakiś czas [; 2. Funkcja przerwania po prostu musi nazywać się DOKŁADNIE TAK SAMO jak jest wpisana w tablicy przerwań (zwykle CośtamCośtam_IRQHandler() ) 3. Hę? Przykłady...
Po odczytaniu liczb z pliku wrzuć taką linijkę: file.clear(); kiedyś się spotkałem z takim czymś, ta funkcja czyści flagi, które się poustawiały przy poprzednim korzystaniu z tej zmiennej.
Kolejne pytanie: Jeśli chcę odebrać kilka znaków z klawiatury to powinienem wpisać to w jakąś tablicę? Jeśli chcę wysłać do PC cały wyraz to jak to robić? Możesz to zrobić różnie. Zależy czego potrzebujesz i na ile jesteś wprawny w programowaniu w C. W każdym z przypadków trudno jednak będzie się obyć bez tablic dla ciągów znaków odbieranych i wysyłanych....
Witam, po długich bojach z petitem udało mi się dobrnąć do funkcji pf_read, która zwraca niestety FR_NOT_OPENED. Funkcje pf_mount oraz pf_open() zwracaja FR_OK. Poniżej kod: [syntax=c]void main() { FATFS fs; /* Work area (file system object) for the volume */ BYTE buff[16]; /* File read buffer */ UINT br; /* File read count */ FRESULT res; /* Petit...
Witaj ja to ostatnio zrobilem w mniej wiecej taki sposob funkcja keyb_scan od skanowania klawiszy u mnie 4 (up down esc enter) i flagi ustawianej przy zmianie, samo menu to po prostu tablica klawiszami gora dol zmieniam indeks tablicy natomiast enter esc zawartosc komorek nastepnie w petli glownej main po kolei skanuje klawisze jesli ktorys wcisniety...
Dzięki za szybką odpowiedź :D Jeżeli dysk cały czas ma zapaloną flagę BSY, to na pewno będzie to uszkodzenie procesora lub ROMu. Czy możesz mi napisać co to za flaga i jaka jest jej funkcja? Załączam zdjęcie elektroniki http://obrazki.elektroda.net/36_12351708...
No wiem jak działa search podcza szukania id. Ale tutaj nie rozumiem co oznacza odpowie układ. chodzi mi tylko jakie komendy wysylac po wyslania 0xEC zeby sprawdzic stan flagi No to może powiem inaczej. Funkcji ALARM SEARCH, należy użyć w identyczny sposób, jak SEARCH ROM. Skoro wiesz jak działa SEARCH ROM, to wiesz jak działa SEARCH ALARM. Różnica...
Dla timer 8it bez błędu odliczania można zastosować preskaler 64 i następującą procedurę obsługi ( kod w C ) [syntax=c] volatile uint8_t flaga // deklaracja jako zmienna globalna i pooling zmiennej w pętli głównej uint8_t main( void ){ flaga = 0 while(1){ if(flaga == 1){ flaga = 0 // dalej funkcje wykonywane co 1s } } } ISR(TIMER0_OVF_vect) { static...
(at)lazor Dlaczego patrzysz przez pryzmat architektury, którą znasz, a nie odnosisz się do artykułu? Wszystkie 3 części dotyczą prostych struktur 8-bitowych jakie były na rynku 10-20 lat temu, gdzie jedynym efektem przejścia do obsługi przerwania jest załadowanie licznika rozkazów adresem ISR i ustawienie flagi obsługi przerwania. A jeśli robisz w userlandzie...
Czy Ty w ogóle przewidujesz obroty w 2 strony? Bo może mógłbyś badać tylko jeden kanał :) Najprostsza wersja jednokierunkowa, to w przerwaniu po osiągnięciu 500 ustawić flagę i przekaźnik i w przerwaniu jeśli flaga i więcej jak 50 wyłączyć przekaźnik, skasować flagę. W sumie to można nawet testować stan przekaźnika zamiast flagi, ale dostęp do portu...
Jest tego sporo, DCF77, 7 x DS18B20 i DHT11 ( akurat jeśli chodzi o niego to mam wątpliwości, czy ten kod działa, bo jest na obydwu płytkach podpięty i zdarza się zawieszenie ) Nadajnik Atmega328p Dodano po 16 Odbiornik Atmega644P - trochę zmieniłem obsługę przerwania, wydaje mi się, że w przerwaniu nie powinno się wykonywać dużych obliczeń. [syntax=basic4gl]...
Nic się nie pojawi bo funkcje UART_Transmit/Receive są oparte na polingu flag UDRE/RXC. Jednocześnie włączone są przerwania TXC/RXC, oraz włączona globalna flaga przerwań. Jeśli dochodzi do odebrania znaku procedura obsługi przerwania natychmiast przejmuje kontrolę i gasi flagę nie dając funkcji UART_Receive wyjść z pętli. Co do tej niby "biblioteki"...
Ja bym do tego podszedł tak (w zależności od przypadku): - strukturę z intami zamieniłbym na strukturę ze wskaźnikami do funkcji do odczytu + jedna do zapisu. Chyba najbardziej skomplikowany kod wychodzi, ale za to prosty w użyciu. - strukturę zamieniam po prostu na X funkcji zwracających poszczególne nastawy - strukturę zamieniam na funkcję readConfiguration(flaga)...
Cześć, pisze właśnie funkcje konwertującą flota to stringa. Napotałem na pewnien problem. stworzyłem funkcje konwertującą: void floatToString(uint8_t *stringTab, float32_t data) Gdy ją wywołuje i wchodzę od funkcja przekazywana wartość flt jest zupełnie inna niż zadałam. float32_t flt = 2.4567; floatToString(str, flt); wartość przekazana...
Nie robiłem za dużo w STM32, nawet nie wiem jak są zdefiniowane RESET (zapewne #define RESET 0) i SET (zapewne #define SET !RESET). Jeżeli tak jest to są to jednoznaczne operacje. Czy to jest za szybkie, to w sumie zależy jak Twój program jest skonstruowany. Jeżeli masz nieodpowiednio napisany program w jakichś innych miejscach, to jest to możliwe....
Witam, zaczynam dopiero przygodę z Cortexami i utknąłem na konfiguracji kontrolera NVIC. Chciałem uzyskać reakcje procesora na przerwanie od GPIOC Pin0. Wydaje mi się, że wszystko jest OK, a jednak nie chcę działać, program po wystąpieniu przerwania nie wchodzi w funkcję jego obsługi. Poniżej zamieszczam kod: Funkcja konfigurująca NVIC, GPIOC, EXTI,...
Jeżeli ja mogę dorzucić swoje dwa grosze. Ja obsługę tego termometru robię zazwyczaj na maszynie stanów, którą umieszczam w przerwaniu od timera. Timer zazwyczaj wywołuję co 10 ms i on mi generuje nazwijmy to tyknięcia zegarowe, dla funkcji sprawdzającej stan klawiszy i do wspomnianej maszyny stanów. W main() w nieskończonej pętli mam zrobioną maszynę...
Dosyć odważnie sobie poczynasz na mikrokontrolerze mającym 2kB Flash i 128B SRAM :D ale do odważnych świat należy. Odchudziłem Ci trochę kodzik. Obsługa przerwania timera została stuningowana moim programem NoSave Tool. Teraz mikrokontroler nie odkłada na stos większości rejestrów a tylko te potrzebne - w tym przypadku tylko jeden :D Przekłada się to...
Dzięki, czy jest jakiś sposób na dodanie tej funkcji jako blokady przełączania lub innej jednostki w HA? (tak jak robi to zigbee2mqtt) https://obrazki.elektroda.pl/6642221600_... Próbowałem dodać go jako przekaźnik i dodaćChangeEvent i działa dobrze. Ale byłoby miło zamiast włączać lub wyłączać flagę, aby flaga tworzyła nową jednostkę,...
SIGNAL (SIG_OVERFLOW2) { TCNT2=T2_INIT; ///funkcja } void main(void) { char buf[8]; flaga=1; TIMSK=(1<<TOIE0)|(1<... TCNT0=T0_INIT; TCNT2=T2_INIT; TCCR0=5; TCCR2=4; sei(); LCD_Init();// w tym miejscu się zatrzymuje avrstudio //funkcje }
Przecież wiesz, że delay w przerwaniu nie powinieneś stosować to dlaczego ponownie je tam wstawiasz? Przyjmij wreszcie postawę, że delay jest be i przestań go używać, oraz że do odliczania odcinków czasowych należy wykorzystywać timery. Patrząc na to co zaproponowałeś powyżej nie wiesz natomiast, że: - wchodząc w przerwanie przerwania są blokowane (flaga...
Niestaty Twoje porady nie odniosły rezultatu :( Bez znaczenia czy w miejsce przed newralgicznym punktem wkleje kod z wyświetlaczem czy nie, to nadal nie działa. Identyczna sytuacja występuje w przypadku pamięci EEPROM, również następuje zatrzymanie w pętli w funkcji TWI_read. Z jakiegoś powodu flaga TWINT nie zostaje ustawiona...
Dla sprawdzania jednego klawisza: do ... ... ... gosub sprawdzanie_klawiszy if flaga = 1 then instrukcje gdy wciśnięty klawisz end if ... ... ... loop sprawdzanie_klawiszy: flaga = 0 if Ok = 0 then waitms 50 if Ok = 0 then flaga = 1 end if end if return mniej więcej tak to ma wyglądać. Jeśli chcesz sprawdzać kilka klawiszy robisz bardzo podobnie....
Witam Mimo, że większość proponowanych tutaj rozwiązań podłączenia RFM12 do Atmegi wykorzystuje SPI programowe, ja podłączyłem tradycyjnie, przez SPI sprzętowe - mimo, że nie miałem problemów z wgrywaniem kodu do Atmegi spiętej z RFM12, to uruchomienie ich razem jest problematyczne ( każde osobno działa bez problemu ) [syntax=basic4gl] $include "Config_AVR-DOS.BAS"...
Witam, Mam problem ze zmiennymi globalnymi. Do momentu gdy kod wygląda jak poniżej, program działa poprawnie. Program w założeniu ma obsługiwać transmisje danych przez USART, natomiast wersja poniżej została skrócona do minimum w celu znalezienia przyczyn powstania błędu. Problem objawia się następująco: Jak tylko od komentuje "//volatile char flaga;"...
Stosujesz może jakieś optymalizacje? Flaga -O kompilatora. Drugie pytanie to po co taką funkcję piszesz? Nie lepiej podać żądaną wartość od razu funkcji _delay_us? To co piszesz chyba nie bedzie za dokładne.
Każdy program zawierający delayms da się zapisać w sposób nie wykorzystujący delayms. Możesz do każdego przycisku posiadać zmienną (wystarczy jeden bajt). I np co 1ms (w pętli głównej lub w przerwaniu od licznika) sprawdzać stan przycisku - jeśli nie jest naciśnięty, zerujesz zmienną, jeśli jest to zwiększasz o 1. Jeśli zakładasz, że drgania mogą trwać...
Witam, próbuję zrobić pomiar czasu między kolejnymi przerwaniami na wejćiu INT0, ten czas ma być później wykorzystany do ustawienia ocr dla timera w trybie CTC. Miało to wyglądać tak: Uruchamiam timer, gdy na isr(int0_vect) pojawia się impuls ustawiam sobie flage na 1, w funkcji liczącej czas gdy pojawia się flaga przypisuję wartość timera do zmiennej,...
Jeśli chodzi o sztukę, to nagłe wyjście z funkcji obsługi sygnału za pomocą exit() jest w zasadzie podobne do zamordowania procesu za pomocą "kill -9" z konsoli. Zazwyczaj w funkcji obsługi sygnału ustawia się jakąś flagę (za pomocą jakichś atomowych funkcji), którą to wcześniej, czy później odczytuje się gdzieś w głównej pętli programu i na tej podstawie...
Wydaje mi się źe coś jest nie tak ze sprawdzaniem stanu przycisku- nie bardzo mogę to zrozumieć. Klasycznie to robi się tak: if(przycisk==0) delay() if(przycisk==0)//dalej 0 przycisk=1 //naprawdę wciśnięty Można też inkremantować jakąś zmienną aby sprawdzić to 3 czy więcej razy. A lepszym sposobem jest do liczenia opóźnień wykorzystać Timer. I tak masz...
Czyli zamiast robić na przerwaniu INT0 zrobić na timerze? Nie. Jeżeli chcesz to pozostaw przerwanie INT0, ale w funkcji obsługi przerwania ustawiaj jedynie flagę, a w main() umieść resztę kodu wraz z opóźnieniami i pętlami, czyli gdy flaga zostanie wykryta w main() to wołaj swoją funkcję checkKeyboard(). I staraj się zawsze stosować zasadę, że przerwanie...
Witajcie, Wrzuciłem nowy plik Evo 3.15 na GitHuba https://obrazki.elektroda.pl/9918225600_... https://obrazki.elektroda.pl/8013687500_... Jeszcze taki dodatek, od jutra wrzucę poprawione banki: Banki 15 - sporo stacji wyleciało (były martwe) stacje FLAC przepisane do Banku 16 Bank 16 - będzie to Bank high resolution,...
Pytanie dziwne ale stoje przed dylematem. Mam program typu: while (1) { if (flaga_A) { funkcja która przez chwile trybi } if (flaga_B) { if (flaga_C) { ustaw flage A i wykonaj } if (flaga_C1) { ustaw flage A i wykonaj } if (flaga_Cn) { ustaw flage A i wykonaj...
startup to prawdopodobnie jedyny plik asemblerowy w twoim projekcie. W nim musisz mieć odpowiednio ustawiony rejestr CPSR. Jest tam globalna flaga od przerwań.
- może podpowiesz dlaczego funkcja wykonuje się jeden raz? Wpierw warto zrozumieć co dokładnie robi ten kod. Twoje zrozumienie może pomóc w lepszym zdiagnozowaniu problemu. Przyjrzyjmy się więc kluczowym elementom: 1. Funkcja `usart_inicjuj` jest odpowiedzialna za inicjalizację modułu komunikacji szeregowej (USART). Ustawia prędkość transmisji (BAUD),...
Witam, kod nie jest moje autorstwa, więc nie chcę go umieszczać . W każdym razie algorytm jest realizowany w następujący sposób: 1. Wysłanie za pomocą UARTu informacji do uC o zezwoleniu na regulację prądu + wysłanie wartości współczynników regulatora i prądu referencyjnego. 2. Jeśli ustawiona jest flaga zezwalająca na regulację, oraz ustawiona jest...
flaga bascom obsługa flaga flaga przerwa
ładowanie superkondensatorów bulgocze lodówka centralny zamek skoda drzwi kierowcy
radzio modbus dobór dławików kompensacyjnych
Wpływ upalonego zera na liczniki statyczne w instalacji trójfazowej Zanikanie iskry po nagrzaniu silnika - przyczyny i diagnostyka