Nie wiem jak to dokładnie wygląda w GE ale w Siemensie są różne OB - jeden z nich jest odpowiedzialny za przerwania cykliczne (cyclic interrupts) - podejrzewam, że w GE jest coś podobnego - wystarczy ustawić odpowiedni czas wywołania przerwania
Ale mieszasz. Ustawiłeś dwa cykliczne przerwania i dziwisz się, że coś nierówno miga. Tu w avr nie ma wielowątkowości sprzętowej i jedno przerwanie przeszkadza drugiemu. Przenieś i wyłącz to przerwanie to co masz w ISR(TIMER2...) do ISR(TIMER1...) . Idea programowego PWM i timerów jest właśnie w tym aby działało wszystko pod jednym wspólnym cyklicznym...
Wstaw do przerwania cyklicznego i sprawdź działanie. Kolega Wojciech dobrze zauważył błąd. Z tego co widzę to na stronie 213 [https://cache.industry.siemens.com/dl/f... jest opisane, że do wejścia callOB musi wprowadzić nazwę tego przerwania cyklicznego chyba, że sam numer?
Witam Blok OB35 jest blokiem przerwań cyklicznych. Oznacza to, że zawsze co określony np. 100 ms (definiuje się go w parametrach CPU) system operacyjny CPU będzie przerywał wykonywanie bloku OB1 i jednorazowo wykonywał blok OB35 a następnie kontynuował wykonywanie OB1. Jeżeli w cyklu w którym nastąpi wywołanie przerwania OB35 stan wyjścia Q125.7 wynosi...
PID to raczej nie do tego przedziału. Może zrobić przerwanie cykliczne i tam sprawdzać ile obrotów brakuje do pozycji.
w każdym komputerze była jakaś forma timera, np. przerwania cykliczne od chipsetu Nie, nie w każdym, np. Apple II nie miał w ogóle TIMERÓW może z wyjątkiem 4 specyficznych, które służyły jedynie do obsługi joysticka . Co ciekawe system też nie korzystał w ogóle z przerwań, co dawało ogromne możliwości użytkownikom w rozbudowie komputera. Z racji tego,...
Z poolingiem to ty tego dobrze nigdy nie zrobisz :( konieczne wydaje się użycie przerwań i buforów cyklicznych. Chyba że coś źle zrozumiałem. Więc jak możesz pisać że wykorzystujesz pooling i program ci się nigdzie nie zatrzymuje - to niestety jest sprzeczne zdanie.
Nie włączyłeś globalnie przerwań. Poza tym brakuje pętli głównej w kodzie.
Niestety ale stosowanie funkcji do wyświetlania na LCD w przerwaniach nawet w celach diagnostycznych może nie być poprawnym podejściem do tematu przerwań ;) Jaki jest powód, że chcesz zastosować bufor cykliczny? [url=http://www.sadistic.pl/pics/2_baed7...
OB 100 jest wywoływany tylko raz, w przypadku startu PLC do przerwań cyklicznych jest OB35 10ms z pewnością jest możliwe,
skonfigurować timer aby wygenerował przerwanie po X czasu.
W takim razie: 1. Weź dowolnego procka ze sprzętowym USB. Dla Ciebie chyba każda Xmega poza serią E będzie ok. Nie piszę o ARM czy PIC, ponieważ napisałeś na wstępie AVR. 2. Odpal sobie demo HID z ASF w AS6. 3. Skonfiguruj dowolny licznik do generowania cyklicznych przerwań, np. co 10ms, (albo skorzystaj z przerwania USB_SOF co 1ms), a w przerwaniu...
Nie musisz wywoływać ponownie, ponieważ w pętli sprawdzasz ten sam bufor pamięci, który jest wypełniany podczas przerwania. Ważne jest, aby bufor zadeklarowany był z modyfikatorem volatile, np. volatile uint8_t bufor[50];
Bufor cykliczny trzeba zorganizować na RS232 oraz wysyłanie na przerwaniach i po kłopocie.
OB1 jest to blok organizacyjny w nim możemy umieścić swój program jak również możemy z niego wywoływać na różne sposoby inne bloki programu. A OB35 jest blokiem przerwania cyklicznego wywoływanego nie koniecznie co 100 ms, częstość wywołań bloku możemy zmieniać od teoretycznie 1ms do "nawet nie bardzo wiem do jakiej wartości".:D
A ile czasu może trwać obsługa którego przerwania? Jeśli czas obsługi przerwania do synchronizacji fazy może być porównywalny z okresem timera, to może ono powodować gubienie przerwań timera. A może da się użyć jakiegoś timera 16-bitowego do wykrywania gubienia przerwań timera? Poza tym, mam nadzieję, że timer działa samodzielnie jakimś w trybie cyklicznym,...
Jeśli robisz zgodnie z tą dokumentacją to zobacz że prędkość transmisji dla portu rs485 wynosi 9600 oraz parzystość ustaw na 2 bo to jest częsty błąd http://obrazki.elektroda.net/19_12877466... natomiast funkcje PID wywołujemy w przerwaniach cyklicznych OB200
Nie stały tylko minimalny czas cyklu a to nie to samo. Znaczy tyle że jeżeli czas cyklu obiegu głównej pętli jest krótszy niż zadany to jest wprowadzane sztuczne opóźnienie do minimalnego czasu. Można to na upartego nazwać stałym czasem, jeżeli wiemy, że pętla główna zawsze wykonuje się szybciej od tego czasu. Jest jeszcze maksymalny czas obiegu głównej...
Na swoim GitHub umieściłem nową wersję, w której dodałem obsługę Z80ACTC i cykliczne wyzwalanie przerwania z zewnątrz w kanale 0 (pozytywka to robi, jak jest podłączona). Ponadto, poprawiłem działanie dźwięku, teraz nie powinno być przypadków, że podczas pracy emulatora dźwięk nagle milknie.
https://www.elektroda.pl/rtvforum/viewto... Panowie, w powyższym linku zadałem pytanie odnośnie https://obrazki.elektroda.pl/5849803200_... komunikacji Modbus TCP/IP. Bit M230.0 jest zmieniany co 25ms w przerwaniu cyklicznym, czyli co 50ms powinna być odbierana ramka danych z jedna zmienną, ale tak się nie...
Witam Pytanie z jaką dokładnością chcesz mierzyć ten czas? Jeżeli to nie musi być bardzo dokładny pomiar to poniżej jedno z możliwych rozwiązań: W S7-1200 dostępne są bloki przerwań cyklicznych (Cyclic interrupt), gdzie możesz ustawić co jaki czas taki blok ma być wykonany np. 100ms. - Wstawiasz taki blok OB (numer OB200 lub większy) i ustawiasz co...
Nie no w ten w ten sposób obsługa przerwania wywoływanego co 16ms twa 12ms z czego 11.99 to czekanie na nie wiadomo na co i dopiero powrót do pętli głównej. 80% pracy procesora to czekanie. Poz tym multipleks tak zrealizowany nie będzie równy, ponieważ w przerwie między przerwaniami nic się nie pali. W żadnym razie delaye w obsługach przerwań !!! Zamiast...
Witam, Ile jeszcze razy trzeba będzie napisać, że przycisków NIE obsługuje się przy użyciu przerwań generowanych przez zmianę stanu wejścia? Temat powraca co kilka dni. Rozwiązanie, które Autor próbuje wdrożyć, po usunięciu błędów związanych z programowaniem timera i tak nie będzie działać, więc po co te starania o poprawne zaprogramowanie niedziałającego...
Koledze chyba chodziło po prostu o to jak to zrobić w programie? Aczkolwiek nie podał nawet jakiego softu używa. Zasymulowanie takiego czujnika to raczej banalna rzecz- wymyślasz sobie granice temperatury i inkrementujesz, dekrementujesz ją, ale żeby miało to miało jakąś rozsądny czas zmiany to używasz timera lub przerwań cyklicznych- to jest najprostsze...
Teraz to odbiór na przerwaniach i bufory cykliczne - to załatwi wszystko.
Nie przerwiesz pętli for, while, do while jeśli nie będziesz w każdym obiegu pętli sprawdzał stanu, który ma to przerwać. Ta część: if (irrecv.decode(&results)){ long int decCode = results.value; się nie wykona w żadnej takiej pętli. Musiałbyś obsługę tego przenieść w przerwanie, czyli cyklicznie co np. 10ms sprawdzać stan (irrecv.decode(&results),...
Przepraszam autoa za wtrącenie. Musiał być blok przerwań cyklicznych aby zliczyć impulsy po 500Hz? Zwykły licznik tego nie obsłuży? Mamy wg noty: 0.2 ms, 0.4 ms, 0.8 ms, 1.6 ms, 3.2 ms, 6.4 ms and 12.8 ms, selectable in groups of four Czyli dla wejść cyfrowych możemy ustawić różne opóźnienia zliczania impulsów. 0.2ms to 5000 Hz więc raczej spokojnie...
Mikrokontroler mega.2560. Arduino Mega, czy sam "czysty" mikrokontroler, bez środowiska Arduino? Pierwszym projektem jaki się robi podczas nauki na mikrokontroler jest miganie diodą. Drugim projektem jest włączanie diody przyciskiem. Stan przycisku możesz sprawdzać poprzez przerwanie zewnętrzne (tylko na niektórych portach), cykliczne sprawdzanie w...
-blokowanie przerwania następuje tylko w momencie kiedy pętla while czeka na zwolnienie bufora, czy się myle? Przerwań nie blokuje się w żaden sposób, żadnym while-m. co do bufora cyklinego to jego zasada działania z tego co czytałem polega na tym, że dane zmieniają swoją pozycje, w związku z tym nie będę mógł później wykorzystać w programie konkretnej,...
Niestety nie mam debuggera, ale w przerwaniu odbywa się cykliczne generowanie sygnału PWM, który widzę że ciągle pracuje. Więc to chyb nie reset procka?
Spróbowałbym zmniejszyć/wyłączyć filtrowanie wejścia, odczyt wejścia i sterowanie wyjścia (w miejscu wywołania, czyli z dopiskiem : P) w OB z czasem np. 0.5ms. - masz na myśli blok z przerwaniem cyklicznym 0.5ms? Wstawiłem OB30, ale w atrybucie mogę ustawić minimalnie wartość 1 ... i sterowanie wyjścia (w miejscu wywołania, czyli z dopiskiem : P) Czyli...
Klawiszy (poza wyjątkowymi sytuacjami typu wybudzanie uC) nie robi się na przerwaniach INT. Delaye w przerwaniu to nieporozumienie. Twoje przerwanie realizuje się tylko po wciśnięciu przycisku, więc trudno by było, aby zwróciło informację o jego zwolnieniu. Zrób przerwanie zegarowe co 25-50ms i cyklicznie sprawdzaj stan klawiatury. Opanujesz w ten sposób...
Od kiedy pamiętam czyli od ZX Spektrum czy C64 to nie pętla determinowała pracę procesora a system przerwań cyklicznie wywołujący procedury systemowe.
Moim zdaniem konfiguracja DMA jest trochę niepełna, a ponadto brakuje obsługi przerwania od DMA. Przynajmniej w jednym miejscu wpisz jawnie wartość do rejestru sterującego (CR = ...). Na razie wszędzie masz |= lub &=. Zakładając, że pierwszy transfer poleci i przerzucisz 19200 słów, to później DMA się zatrzyma i nic więcej nie prześle. I jak to ma coś...
3. Napisałem obsługę I2C na przerwaniach samodzielnie Nie napisałeś obsługi I2C na przerwaniach tylko masz polling I2C w przerwaniu timera. To jest klasyczny przykład na to jak czegoś nie należy robić. Obsługa I2C w przerwaniach polega na obsłudze przerwań przychodzących z tego waśnie peryferium. i zastanów się jak połaczyć przerwania I2C z przerwaniem...
Witam, 1. Jeśli chodzi o wykonywanie FB41 to znalazłem dwie różne odpowiedzi: [url=http://www.automation.siemens.com/W... Wskazują na dane z s7-400 i są z zakresu od 0.06ms do 0.8ms na...
Pewnie że mamy ;). Użyj przerwań. Najprościej jest zrobić całość 'głównej' części pracy na przerwaniach w następujący sposób: a) Pomiary na timerze 0, wywoływane cyklicznie b) Obsługa przycisków na przerwaniu int0, wystarczy że podepniesz odpowiednio przyciski do pinu int0 i AtMega automagicznie wywoła przerwanie gdy tylko wykryta zostanie zmiana stanu...
1. Z jakiegoś powodu wczytując dane ze sterownika ( zmieniając je) i zapisując ponownie nie są one zapisywane na sterowniku. Zapewne masz na myśli konfgurację sterownika ? Mam tutaj na myśli np zbocze przerwania. Domyślnie ustawione jest na narastające, po zmianie na opadające nie ma reakcji. Potwierdzone to jest także kiedy ponownie wczytam dane....
https://obrazki.elektroda.pl/8619880500_... Oto przykłady ditheringu w starym stylu , z kilku dostępnych kolorów można stworzyć dodatkowe odcienie ( jak w #1313) , ale ta metoda ma jedną wadę , tracimy na faktycznej rozdzielczości i ostrości . W przypadku cyklicznego podmieniania kolorów na przerwaniach , wykorzystujemy więcej pamięci...
A jaki masz kwarc? Robi się to na tajmerze, w obsłudze przerwania (wywoływane cykliczne co zadany czas np. co 10ms) robisz licznik programowy, który Ci odlicza te 2 sek. Ale z tego co widzę to chyba nie za duzo wiesz o uC? Do czego to ma służyć?
Używanie przerwania od zmiany stanu do obsługi przycisku jest ze względu na drgania styków niezbyt praktyczne. Na każde jedno wciśnięcie i puszczenie przycisku będziesz miał wiele zgłoszonych przerwań. Moim zdaniem, lepiej czytać stan przycisku w cyklicznym przerwaniu zegarowym, np. co 0.05-0,1s.
Dziękuje Panowie za pomoc. Jednak odechciało mi się z tym męczyć, zrobiłem to na przerwaniach wraz z buforem cyklicznym - wszystko pięknie działa. Zamykam. Dar.El
Mógłbym jeszcze prosić o podpowiedź odnośnie wykrycia ciągu znaków, pojawiającego się na uarcie? :) Tak, zastosuj bufor cykliczny do odbioru, a później w przerwaniu badaj wystąpienie albo ilość wystąpień znaku 0x0d czyli (ENTER) .... wtedy będziesz wiedział ile przyleciało stringów do bufora i kiedy można je w całości ładnie odczytać.
należy "podpiąć się" pod przerwanie 1ch. Przerwanie to jest generowane 18.2 razy na sekunde. #include <dos.h> #include <conio.h> #define cint 0x1C typedef void interrupt(*intproc)(void)... // typ wsk na proc. przerwania void interrupt far zegar(void){ // nasza nowa obsluga przerwania // instrukce które mają być...
Czyli Twój pseudokod to jest taka jakby kolejka FIFO? No niezupełnie. To co przedstawiłem buffer_is_empty() zwracająca prawdę lub fałsz) należy sobie dopisać. Sprawa jest dosyć prosta np. w przypadku USART. Wystarczy dodać bajt do bufora, później - jeśli bufor nie jest pusty - pobrać bajt i wysłać. W przypadku I2C sprawa jest o tyle skomplikowana,...
zliczanie impulsów z dwóch enkoderów Jeżeli to są enkodery inkrementalne z sygnałem A, B i ew. Home, zrezygnuj z megi64/128. Xmegi mają wsparcie sprzętowe do obróbki sygnału z takich enkoderów przez użycie liczników w połączeniu z eventami. Na STM32Fxxx zrobisz to łatwiej i być może szybciej korzystając z gotowców. generowanie dwóch przebiegów PWM...
Nie ma z tym dużo roboty, praktycznie wszystko robi program, mi zdarzyły się problemy z blokiem danych z DB1 , chodziło o czasy przerwań cyklicznych. Osobiście najprościej jest to zrobić dzwoniąc do SIEMENSA w Warszawie i powiedzieć jaki ma się problem i że jeśli pomogą to kupisz od nich cały system na S7. Wiem z doświadczenia że staną na głowie i poprowadzą...
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ę...
Na filmie na początku gość właśnie skaluje wartości wejściowe i setpoint na odpowiednie zakresy 0-100 (funkcjami norm i scale). Nie jest to konieczne jeśli w odpowiedni sposób użyje się wejść 'PER', ale oczywiście poprawne (pomijajac fakt że osoba na filmie w sposób obrzydliwy pisze kod nie nazywając odpowiednio zmiennych). Ważne jest też, aby bloki...
Witam :) Wlasnie rozgryzam tego arma, popelnilem taki kod opierajac sie na zrodlach z netu: ... T0MCR = 0x03; /* Reset TC on match */ ... Przerwanie sie wywoluje tylko raz, dioda gasnie i juz wiecej sie nie zapala. Kombinowalem z roznymi ustawieniami i nic ;/ Pytanie dlaczego ;) No przecież każesz mu (timerowi znaczy się) wywołać przerwanie i zresetować,...
Chciałbym tylko nieśmiało zauważyć, że ten programowy arbiter plus obsługa DMA - to więcej kodu niż obsługa transmisji na przerwaniach z buforem cyklicznym bez DMA. ;)
Nic złego w tym nie ma, poza tym że mógłbyś użyć do tego przerwania i jednego timera dającego logiczne 1 na te 0.2s :P
Witam Jeśli chcę wykorzystać Modbus RTU (lub TCP) do odpytywania jakiś urządzeń z częstotliwością powiedzmy co 2sekundy, to czy poprawne jest używanie do tego cyklicznego przerwania? Mam namyśli umieszczanie w ob30 bloczka modbus master?
Nie wyświetlać, nie liczyć CRC i nie nadawać ciągu bajtów przez UART w obsłudze przerwania Rx UART. Tzn, CRC ew. można liczyć, ale po każdym bajcie. Wyświetlać nie można wcale, a nadawać można jeśli użyjesz przerwania Tx i bufora cyklicznego na dane, a w przerwaniu Rx będziesz je tylko wstawiał do bufora,
masz totalnie pochrzanioną obsługę przerwania pomijam już ze jest zbyt obszerny ale wpisanie tam transmisji rs232 to już piramidalna pomyłka i to powoduje że nigdy tobie to nie zadziała. Poza tym kompletnie nie widzę powodu aby wyprowadzać sygnał na przerwanie INT0 moze tylko po to aby łatwiej mozna było sprawdzać przytrzymanie klawisza ale innego powodu...
Czy i który timer wykorzystuje 1wire. Chce wyorzystać jeden timer do cyklicznych przerwań, ale jak wykorzystam timer 0 lub timer 1 wysiada transmisja 1wire. Timer2 wykorzystuje zegar czasu rzeczywistego wewnetrzny. ATmega32. Pozdrawiam ! PL
Witam, Najlepiej będzie tak zrobić. W programie MatLab musisz przygotować sobie trzy transmitancję. Dla układu I, II oraz III rzędu. Następnie za pomocą funkcji c2d dokonać dyskretyzacji równań. Czas dyskretyzacji powiedzmy na 1s. lub 500ms. Czas najlepiej dobrać taki aby odpowiadał czasowi wywoływania bloku OB w PLC (blok OB od cyklicznego przerwania)....
Czy można odrobinę jaśniej?:) Dodano po 1 Po to właśnie przypisuje TACCR0+=x by program wchodził w przerwanie cyklicznie.
... mam pieknie dzialajacy kod, wykorzystujacy 2 przerwania i obslugujący cykliczny bufor we i wy. Dzięki temu trzeba się tylko zajmować wpisywaniem do bufora przy nadawaniu i ew odczytywaniem przy odbiorze. Dzięki przerwaniom uC wogóle nie jest obciążony operacjami na UART ;) .... ale niestety tylko w asemblerze ;)
Robiłem coś takiego w bloku OB35 - przerwanie cykliczne, jednak ja nie potrzebowałem tak dużej częstotliwości. Blok można wywołać z interwałem 1ms, i za każdym razem po wywołaniu negować wartość jakiegoś bitu. Jednak wszystko co z tego wyciśniesz to 500Hz. Pozdrawiam
Panie Dasej co do Pańskiego układu to wtedy to ma być przerwanie od ADC czy wtedy zostawić tak jak mam i od przerwania INT0? Ta propozycja nie jest zła, ale ma pewną wadę. Napięcie za mostkiem będzie się zmieniać od 0V do napięcia szczytowego podanego na mostek. W efekcie na pinie będą generowane cyklicznie przerwania, z częstotliwością 100 Hz. W efekcie...
Jeśli chodzi o oszczędność czasu, to najlepiej wykorzystać przerwania. Dane wrzucamy z pełną prędkością do bufora cyklicznego (FIFO), a procedura obsługi przerwania SPI pobiera sobie z niego kolejne bajty do SPDR. Podobnie jak w poprzednim przypadku pierwszy bajt musimy wysłać "z wolnej ręki" badając ewentualnie flagę gotowości.
Zastosowałbym czujnik z wyjściem NC (jeżeli jest zasilony i nie ma detekcji/braku) to masz sygnał na wejściu PLC; (dodatkowo/również wiemy że jest ciągłość przewodów zasilania i sygnału); Zasilając czujnik z wyjścia PLC można cyklicznie powodować chwilowe przerwanie zasilania czujnika co powinno skutkować zmianą sygnału wejściowego (tu trzeba dobrać...
Mam problem z aktywacją przewań czasowych a konkretnie blokami OB35 i OB32. pierwszy to przerwanie cykliczne 1ooms drugi 1 sek. Jeżeli symuluję program to nie ma żadnych problemów a jak próbuję załadować program do sterownika to ładuję cały program z wyjątkiem bloku OB32 i pojawia się błąd że nie może skopiować tego bloku bo klasa piorytetu przerwania...
Witam, mogę podjąć się zlecenia, niedawno napisałem podobny soft w pracy na LPC1766 do sterowania silnikiem, z napisaniem softu na AT91SAM7S nie powinienem mieć problemów. Jeśli jest pan zainteresowany proszę o: -dokładna specyfikacje projektu (prototypy funkcji-parametry, jakie mam użyć przerwania) -schemat docelowego układu (piny, peryferia, częstotliwość...
Udało mi się to teraz zrobić tak jak koledzy doradzają. Mam jeszcze pytanie jak sie będzie zachowywał uP w przypadku gdy będę chciał użyć bufora cyklicznego podczas przerwania wywoływanego np zboczem narastającym. Wydaję mi się że przerwanie od USARTA kłóci się z przerwaniem od zbocza narastającego, ponieważ nie chce działać poprawnie.
Ad. 1 Zrób to w wątku, teraz nie chodzą message przez co żadna akcja (kliknięcie czy coś innego) nie dojdzie. Spróbuj ewentualnie wywoływać ProcessMessages z Application w tej pętli (ale to rozwiązanie nigdy mi się nie podobało :wink: ). Na wątku po prostu robisz Terminate a w wątki sprawdzasz czy Terminated. W przypadku używania ProcessMessages możesz...
Ile i jakie karty masz w slotach PCI? Może któraś karta PCI ma to samo IRQ np. co karta graficzna. Proponuję wyłączyć w menedżerze urządzeń wszystkie karty oprócz graficznej (takie jak Dźwiękowa, LAN, WLAN, TV, DVB itp) i sprawdzać czy system nadal się zawiesza. Następnie włączać po kolei kolejne karty i znowu sprawdzić. Najlepiej po włączeniu karty...
Myślę, że pierwsze podejście jest jak najbardziej poprawne. Chodzi o to by po pierwszym przerwaniu wystąpił jakiś czas nieczułości na kolejne przerwanie zewnętrzne. Może on być nawet znacznie dłuższy- nie sądzę by ktoś chciał klikać przycisk do wyświetlania kilka razy na sekundę. Wybudzanie mikrokontrolera cyklicznie co 400ms z pewnością nie poprawi...
To wszystko nie tak. Obsługuj ADC w funkcji obsługi przerwania od ADC. Przed wejściem do pętli głównej skonfiguruj ADC, włącz zezwolenie na przerwanie i wystartuj pierwszy pomiar, ew. startuj pomiar cyklicznie (z timera), ale nic poza tym. Skoro przerwanie jest włączone i wchodzisz w jego obsługę, to znaczy że na 100% konwersja się zakończyła i masz...
Zobacz jak dziala twoj program - po pierwszym impulsie z pilota jest on wyswietlany, a nastepnie poniewaz ciagle sa odblokowane przerwania cyklicznie jest wywolywane TIMER1_COMPA_vect - i tu juz nie ma znaczenia czy wciskasz pilota czy nie. Poza tym powinienes blokowac przerwania tego timera i je odblokowywac w przeznaczonym do tego rejestrze, a nie...
Przepraszam za opóźnienie w odpowiedzi. po pierwsze nie można liczyć na to, że wstrzelisz się dokładnie w wartości od timera.. W ostatnim z wklejonych przeze mnie programów okres sygnału na wejściu licznika to 4us. Okres sygnału taktującego CPU to 62.5 ns a wykonanie każdej instrukcji zajmuje od 1 do 6 cykli tego sygnału. Dlatego w pierwszych 800 przebiegach...
Bascom 51 przy instrukcjach input,inputbin itd. nie korzysta z przerwań lecz cyklicznie odczytuje rejestr SBUF .Dlatego bardzo rzadko to działa.Jeśli chcesz mieć pewny odbiór to korzystaj z przerwań. A-r.
Jak dla mnie to powinno być tak. Nie mam kompilatora pod rękom nie jestem pewien czy jest dobrze ale to mniej więcej to. Kod: $regfile = "m8def.dat" $crystal = 1000000 Config Portd = Input ' ustawiam we/wy Dim A As byte 'po co marnować pamięć A = 0 Config Timer0 = Timer , Prescale = 1024 Enable Timer0 Enable Interrupts Do If Pind.4 =...
To, kiedy jest generowane przerwanie i jakie, nie zależy od tego, jakie napiszesz procedury obsługi przerwań, a od tego, jakie przerwania włączysz w odpowiednim rejestrze. Do każdego włączonego przerwania musisz napisać procedurę jego obsługi. Jeśli włączasz TOIE - musisz mieć procedurę timerX_ovf_vect, jeśli włączasz OCIE1A - musisz mieć TIMER1_COMPA_vect....
Zmień obsługę enkodera na taką cykliczną w zwykłych przerwaniach, a nie zewnętrznych. Jak poszukasz to znajdziesz moja bibliotekę w sieci, do której żadne kondensatory Ci nie będą potrzebne, nic nie będzie migało, a i kroków gubił nie będzie ;-)
Nieprawda, nie musi resetować procesor, może wyłącznie wywoływać przerwanie... A co napisałem? Przypomnę Jeśli jednak watchdog ma możliwość generowania przerwania, to problemu nie ma trzeba w przerwaniu od watchdoga zresetować go i program będzie kontynuowany. No właśnie źle napisałeś. WG ma specjalny tryb - interrupt mode, w którym generuje tylko...
Jeśli w OB1 użyję MB20 i wpiszę do niej liczbę 20. A przerwanie co 1ms zwiększa liczbę o 5. To w MB20 będę miał 25? Tak. Po pierwszym przerwaniu. Chodzi o to, że odczytując MB20 dwukrotnie w kodzie OB1 możesz otrzymać dwie różne wartości. To samo w sobie nie jest nic złego, ale łatwo popełnić błąd w programie zapominając o tym fakcie. if MB20 <...
Witam. Posiadam mikrokontroler STM32F429. Jest on wyposażony w liczniki z funkcją PWM i układy DMA. Chciałbym opracować program, który płynnie zwiększa wartość wypełnienia sygnału PWM, po czym ponownie zmniejsza, wg. schematu: krok 1) 0% ----płynne zwiększanie----> 100% krok 2) 100% ------ płynne zmniejszanie -------> 0% Cały cykl powinien się powtarzać:...
poszukaj dobrze to jeszcze znajdziesz delay-a który nie ma komentarza :) Bufor to tablica umieszczona w pamięci RAM. w zależności jak sobie to wymyslisz to będzie to kod znaku albo gotowy obraz segmentów który ma zostac wysłany do portu. W przerwaniu cyklicznie powiększasz indeks od 0-3 a dalej przepisujesz zawartość bofora na pozycji indeksu do portu...
Mr_T_ -> ja z kolei zrobiłem z powodzeniem na ATtiny2313 obsługę RS232 a nawet RS485 i to w pełni z użyciem przerwań i buforem cyklicznym dla nadawania i odbioru - dzięki czemu wysyłanie czy odbieranie już z poziomu własnej aplikacji sprowadzało się tylko do wpisania czegoś do bufora lub odczytu stamtąd po sygnalizacji odpowiednim przerwaniem. Wszystko...
Proponuję zrezygnować z obsługi klawiszy poprzez INTX, gdyż jest przeznaczone dla stabilnych i krytycznych czasowo sygnałów, a przyciśnięcie przycisku to ruletka impulsów, zwłaszcza, gdy już jest sporo czasu używany. Klawisze najlepiej sprawdzać cyklicznie, np. w procedurze obsługi przerwania, przypisując mu jakiś jednobajtowy kod i tworząc ogólny dekrementowany...
Ten pierwszy link przeglądałem i z tego co zrozumiałem to "wrzut" obrazu na wyświetlacz jest realizowana po naciśnięciu przycisku. Można emulować przycisk przez cykliczne przerwanie lub osobny wątek, powstanie coś w rodzaju automatu.
Twoje przerwanie odbywa się co około 4ms..... a ty w tym przerwaniu ładujesz WAITMS 4 i to aż cztery razy !!!! co daje ci łącznie 16ms. Tak więc zaczyna się przerwanie - trwa jak kolega wyżej napisał KOSMICZNIE DŁUGO, ale ok potem się kończy, i niestety od razu procek wykonuje następne przerwanie i tak wokółko ;) ..... widzisz co się dzieje???? procek...
Czy ktoś ma jakiś pomysł?? Tak ja mam pomysł - zrobić transmisję UART tak jak się należy czyli z wykorzystaniem buforów cyklicznych zamiast analizą wszystkiego w przerwaniu - co owocuje tylko samymi problemami jak widzisz. Czytałeś kiedyś gdzieś o buforach cyklicznych do obsługi UART'a. Przerwanie tylko napełnia te bufory, a z poziomu programu pięknie...
Doceniam ideę mostka USB<->I2C ale argumentacja mnie totalnie zabiła. "UART stwarza problemy".. chyba gdy nie umie się zarządzać przerwaniami, bo poprawnie działające systemy z UARTami chodzącymi dobrze powyżej 115.2 kbps są dosyć często spotykane, miniaturowe FIFO w UART jest potrzebne tylko do wyjęcia bajtu w przerwaniu i przeładowaniu do bufora...
Twój kod niewiele mówi. Podajesz za mało danych. Nie wiadomo np.: Czy byte to zmienna globalna (można się tego ewentualnie domyślić) i czy jest zadeklarowana jako volatile (to trudno przewidzieć)? Czy warunek if (odebr_zn=='1') sprawdzasz w przerwaniu, czy w pętli głównej? Czemu ma służyć deklaracja unsigned char i=0; ? Co to za funkcje (makra?) RS485_INIT();...
W ogóle zabierasz się za to źle - przerwania od przełączników to zły pomysł - poczytaj o drganiach styków i zobacz ile przerwań może wygenerować jedno przełączenie. Stan przycisków sprawdzaj cyklicznie w przerwaniu timera (są biblioteki Timer...).
Jeszcze pytanie o przerwanie uartu. Jest ono generowane jak bajt bedzie w buforze. Czy odbiór następnych 2 bajtów mogę zrobić w tymże przerwaniu? (stąd muszę zrobić pętlę opóźniającą ). te 3 bajty potem są jednością i je odkodowuje, więc musze zawsze miec ich 3. Robak Ja mam dokładnie tak: Licznik 8 bitówy odmierza czasy 2,5ms (nie może odmierzać 20ms...
Witam Program przedstawiony ma za zadanie cykliczną zmianę portu p1.7. Cała zbawa odbywa się w przerwaniu. Mikrokontroler wchodzi do przerwania w momęcie ustawienia flagi TF0 (dla timera0). Flaga zostaje ustawiona automatycznie w momęcie kiedy licznik timera0 doliczy do 0 (licznik liczy w górę dlatego masz działanie 256-180). W przerwaniu następuje...
Przykładowy szkielet programu: [syntax=c]while(1) { znak = uart_receive(); // pobranie znaku z bufora odczytu UART if(znak) { }// procedura jeśli odebrano znak switch(stan_swiatla) { // automat zmiany świateł case 1: red=0; yellow=0; greek=0; if(czujnik) stan_swiatla=2; break; case 2: // zmiany świateł w kolejnych stanach } _delay_ms(200); // cykliczne...
Czy nadużywanie przerwań sprzętowych może prowadzić do nieprawidłowego działania programu? W jaki sposób się zabezpieczyć przed jednoczesnym dostępem do zasobów sprzętowych lub programowym z wielu przerwań? Tak, nadużywanie przerwań sprzętowych również może prowadzić do nieprawidłowego działania programu, szczególnie jeśli programista nie uwzględnia...
Biorąc pod uwagę twój przykład kodu na "pierdzenie" jak sam powiedziałeś, widać, że ty najpierw musisz zacząć od takich podstaw jak: 1. obsługa timerów sprzętowych 2. obsługa UART na przerwaniach 3. obsługa buforów cyklicznych (FIFO) i jeszcze kilka innych - a dopiero potem myśleć o tym celu. Tak mi z tego wynika.
Otóż nie może być w przerwaniu bo wtedy kolidowało by to z innymi przerwaniami, które się cyklicznie powtarzają. Problem jest taki, że czas obsługi tych przerwań jest różny, a więc czas poświęcony na odbiór danych też jest różny. Mogę jedynie próbować oszacować jaki przedział czasu jest przeznaczony na odbiór.
Starannie wykonana konstrukcja, bardzo dobry opis i świetna tabela z wyszczególnieniem kosztu elementów. Praktycznie cały program wykonywany jest w cyklicznym przerwaniu zegarowym. Co do samego programu, to podstawowa zasada jest taka by przerwanie trwało jak najkrócej. W przerwaniu powinieneś tylko zapisywać wynik pomiaru i przetwarzać go w pętli głównej,...
Trudno osobie która wykorzystuje same gotowe funkcje tłumaczyć od podstaw timery. Bo innego sensownego sposobu zamiany "delay();" w tym momencie nie widzę. Jeśl nikoś14 chciałby się zaznajomić z tym zagadnieniem: http://diycenter.acid19.linuxpl.com/read... http://maxembedded.com/2011/07/14/avr-ti... Przy kolejnym wciśnięciu...
Ten pierwszy steruje wyświetlaczem VFD szeregowo, gdzie nie mogą być opóźnienia, dodatkowo odczytuje stany 8 pinów Dlatego tym bardziej powinieneś wykorzystać timer do generowania przerwań cyklicznie i deterministycznie. Jak znam życie, to cały taki program można zamknąć <1% czasu pracy rdzenia, a Ty już chcesz brać kolejny uC. Weź do ręki ds'a...
A może problem z wyzwalaniem przerwania zboczem/poziomem? Tak się czasami dzieje, jak sygnał trwa zbyt długo i przerwanie wykonuje się cyklicznie (poziomem). Albo zboczem i w trakcie obsługi przerwania pojawia się kolejny impuls wyzwalający. W zależności od specyfiki programu (czy jest on ważny, czy nie) trzeba go kasować przed RETI. Pozdrawiam
Proponuję w pierwszej kolejność sprawdzić okablowanie, oraz sam dozownik. FMI 13 to przerwanie okablowania / lub jego (ewentualnie dozownika) zwarcie do masy. Osobiście spotkałem się z usterką gdzie występowała różnie i cyklicznie, przewody były ok dozownik ok - przyczyną była elektronika w module pompy.
Przecież to nie działa. W przerwaniu timera wpychasz kolejno do UDR kilka danych nie sprawdzając, czy można to zrobić. Jeśli chcesz nadawać w przerwaniu timera, to musisz mieć przerwanie UART i (zapewne) bufor cykliczny.
cykliczne załączanie cykliczne włączanie nagrywanie cykliczne
skrzynka bezpieczników laguna ustawić temperatura klimatyzacja pilot mrugać
autobus bezpiecznik analizator widma
Schemat instalacji i bezpieczniki dźwigu ADK 125-3 Błąd F13 i "TÜR FREI" w pralce Bauknecht WAT Plus 512di