https://obrazki.elektroda.pl/3221612800_... Witajcie moi drodzy. Zapraszam na relację z postępów prac nad otwartym firmware dla BK7231T. Temat ten napisany będzie w formie tutoriala, przedstawię tu krok po kroku jak opracowałem własny, wieloplatformowy (działający na Windowsie i BK7231T) mini-serwer HTTP, system konfiguracji pinów...
Jeśli masz kod, który odnajduje liczbę, to w prosty sposób możesz przerobić go na taki, który zlicza ilość wystąpień liczby spełniającej dane warunki, prawda? Wystarczy zamiast zwracać wartość (return) - inkrementować licznik (licznik++). Po takiej inkrementacji wystarczy tylko sprawdzić stan licznika i przerwać na interesującej Cię jego wartości (if...
1. powinieneś zamiast SIGNAL(SIG_UART_RECV) zastosować makro ISR( _vect) 2. przerwanie to nie zwykła funkcja którą od tak sobie można przerwać prze break albo return 3.uart_rx_buffer[uart_rx_len] = 0; tu powinien być NULL('\0'), a nie zero 4.nie rozumiem Twojego sposobu wykorzystania flag spróbuj uart_rx_complete = 1; i uart_rx_complete = 0;
Napisz tak swoje podprogramy by były w nich powtarzalne pętle, wtedy można użyć poleceń break (dla pętli) i return (dla całej funkcji) by ją przerwać gdy przycisk zostanie wciśnięty: if (digitalRead(A2) == 0) return;. Można to wstawiać dowolnie często, ale jak odpowiednio napiszesz funkcję (podprogram) z millis to ona może działać cały czas "równolegle"...
Ja bym widział dwie możliwości, w obydwu z posortowaną tablicą pierwszą: 1. w pętli for... po pierwszej tablicy, odejmował od jej i-tego elementu szukany punkt i obliczał wartość bezwzględną tej różnicy. Do tego zapamiętać poprzedni wynik, a kiedy bieżący wynik będzie większy od zapamiętanego, przerwać iterację i zwrócić poprzedni element. 2. Jeżeli...
Witam. Podłączę się do zamkniętego tematu: https://www.elektroda.pl/rtvforum/topic3... Jestem w takiej samej sytuacji jak brinktomasz22. 1. Początkujący ... albo bardziej ... 2. Zgrzewarka z projekt: https://majsterkowo.pl/zgrzewarka-do-ogn... Również zależy mi na tym, aby przycisk chwilowy zadziałał tylko raz...
Czy po wciśnięciu przycisku program ma wykonywać w kółko wybraną sekwencję? Pewne tak, a wtedy: jak w trakcie wykonywania sekwencji program ma reagować na wciśnięcie przycisku? Ma dokończyć wykonywaną sekwencję, czy ją przerwać? Jeśli program ma rozpoznawać wciśnięcie przycisku w czasie wykonywania sekwencji, to zamiast _delay_ms() trzeba wstawić własną...
Jak w czystym C (AVR GCC) wyglądała by funkcja millis() ?, a może pokaż też 2 podejście (listing), gdzie milisekundy to zmienna globalna np millis. Wykorzystaj timer do przerwać dostępny na każdym AVR. W AVR GCC, funkcja podobna do `millis()` z Arduino, która zwraca liczbę milisekund od startu programu, może być zaimplementowana z wykorzystaniem timera...
Return dałem tylko po to aby przerwać procedure gdy pierwszy if jest prawdą
Dobry wieczór. Przepraszam za tak dużą zwłokę, ale ostatnio miałem zakuwanie na egzaminy szkoleniowe do pracy i nie miałem kompletnie czasu by myśleć o tym:( Musiałbyś pokazać przykład swojego programu. Najpewinej efekty o któych piszesz wynikają z tego, że nie korzystasz z peryferii mikrokontrolera - m.in. timerów, przerwać itd. A na siłę starasz się...
[syntax=vbnet] ...... Do Debounce S1 , 0 , Pr1 ,Sub Loop End ' koniec pętli Pr1: Waitms 100 Serwo(1) =150 Waitms 150 Serwo(2)=250 Waitms 200 Serwo(2)=50 Waitms 250 Serwo(1)=50 Wait 1 Serwo(1)=150 Waitms 100 Serwo(1)=50 Wait 1 Serwo(1)=150 Waitms 100 Serwo(1)=50 Return [/syntax] Przy takim kodzie serwa działają jak bym chciał tylko procesor wykonuje...
Tak samo, jak break nie przerwie Ci wszystkich poziomów pętli zagnieżdżonych, tak samo jest z rekurencją. Dokładnie jak kolega wyżej radzi - funkcja musi zwracać wynik, który będzie decydował o przerwaniu każdego z wyższego poziomu po kolei. Np tak: [syntax=c]int f(int a) { if (rand()%a==0) return 1; if (f(a+1)) return 1; if (f(a-1)) return 1; if (f(a))...
(at)tadzik85 - jak dla mnie SPLa mogłoby by w ogóle nie być :} Niemniej jednak wydaje mi się to dziwaczne, że pliki nagłówkowe z nazwami rejestrów - dla tego samego mikrokontrolera - są różne, w różnych bibliotekach... Jak zaczynałem z STMami to wszędzie królował SPL. Trochę mi się nie uśmiecha zabawa w porównywanie plików nagłówkowych... ale coś czuję,...
Witam. Mam program, który działa w pętli DO..LOOP typu: DO ... IF warunek THEN procedura ... LOOP przerwanie: ... return sub procedura ... end sub Procedura wywołana w pętli głównej ma opóźnienia na WAITMS. Chciałbym przy pomocy przerwania (przycisk) zrezygnować w dowolnym momencie z wykonywania 'procedury' i wyjść z jej obsługi do pierwszej instrukcji...
??? tak [syntax=json] function scroll() { var startTimeUTC = Date.now(); scrollBy(0, 1); if(scrollY >= document.documentElement.scrollHeight - innerHeight) clearInterval(scrollInterval); if (startTimeUTC + 5 * 60 * 1000 < Date.now()) return ; } var scrollInterval = setInterval(scroll, 4); [/syntax] bo chyba co nie działa.. nie zatrzymuje się
Witam, proszę o pomoc w następującym problemie. Uproszczony przeklejony program w bascom działa w ten sposób że po przesłaniu określonych liter przez rs zapala RGB ledy w odopowiedni sposób. Przerwanie działa dobrze. Natomiast chodzi o procedure "zmieniaj" która to wywołana w przerwaniu działa, ale przerwanie nie powoduje wyjścia z niej. Musi wykonać...
Witam mam mały problem z projektem w c++. Chcę napisać prostą aplikację która zarządza kolekcją danych o osobach. Do tej pory udało mi się stworzyć coś takiego [syntax=c]#include <vector> #include <string> #include <conio.h> using namespace std; class czlowiek { public: string lp; string imie; string nazwisko; string numer; czlowiek(string...
Witam. Bardzo bym prosił o przykładowy program bo próbowałem już to wykorzystać, ale nie wiedziałem jak. Wiem że jest taka składnia: try { } catch ( <k1> ) { } catch ( <k2> ) { } catch ( ... ) { } Czy muszę stosować klasy aby to działało? A co do wyniku 1.#INF wiem że jest to...
Nie używam przerwań bo na bieżąco chciałem znać co kiedy przychodzi. Timer0 używam bo ostatecznie ten będzie wolny a w AtMega8 tylko przepełnienie Timer0 jest dostępne, nie ma CTC dla T0. Chyba zapomniałem o tym wspomnieć ale transmisja jest HalfDuplex po tej samej linii danych. Cały kod testowy wygląda tak. Wiem ze bez formatowania, nie wiem jak jest...
Albo nie doczytałeś, albo (jak zwykle(!)) - nie zrozumiałes całości fragmentu... Przeciez pisałem w twoim języku, ze nie chodzi o sam odczyt, lecz o funkcję millis(). Raczej Ty nie doczytałes w funkcji milis nie za bardzo jest co przerwać a wyglada ona tak: [syntax=c]unsigned long millis() { unsigned long m; uint8_t oldSREG = SREG; // disable interrupts...
Witam Mam oto taki kod: $crystal = 8000000 Config Debounce = 45 Dim A As Byte Dim B As Byte Dim C As Byte Dim D As Byte Dim E As Byte Dim S As Integer B = 1 C = 1 D = 5 E = 5 Config Portc = &B10011001 Portc = &B01111111 Do If Pinc.5 = 0 Then Gosub Bbb Else Gosub Xxx Loop Xxx: If Pinc.6 = 0 Then Gosub Ttt Else Gosub Ppp Return Ttt: Portc.0 = 0 For A...
Osobiście używam instrukcji CLI i SEI w głównej pętli programu gdy potrzebuję mieć coś 'ekskluzywnie' i to wystarcza. Trzeba tylko pamiętać że podczas wyłączonch przerwań nowe zdarzenia 'nie przychodzą' dopóki ich nie włączymy, ale jeśli jakieś się 'przydarzy w międzyczasie' to zostanie obsłużone zaraz po włączeniu przerwań. Ważna informacja - podczas...
Kolejne pytanie. Wiadomo, że czasem przy obsłudze układów peryferyjnych trzeba na coś czekać. Np na flagę: [syntax=c] while(!(I2C1->SR1 & I2C_SR1_ADDR)); [/syntax] Jeżeli coś będzie nie tak z urządzeniem to może się zdarzyć, że ten while się po prostu nie skończy. Kod powinien być tak przygotowany aby po określonym timeoucie przerwać działanie funkcji....
a nie mogę bezpośrednio w przerwaniu zamieścić kod do wykonania ? czy musi być skok do innego miejsca programu ? wiem, że tylko niektóre mają priorytety a ja się pytam ogólnie jak wygląda system przerwać w PIC. np. [syntax=c] #pragma code highVector=0x08 void HighVector (void) { //chyba przed skokiem mam sprawdzić flagę przerwania ? _asm goto MyHighISR...
[Bascom]Witam. Natrafiłem na pewien problem. Chciałem by po otrzymaniu ramki 10 01 0A 01 otrzymał zwrot w postaci "dana 1" a wysyłając ramkę 10 01 0A 02 odpowiedz "dana 2" Problem wygląda następująco: - nie za każdym wysłaniem jest reakcja - odpowiedz na wysłane dane - odpowiedz nie przychodzi raz tylko w koło i nie można tego przerwać Dodatkowo powiedzmy...
... i jest tak samo ;/ Bo nie słuchasz o czym mówię :( Potestuj poniższe - skrobnąłem dla Ciebie ;) : '$map $regfile = "m32def.dat" '$crystal = 11059200 'ATMega32 adres rej SPL+&H20 Const Lowsp = &H5D Dim A As Byte , Lab_adr As Word Dim Alow As Byte At Lab_adr Overlay , Ahi As Byte At Lab_adr + 1 Overlay Dim Tspl As Byte On Int0 Int0_intr...
Jeśli tylko uC ma wbudowany sprzętowy moduł TWI czyli odpowiednik I2C to warto z niego korzystać. Wiele zależy od części kodu których nie zamieściłeś. Sprzetowe TWI jest o tyle lepsze że nie przeszkadzają mu tak bardzo przerwania z innych źródeł. Kiedy korzystasz ze software`owego I2C to niestety, ale chyba każde przerwanie potrafi przerwać te transmisję....
Witam, Próbuję napisać prostą klasę (DBConnector), która będzie odpowiedzialna za przesyłanie danych do bazy danych(mysql). Klasa tworzy osobny wątek w którym co jakiś czas odbywa się operacja `INSERT` zbuforowanych danych to bazy. Wszystko śmiga pięknie poza funkcją "disconnect". Funkcja ta jest wywoływana z innego wątku i ma za zadanie przerwać połączenie...
A tak wracając do początku, czy przez przypadek fragment bascomowego help'a (przykład z $serialinput), nie odpowiada na pierwszy post? ldi R24, 13 'fake enter so INPUT will end '---------------------------------------... 'name : $serialinput.bas 'copyright : (c) 1995-2005, MCS Electronics 'purpose...
Napisałem krótki program w win-avr. #include <avr/io.h> #include <stdio.h> #include "rs.h" int klawisz; int main (void) { rsconfig(); fdevopen(rsput,rsget,0); while(1) { if(scanf("%i",&kla... printf("Wcisnieto %i \r",klawisz); }...
Witam wszystkich Elektrodowiczów! Otóż muszę użyć układu DS18B20 do pomiaru temperatury. Sięgnąłem po niego, gdyż kiedyś go używałem i działało wszystko OK ;) - jednak nie tym razem :/. Chcę wykonać po prostu zwykłą pojedynczą konwersję temperatury i odczytać ją ze ScratchPada. Wykonuję: 1. Wysyłam Presence Pulse do DS18B20. 2. Otrzymuję "1". (zapala...
Witam. Napisałem program z Symfonii C++ Standard, wyd. 3 z 2008r, ćwiczenie XXIII/218, w skrócie: mamy napisać funkcję, która do końca stringu będącego w jednej tablicy dołączy string będący w innej tablicy, funkcja powinna przerwać w przypadku zapełnienia całej tablicy. Jak zwykle będę wdzięczny za uwagi, spostrzeżenia, komentarze i wskazówki. Ćwiczenie...
Dżyszla, dziękuję za odpowiedź. 1. Nie ta pętla - eof może wystąpić już na początku (pusty plik), nieprawdaż? Ale to akurat tak na marginesie. Zmieniłem z do while na if (uchwyt.eof()!=1). 2. Nie możesz lecieć aż do indeksu, gdy g osiąga koniec ciągu, gdyż próbujesz badać znaki poza ciągiem (g+3). Musisz szybciej przerwać pętlę for, aby to tuż za ostatnim...
Witam! Mam problem z jednoczesnym użyciem Timera1 i funkcji RC5 która jak wiadomo dziął na Timerze0 (kod napisany na ATTINY2313) Jeśli rozdzielę kod na dwa czyli: 1. Wykorzystuje timer1 do sterowania serwem - wszystko działa (bez funkcji pilota na RC5) 2. Jeśli zaprogramuje attiny2313 aby używało tylko funkcji RC5 (pilota) i przy okazji korzystam z...
Wskazówki : [syntax=basic4gl] Config Serialin = Buffered , Size = 254 , Bytematch = All Enable Serial Enable Interrupts Serial0bytereceived: Return [/syntax]
Czyli jak ma to wyglądać?? Bo chce by program odczytał z pliku i przepisał wszystko do memo1 . Nie wiem czy dobrze poza tym to robie . słowo kluczowe wszystko nie wiem po co się bawić w fstream skoro i tak chcesz przepisać wszystko Memo1->Lines->LoadFromFile(&qu... bądź jeśli plik jest w tym samym katalogu...
https://obrazki.elektroda.pl/4950580000_... Witajcie moi drodzy W tym temacie poznamy podstawy przerwań i timerów w PIC18F2550 . Na początek będzie krótki wstęp teoretyczny, a potem wszystko przerobimy dokładnie na praktycznych przykładach. Do lektury tematu przyda się ogólna wiedza na temat przerwań i programowania w C, choćby taka...
Przerwanie czyli to co masz pomięrzy Sygnal1: a Return. To raczej zajmie więcej cykli ;p Mniej więcej trzeba zrobić tak jak piszesz.
zamknij petle glowna do nop idle loop end przerwanie: ........ ........ return end
DDRD|=(_BV(PB5) | _BV(PB6) | _BV(PB7)); DDRD|=(_BV(PE3) | _BV(PE4) | _BV(PE5)); Widzisz tu subtelną różnicę...? Działające wstawki dla pwm na Tim1 i Tim2: [syntax=c]void Timer0Init(void) { DDRB|=(1<<4); TCCR0 |= (1<<WGM01)|(1<<WGM00)|(1<... OCR0=0; } void Timer2Init(void) {...
Konfigurujesz przerwanie zewnętrzne: dim flaga as bit config portd.4 = output 'przykładowo na ten pin reset portd.4 Config Int0 = Rising Potem On Int0 przerwanie Enable Int0 Enable Interrupts gdzies w pętli: If flaga = 1 then set portd.4 = 1 waitms 10 reset portd.4 reset flaga end if Za petlą Przerwanie: set flaga Return To najprostszy prymitywny...
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...
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...
Do sterowania użyjmy portu B. Przycisk do zmiany efektów to pin D.2, będzie działać na przerwaniu. Potencjometr to pin C.0, przetwornik. No to prawie że gotowiec: $regfile = "m8def.dat" $crystal = 8000000 Config Portb = Output 'Wszystkie linie portu D jako wyjściowe Dim Opoznienie As Word 'opóźnienie między przełączeniami, liczba do 65535...
marcinek.p - to gotowiec dla ciebie, nie mam jak go przetestować ale jestem pewien że zadziała jak trzeba. Masz tu przerwanie, miganie led i zliczanie migniec z incr Mozna to wszystko wkleic do przerwania ale dobra zasada nakazuje w przerwaniach umieszczać jak najmniej kodu. [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 1000000 $hwstack = 32 $swstack...
no przeca pisze Ci kompilator że powinieneś napisać int ISR... a na końcu return 0; :-)
$regfile = "m8def.dat" $crystal = 8000000 Enable Urxc On Urxc Rs232 Enable Interrupts Do 'Instrukcje w petli Loop End Rs232: 'tutaj zostalo zgloszone przerwanie w Udr jest aktualna przeslana liczba Print Udr Return
Nie wiem czy odbierasz tam jakieś komendy. Wywal te Wait`y. Tutaj po zmianie stanu do zmiennej Blokada zostanie wpisana wartość do odliczenia w dół. Jeśli nastąpi następne przerwanie to w zależności od tego czy minął już czas blokady, to albo zostanie przedłużony jej czas bo ktoś trzyma przycisk dłużej albo.. :D [syntax=basic4gl]Dim Blokada As Word...
Absolutnie żadne Start Timer0 nie jest tu potrzebne. Wystarczy, że tak będzie skonfigurowane przerwanie: [syntax=basic4gl]Config Timer0 = Timer , Prescale = 256 On Timer0 Sekunda Const Przerwanie = 131 Counter0=Przerwanie Enable Timer0 Enable Interrupts . . . end Sekunda: Counter0=Counter0+131 . . . Return [/syntax] ...i unikaj jak ognia "drukowania"...
Wykona się Return z "Obslugaprzerwania" które wcale nie będzie RETI tylko RET, a puźniej wykona się Return z "Przerwanie" które to jest RETI. Czyli wszystko jest ok.
$regfile "attiny2313.dat" $crystal = 1000000 Config Portb.4 = Output Dim I As Byte Config Timer0 = Timer , Prescale = 1024 On Timer0 Przerwanie 'Start Timer0' nie potrzebne Enable Timer0' zezwolenie na przerwanie timera Enable Interrupts Do Loop Przerwanie: Incr I If I > 10 Then Toggle Portb.4 I = 0 End If Return
Sprawdziłem ten kod przed chwilą i jeśli na PD6 jest przycisk.. to jego kolejne naciskanie włącza lub wyłacza naprzemiennie diode LED na pinie PORTD.7 100% tested [syntax=vbnet]$regfile = "m644pdef.dat" $crystal = 8000000 $hwstack = 40 $swstack = 16 $framesize = 32 Pcmsk3 = &B01000000 Enable Pcint3 : On Pcint3 Pcint3_isr Config Portd.6 = Input : Set...
Witam sprawdź ten kod co prawda są inne numery portów i inny procek ale jak zmienisz powinno działać. Problem jest jeden w momencie jak naciskasz przycisk i zmieniasz końcówkę na WYJŚCIE to stan tego pinu Musi być (0) Niski , żeby nie zrobić zwarcia. '$sim $regfile = "attiny2313.dat" $crystal = 11059200 $baud = 9600 enable interrupts 'włącz...
To trzeba zmienić priorytet z 12 bitów stałokodowego pilota na odbiór HCSa lub całkiem usunąć obsługę pilota 12 bitowego. może tak: [syntax=vbnet]'*************************... '========================= przerwanie przy kazdym zboczu ICP, odczyt czasu trwania impulsu...
Tlumaczylem, ze restart bedzie tylko raz mozliwy, w petli programu. Nie napisales jasno, ze ma byc w kazdej chwili. Moze jutro ci wlepie kawalek kodu. ________________________________________... CONFIG INTx = LOW LEVEL On Intx Przerwanie Enable Interrupts do loop:end Przerwanie: disable intx '.... tu reset '.... enable intx Return...
pier - twój program działa bardzo dobrze, dokładnie tak jak go napisałeś. A że napisałeś go badziewnie to taki masz efekt. Błędy: 1) W przerwaniu INT0 wyskakujesz z niego GOTO do głównego programu, tak nie można. Wyjdź z przerwania komendą RETURN, ale na jego końcu a nie przez podmianę GOSUB. Powinno być: If Sw = 1 Then Powerdown i RETURN na koncu....
Tak to jest po prostu przyjęte w kompilatorach W przypadku kiedy powyższe wyjaśnienie nie zaspokoi żądzy wiedzy: return przerywa funkcję i zwraca jakąś wartoś, w szczególności kończy działanie programu (przerwanie funkcji main). W przypadku main wartość return jest przekazywana do systemu. Jeśli zwracamy zero oznacza to, że program zakończył się powodzeniem....
U mnie większość programów wygląda tak: void main(){ //inicjalizacja ... while(1){ funkcja1(); funkcja2(); ... } } void funkcja1(void){ switch(funkcja1Stan){ case 0: //rob cos SetDelay1ms(200); //czekaj 200ms funkcja1Stan=1; break; case 1: if(GetDelay1ms()...
Nie napisałeś , że ten pilot nie pracuje w kodzie RC5 , ale też nie napisałeś , że w tym kodzie pracuje :wink: Inna wersja Twojego programu: $regfile = "m32def.dat" $crystal = 8000000 '11059200 Dim Adress As Byte , Command As Byte , X As Byte , Tmpcode As Word Dim Odebrano As Bit , Flaga As Byte Config Pind.2 = Input : Portd.2 = 1 Config...
$include (REG51.inc); dołączenie definicji rejestrów uK (kompilator RA-51 Raisonance) NAMEOBSLUGA_AT24C64 ;Poniżej definicje stałych użytych w programie FIXEDADDR EQU0A0H;stała częśc adresu pamięci 24C64 USRADDR EQU0;ustawiana przez użytkownika część adresu (wartości 0..7) MEMSIZE EQU2000H;liczba bajtów dla 24C64 PMEMSIZE EQU32;liczba bajtów na stronę...
A może wyłumaczyć mi ktoś tak jaśniej niż whelpie bascoma ;) co to jest ten prescaler i co on dzieli. Może tak po kolei jak twój program widnieje: 1. Jeżeli PORTB jest przeznaczony do obsługi LCD to nie konfiguruj go w ogóle w stylu jaki podałeś w pierwszym poście. Config Portb = &B11111111 : Portb = &B11111111 ===> źle!!! Może to powodowac zakłócenia...
Stosy to dla mnie czarna magia, wiem tylko, że każdy przeskok wymaga zapisania adresu zwrotnego, ale nic poza tym :oops: No przy takim podprogramie to 1 megabajtowy stos to za mało :D, to się chyba nazywa rekurencja: [syntax=basic4gl]Petlapomiarowa: If Impulsy < 15 Then 'Jesli nie ruszono, wyswietlaj dalej napiecie Gosub Pomiaradc If Konwersja >...
Z listingu programu nie mozna doszukac sie jaka metode przyjmujesz w pomiarze RPM. Ja jakoś się doszukałem. A nie, sory. Nawet doszukiwać się nie musiałem. Liczy okres pomiędzy impulsami. Ale przerwanie to powinno wyglądać tak: Przerwanie: Zmienna = Timer1 Timer1 = 0 Wynik = 7500000 / Zmienna Return Preskaler Timera ustaw na 64. A: Capture Edge...
Aktualnie program wygląda następująco: Bo taki masz program.... To co zamierzasz osignąc, musiałbyś zmienic na: Config Portb.2 = Output 'triac Triac Alias Portb.2 Poza tym jeden 'return' na końcu subrytyny "Pin_change_isr: . e marcus
Witam... Generalnie rzecz biorąc procedury opóźnienia czasowego nie nadają się do modulowania diody IR... Częstotliwość nie jest zbyt stabilna to raz... Dwa nie uzyskasz 36kHz musisz skorzystać z dobrodziejstw timera... Np. tak... #include<avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <inttypes.h> int...
Sprawdzilem wszsytko krok po kroku i problemem byly funkcje ktore zwracaly swoja wartosc przez RETURN. Po prostu przerwanie powodowalo ze zmeinna ktora zwaracala ich wartosc przyjmowala zawsze 0!! Zrobilem to samo na wskaznikach i dziala wszystko dobrze!
Trochę w tym programie brakuje. Porównaj sobie. $regfile = "m32def.dat" $crystal = 1000000 Config Int0 = Low Level On Int0 Przerwanie Enable Int0 Enable Interrupts Do Loop Przerwanie: Return
Nie jestem bascomowcem bo programuje mikrokontrolery zawodowo, więc... Ale spróbuje ci pomóc. Przerwanie odebrania znaku nazywa się URXC. Piszesz: enable URCX enable interrupts on URCX nazawa_podpr nazawa_podpr: tu obsługa przerwania return Nie wiem czy dobrze słabo znam bascoma. Poszukaj jeszcze na forum i w helpie bascoma.
WItam Potrzebuję zmienić częstotliwość przebiegu prostokątnego o np 3,3 raza. Czestotliwość wejściowa jest zmiennna w pewnym zakresie maks 500hz. Wymyśliłem sobie żeby to zrealizować tak aby na INT0 podawać sygnał wejściowy i wywołuje przerwanie impulsy a timer0 generuje przerwania co jakiś mniejszy czas probkowania. Zliczam impulsy probowania pomiedzy...
#include <avr/io.h> #include <avr/interrupt.h> // funkcje sei(), cli() #include <stdlib.h> volatile int a=0; ISR(TIMER0_OVF_vect) { a+=1; } int main( void ) { //rejestry od timera 0 TCCR0 = _BV(CS02)|_BV(CS00);//pr... 1024 TIMSK = _BV(OCIE0); //włącza przerwanie...
Już Ci ktoś tłumaczył w innym temacie, że _delay_ms(i) gdzie i się zmienia nie zadziała tak jak trzeba. Jak widać nauka poszła w las... W Twoim przypadku dzieją się tylko 2 rzeczy równolegle: 1) sterujesz silnikiem (z odpowiednim opóźnieniem między impulsami, od 4 do 1000 ms) 2) sprawdzasz stan przycisków (co 30 ms). Dlatego ustawiasz sobie timer na...
Radziłbym Ci zobic tak: Cały PWM zrób na przerwaniu od jakiegoś Timera; nie uzywaj zmiennych typu single, jeżeli częstotliwośc przerwań bedzie odpowiednio szybka wystarczy zmienna typu byte lub word. Obsługe LCD czy przycisków i innych obliczeń zostaw w pętli główne Przykładowy PWM dla portb.3: Gdzie a to jakas amienna a do b podajesz wartosc PWM (0-255)......
co do waitms masz absolutną rację, tylko że program symulatora jest synchronizowany przerwaniami timera. Zwróć uwagę na komendę bitwait flag, set Poniżej podprogram generujący jedynkę. W każdym cyklu pętli procedura czeka aż procedura przerwania generowanego przez timer, ustawi zmienną flag i dopiero idzie dalej. A czy ma być wygenerowany dłuższy czy...
W ISRze się nie pisze returnów.
Nie potrafię dojść o co chodzi - rozumiem gdyby program zatrzymywał się na while(), ale na return()? Samo przerwanie TWINT nie oznacza, że operacja zakończyła się powodzeniem. Nie podałeś zawartości innych funkcji obsługi magistrali, ale sądząc po funkcji twi_read() nie sprawdzasz poprawności transmisji poprzez sprawdzenie jej statusu w rejestrze TWSR....
sprawdź w dokumentacji czy aby po zresetowaniu flagi przerwania timera nie trzeba odczekać kilka instrukcji (2-3 NOP'y). Jeżeli tak jest, to w przeciwnym wypadku zaraz po wyjściu przerwanie otworzy się drugi raz i w tej sposób dioda mrugnie tak że tego nie zauważysz. Możesz to sprawdzić tak że diodę ustawisz na zapłoną (a nie stan przeciwny), to po...
Co prawda uczę się ale dlaczego taki program nie działa poprawnie, co robię źle? [syntax=basic4gl]$regfile = "m32def.dat" $crystal = 16000000 Config Portd.0 = Output Config Timer0 = Timer , Prescale = 8 On Timer0 Przerwanie Load Timer0 , 200 Enable Timer0 Enable Interrupts Do Loop Przerwanie: Toggle Portd.0 Return End[/syntax]
Witam... Ja bym nie bawil sie w komparator i ... tylko wzioł cfrowy termometr 1-wire np DS1822, DS1821(swoją drogą da sie go zaprogramować jako termostat) no ale można zrobić to w rózny sposób, wracam do tematu postu... Przerwanie od komparatora w BASCOM Config Aci = On , Compare = Off , Trigger = Toggle On Aci Przerw Enable Interrupts Enable Aci coś...
Tak po krótce przeanalizowałem wątek TIMER2 tego nowego programu. Po prześledzeniu kilku instrukcji i "śladów skoków" mogę stwierdzić, że nie jest dziwne, że gdy aktywny jest TIMER2 i jego przerwania to wszystko siada. Pojawia się przerwanie TIMER2, program wskakuje do jego obsługi a tam napotyka: GOSUB w inne miejsce, gdzie napotyka GOTO w jeszcze...
Co "toto" jest? ISR_NO_BLOCK(TIMER0_COMP_vect) Wyszukiwarka nie działa? Czemu kolega strzela na ślepo? Ja rozumie "dawno, dawno temu, za siedmioma górami, za siedmioma lasami, gdy nie było Internetu..." Ale teraz? https://www.nongnu.org/avr-libc/user-man... Tak ciężko znaleźć? Przy okazji. Chce kolega koniecznie dziedziczyc...
Proszę bardzo, przykładzik jest lekką modyfikacją liczenia czasu w przerwaniu z książki Wiązani. [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 8000000 Config Timer0 = Timer , Prescale = 256 On Timer0 Przerwanie Dim Licznik8ms As Word Dim Flaga As Bit '1 juz czas, 0 jeszcze nie Enable Interrupts Enable Timer0 Load Timer0 = 250 Do 'wyslanie komendy...
Witam ponownie, oto on, poprawiony, jednak dalej w kulawej formie: [syntax=basic4gl] $regfile = "attiny13.dat" $crystal = 1000000 $hwstack = 8 $swstack = 8 $framesize = 8 Config Int0 = Rising Config Timer0 = Timer , Prescale = 8 Config Pinb.1 = Input Config Portb.2 = Output Config Portb.4 = Output On Timer0 Etykieta Dim A As Byte Dim D As Word Enable...
Właściwie to jak wrócić z procedury obsługi przerwania w jedno konkretne miejsce programu? [syntax=vb] Config Int0 = Falling On Int0 Przerwanie Enable Int0 Enable Interrupts Start_programu: [...] Punkt_powrotu_z_przerwania: [...] Petla_glowna: [...masa różnych instrukcji i skoków do podprogramów....] Goto Petla_glowna End Przerwanie: [...] Goto Punkt_powrotu_z_przerwania...
Przykładowo można zrobić tak, sprawdź czy zadziała. Nie dałem powerdown ponieważ widzę że nie jest to potrzebne (bo z baterii działać nie będzie). [syntax=basic4gl] $regfile = "2313def.dat" $crystal = 8000000 Config Portd.3 = Input 'przycisk on/off Set Portd.3 Config Portd.0 = Output 'LED on/off Reset Portd.0 Config Int1 = Falling 'konfig przerwania...
A z jakiego terminalu korzystasz? Bo na obrazkach masz ustawienia portu tylko. Kiedy korzystasz z usartu nie musisz ustawiać kierunkowości portu. Po włączeniu RXEN i TXEN piny te automatycznie są wykorzystywane przez usart i procek sam nimi steruje (przynajmniej w usart0). A dlaczego nie korzystasz z usart0? Wykorzystujesz go juz? uint8_t uart_getchar(void)...
Pozmieniałem troche program i teraz jest tak: void TIMER0_init() { TCCR0 = 5; TIMSK = 1<<TOIE0; sei(); } //*****************************MAIN*****... int main () { RS_init(UART_CONST); // inicjalizacja portu szeregowego TIMER0_init(); for(;;){} return 0; } //*****************************PRZERWANI... SIGNAL(SIG_OVERFLOW0)...
Obsługa klawki 4x4 void KBD_init(void) { KBD_DIR = 1<<KBD_col1 | 1<<KBD_col2 | 1<<KBD_col3 | 1<<KBD_col4 | ~(1<<KBD_row1 | 1<<KBD_row2 | 1<<KBD_row3 | 1<<KBD_row4); KBD_PORT = 0xFF; }; unsigned char KBD_read(void) { KBD_PORT=0xff; KBD_PORT &= ~(1<<KBD_col1);...
To Ci będzie sterować kolejno czterema diodami na pinach od B0 do B3. Zalecam wnikliwą analizę, zanim zalejesz mnie pytaniami :) Timery zawsze rób na odliczanie w dół do 0, w przeciwnym wypadku po wpisaniu nowej wartości w trakcie odliczania możesz mieć niezły kwas - pomyśl dlaczego :) Pozdrawiam [syntax=basic4gl]$regfile "m8def.dat" $crystal = 8000000...
#include<avr/io.h> #include <avr/interrupt.h> #define F_CPU 1000000 int main(void) { TCCR0 = 0x05; //(1 << CS02) | (1 << CS00); prescaler na 1024 TIFR |= (1 << TOV0); TIMSK |= (1 << TOIE0); // aktywne przerwanie overflow // timer_enable_int(_BV(TOIE1)&...
Momentami odnoszę wrażenie, że nie wiesz co piszesz. Do pomiaru długości nie potrzebujesz dodatkowego timera oprócz tego t0. Wystarczy, że będziesz sprawdzał co określony czas, jeśli na wejściu będzie ten sam stan co poprzednio, to będziesz zwiększał pomocniczą zmienną. Jeśli stan się zmieni, to dopiero zapiszesz wartość do np.tablicy, żeby później...
Ale ja się domyśliłem że jest zewnętrzny i dlatego dałem odczyt za pomocą procedur (które jak się domyśliłem już miałeś). No to teraz tak: On INT0 Int0_handler Config INT0 = Falling Enable INT0 Int0_handler: Gosub Get_ADC_16 ADC_Offset = Napiecie Rerurn Get_ADC_16_2: Disable INT0 'Żeby wciskanie przycisku nie przerwało normalnego pomiaru. Gosub...
w power save wprowadza cie petla config int0 = rising on int0 przerwanie petla glowna programu do if stacyjka = 0 then powersave end if 'jakies twoje tam pierdoly loop end przerwanie: return budzi go zbocze narastajace na np int0 PS stacyjka alias pind.2 'jezeli np wykorzystujesz przerwanie int0 w atmedze32 takie cos bedzie ci dzialac gdy przyjmiemy...
Witam! Mam pytanie: w jaki sposób obudzić uP Atmega8 ze stanu powersave? Poniższy program nie działa: Config Int0 = Rising On Int0 Przerwanie Enable Int0 Enable Interrupts print "reset" powerdown do loop przerwanie: print "aaaa" return Bez polecenia 'powerdown' program działa i wykonuje przerwanie. Czy jeszcze coś trzeba ustawić?
Użyj Timer'a 2 i wszystko będzie cacy. Pzdr. A piny to się konfiguruje tak: Config Pinb.1 = 1 a nie Portb.1. Przydaje się też wrzucenie linijki z def'em procka: $regfile = "M8DEF.dat", zresztą: $crystal = 8000000 $regfile = "M8DEF.dat" Config Timer2 = Timer , Prescale = 256 On Timer2 Przerwanie Dim A As Byte , B As Byte Config Lcd = 16 * 2 Cursor Off...
Bardzo proszę. Zmodyfikowałem program tak, by uzywał tablic. To jest mod pierwszego listingu: [syntax=basic4gl] Rem warstwowa obsługa LCD $regfile = "m32def.dat" $crystal = 1000000 Ddra = &B00001111 '4-7 = output Porta = &B11110000 'pull up Config Lcd = 16 * 2 Config Lcdmode = Port Config Lcdpin = Pin , Db7 = Portc.7 , Db6 = Portc.6 , Db5 = Portc.5...
OK później zaprogramuje ale wyszło to tak: $regfile = "attiny13.dat" Config Portb.4 = Output $hwstack = 32 $swstack = 16 $framesize = 8 Dim A As Byte Config Timer0 = Timer , Prescaler = 64 On Timer0 Przerwanie Enable Interrupts Enable Timer0 Start Timer0 Do Loop end Przerwanie: Timer0 = 106 Toggle Portb.4 Return
A masz oscyloskop zeby steirdzic ze rzeczywiscie sie nic nie dzieje? Ja wrzucilem taki program do megi16 #include <avr/io.h> // dostęp do rejestrów #include <avr/interrupt.h> // funkcje sei(), cli() #include <avr/signal.h> // definicje SIGNAL, INTERRUPT SIGNAL(SIG_OVERFLOW0) { PORTD=0xFF; } int main(void)...
chcialem zrobic budzenie procesora za pomoca ktoregos z 4 przyciskow. schemat jest podobny do tego (tylko tutaj jest wykorzystany attiny2313 ja chce atmega32): http://obrazki.elektroda.net/85_12264138... Przed wejsciem w tryb powerdown chcialem wystawic na przyciski stan niski, wtedy bym mial mozliwosc wychodzenia z powerdown za pomoca przerwania...
dawid512 : ?. "CLI" blokuje wywoływanie przerwań, ale nijak nie przekłada sie na równoważność z wyjściem z funkcji. dreidel : Funkcji obsługi przerwania napisanej w C nie opuszcza się przez reti - wtedy tylko możesz spowodować przepełnienie stosu (na stosie zawsze są odkładane co najmniej 2 rejestry), zresztą powracasz nie do miejsca, w którym nastąpiło...
GOTO to raczej pasuje do BASIC'a a nie C++ wiec lepiej tego unikaj jak ognia :) Przyklad ktory podales byl ok. Nie testowales tego? Szczerze to byłem przekonany że ten przykład nie będzie działał. Nigdzie nie wyczytałem, że instrukcja 'return' powoduje bezwarunkowe przerwanie wykonywania funkcji. Wiem, że instrukcji goto powinno się unikać, ale nawet...
arduino return return remote return patch
falownik yaskawa v1000 apache htaccess głośnik wymiana magnesu
zasilacz zwrotne napięcie sprzedam multimetr brymen
Zmywarka Electrolux EE M432 10L miga i nie reaguje Jak podłączyć gramofon Fiszer do Radmor 5102?