Czyli zgadza się, ta flaga to czujnik wyjścia papieru. Czujnik pokrywy jest pod pokrywą w otworze z przodu.
dondu: Ja wcale tego pisać nie muszę :-) Po prostu zastanawiam się skąd taka maniera bierze. Ale dzięki za dbałość o mnie. Właściwie to ciekawsza byłaby dla mnie odpowiedź niż zlikwidowanie tej maniery. Do autora: Nie wnikając czy procedura skanowanie robi to co chciałbyś, aby robiła czy nie poniższa robi to samo trochę krócej, nieprawdaż? [syntax=c]...
Atmega 328P z kwarcem 18432000 (w specyfikacji mozna ja kręcić do 20MHz) spokojnie potrafi wygenerować trzy PWM przesunięte w fazie o 120 stopni z krokiem 256 z częstotliwością 50Hz przy tym nadając na USART o aktualnych warunkach jednego potencjometru. Pewnie że potrafi, ja na attiny 861 wygenerowałem 3 sinusy co 120 st z regulacją F od 20 do 250Hz...
ISR(USART_RXC_vect) { register u08 c; rxbuff = UDR; if (bit_is_clear(UCSRA, RXC)) { rxbuff = c; flaga.rx_int = 1; // ustaw flage } } Tutaj po coś przypisujesz do rxbuff c, które jest niezainicjalizowane... ?
(at)dodelow Przykład prostego generowania zmiany flagi co 4 sekundy (prosty sposób na przełączanie temperatura/czas z wcześnieszego kodu) przy założeniu przerwań timera co 4ms : deklaracje: [syntax=c] volatile uint16_t dzielnik; volatile bool sekundy_4; bool flaga_temperatura; [/syntax] kod w przerwaniu timera: [syntax=c]if (++dzielnik > 1000) {...
Przede wszystkim PCINT wymaga większego nakładu programowego. Przy włączonych wielu źródłach danego przerwania PCINT trzeba analizować, który pin zgłosił przerwanie i w jaki sposób się to odbyło (które zbocze). PCINT jest niżej w hierarchii przerwań, zatem na obsługę tego przerwania trzeba czasem dłużej poczekać (w zależności od konstrukcji programu)...
ogolnie jest zasada tak ze w przerwaniach nie powinno byc jakis procedur opozniajacych, przerwanie powinno sie wykonac , obliczyc i wylaczyc jak najszybciej,glowny program jest od czasowek , komunikacji i2c itp. przynajmniej ja sie staram trzymac tych zasad.czasami mozna je nagiac oczywiscie.to zalezy od zlozonosci projektu. ja PCF8583 obsluguje zawsze...
Pokaż Cały kod. Ale nie jako obazek.. W handlerze nie widzę zerowania flagi.
Dzięki wielkie- ale to nie do mnie pisałeś. O Atomic_Block dowiedziałem się w czwartek- sprawdziłem- od czwartku jest to pierwsza wiadomość na ten temat. A wracając do tematu Fir3man- wymyśliłem taki schemat programu: #include <stdint.h> #include <avr/io.h> #include <stdlib.h> #include <avr/interrupt.h> volatile uint8_t dol;...
Mam napisaną taką obsługę wyświetlania: [syntax=basic4gl]Dim Cas As Byte 'zapamietuje aktualną pozycje wświetlania Dim Display_lcd As Byte Dim Trybprzycisk As Bit Dim Trybpomocnicza1 As Bit Do If Flaga_100ms = 1 Then 'co 100ms Flaga_100ms = 0 Gosub Disp_lcd End If If Flaga_1s = 1 Then 'co 1s Flaga_1s = 0 Gosub Alarm End If Loop End '---------------------------------------...
Teraz przypomniałem sobie, że miałem podobne problemy i wydaje mi się, że coś wspólnego miało z tym Fusing. Spróbuj wyświetlać na razie bez konwersji single na tekst. Ach te problemy miałem na wersji 1.11.9.8 http://www.elektroda.pl/rtvforum/topic17...
Proponuję następujące zmiany: Dla zegara 8MHz Config Timer0 = Timer , Prescale = 8 wtedy jeden cykl = 1us - łatwo się liczy. Następnie w przerwaniu: Przerwanie: Timer0 = Timer0 + 213 If Flaga = 1 Then Toggle Portc.7 Else Portc.7 = 0 End If Return Dalej w podprogramie "Send_transmit" zamiast: Portc.7 = 1 napisz: Flaga = 1 a zamiast: Portc.7 = 0 napisz:...
Bit RXNEIE włącza przerwanie od dwóch flag: RXNE i ORE (overrun) - patrz tabelka USART interrupt requests . Odczyt z DR kasuje RXNE. ORE jest kasowane przez (cytat z opisu bitu ORE): "an read to the USART_SR register followed by a read to the USART_DR register".
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...
Odświeżę temat Zrobiłem tak, jak zasugerował niveasoft , czyli na Case Nie wiem czy tak to miało wyglądać. Zostaje ~994ms na inne sprawy do mnie przemawia, tylko może trzeba inaczej do tego podejść. Póki co będę próbował przenieść MAX na sprzętowe SPI - Wtv020SD nie ma pinu CS, więc może sterowanie obydwu układów poprzez pin CS może być utrudnione.
W przerwaniach masz _delay()- to wielki błąd. A _delay() w pętli- to duzy błąd. Masz Timer i masz go ustawić na przerwanie co 20ms. W tym przerwaniu ustawiasz sobie tyle flag ile trzeba i je zwiększasz. W głównej petli sprawdzasz czy flaga1==1, zerujesz i wykonujesz jakiś warunek. Potem sprawdzasz czy flaga2==5, zerujesz i robisz to co ma być robione...
Mam już gotową płytkę, impulsy z obrotomierza kieruję na ICP tak jak zasugerował tmf. I teraz pytanie do Was czy pomożecie w pisaniu programu, żeby odpalić obsługę tego ICP ? Obecnie mój program wyglada tak: [syntax=vb]'--------------------KONFIGUR... $regfile = "m16def.dat" 'informuje kompilator o pliku...
Witam Mam płytkę sterującą dwoma kanałami PWM - przez ULN oraz MOSFETY. Płytka ma dwa wejścia oraz wejście czujnika PIR - INT1. Ma przede wszystkim sterować włączaniem taśmy LED 12V z czujnika PIR ( oprócz tego z drugiego wejścia ). LED włączona przez PIR ma docelowo świecić określoną ilość czasu ( zależną od natężenia światła ) i się wyłączyć. Żeby...
mickpr - zły pomysł bo będzie mu blokowąło program A kto mówił, żeby przerwa była typu "waitms/delay". Przerwa może być zrealizowana jako flaga blokująca odczyt RC5 przez określony czas - a pętla odbierająca zdarzenia może chodzić cały czas z pełną prędkością wykonując inne zdarzenia. Zaletą "mojego" rozwiązania jest to, że regulując ten czas można...
Przerwanie od RFM12 [syntax=basic4gl] '*************************************** Przerwanie INT2 - od RFM12 Int2_rfm: Disable Int2 Disable Interrupts Flaga_rfm = 1 Sd_card = 1 ' zablokowany zapis do karty SD Gosub Rf12_receive D1 = Received_data ' ciag inicjujacy - $TEMP / $DATA Gosub Rf12_receive D2 = Received_data ' ciag inicjujacy - $TEMP / $DATA Gosub...
Mam drugi tongou z 25a i pomiarem i nadal jest ten sam problem, teraz z najnowszym oprogramowaniem 1.17.441. Flaga 38 nie jest tak naprawdę opcją, ponieważ z powodu przerwy w zasilaniu urządzenie uruchamia się i przechodzi w stan włączenia. Ale oprogramowanie sprzętowe nie rozpoznaje tego i nadal nie jest aktywny pomiar.
W rejetrze GIFR pojawia się flaga żądania obsługi przerwania INTF0. I czeka. Gdy w rejestrze GICR pojawi się ponownie flaga INT0 (czyli w Bascomie enable INT0) przerwanie jest obsłużone i flaga INTF0 jest wtedy kasowana. Flaga INTF0 może byś skasowana ręcznie.
A co to jest UART0TxEmpty? Flaga ustawiana w innym przerwaniu? Bo jeśli tak, to chyba nie sądzisz, że jedno przerwanie ot tak sobie przerwie drugie, bez ręcznego wymuszenia takiego stanu? Nawiasem mówiąc, sposób w jaki chcesz to zrobić (przerwanie przerywające przerwanie, sprintf(), oczekiwanie w przerwaniu) woła o pomstę do nieba. Nie mówiąc już o...
poza tym dlaczego nie używasz sprzętowych timerów jako timerów tylko do generowania przerwań? Kolego może źle mnie zrozumiałeś ale do ustawiania flagi używam Timer0 i właśnie mnie dziwi dlaczego mi się te czasy nie zgadzają Jak do wyznaczenia czasu używam tego samego timera. Tak wygląda obsługa przerwania u mnie : Timer może zliczać czas wprost i w...
Nie da się skasować flagi, jest ustawiona tak długo, jak długo wejście INT ma poziom niski. Jest to prawdą (i to częściową) w przypadku wyzwalania przerwania poziomem niskim. W przypadku wyzwalania zboczem, lub zmianą poziomu flaga jest jak najbardziej kasowalna czy to sprzętowo czy programowo. Wracając do wyzwalania poziomem niskim: flaga nie "jest...
Więc warunkiem pętli niech jest i warunku który został podany i flaga, flagę ustawisz gdy wejście przyjmie stan przeciwny zostanie wykryta przerwa.
Kolega snaap nie napisał jeszcze, jak ma skonfigurowane przerwanie INT1. Ja podejrzewam, że ma wyzwalanie stanem niskim, a nie tak jak kolega ravmar (autor wątku) zboczem opadającym. Różnica między tymi dwoma typami przerwań polega na tym, że w tym pierwszym (wyzwalanym stanem niskim) flaga INTF1 jest zawsze zerowana, niezależnie od tego, czy przerwanie...
Odblokowałeś globalne przerwania ale nie odblokowałeś indywidualnego od UART_RXC. Flaga RXCIE w rejestrze UCSRB. JarekC
Śmiem twierdzić, że w (0<<ISC11) | (1<ISC10) jest błąd, powodujący, że wyrażenie to ma wartość równą 1 (podczas gdy powinno mieć wartość równą 4). Jeśli flaga jest ustawiana na zbocze, to w kodzie głównym powinny występować jakieś opóźnienia albo zmiana algorytmu, bo inaczej flaga zostanie sprawdzona raz - będzie ustawiona,...
To Ci powinno ruszyć, napisałem kiedys pod Keila uVision3 V3.63. Dziala z Makieta Olimex'u LPC-2378-STK-A: // (LPC2378) mandaryn 2009 #include <lpc23xx.h> int flaga=0; // 0 -> dioda OFF, 1 -> dioda ON __irq void przerwanie (void) { if(flaga==0) // Gdy dioda wylaczona { FIO2SET|=0x00000001; // Wlaczenie diody...
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...
W PDF jest napisane, że flaga jest zerowana gdy : "interrupt routine is executed". Ja to tłumaczę jako obsługa przerwania jest WYKONANA. CZYLI po ZAKOŃCZENIU. W PDF jest też napisane, że zerujemy ją wpisując do rejestru wartość na określonym bicie 1.Czyli EIFR.0=1. Dlatego wpisując EIFR.0=0 NIE ZEROWAŁEŚ FLAGI!. Spróbuj ja wyzerować następująco If EIFR.0=1...
Spróbuj zrobić od przepełnienia. W proteus'ie też port zmieni raz stan i nic. volatile int flaga; #include <avr/io.h> #include <avr/interrupt.h> int main (void) { DDRC = 0xff; // Ustaw jako wyjście LED TIMSK = 0x04; // Włącz przerwania przepełnienia (1 <<TOIE1) SREG = 0x80; // włącz przerwania globalne sei()...
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...
- Nie do końca wiem co poszczególne linijki kodu powodują w samym układzie. Jeśli masz problem ze zrozumieniem rejestrów uC ich obsługi, co robi flaga, dlaczego i kiedy trzeba ją kasować, użyj HAL. Następnie podejrzyj (nie zawsze jest łatwo, bo HAL jest uniwersalny przez co czasem nieźle "zakręcony") jak to jest zrobione. Łatwiej będzie Ci zrozumieć...
Ś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...
Przerwania PCINTx wykonują się przy każdej zmianie stanu logicznego, niema możliwości konfiguracji np. tylko dla zbocz narastającego lub opadającego. Stan zbocza na poszczególnym pinie sprawdzasz w przerwaniu. Attiny13 ma 6 pinów PB.0-PB.5 (PCINT0 do PCINT5) które mogą wywołać przerwanie. I tu jest jedna myląca rzecz :) dla tych pinów jest tylko jeden...
Przerwania nadawcze są dwa - TX Complete oraz UDRE empty. Przerwanie "USART_TX_vect" to przerwanie Complete generowane flagą TXCIE lub (w wypadku wyłączonego przerwania) testowane flagą TXC. Natomiast flaga UDRE w powiązaniu z flaga UDRIE generuje przerwanie Empty.
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...
A po co tak teoretyzować - wystarczy zajrzeć do PDF'a scalonego odbiornika TFMS czy TSOP żeby zobaczyć jak należy postąpić nie tylko z linią sygnału wyjściowego ale też jak podać zasilanie. Ludziom nie chce się tam zajrzeć a potem zdziwienie, że nawet jak działa - to jednak jakieś błędy się wkradają, czasem jakieś zakłócenia itp (jak tam już zajrzysz...
No dokładnie, o poolingu zapomnij. Najprościej zrobić tak jak pisze Mirek, bufor (niekoniecznie cykliczny), ale po prostu tablicę zawierającą wskaźniki do kolejnych komunikatów. W procedurze obsługi przerwania TX, wysyłasz bieżący komunikat, jeśli wysyłka jest zakończona to sprawdzasz czy w tablicy jest jakiś oczekujący i rozpoczynasz jego wysyłkę....
Miałem podobny problem: Control Status Register (0x00) ustawiony na 0x04 Alarm Control (0x08) ustawiony na 0x90 chciałem uzyskać alarm codziennie o określonej godzinie, a skorzystać chcę z wyjścia INT PCF8583. Wszystko ustawione, a flaga się nie zmienia, nie zmienia się też stan wyjścia INT (ma się zmienić z Hi na Lo) Po sprawdzeniu rejestrów okazało...
Manual o IDLE mówi: An Idle character is interpreted as an entire frame of “1”s followed by the start bit of the next frame which contains data (The number of “1” ‘s will include the number of stop bits). Czy ktoś może sprawdzał praktycznie kiedy faktycznie pojawia się flaga IDLE? Ja z powyższej informacji wnioskuję, że...
Mozę powtórzę, bo nie lubię patrzyć jak ktoś traci czas - wszystkie porady sugerujące że problemem jest 8-/16-/32-bitowy dostęp do rejestru DR lub jakieś nieistniejące w tym układzie FIFO są po prostu błędne. Jeśli bez optymalizacji ruszyło, to powód jest dokładnie taki jak w słynnym przypadku timerów - to co kasuje flagę (zapis do DR) jest zbyt blisko...
Wzorowy temat - są wszystkie istotne informacje, m.in. to o jaki układ chodzi! Niby wszystko działa, ale zawsze na starcie, zaraz po uruchomieniu Timera występuje przerwanie od przepełnienia. Tak jakby jakaś flaga byla ustawiona. To nie jest przerwanie od przepełnienia, tylko od "update event". Jeśli przed uruchomieniem timera wywołasz owy "update event"...
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,...
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...
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]...
tryb CTC zerowany licznik jest po porównaniu z jakim rejestrem?? COMPA !! może i jestem laikiem, ale licznik w trybie CTC zerowany jest po zrownaniu z wartoscią zapisaną w rejestrze OCR. OCRA będąc dokładnym nie dowolnym OCR TCNT jaka ma wartość początkową? 0 TCNT używany jest do normalnej pracy licznika TCNT używane jest zawsze nie wiem skąd pomysł,...
Mam prośbę do tych znających lepiej BASCOMA, o przeanalizowanie tego kodu. Program po pewnym czasie wysypuje się. Temperatura co jakiś czas waruje. Podprogramy działają, ale całość nie chce współpracować. Z góry przepraszam za jakość kodu. [syntax=vb]'--------------------KONFIGUR... $regfile = "m16def.dat"...
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...
Koniecznie zadbaj o to, żeby wychodząc z tego przerwania jego flaga była wyzerowana, a wtedy to o czym kolega _marek_ mówi nie będzie miało miejsca. --- Podczas puszczania przycisku są zdecydowanie mniejsze drgania styków niż podczas jego przyciskania i o to mi chodziło. Poza tym reagujesz wciąż na zbocze opadające a tylko czekasz z powrotem na narastające,...
mała podpowiedź było troche błędów w Twoim programie i przeczytaj co dopisałem wyżej odnośnie pull up [syntax=basic4gl]'----------------------... '--------------------KONFIGURACJA-------... $regfile = "m8def.dat" 'informuje kompilator o procesorze $crystal = 8000000...
Ale nadal pozostaje pytanie: Dlaczego flaga INTF1 jest ustawiona, skoro po resecie powinna być 0? Skoro pull-up wewnętrzny nie daje właściwego rezultatu, a rezystor 1k tak, to czy nie masz czasem jakichś zakłóceń na płytce - zasilanie itp. prawidłowe?
a co jest nie tak z pętlą while(1) bo nie mogę się dopatrzeć To, że jest pusta. Stan zmiennej flaga sprawdzasz tylko raz na początku programu, po czym zapętlasz go w pustej pętli. Poza tym sprawdzanie if(flaga=1) jest błędem, zapewne miało być if(flaga==1) - przeczytaj ostrzeżenia kompilatora generowane w czasie kompilacji.
(at)niveasoft To nie ten przypadek. Wyjaśnienie tej zagadki jest raczej proste - flaga przerwania jest kasowana, ale zwieranie mechaniczne powoduje bouncing, więc zgłaszanych jest więcej niż jedno przerwanie. Samo wyłączenie przerwania nie wpływa na odpowiednią flagę, więc przy kolejnym drganiu jest ona ustawiana, ale przerwanie nie jest obsługiwane...
Początkujący to widać. Wielokrotnie na tym forum powtarzana jest złota rada: obsługa przerwania musi być jak na krótsza, czyt. nie w ilości linii kodu a w czasie. Dlatego często ustawiana jest flaga w przerwaniu a dopiero w pętli głównej wykonywane jest to co należy. System przerwań jest zależny od architektury procesora można je dowolnie włączać i...
Nie działa Ci, bo nie przeczytałeś dokumentacji... http://obrazki.elektroda.net/0_118799421... Flagi przerwań czyści się przez wpisanie do nich logicznej jedynki. Trochę może paradoksalnie to wygląda, ale ma swoje logiczne uzasadnienie. Chodzi o to, że czyszcząc flagi w ten sposób da się to zrobić o wiele szybciej i co najważniejsze - bezpieczniej....
Debouncing w przerwaniu - tylko nie mów, że robisz to przez aktywne oczekiwanie wewnątrz przerwania. Jeśli tak, to zauważ, że to, że skasowałeś flagę przerwania i jesteś w przerwaniu wcale nie oznacza, że flaga nie może zostać ustawiona ponownie. Możliwy jest taki scenariusz: wciskasz przycisk, pojawia się zbocze opadające które ustawia flagę a więc...
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)...
Tak prosto to niezrobisz. W standardowej 51 nie można zamaskować rzeczywistego żródła przerwania do SIO. Jeżeli decydujesz się na przerwania to musisz obsłużyć wszystkie. W twoim przykładzie będziesz ciągle zajmował procesor tą pustą obsługą przerwania od nadawania bo nie skasowałeś jej przyczyny. Synchronizację nadawania musisz wtedy zrealizować na...
Jeżeli Twoja funkcja transmisji wygląda podobnie jak ta: ... niektóre przerwania przestają się wykonywać. A konkretnie są tracone, jeżeli były zgłoszone wielokrotnie w czasie, gdy nie zostały obsłużone. Tak na wszelki wypadek: http://mikrokontrolery.blogspot.com/2011... Rozwiąż to także flagami, a wtedy okaże się czy to było...
Ale skoro i sposób flagowy Ci się nie podoba to jaki jest lepszy? PRZERWANIE { if (cośtam) ustaw_flage_Y } MAIN { while { FUNKCJAx //wysyła znaki przez uart. if (flaga_Y_ustawiona && !flaga.UART_wolny) { FUNKCJAx; reset_flagi_Y;flaga.UART_wolny = 1; } } }
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"...
No to chyba tak, jak kombinowałem ( tylko może źle to opisałem ). Wybrałem grupę interruptów PCINT, a potem wybrałem dwa interesujące mnie PCINT'y. I w następnej linii kodu ustawiłem flagę "I" komendą sei(). Czyli spełniłem trzy warunki GIMSK = (1<<PCIE); (albo GIMSK = 0b00100000;) -> Włączyłem przerwania PCINTx PCMSK = 0b00011000 ; (albo...
To co napisałem to wiem po co od razu taka uszczypliwość , timery wykorzystuje do sterowania pinem CSN i CE chyba że powiesz mi jak to lepiej zrobić to zamieniam się w słuch, ok same flagi może trochę zaciemniają obraz bo brak do nich komentarzy, po krótce wygląda to tak. -gdzieś w programie wywołuje sobie softwerowo przerwanie od pinu IRQ -w przerwaniu...
Jak zmusić diodę alarmu do migania nie używająć procedur waitms ? Mam teraz zrobine tak: Używasz Timer0 jako pewnego rodzaju 'swoisty' prescaler: (4 ms; 100 ms; i 1 sec). Dlaczego okazyjnie nie wykrzystać tych 100 ms na miganie diodą? Wstaw tą wyżej procedure (troche zmodyfikowana - zamiast "set Porta.5" daj "toggle") w przerwaniu timera0 w miejscu...
A mógłby mi Kolega podpowiedzieć odnośnie odtwarzania plików, jeden po drugim ? Zrobiłem to tak: [syntax=vbnet] Godziny = 20 Minuty = 34 Do If Powiedz_czas = 1 Then If Powiedz_godzina = 1 Then Godziny_plik = Lookup(godziny , Godziny_mow) '************ odtwarzanie pierwszego pliku w pierwszym folderze Tf16p_data(4) = &H0F ' CMD Tf16p_data(6) = &H02 '...
Zmienne globalne powinny być modyfikowane tylko w kilku koniecznych obszarach wewnątrz programu. Gdyż, jeśli odbywa się to w oparciu o wiele wątków (tj. poprzez główny proces, ISR i inne funkcje sprzętowe, takie jak DMA w mikrokontrolerze), istnieje ryzyko uszkodzenia zmiennej w pamięci. To ryzyko zawsze istnieje, jeśli niepoprawnie odwołujemy się...
Witam Piszę procedurę wysyłającą na daną końcówkę portu 1ms impulsy w zadanych odcinkach czasu. Według wyliczeń kalkulatora dla AVR wychodzi iż przy 4HMz kwarcu, preskalerze ustawiony na 64 i początkowej wartości licznika 193 zegar generuje przerwanie w granicach 1ms. I tak mam ustawioną konfigurację: Config Timer2 = Timer , Prescale = 64 Load Timer2...
Witam, Pracuje nad kodem programu do komunikacji przez UART (mikrokontroler <-> komputer) i zastanawiam się nad sposobem implementacji w przerwaniach. Na razie zrobiłem to w taki sposób: - Nadawanie danych wykonuje w taki sposób, że w programie głównym zmieniam w wskaźniku adres początku tablicy którą aktualnie przesyłam przez UART, w przerwaniu...
Nie prościej by było zamiast używać pól bitowych przejść na "tryb szestnastkowy"? [syntax=c] #define FLAGA1 0x01 #define FLAGA2 0x02 unsigned char flaga; flaga |= FLAGA1; //ustawienie flagi 1 flaga |= FLAGA2; //ustawienie flagi 2 flaga &= (~FLAGA1); //usunięcie flagi 1 flaga &= (~FLAGA2); //usunięcie flagi 2 [/syntax] Z tego co pamiętam prowadzący od...
A co znaczy "zerwanie"? Transmisja szeregowa co do zasady nie ma początku ani końca. To strumień znaków. Niektóre peryferia mają możliwość aktywowania wykrywania przerw między znakami (Break). Długość przerwy można zdefiniować. Nie wiem czy RP2040 to ma. Ale jeśli ma to nie jest to raczej flaga FE czyli jak przypuszczam Frame Error. To jest flaga wskazująca...
w trybie ISR_NOBLOCK może dojść do przepełnienia stosu jeśli przerwania będą się pojawiać zanim bieżące nie zostanie obsłużone. W takich sytuacjach warto sobie wstawić jakiś licznik zliczający zagłębienie wywołań. Tak by było, gdyby przerwanie pochodziło od poziomu niskiego a nie od zbocza albo przerwanie odbiorce USART. Gdy jest przerwanie od zbocza,...
Czyli rozumiem że najlepszą praktyką jest ustawianie w flagi w procedurze przerwania a resztę wykonywać w main? W Twoim przypadku na pewno. I tak robić dla każdego rodzaju przerwania? Nie, tylko tam gdzie masz kod, który wykonuje się sporo czasu. Co znaczy "sporo czasu"? A to już zależy, od przypadku :) Innymi słowy chodzi o to, by nie utracić tych...
Właczasz/ wyłączasz flagi zezwolenia na obsługę przerwań. A nie kasujesz flag przerwań- tych w rejestrze GIFR. One tam zostają- i jak tylko ponownie zezwolisz na obsługę przerwania- to się wykona, no bo flaga przerwania jest ustawiona. Czym innym jest flaga przerwania a czym innym flaga zezwolenia na obsługę przerwania. Co zresztą pozwala na obsługę...
timera powinien ustawiać flagi (np stan=port_z_czujnikami) i koniec przerwania (żadnego wyłączania przerwań i innych śmieci). Drugi timer odlicza sekundy (czy tam inne dt dla kolejnych diod), led_port(i)=schody(i) (środkowe 6 bitów, więc trzeba przesunąć i maskować); + flaga wejścia Generalnie ta idea jest bezsensowna. Zauważ że absolutnie zupełnie...
Strona 117, notka numer 2. flagę w rejestrze PIR czyści się przed włączeniem przerwań i po obsłudze przerwania związanego z tą flagą. Nie kolego. Ta notka mówi że należy się upewnić, że flaga jest wyczyszczona przed włączeniem przerwań i po obsłużeniu przerwania. Nie mówi NIC o tym kiedy czyścić. Albert
a po co na końcu dawac komende #asm("cli")? Czy kompilator nie zrobi tego natychmiast sei ? Kompilator nie dodaje SEI. Flaga I w SREG jest automatycznie - sprzętowo, a nie programowo - czyli procesor sam ją ustawia w momencie wyjścia z procedury obsługi przerwania. Jednak obsługa przerwania nie kończy się w momencie zakończenia wykonywania kodu napisanego...
Jest coś nie tak z UART_BUFOR. W przedstawionym fragmencie brak definicji tego tworu więc nie wiadomo dlaczego. Poza tym typowy błąd AVRowca - nieskasowana flaga przerwania. Powtórzę to co przedmówca: poradnik szczywronka wyłuszcza to prosto i zrozumiale. Nazwy wektorów przerwań biorę z Reference Manuala albo z plików startowych np. vectors_stm32f10x.c...
Witam W obsłudze przerwania nie powinno być żadnych waitms itp poleceń które blokują program, Wykorzystaj timer i flagi do odliczania konkretnych odcinków czasu a wszystko inne powinno leżeć w do loop. W przerwaniu nie ma po co wyłaczać timera, tylko trzeba zrobić dzielnik tak aby flaga była ustawiana co 4ms lub 3ms tak jak chciałeś mieć. Potem trzeba...
Dzień dobry, Znalazłem kod źródłowy sterownika pieca C.O. w internecie i chciałbym zrozumieć ideę działania TIMERA0 w Bascomie na podstawie poniższego kodu. Czy ktoś z Was może mi wytłumaczyć jak to liczyć? Jak dopasowywać obliczenia do innych rezonatorów kwarcowych. Czytam helpa i nadal nie mogę tego pojąć. Proszę o wyrozumiałość. Na początek zapytam...
no wykonuje ci się wszystko bardzo wolno - ponieważ w procedury obsługi przerwań pakujesz sobie czaso-żerne procedury w tym te najgorsze czyli opóźniające. popatrz ile np u mnie zajmuje kod przerwania od zegarka PCF // przerwanie INT1 generowane jest przez PCF8583 co 1 sekundę // ustawiana jest flaga od której zależy wyświetlanie // czasu, daty, temperatury...
Jedynie nie wiem jak obsłużyć odczytywanie danych. Do tego chyba ten bufor nie jest potrzebny, tylko jak to uwzględnić w przerwaniu? Sprawa z odczytem jest nieco bardziej skomplikowana, ale to też idzie rozwiązać. Niestety nie przedstawię na forum ani gotowego kodu, ani szczegółowego algorytmu. Mogę podpowiedzieć tyle. Przykładowo, jeśli chcesz odczytać...
Ja klawiaturkę taką 4x4 zrobiłem odrobinę inaczej, tj. http://obrazki.elektroda.net/65_11882088... a program obsługi działa na zasadzie wykrycia naciśnięcia jakiegoś klawisza a następnie na tej podstawie sprawdzenia który to klawisz został wciśnięty: void sprawdz(volatile int x) //sprawdza ktory przycisk zostal nacisniety { volatile int wsk=0;...
" za niski poziom paliwa do uruchomienia nagrzewnicy " My też nie wiemy skąd wziąłeś taki numer w INS a tym bardziej ten opis. :) Podaj ten nieszczęsny VIN, albo prawdziwy identyfikator modułu z błędem. I jaką nagrzewnicę chcesz uruchamiać, świecę czy ogrzewanie kabiny? FLA - 0302 Zawór elektromagnetyczny ma przerwę. ZHE - 0302 Napięcie dolne
Możesz zrobić to tak: Zmienne które wykorzystywane są w przerwaniach mają "duchy" czyli np zmienna znak wykorzystujesz w programie, natomiast zmienna znak_duch w przerwaniu. Teraz jeżeli odebrany zostanie znak zapisujesz go do zmiennej znak_duch i sygnalizujesz flagą (jakas dodatkowa zmienna) że zmienna ma nową zawartość. Teraz w głównej pętli, na jej...
Trochę wróżycie z fusów. Nigdzie nie wyczytałem, że jest to przerwanie od UART tylko przerwanie w którym wysyłamy przez UART chyba 2 bajty. Tylko autor postu tak naprawę wie "o co chodzi" w tym programie. Jeśli utrata przerwania nie zakłóci działania programu można je wyłączyć. Jeśli nie, potrzebna będzie flaga "dane gotowe" i obsługa w przerwania przypadku...
A kto powiedział że musisz go wyłączać? Istnieje lepszy sposób: robisz sobie flagę którą resetujesz w pzrerwaniu od timera. Potem wystarczy dodać coś takiego: Set Flaga : While Flaga = 1 : Wend Takie coś wstawiasz tam gdzie wcześniej musialeś wyłączać przerwania. Działa to tak że uc czeka aż wykona się przerwanie i dzięki temu wiemy że miało...
2. Takie ogólne pytanie gdzie w kodzie należy umieszczać obsługę przycisków, pomiar czasu, pomiar temperatury, obliczenia (przerwania czy w pętli while(1) ) czy może jeszcze gdzieś indziej ? Z jednej strony w wielu postach jest napisane aby w przerwaniach było jak najmniej instrukcji z drugiej strony gdzieś to wszystko trzeba przetworzyć. W przerwaniu...
Jeśli chcesz aby w trakcie jednego przerwania zostało obsłużone drugie, ważniejsze, dopisz w przerwaniu SEI. Wchodząc do przerwania flaga I jest zerowana i są wyłączane przerwania, rozkaz RETI ponownie ustawia flagę I.
Tylko nie wywołuj w przerwaniach tak długich bloków instrukcji - lepiej ustaw flagę, która wskaże pętli głównej programu wykonać te instrukcje. Ale co tu możemy mówić, jak widać tylko wycinek programu. Zgadza się, dlatego wklejam nieco więcej Flaga_wybor jest co 10 sekund, Blokada zatrzymuje odczytywanie czujników na czas odbioru DCF77, zwłaszcza DS18B20...
Jeśli zajrzysz do definicji funkcji NVIC_SetPriority((), zobaczysz, że dla SysTick nie rusza ona wcale NVIC. Racja, wpisuje do innych rejestrów. Ale Manual pisze że SysTick też wchodzi o NVIC. Jeszcze kolejna sprawa. Skoro Aby mogło wystąpić przerwanie należy zarówno ustawić i to co generuje przerwanie np Timer jak i NVIC. Ale co np ze znacznikiem...
Wypadałoby poczekać z obliczaniem, aż to przerwanie na pewno wystąpi. cos jak: while (flaga == 0); dodane w main pomiędzy uruchom_timer1(); a czas = oblicz_czas(); Chyba bardziej dokładny wynik otrzymasz, gdy obliczenia od razu uruchomisz w przerwaniu od INT0, a zmienna flaga będzie sygnalizować, że wynik już jest.
Pisząc program chciałem wstawić swoje znaki za pomocą polecenia Deflcdchar, ale pojawił się problem . Na wyświetlaczu lcd zamiast zdwfiniowanych znaków pojawiają się krzaczki , próbowałem na różnych prockach attiny2313, atmega8 i atmega32 wszędzie to samo. Wszystko oprócz tego wyświetla się normalnie, ponadto zauważyłem że mój bascom generuje źle kody...
Jeśli zmienna ta będzie jednobajtowa, to problemów z atomowością generalnie nie będzie, pod warunkiem że nie używasz RMW (_co20ms++) poza przerwaniem. W przypadku zmiennej dwubajtowej, wszystko zależy od rdzenia: jeśli jest on w stanie odczytać dwa bajty za pomocą jednej instrukcji (np.arm: ldrh), to problemu też nie będzie. W przypadku procesorów 8-bitowych...
Najpierw spróbuj może dodać: ...ale jak ustawię ręcznie bit UDRE w UCSRA który oznacza że bufor jest pusty, także nic się nie wysyła. To nie jest argument. Flag przerwań w AVR generalnie nie da się ustawiać programowo, niektóre można tylko wyzerować. Akurat UDRE można wyzerować tylko poprzez wpisanie bajtu danych do rejestru UDR, flaga ustawiana jest...
Poza tym jeśli się wie co się pisze to debuger jest zbędny. Czasami lepiej wykorzystać UART DBGU i wysyłać sobie interesujące nas zmienne na terminal. Co to za podejscie ? Debugger to NIEZBEDNE narzedzie przy profesjonalnych produktach i nie raz uratowal mi tylek przy poprawkach bledow w nieswoim kodzie. Spotkalem sie z tym ze rozne debuggery roznie...
Mozemy pomoc w pisaniu, ale z helpem Bascoma powienienes dac rade, obslyga lcd ->gotwa funkcja -klawisze dasz rade, zmieniasz jedynie zmienne - odmierzanie czasu sporbuj na timer1 co np sekunde bedzie zwiekszal Ci zmienna Czas, w petli gl musisz kontrolowac by wartosc nie przekroczyla zakresu - prostym if'em sprawdzasz wartosc tej zmiennej Czas z czasem...
A nazywaj sobie jak to chcesz... pętla zdarzeń czy jakies cos innego. Dla mnie to jest normalny main w którym ma sie wykonywać kod programu. Przerwanie służy mi sygnalizowania ze jakis czas juz upłynął i pętla main moze sobie na to jakos reagować i cos robić. Ewentualnie w przerwaniu jakies niewielkie kawałki kodu. Nie. Nie ma sensu robić pętli zdarzeń,...
flaga bascom flaga funkcja obsługa flaga
wymiana glikolu pralka bosch instrukcja obsługi reset poziomu tuszu
radzio modbus dobór dławików kompensacyjnych
Sharp E-Scooter KS2 – jak odblokować prędkość powyżej 25 km/h? KSL-2102AAM Sony – gdzie kupić mechanizm, zamienniki, dostępność Allegro, eBay, North.pl