No i właśnie o to pytam czy świeci start , jeśli nie to zacznij od sprawdzenia wyłącznika
Tak to raczej diody nie zaświecisz: #define LED_ON PORTB&=LED_PIN Zapomniałeś o jednym znaczku... ;) Zapewne też podłączyłeś diodę pomiędzy wyjście i masę, więc instrukcja, ktra iała ją gasić, obecnie ją zapala, a ta, która miała zapalać, nie robi nic.
Dokumentacja mówi WYRAŹNIE: najpierw należy ładować wartość do TCNT1H (który zostaje zapisany do rejestru TEMP), a dopiero potem do TCNT1L, co pociąga za sobą wpisanie do TCNT1 aktualnej części jako dół i wartości TEMP jako góra (przy odczycie najpierw należy odczytać dół, potem górę). Ciągu skutków powodujących takie zachowanie a inne nie chce mi się...
Kwarc 16MHz pewnie ma dokładność rzędu 50ppm. Czy to dużo czy mało to sam musisz zdecydować. Da się znaleźć specjalne rezonatory o mniejszej tolerancji. 20 albo 10ppm. Opóźnienie w przerwaniu nie ma znaczenia jak obsługa przerwania będzie dobrze napisana. Po protu powstanie wtedy przesunięcie fazy. Ale to przesuniecie będzie stałe. Dodatkowo w mojej...
Zamiast robić tam opóźnienie można policzyć ile taktów zajmie uartowi wysłanie ostatniej ramki i robić sobie inne potrzebne operacje ,które zajmują czas a po odpowiedniej ich liczbie zmienić stan porty i tyle . Asembler daje wiele możliwości wykorzystania czegoś co się nazywa opóźnieniem . A jak masz wolny licznik to można na nim zrealizować opóźnienie...
Wystarczy jedno wejście I NTx , które będzie wykrywało ten impuls. Ale jeśli to będzie impuls "z ręki" jakiś klawisz to bez sensu - ze względu na drgania styków a potrzebny minimalny czas np 1ms. Jeśli to będzie impuls z jakiegoś wyjścia cyfrowego to ok. Założenia: - wykorzystamy tylko jedno wejście INTx - wykorzystamy tylko jeden Timer sprzętowy Przygotować...
Informacja o czasie cyklu w diagnostyce jest bardzo zgrubna. W przerwaniu można ustawiać wyjście bezpośrednio (używając odpowiedniego obszaru wyjść -> PQ a nie Q) nie czekając na zakończenie cyklu (czyli zniknie opóźnienie związana z przetwarzaniem). Tyle tylko, że wtedy trzeba by zmodyfikować Twój program tak, żeby każde przełączenie wyjścia było wykonywane...
Nie potrzebujesz kolejnego licznika. Już masz jeden skonfigurowany do pracy cyklicznej i to w zasadzie już Ci mniej więcej wystarczy. Masz w tym momencie przerwanie co 1/18750sekundy czyli co jakieś 53,33(3)us. Jeśli chcesz zrobić opóźnienie w pętli głównej o na przykład 500ms to wystarczy, że poczekasz 500000/53,333=9375 takich przerwań. W tym celu...
A w ogóle spróbowałeś tak zrobić, jak napisałem? Czy z góry założyłeś, że nie mam racji? zauważ, że blokada INT0 wystąpi w przerwaniu tylko wtedy, gdy odczytany zostanie kod inny niż 0xFF No właśnie o tym piszę. Jeśli przycisk był wciśnięty w momencie wykonywania instrukcji GIMSK |= (1<<INT0); i przytrzymany dłużej niż opóźnienie 50ms w procedurze...
Po 1) użyj znaczników [code]... Po 2) funkcje inline _delay_us i _delay_ms muszą być wywoływane z argumentami o wartości znanej w trakcie kompilacji (stałe) - było o tym wielokrotnie na forum. [url=http://www.nongnu.org/avr-libc/user... Po 3) co do inline asm to zobacz [url=http://www.nongnu.org/avr-libc/user...
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...
Jeśli termometr będzie w przerwaniu np co 1 sec, to możesz usunąć : " Waitms 750 'przeczekaj czas konwersji" To opóźnienie będzie tylko spowalniało powrót do pętli głównej. Konwersja i tak się dokona bo przecież program będzie tam skakał co sekunda. Różnica jest tylko taka, że przy pierwszym włączeniu zasilania do układu termometr pokaże 85 stopni....
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...
Przede wszystkim musisz zacząć kolego od poznania timerów. Do odmierzenia czasu używamy timerów ponieważ zlicza nam czas w tle działania procesora. Używając polecenia wait zatrzymujesz kompletnie uC na ten czas. Konfiguracja dla AtMega8 8Mhz u mnie wygląda tak: Config Timer1 = Timer , Prescale = 256 ''''konfiguracja timera On Timer1 1s ''''przy przerwaniu...
Po wykryciu przejścia przez zero załączasz triak a po upływie pewnego czasu go wyłączasz. Tak to nigdy nie zadziała stabilnie. Steruj w następujący sposób: - wykryj przejście przez zero - rozpocznij odliczanie opóźnienia - po upływie tego czasu wystaw stan wysoki (wystarczy krótki impuls) - przy kolejnym przejściu przez zero triak wyłączy się samoczynnie...
Jeśli procesora nie wprowadzasz w tryb uśpienia, to zmiana poboru prądu przez procesor jest porównywalna jak by cały czas wpisywał te dane, jak i co jakiś czas.. jak chcesz, to możesz wykorzystać timer do odmierzania jakiś odcinków czasu np 200ms (w przerwaniu ustawiać jedną flagę, nic więcej) a w pętli głównej jeśli ta flaga jest ustawiona, to aktualizacja...
Podpiąłem się oscyloskopem pod linię UARTU - mikrokontroler <-> modem i na TX (z punktu widzenia mikrokontrolera) mam w ramce dokładnie AT+\n\r czyli poprawnie wysłaną komendę AT, natomiast na lini RX mam w ramce "OK". Czyli mikrokontroler wysyłA poprawnie ale nie "odbija" w dalszym ciągu tego "OK" na uart6. HAL_GPIO_TogglePin jet wywoływana...
Chciałbym przedstawić jeden z możliwych sposobów wykonania cyfrowego regulatora PID Przestawiony regulator nie ma konkretnego zastosowania , to do czego zostanie wykorzystany zależy od czytelnika. Opis regulatora kieruję do osób które zaczynają przygodę z automatyką i układami regulacji. Spróbowałem wyjaśnić jak działa cyfrowy regulator PID, czemu ich...
A change of the COM1x1:0 bits state will have effect at the first compare match after the bits are written. For non-PWM modes, the action can be forced to have immediate effect by using the FOC1x strobe bits. Być może w tym jest problem. OC1A jest prawdopodobnie inicjowane z wartością 0 do momentu wystąpienia pierwszego "compare match". W trybach "set...
:D Ale nadal mnie nurtuje dlaczego przy takim programie i włączonym wewnętrznym pull-up generuje Ci się przerwanie, pomimo stanu wysokiego na wejściu INT1. Co tam masz podłączone?
IRQ tester https://obrazki.elektroda.pl/3243423400_... IRQ Tester to proste narzędzie, głównie do testowania czasu odpowiedzi na impulsy, lub czasów międzyzboczowych dostarczonego sygnału. Program został napsiany na ukontroler AVR Atmega168, a jego głównym zadaniem jest funkcja multiwibratora monostabilnego, którego działanie polega...
http://obrazki.elektroda.pl/9589280700_1... HPS 2014 Hybrydowy laboratoryjny zasilacz sieciowy. Parametry użytkowe zasilacza w skrócie: 1. Wykorzystanie tanich i łatwo dostępnych elementów. 2. Wydajność prądowa min 3A (dla niskich napięć może dochodzić do 5A). 3. Rozdzielczość DAC 12bit. (filtrowany PWM 4.9kHz) 4. Rozdzielczość ADC...
To moja propozycja pomoże. Jest tylko kwestia drgań styków oraz zakłóceń. Przycisk powinien być sprawdzany w przerwaniu timera co np 50ms. W obecnej wersji możesz dodać niewielkie opóźnienie po wyłączeniu zgrzewarki i buzzera a sprawdzeniem pinu.
W Zmienne globalne — wiedz, kiedy są modyfikowane Zmienne globalne muszą być ostrożnie obsługiwane, gdy są używane z przerwaniami, ponieważ te są generalnie asynchroniczne. I jeżeli zmienna globalna jest modyfikowana przez ISR, może zostać zmieniona w dowolnym momencie. Musimy mieć na uwadze następujące aspekty: Odczyt/zapis zmiennych globalnych...
(...) żdy zasilany z osobnego źródła i odseparowany transoptorami PC817. Ze względu na ich szybkość oraz niską wartość prądów je sterujących 1mA zegar musi być obniżony do 10KHz ma. Chcę zrezygnować z polecenia: waitus 100 w zamian zrealizować to w obsłudze timer0 a w główną pętle przeznaczyć na inne cele. Rozumiem, że chcesz optymalizować swoje oprogramowanie...
https://obrazki.elektroda.pl/5132775900_... Chociaż na zdjęciu widać mini płytkę z PIC18F1220, to posłuży ona jedynie do praktycznego zaprezentowania obsługi wątków które zaimplementowałem. Obecne możliwości kodu który chce zaprezentować, to działanie równoległe 2 lub trzech wątków, w tym głównej funkcji main która jest pierwszym wątkiem....
https://obrazki.elektroda.pl/4497186100_... Moduły transceiverów RF pracujące w pasmie 433 MHz są od dawna bardzo popularne wśród hobbystów. Te tanie moduły radiowe mimo krótkiego zasięgu mają wiele zalet. Mogą być używane z prawie wszystkimi mikrokontrolerami do szerokiego zakresu zastosowań, które wymagają bezprzewodowego sterowania...
Dziękuję. Rejestr już jest odczytywany przed zapisem. Każde przerwanie w slave zapisuje coś do SPDR, więc jeśli slave ZDĄŻY obsłużyć przerwanie i wpisać to zawsze jeden bajt jest wpisany. Przed transmisją przy inicjacji nic nie wpisuję do spdr, pierwszy wpis jest w przerwaniu. Wygląda na to, że oba wyrabiają się z wpisywaniem danych do rejestrów bo...
Moim zdaniem zamiast tych skomplikowanych wygibasów lepiej jest po prostu zrealizować takt 1 ms (ewentualnie, ze względu na lepszą rozdzielczość 1000 µs), można sobie twórczo zmodyfikować przykład pod tytułem "blink without delay". Jeżeli czas pomiędzy odczytami ma być odmierzany bardzo dokładnie można wyzwalanie odczytu zrealizować w przerwaniu...
https://obrazki.elektroda.pl/6692889600_... Od jakiegoś czasu czułem potrzebę sterowania komputerem za pomocą niestandardowej klawiatury. W wielu przypadkach, takich, jak emulatory starych komputerów i sterowanie urządzeniami za pomocą klawiatury, można przypisać funkcję programu do klawisza na klawiaturze. Na przykład komputer ZX...
A nie łaska obejrzeć co za kod wygenerował kompilator? Poza tym jak to robisz, że najpierw wyzwalasz przerwanie, a później zapisujesz mark[0]? Dzięki temu w przerwaniu mark[0] == 0. Poza tym pomiędzy uruchomieniem timera1 i wyzwoleniem przerwania robisz dodatkowe, niepotrzebne rzeczy. Na dodatek do pomiaru wystarczy Ci timer0... Pozdrawiam, Dr.Vee
Witam, problem polega na tym że urządzenie "wysypuje" sie w momencie generowania przerwań na INT0 Zasada działąnia jest tak że po zliczeniu odpowiedniej ilosci impulsów z into 0 załączany jest przekaźnik i zwiekszany jest stan licznika. Przekaźnik wyłaczany jest w przerwaniu TIMER_INT (po określonym czasie). Stan licznika można tez zmieniac za pomocą...
Opóźnienie dałem aby sprawdzić czy jest przerwanie. Finalnie ma po przerwaniu zapalić się.
Toż to najgorsza możliwa rzecz - opóźnienie w przerwaniu! To zbrodnia dla programu! Jak się to robi profesjonalnie? Np. tak: W każdym przerwaniu sprawdzam stan przycisku, jeśli jest wciśnięty to liczę liczbę przerwań podczas których jest wciśnięty, jeśli jest puszczony to tę liczbę zeruję. Jeśli liczba przekroczy zadaną ilość (~czas drgań) to wykonuję...
Co do tego przerwania timera. Ustawilem przerwanie co 30ms. W przerwaniu sprawdzam stan pinu i pytanie co jeszcze należy dodać do przerwania by funkcjonowało poprawnie? Jakieś małe opóźnienie i kolejny raz sprawdzenie stanu po czym uznawać że przycisk wcisniety realizować co potrzebuje ?
Kiepsko znam angielski ale z tego co widzę to wydaje mi się ze rejestry TIMSK i TCCR0 odpowiedzialne sa za ustawienia licznika a ja nie używam licznika. Opóźnienie w przerwaniu służy likwidacji drgania styków gdy go nie ma to przerwanie wywołuje sie w momencie wciskania przycisku i w momencie jego puszczania. volatile - pomogło i jest teraz ok dzieki...
Witaj Mariojas Też kiedyś miałem podobny problem ze zliczaniem impulsów. Impulsy pochodziły od czujnika optycznego na podczerwień. Problem rozwiązałem wstawiając w przerwaniu małe opóźnienie. W moim przypadku silnik obracał się wolno więc opóźnienie wynosiło 3 ms.
Po usunięciu pętli w podprogramach obsługi klawiszy przygasanie zmniejszyło się o około 90%. Obecnie widzę, że na czas obsługi nacisnięcia wyświetlacz ledwie przygasa. Spróbuję stworzyć obsługę w przerwaniu. Czy mogę w przerwaniu wpakować instrukcję debounce? Wiem, że domyslnie wprowadza 25ms opóźnienia, by wyeliminować drgania styków klawiatury. Wydaje...
Witam wszystkich, mam następujące pytanie: czy podczas wykonywania procedury przerwania (ATmega8A-PU, przerwanie INT0) procesor pozostaje kompletnie "głuchy" na inne przerwania tego samego typu? Czy może gdzieś zapamiętuje kolejne próby wywołania do późniejszego wykonania? Wywołuję przerwanie stanem niskim z komparatora analogowego, który to komparator...
... po coś chyba jest ten PIN int0, int1 To w jaki sposób wykorzystujesz przerwanie zależy tylko od Ciebie. Dlatego już pisałem, że możesz nawet dać opóźnienie programowe w funkcji przerwania, tak jak zrobiłeś, tylko musisz znać tego konsekwencje. Jeżeli więc konsekwencje akceptujesz, to tak działaj ... młotek można wykorzystać nie tylko do robienia...
Dobrze jest sprawdzać czas trwania okresu stanu niskiego/wysokiego (szybko można wykryć błędną transmisję), ale tak jak to zostało napisane czas trwania nie musi być dokładnie zgodny ze specyfikacją ja stosowałem tolerancje 1/4 trwania bitu. Tak samo odczytanie stanu bitu nie musi być dokładnie w 3/4 bitu może być chwile po synchronizacji, byle stan...
Fredie Chopin rozumiem tylko to potrzebuje do sterowania silnikiem,który jezeli dojdzie do położenia krańcowego włączy przełącznik który zmieni kierunek obrotów silnika i tym samym ten wyłącznik zostanie "puszczony". No ale obojętnie do czego potrzebujesz to wystąpi ci taki efekt jak opisał Freddie. Coś może nie do końca jeszcze rozumiesz jak programowo...
Straszny bałagan i ciężko się połapać o co idzie... Puść A/D w trybie free run wywal to opóźnienie z obsługi przerwania bo normalnie... Włącz przerwanie od A/D i w nim wartość z rejestrów ADC podstaw do zmienne odpowiadającej za wypełnienie... A w przerwaniu od timer_ovf podstawiaj do OCR1x... Acha no i najważniejsze... Po kiego grzyba grzebiesz w TCNT1...
Dziękuje. A w tym przerwaniu liczysz tylko impulsy i wystawiasz wyjście Q? Czy to co liczysz w przerwaniu po 1ms trafia do Ob1 i dalej jest przetwarzane? Ja się doczytałem, że standardowe wejścia mają ustawiane opóźnienie (przeciwko drganiu styków) – domyślnie 3,2ms -> 312Hz. Można zejść do 0.05ms -> 20 kHz. A można byłoby uruchamiać przerwanie...
Bo i wielkiej filozofi w tym nie ma, wystarczy zwykłe opóźnienie i zmiana stanu. Ambitni mogą to zrobić na timerze i w międzyczasie procek usypiać i budzić w przerwaniu ale mi się nie chciało :) bardziej walczyłem z samym AS7 aby chciał to skompilować a nie wysyłać mnie na drzewo że z attiny10 to tylko asembler.
Od strony sprzętowej masz tu dwa problemy: 1. Brak histerezy, niwelowany w pewnym stopniu przez opóźnienie czasowe w przerwaniu (pod warunkiem, że przyjmowanie kolejnych przerwań w tym czasie jest wyłączone). 2. Na moje oko, to detekcja zera następuje przy napięciu bliższym 200V niż 0V. Policzmy natężenie prądu płynącego przez R1 gdy następuje zmiana...
W obsłudze końca transmisji DMA, STROBE, wyłączyć OE. To raczej nie zadziała. DMA zgłasza przerwanie, ale SPI jeszcze wysyła dane z rejestru szeregowego, a w buforze siedzi jeszcze jeden bajt. Będziesz czekał na zakończenie transmisji w przerwaniu od DMA? Lepiej korzystać tylko i wyłącznie z przerwania timera. W obsłudze overflow przełączać OE: - wyłączasz...
puntigamer czytaj co się pisze, jedno przerwanie - jeden byte...tak, da się odbierasz ustawiając Sobie wew. flagi w przerwaniu np. jak są 3 byte parsujesz(czyli po 3 wywołaniach przerwania!) i ustawiasz flage ramka kompletna. wtedy glowny program cos robi
Dalej nie rozumiesz! Ciągłe sprawdzanie w przerwaniu jest po to aby mikrokontroler "miał czas" aby sprawdzić inne rzeczy ani przez 5 minut być zajęty tylko odliczaniem jakiegoś opóźnienia. DEBOUNCE wnosi opóźnienie 20ms - czyli dość dużo - i nie jest to najlepsza metoda na sprawdzanie przycisków, ale do tego dojdziesz jak trochę opanujesz Bascom, który...
Właśnie o to mi chodziło aby ktoś napisał jak mam dokładnie to zrealizować. W tym kodzie, który napisałem wyżej to w przerwaniu zrobiłem opóźnienie aby wyeliminować drganie styków. Długość opóźnienia dobierałem metodą prób i błędów. Wszystko działa i nie ma losowego wybierania 'programów'. Zmieniłem jeszcze aby po wciśnięciu przycisku program nie wykonywał...
rs232 przerwaniu enkoder przerwaniu przycisk przerwaniu
przewód gruba cienki prostownik tyrystorami pomiar temperatura termistor
Rozłączenie kostki reflektora w Peugeot - jak to zrobić? Wentylator w piekarniku Amica nie działa - przyczyny i diagnostyka