Nie masz za dużo w funkcji obsługi przerwania. Dużo Waitms i jeszcze obsługa LCD. Może przerwania tak szybko nadchodzą, że nie zdąża czasu na wyjście z niego. Funkcja przerwania powinna być krótka
Hehe... no to następny pomysł - a jak szybko obraca się pętla główna programu? Nie wiem jak masz skonstruowany program, czy w ogóle jest? Dużej precyzji czasów chyba nie potrzeba, nie ma różnicy, moim zdaniem, czy przytrzyma się przycisk 1s czy 1,1s, więc może ten pomysł wsadzić do pętli głównej i bez przerwań. Wtedy w zależności od szybkości pętli...
mam ustawione przerwanie zewnętrzne ustawione na wyzwalanie zboczem opadającym i narastającym w funkcji obsługi przewania zapisuję sobie do bufora: void EXTI0_IRQHandler(void) { //Check if EXTI_Line0 is asserted if(EXTI_GetITStatus(EXTI_Line0... != RESET) { Buffer[iWriteIdx] = 'I'; GoToNextElement(&iWriteIdx);...
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...
Obie sterowniki od sieciówki są. Jakie temperatury - screen z hwinfo najlepiej jak już bedą moćne ściny. SCreen z process explorera też jak bedą ściny. Po restarcie chodzi długo poprawnie czy szybko problem powraca? Bardziej niż jak się go odpali zimnego czyli po dłuższej przerwie w używaniu?
Spora szansa, że problemem są priorytety przerwań. We FreeRTOS (w sumie w większości RTOSów) przerwanie które używa funkcji systemu musi mieć priorytet niższy lub równy wartości którą sobie skonfigurowałeś jako progowa w pliku FreeRTOSConfig.h. Ponieważ zwykle w tym pliku jest to skonfigurowane tak głupio, że nie wiadomo nigdy o co chodzi, na szybko...
Generalnie to twój problem wynika w dużej mierze z tego, że wywołujesz funkcję z wewnątrz przerwania. To powoduje szczególnie w Bascomie - niestety KOSMICZNE obciążenie w postaci po pierwsze ogromnego i niepotrzebnego zużycia stosu przez co musisz właśnie zacząć się bawić z tymi wszystkimi HWSTACKAMI itp .... zobaczysz jaka bonanza z tym będzie przy...
Posiadanym miernikiem może kolega sprawdzić czy kondensator ma zwarcie - mierzy się omomierzem lub testerem zwarć/ciągłości. Tym samym testerem może kolega ocenić czy większe kondensatory mają jeszcze swoją pojemność, czy ją utraciły całkowicie. Ocena na słuch - czy piszczyk dostatecznie długo piszczy. Metoda bardzo nieprecyzyjna, bo trzeba mieć trochę...
A może masz gdzieś funkcję obsługi tego przerwania? Dodano po 4 Dodam, że korzystam z programowego bufora cyklicznego, który w przerwaniach odbiera dane od UDR. Jedyne co mi przychodzi na myśl to to, że przerwanie tak szybko się wykona (odebranie danych do bufora i skasowanie flagi RXC), że część programu: while ( !(UCSRA & (1<<RXC)) ); nawet...
No to zaczynamy po raz kolejny. Coś takiego jak stworzyłeś to niestety za szybko nie będzie działać. Mega z kwarcem rs 14 z groszami działa naprawdę szybko i można zrobić bardzo dużo w jedna sekundę. Do odbierania i wysyłania danych można sobie napisać własną procedurę - nawet w bascomie i jest ona sporo szybsza i działa rewelacyjnie. Deklarujemy przerwania...
trebuch1 Średnio to wytłumaczyłeś :] adrian_krc Skonfiguruj jeden z liczników tak, aby generował przerwanie ze stałym okresem, np. co 1ms. Jak będzie 0,5ms albo 3ms to też będzie działać. Licznik może pracować w trybie 0 lub 1 (wtedy będziesz musiał go przeładować/ORować w obsłudze przerwania. Może też pracować w trybie 2, ale to może być za szybko...
Przerwania w takich mikrokontrolerach to nie wątki niestety - całkowicie złe podejście. Ale kombinować warto ;) Ja zwykle wykorzystuję jakiś Timer do generowania tzw tyknięć systemowych co jakiś krótki czas np kilkanaście- kilkadziesiąt ms oraz oznaczania tylko kilku flag oznaczających upływ kilku stałych odcinków czasu np Flaga co 40ms, Flaga co 1s...
Przełączenie się na PRIGROUP modyfikuje zachowanie się kontrolera NVIC. Masz 16 przerwań czyli 4 bity konfiguracyjne, np. dzielisz to na 4 grupy czyli dwa bity będą tworzyć grupę, a dwa podgrupę. Są 4 grupy z 4 subpriorytetami. Teraz np. masz 4 UARTY i ich przerwaniom nadajesz priorytety z tej samej grupy ale z innymi subpriorytetami. Nadchodzi przerwanie...
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...
Dziękuje że nie daliście mi gotowca, przynajmniej się czegoś nauczyłem. No to gratuluję, ale niestety musisz się jeszcze nauczyć duuużo więcej, bo nadal jest źle. Multipleksowanie wyświetlacza miałeś zrealizować w procedurze obsługi przerwania a Ty zrobiłeś dokładnie odwrotnie, czyli przeniosłeś cały kod z funkcji main() do procedury obsługi przerwania,...
Czy jest ktoś w stanie wskazać w listingu ochronę SREG w obsłudze przerwania? Ja widzę "tylko" 32 rejestry robocze. :) "Czy jest ktoś w stanie wytłumaczyć" ;) ... taką serię zapisów do UDR :?: loop_s1_krancowka: ldi a, 1 // wyslanie sygnalu ze zadzialala krancowka out UDR, a // ldi a, 0x4B // out UDR, a // ldi a, 0x00 // out UDR, a // mov a, pom1...
Witam. Tak na szybko analizując kod: Dla Timer0 włączasz dwa przerwania od porównania: http://obrazki.elektroda.pl/6165324400_1...
No dobra, czas napisać, jak to zrobić prosto i efektywnie: Używamy jednego przerwania - timera, zgłaszanego kilkadziesiąt..kilkaset razy na sekundę (w typ przypadku, o ile nie ma multipleksowania LED, może być np. 100 Hz). żadna pętla główna nie jest do niczego potrzebna. W procedurze obsługi przerwania odczytujemy wynik ADC, "robimy filtr dolnoprzepustowy",...
Na nie możesz policzyć? Chyba że nie wiesz jak :D Masz 8MHz. A przerwanie przychodzi z częstotliwością 125Hz (dlatego trzeba 125 razy odliczyć aby wyszła 1 sekunda). Preskaler Timera 256. 8000000/256/125 = 250. I dlatego jest Load Timer0 = 250 Teraz chcesz kwarca 7372800. Więc musisz tak kombinować aby uzyskać jakąś sensowną liczbę przerwań i sensowny...
Wszystkie nagłówki w katalogu "linux" z tego co pamiętam są dostępne jedynie z poziomu kernela (user-space nie ma do nich dostępu). Druga sprawa to z tego co pamiętam nie da się przekazać procedury obsługi przerwania do kernela (w linuxie cała obsługa przerwań jest wykonywana w kontekście kernela), bo daje to możliwość wykonania potencjalnie niebezpiecznego...
Po pierwsze to po resecie mikrokontrolera piny są ustawione jako wejścia więc nawet nie trzeba tego robić Po drugie to kierunek ustala się za pomocą rejestru DDRx a nie PORTx (to nie Bascom) Po trzecie to musisz doczytać jeszcze o przesunięciach bitowych bo szybko na tym polegniesz w C. To podstawa. Po czwarte to klawisze (słicze) musisz mieć albo podciągnięte...
Czekam na sugestie z góry dziękuje za pomoc;) Robisz totalnie złe założenie niestety. Timer sprzętowy działa bardzo dobrze i precyzyjnie. Nie może on przepełniać się w trybie normal wcześniej niż po 256 tyknięciach zegara ;) ... zatem przez złe założenia - jeszcze wyciągasz złe wnioski i nie w tym miejscu co trzeba szukasz błędu. A błąd polega na tym,...
Ja tam zawsze się bardzo dziwię ludziom gdy w Bascomie robią jakieś własne dziwne obsługi przerwań typu Urxc (biorąc pod uwagę to co chcą osiągnąć). Zwykle potrzeby są proste ale wymyślanie po to własnego kodu w Bascomie jest wg mnie totalnym chodzeniem pod górkę i tworzeniem sobie dodakowych mega problemów ;) Toż Bascom ma na prawdę wspaniałą i dobrze...
Jutro jeszcze sprawdzę jak będzie działać Attiny 45. Może coś uda się osiągnąć. Zrobiłem trochę testów na attiny13 i po nich jestem bardzo sceptyczny co do użyteczności funkcji micros() w takim zastosowaniu jak metoda użyta w twoim szkicu. Mam obawy że na attiny45 problem może być ten sam, tylko nieco mniejszy, z powodu możliwości wyższego taktowania....
Jeśli timer nie ma sprzętowego buforowania to zdecydowanie lepszym pomysłem jest wykorzystanie do tego celu przerwania - tylko trzeba policzyć przy jakiej wartości CNT zostanie realnie wykonane przerwanie. Jeśli masz duży prescaler timera to nie ma problemu, jeśli timer taktowany jest taką częstotliwością jak CPU to pojawi się problem dla OCR bliskiego...
Tego nie próbowałem, ale zauważyłem, że ten if w przerwaniu się wogóle nie spełnia :( Po zgłoszeniu przerwania TAIV ma wartość 0x000a zatem jest równy tej stałej lecz rejestr TAIV zostaje dziwnym trafem szybko wyzerowany właśnie przez tą instrukcję: 0x815c: CMP.W #0x000a,&Timer_A3_TAIV 0x8162: JNE (C$L7) 0x8164: BIS.W #4,&Timer_A3_TACTL C$L7: 0x8168:...
Już widzę kogoś, kto opiera pętlę główną na delay() i próbuje odczytać przyciski do 3ms ;) ( swoją drogą - po co ? ) Fotokomórka zatrzymująca prasę aby niezmiarzdżyła ręki. Reakcja po np 0,7sekundy nie wchodzi w grę. Albo obsługa enkodera Dekodowanie DCF77 Mnożyć dalej przykłady? 1- w obsłudze przerwania z expandera, odczytujesz rejestry expandera...
To pewnie wynika z tego że powstało dużo różnych AVR`ów. Jeśli na początku ktoś korzystał tylko z jednego typu to mógł sobie w IDE ustawić konfigurację dla stosów a nawet wyświetlacza LCD czy I2C. Stąd dla wstecznej kompatybilności dalej tak można zrobić. Na przykład ustawienia dla stosów są tutaj tylko moje są już zmienione bo mogę szybko wkleić to...
Obawiam sie że atmego bez naprawde sprytnie napisanego softu jest po prostu za słaba do tego celu. Wez po uwagę że float mnożenie to ok 2980 taktów zegara przy zmniennych typu volatile. Dla porównania. Dzielenie na pewno więcej. Dane dla innych typów danych: uint8 => 19 cycles uint16 => 24 cycles uint32 => 103 cycles int8 => 37 cycles int16 => 33 cycles...
1. Można to różnie rozwiązać. Najprościej, to wykorzystać któryś z pinów INT. Algorytm: - ustaw przerwanie z pinu INT0 na zbocze np. narastające, - gdy pojawi się zbocze narastające to wywoła funkcję obsługi przerwania, - w funkcji przerwania uruchamiasz timer i zmieniasz ustawienia INT0 na zbocze opadające, - gdy wystąpi zbocze opadające - zatrzymujesz...
obsłużyć wydarzenie jakim jest skonczenie odbierania znaku ? Chodzi mi to to aby program w pętli głównej robił co do niego należy, nie wiedząc kiedy ma spodziewac się znaku, jednakże cały czas byłby na to gotowy-aby go odebrać. tak na szybko algorytm: volatile char bufor[50]; volatile int ilosc_znakow; volatile char bufor_2[50]; int...
Domyślnie WGD jest wyłączony. Czy przypadkiem właśnie go nie włączasz? Wtedy , jeśli w kodzie jest nieobsługiwany, po resecie program działa najkrótszy możliwy czas (sprawdź w nocie jaki). Może to wyglądać, ze dioda szybko miga a tak naprawdę WDG resetuje uC. W debugerze widziałbyś czy nie jest wykonywany reset. W Arduino musisz ratować się półśrodkami,...
Drogi kolego , popełniłeś szkolny błąd :D W procedurze obsługi przerwania Timer0 masz ... SIGNAL(SIG_OVERFLOW0) //obsługa multipleksowania wyswietlaczy { //extern unsigned char wyswietl[7]; unsigned char licznik;//<-- ********** błąd !!!!!!!!!!! ... zmienną licznik , tyle że jest to zmienna lokalna , czyli istnieje w pamięci...
Cersunited - widzę, że lubisz sobie komplikować życie :) To co proponujesz zrobić na dwóch procesorach można zrobić na jednym, zakładając, że starczy mocy obliczeniowej, ale to na etapie projektowania nie jest problemem. skyguy - jak pisałem, nie myśl statycznie o jednym konkretnym zadaniu. Możesz mieć przecież pętlę główną w której po kolei wywołujesz...
Wiem że zaraz mi się oberwie od innych ale na szybko to pokombinuj z wartością OCR0 - zwiększ ją np do 150 , po drugie możesz przełączyć na inny preskaler mniejszy niż 256. Lecz nie spodziewał bym się wielkiego efektu. Aby otrzymać pożądany efekt musisz zmienić plik ds18b20.c i zamiast wyłączać i włączać przerwania w funkcji temperatura musisz je włączać...
Witam, Pomysł dobry ale sypie się najprawdopodobniej z powodu zbyt dużej ilości przerwań. Proponuje projekt sterownika "równoległego", taki wykorzystałem w mojej pracy inżynierskiej. Wprawdzie korzystałem tylko z 8 serw ale 16 też obsłuży po drobnej modyfikacji. Program zabiera większość mocy procesora do obsługi przerwań ale tylko przez czas 2ms potem...
hmmm no ja to robiłem wtedy w Bascomie mniej więcej tak: ustawiałem sobie tak któryś Timer, żeby przerwanie wykonywało się powiedzmy 64 albo 128 czy ze 200 razy w ciągu czasu trwania jednej połówki czyli w trakcie ok 10ms tak? Gdy pojawiło się przerwanie INTx to odpalałem ten Timer, który zaczynał tykać i wykonywać przerwanie tyle razy ile ustalonych...
http://obrazki.elektroda.pl/9745806300_1... Witam. Sesja się zbliża, więc tradycyjnie zacząłem już prokrastynować :D . Ostatnio zacząłem pisać bibliotekę do obsługi klawiatury PS/2 w C dla AVR i postanowiłem na szybko w godzinkę lub dwie stworzyć jakiś praktyczny projekt w celu jej przetestowania. Początkowo nie planowałem tego publikować,...
Witam Jak wielu spotkałem się z problemem problemem kłopotliwej obsługi pilota z RC5. Po poszperaniu w necie wpadłem na http://www.elektroda.pl/rtvforum/topic20... ten temat. Jak się okazało wszystko na tym programie pracowało, ale nie zawsze. Kłopotem było napisanie programu "pod pilota". Oczywiście pochwała dla Sabotaz'a który problem "ruszył"...
Z programowaniem to już jest tak że ja np sam jak piszę coś i ma to być z zalożenia coś nie skomplikowanego, to sobie wszystko zaplanuje tak, że mam wszystko fanie w modułach, różnych plikach itd itp. Najgorzej jest później jak nagle klient, chce mieć coś tam więcej, albo inaczej. W tedy często się robi coś na szybko i już to często nie jest best practice,...
Przeczytałem to co jest wyżej napisane i... nie rozumiem co chcesz zrobić :) Co to znaczy: Potrzeba mi zapamiętać max. 4 liczby które będą następować po sobie dość szybko jednak Atmega potrafi je zdekodować bo jak dobrze się przypatrzę to liczby się zmieniają dobrze, i więc właśnie niech ktoś podpowie, co dopisać by procesor zapamiętał liczby i ustawił...
Supertech sta-250, to prosta konstrukcja i łatwo sprawdzić co uległo uszkodzeniu. Podłącz zasilanie i miernikiem sprawdź napięcia na nóżkach układów 1318AV. Na nóżce 8 powinno być równe napięciu zasilania(+), na 9 równe +5V. Jeśli napięcia się zgadzają, podłącz głośniki i podaj sygnał poprzez opornik 1-1,5k do nóżki 1 układu. Powinien w głośnikach pojawić...
Wracajac do tematu czy moglbym prosic przynajmniej o pseudo kod obslugi przykladowo drgania w przyciskach , wysterowania przekaznika np przez 2s oraz komunikacji 1wire jednym timerem (atmega8 ma az 2 timery wiec pewnie szybko skoncza sie jego mozliwosci chcac napisac kod bez zatrzymywania) Cały dowcip polega na tym że z tego 8 bitowego timera możesz...
witam. buduje systemy na rs485. niestety zadna z komend bascomowych nie była mi przydatna. używam przerwania do odbioru i sam obsługuje własny bufor z ustawieniem flagi informujacej iz właśnie w buforze jest odebrany "ważny" pakunek danych '------------------------ Rx_serwer: Rxdata = Udr1 Rem zabezpieczenie przed przepełnieniem bufora If Rx_count...
Cześć !!! Pomysł bardzo dobry i ciekawy. Ale propnuje przesiąść się na jakiś procesorek ze sprzętowym I2C np. Atmega8 lub któryś z grupy nowych procków Philipsa. Dlaczego. Komunikację Mikroprocesorów z i2C w trybie Slave najłatwiej jest zbudować, gdy masz możliwość obsługi protokołu w przerwaniu. Tzn. procek dalej się kręci , coś czyta czym się zajmuje...
Moim zdaniem dźwięki, które wydaje ten głośnik to uderzanie karaksu cewki o nadbiegunnk - taki charakterystyczny stukot. To nie jest związane z krzywo wycentrowaną cewką, wtedy by raczej charczało a nie stukało. Po czym oceniasz, że stuka na 50% mocy? Jeśli tylko po tym, że gałka wzmocnienia jest na połowie, to możesz się nieźle mylić. Mam mostek Irka...
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...
http://obrazki.elektroda.pl/8267947700_1... Ponad 20 lat temu jako amator hobbysta budowałem proste układy elektroniczne. Studia i styczność z informatyką spowodowały, że porzuciłem hobby pod nazwą "składanie elektroniki" na rzecz "składanie programów komputerowych". W bieżącym roku (2011) dzięki uprzejmości kolegi Jacka.M, który okazał...
Idea polega na tym, że wskaźniki krążą po buforze w tym samym kierunku, tak jakby koniec bufora połączony był z początkiem, stąd nazwa "bufor cykliczny". Po dojściu do końca bufora wskaźnik przeskakuje na jego początek. Pierwszy zawsze jest wskaźnik zapisu, za nim podąża wskaźnik odczytu. Jeżeli oba wskazują na to samo miejsce to znaczy że bufor jest...
Witam serdecznie, Korzystając z powypadkowego czasu wolnego, chciałbym podzielić się z Wami moim rozwiązaniem na rosnące w zawrotnym tempie ceny energii. Otóż, w ostatnich latach powstał trend inwestowania w OZE wszelkiej maści z atrakcyjnymi dofinansowaniami z różnych funduszy, pod przykrywką oszczędności, bycia ECO i wiele więcej. Oczywiście nie neguję...
flagi przerwania attiny przerwania przerwania assembler
awaria ekspresu philips czujka chińska mikrofon interfejs
Superkondensator do elektrozaczepu 12V – pojemność na 2 minuty, modele, obliczenia, alternatywy Ciśnienie ssawne kompresora – R134a, R404A, R410A, R290 – wartości, tabele, diagnostyka