Ja dorzucę jeszcze jedno - jakby nie napisał ISR to odmierzanie przerw przez delay w pętli głównej już nigdy nie będzie działało prawidłowo - odliczany czas powiększy się o czas realizacji wszystkich przerwań. To można ominąć w prosty sposób wywalając te delaye i robiąc opóźnienia na timerze.
na samym końcu jeszcze daj jakaś przerwę np. delay (1000) by cały czas Ci nie odświeżał ekranu bo ekran możne nie nadążyć z odświeżaniem, po za tym według tego schematu E masz podłączone do pinu 11
(at)Piotr79611 Na ARM delay jest już realizowany przy pomocy timera - SysTick. Stąd zresztą wynika kolejny problem - jeśli przerwanie przerwie delay i samo odpali delay to wszystko się pokaszani. Także zmień sposób rozwiązania problemu. Możesz w przerwaniu włączyć te diody, jednocześnie odpalić timer, który wywoła przewanie gaszące diody.
Nawet z uwzględnieniem zmniejszenia dokładności (które przy wykorzystaniu aktualnej wersji avr-gcc przy typowych opcjach kompilacji nie występuje – patrz fragment If the avr-gcc toolchain has __builtin_avr_delay_cycles(unsigned long) support w dokumentacji) te funkcje (jako same w sobie) są całkiem niezłe. W praktycznych zastosowaniach ich niedokładność...
mickpr - zły pomysł bo będzie mu blokowąło program A kto mówił, żeby przerwa była typu "waitms/delay". Przerwa może być zrealizowana jako flaga blokująca odczyt RC5 przez określony czas - a pętla odbierająca zdarzenia może chodzić cały czas z pełną prędkością wykonując inne zdarzenia. Zaletą "mojego" rozwiązania jest to, że regulując ten czas można...
W pętli repeat na końcu dopisz wyrzucenie danych z tablicy na ekran typu printf / writeln czy jak to się robi w języku w którym piszesz. czyli: repeat ...(jeden krok sortowania babelkowego) writeln(wypisz tutaj dane z tablicy) until ... Jeżeli ma to być robione wolno krok po kroku, to dodatkowo w repeat dodaj jeszcze jakąś przerwę funkcja sleep/delay...
delay nie w przerwaniu.po po wykryciu przerwania nastepuje tylko ustawienie znacznika przerwania, a w prog glownym wylaczenie przerwania mala przerwa i skok do podprogramu w zaleznosci od znacznika
Podczas odbioru danych z pinu PD2 ( funkcja zgłoszenie ) występuje błąd tylko wtedy gdy przerwanie z timera 0 jest aktywne. Gdy na czas odbioru danych zablokuję to przerwanie procesor ładnie odbiera wysyłane do niego dane. I moje pytanie brzmi: Co jest nie tak z przerwaniem? Konkretnie to, co wskazał albertb: ... jeśli masz włączone przerwanie to jego...
ISR(INT2_vect) //procedura obslugi przerwania { impulsy++; } A czy zadziała: (chyba powinno ;)) SIGNAL(SIG_INTERRUPT2)// gdy nastąpi przerwanie na wejściu INT2, wykonuje to co w klamrach { impulsy++; // każde przerwanie powiększa zmienną impulsy o 1 // tu wpisz swoją funkcję - opóźnienie o 40 milisekund } Ale spróbuj też w tym swoim...
Nie licz na gotowe biblioteki, które najczęściej zawierają masę błędów. Napisz swoją obsługę serwa. Timerem wygeneruj impuls zależnie od tego jaki kąt chcesz uzyskać. Wiele serw nie wymaga przerwy pomiędzy impulsami ok 20ms, jeśli jednak ma ona być to też jest proste, po wygenerowaniu impulsu, wywołane zostanie przerwanie, które zmieni konfigurację...
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...
Jak byś był tak uprzejmy podesłać kod to byłbym bardzo wdzięczny Proszę bardzo, kod lda M88 8MHz Dodano po 2 Nie twierdzę, że są super. Prostuję jedynie wprowadzanie w błąd. Może konkretny przykład a nię że jest inaczej niz pisałem? <ciach> Post raportowany. Uprzedzam kolegę, że jeśli w kolejnych wypowiedziach lub tematach po raz n-ty kolega...
Samuraj, dzięki Ci wielkie! Twoj kod działa! Tzn że układ mam prawidłowy a kod od madworm'a jest do bani. Twój kod przypomina mój pierwszy kod który pisałem dla tego układu. Przerwy delay nie są potrzebne - działa doskonale bez nich (chociaż przy innych funkcjach potrzebny jest dłuższy czas odczytu - pewnie dlatego wprowadziłeś to opóźnienie ?) Sygnał...
Musisz wyrzucić z programu delay(). Zamiast tego, używa się millis(), choć jest to bardziej skomplikowane, podczas "przerwy" procesor może wykonywać inne zadania, więc jest to lepsze. https://www.arduino.cc/en/Tutorial/Blink... https://www.arduino.cc/reference/en/lang...
A gdzie jest obsługa przerwania?
Regularna przerwa/przycinanie (ping skacze) sieci WIFI co 1-2min. WLANSVC WIFI delay http://www.elektroda.pl/rtvforum/viewtop... Dodano po 2 Użyj programiku producenta karty WIFI do zestawiania połączenia WIFI i wyłacz sprawdzanie roamingu jeśli masz taką opcję, czyli jak często programik szuka...
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ć...
Możesz mi wytłumaczyć o co chodzi z z tym wejściem podłączonym do masy na końcu od strony zasilania a wyjściem na początku??? jak to ma wyglądać na płytce?? Rozumiem że powinna być przerwa na masie, czy tak? Witam Najprościej, to na załączonym obrazku. Czerwona linia to masa. Bliżej IC3 jest wyjście niż wejście, oznaczone na niebiesko. I tak będzie...
Kod jest bez sensu, delay tu nie pomoże. Sam wyłączasz motor od razu, czy po delay 100, po to domyślam się jest funkcja volumeMotorStop();. Użyj millis, wywołuj funkcję co określony czas 10-50ms - tak go dobierz by w tym czasie przyleciał przynajmniej jeden nowy kod IR, w osobnym bloku programu tak samo odbiór IR, jeśli pojawi się nowy kod z pilota...
Zgadza się, ale podałem bardzo prosty przykład, na którym to zadziała(prosty przykład w celu zrozumienia ) W rzeczywistości program jest bardziej złożony. Na tym przykładzie to nie zda egzaminu, bo jeden potencjometr steruje dwoma wyjściami, 9 i 10 . Na każdym wyjściu są też inne wartości. [syntax=c] int Pot1odczyt = A0; int pot1; int zalaczanie; int...
Pewnie, że się da, odniosłem się tylko do kodu kolegi i tego co tam ma ;) Dużo błędów : [syntax=c]void loop() { pot0 = analogRead(potPin0=0); // odczyt A0 i zapis w zmiennej pot 0 pot1 = analogRead(potPin1=1); // odczyt A1 i zapis w zmiennej pot 1 pot0map = map(pot0, 0, 1023, 100000, 500000); digitalWrite(diodaPin, HIGH); delay(pot0); // przerwa zależna...
O, właśnie tak. Wypowiedziałem się bardzo lakonicznie i dziękuję za wskazanie konkretnego rozwiązania. Jednak jeśli pozwolicie, to czepnę się kodu wewn. loop(). [syntax=c]void loop(void) { server.handleClient(); for (int i = 0; i < 10; i++) { tab[i] = pomiar(); delay(500); } for (int i = 0; i < 10; i++) { Serial.println(tab[i]); } }[/syntax] Pomiar...
Normalna praca sterownika PLC polega na cyklicznym wykonywaniu: odczytu wejść, sekwencji kolejnych rozkazów składających się na program oraz ustawieniu wyjść. Wyobraź sobie taki ciąg rozkazów umieszczony w OB1: 1. A = 1 2. B = 2 3. CALL FC1 4. B = 1 5. A = 2 6. CALL FC1 Wewnątrz FC1 zawsze zmienna A <> B. Podprogram (FC1) jest wykonywany tylko...
Jakie środowisko? Zakładam, że CooCox, ponieważ w innych takie rzeczy raczej nie występują. Odkąd pamiętam, to taki zapis zawsze poprawnie konfigurował SysTick do generowania przerwań co 1ms (1000Hz): [syntax=C] #include core_cm4.h #define FREQUENCY 168000000ul // lub dowolna inna, ale prawdziwa ///... jakiś fragment programu... if (SysTick_Config(FREQUENCY...
Powyżej podałem przykład co powinno się znajdować w obsłudze przerwania od timera. Natomiast same przyciski możesz sprawdzać w pętli while() jeżeli nie chcesz angażować do tego osobnego przerwania.
if (!przerwa) {Czasomierz_ON; przerwa=1;} else if (przerwa){Czasomierz_OFF;INT0_OFF;odczyt... } No zastanówmy się przez chwilę. Kiedy to się zdarzy, że zarówno przerwa jak i !przerwa dadzą fałsz? Dlaczego zamiast typu _Bool używasz typu char dla zmiennej logicznej? Do czego służy wywołanie sprintf(bufor,"POMIAR"); To zamiast...
Dbaj o prawidłowe formatowanie kodu to będziesz więcej widział: [syntax=c]int LedPin = 13; int InPin = 10; int delayPeriod = 330; int count1 = 0; int count2 = 0; //5blysków,5sekund przerwy,5blyskow,15s przerwy... void setup() { pinMode(LedPin, OUTPUT); pinMode(InPin, INPUT_PULLUP); } void loop() { if (digitalRead(InPin) == LOW) { digitalWrite(LedPin,...
Idzmy głównym wątkiem bez cofania sie. Tak, uaktywnia ale już wiem, ze było ono przechowywane w SREG. To jest wyjaśnione. W SREG przechowywana jest informacja o fladze I, czyli fakt włączenia lub wyłączenia przerwań globalnych. Nie ma to nic wspólnego z "przechowywaniem" informacji o przerwaniach INTx. Instrukcjami operującymi na fladze I w SREG są:...
Pokaż kod. Nie wysyłaj znaków bez przerwy - zrób jakąś przerwę po każdej serii znaków, czyli np. delay() w pętli.
Witam, Może pokaż kod, będzie łatwiej coś poradzić. W czym programujesz? Arduino IDE? Jeżeli dobrze rozumiem, ma być tak: - LED od dołu zaświecają się po kolei z małą przerwą (coś ala linijka) - Najwyższa (po zaświeceniu się poprzednich) miga 3 razy, ale powoli się rozjaśniając i przygasając Widzę, że masz tam PWM, więc ogólnie i bardzo łopatologicznie,...
Witam. Zanim postanowiłem napisać nowy temat przeglądałem różne tematy z podobnymi do mojego problemami i nic z tego nie rozumiem. Do rzeczy- zbudowałem sterownik do zgrzewarki oparty na uC Atmega8A https://obrazki.elektroda.pl/9250457200_... Problem polega na tym że uC nie pamięta zapisanych ustawień (czas preimpulsu, czas przerwy,...
pomocnicza=(PINB & 0x04) ? 0:1; if((!(PINB & 0x00)) && (pomocnicza == 0)) { praca++; _delay_ms(20); } else if((!(PINB & 0x01)) && (pomocnicza == 0)) { praca--; _delay_ms(20); } else if((!(PINB & 0x00)) && (pomocnicza...
Ciąg dalszy ujarzmiania OLED-a na SSD1363 256x128 po I2C, cały init i próba sterowania bez biblioteki U8g2, postęp taki, że początkowe szarości zamieniły się w pełne jasności i działa przełączanie trybu normal / inverse oraz załącz i wyłącz w głównej pętli, niestety dalej występuje błędny init lub samo sterowanie, trudno zgadnąć. Wszystkie komendy ustawiające...
a jak zatem rozumieć priorytety przerwań związane ze slotami? Nie jestem biegły w ARM7, powtórzę, ale polegam tu na tej publikacji: http://engenuics.com/wp-content/uploads/... a szczególnie na tym fragmencie: 4. On the LPC214x processors, two hardware priority groups are available. The high priority interrupt is referred to as...
Jaki kod, jaka plytka, czy programowanie sie powiodlo? Czy print na UART dziala? Podaj szczegolowe informacje Added after 3 EDIT: jeśli mowa o esp8266oled_2ds18B20.zip to tam w środku jest plik .ino, mam nadzieje, że nie próbujesz bezpośrednio flashować pliku zip. To jest kod do skompilowania. On ma sekcje: [syntax=c] void setup() { Serial.begin(115200);...
Jeżeli chodzi o rozwiązania gotowe to proponuję 1 przekaźnik pulsujący (np PCM04) do ustawiania długości całego cyklu (praca+ przerwa). Drugi on-delay prostrzy i tańszy, do ustawiania czasu pracy silnika. Można oczywiście użyć 2ch PCM04 pracujących w różnych trybach. Można też użyć 2ch on-delay, ale wówczas wzajemne przelączanie jest kłopotliwe w realizacji,...
Wyrzuć te delay'e. Zmienną licznik jak radzili koledzy zmień na volatile. Zmień sei(); na SREG |= (1<<7); Jeśli będzie działać, to zapytam jakiej wersji avr studio używasz? [syntax=cpp] #include <avr/io.h> #include <avr/interrupt.h> volatile uint8_t Count = 0; ISR(TIMER0_OVF_vect) { Count++; TCNT0 = 0; } int main(void) { DDRB = 0xFF;...
No rzeczywiście - jest DELAY 1000ms. Czyli to by znaczyło, że muszę opóźnić o sekundę, tak? Tylko w którym miejscu podczas przygotowywania projektu w Gordianie mam to zrobic, skoro wybieram opcję "tylko miksuj"? Czy chodzi o "przeplatanie i koszty-AVI" zakładce "bitrate"? Tam widze, że jak zmieniam ilość tych klatek, to zmienia się czas przerwy. Czyli...
Porada: napisz to od nowa. W obecnej wersji masz delay w przerwaniu EXTI i brak przerwania timera do obsługi wyświetlacza.
dołącz #include <util/delay.h> i masz _delay_ms();//milisekundy _delay_us();//mikrosekundy pętla for(i=0;i<1000;i++) { } opóźnia ale jest wykowywane bardzo szybko i nawet tego nie zauważysz[około 1ms]
Dodaj Wire.begin(); jako pierwsze w setup i sprawdź czy ruszy. Upewnij się, czy wiesz który pin jest 0, a który 7(MSB/LSB). Nie łącz funkcji na początek, przetestuj jedną. Spróbuj ustawić 7 pin naprzemian w stan wysoki/niski np z przerwą 1sec(z użyciem delay()). Weź miernik albo podepnij LEDa(pamiętaj o rezystorze). I zobacz efekt.
[syntax=arduino] int odstep = 10000; //tutaj deklarujesz co ile ma być odstęp int przerwa = 100; //a tutaj ile ma trwać przerwa const byte wyjscieKtoreBlokujesz = 13; // dioda na płytce Arduino unsigned long CzasStart = 0; void setup() { pinMode(wyjscieKtoreBlokujesz, OUTPUT); digitalWrite(wyjscieKtoreBlokujesz, HIGH); } void loop() { unsigned long...
Tia z WGK. Fałsz wynika z tego, że podaje sie prostokąt. Nie ma to jak 3 i 5 harmoniczna... Przynajmniej tak mi się wydaje... No i może troche niedokładnie są częstotliwości. #include <avr/io.h> #include <compat/deprecated.h> #define SPP cbi(PORTA,PA3);sbi(PORTA,PA2... #define SPM cbi(PORTA,PA2);sbi(PORTA,PA3...
Jak na mój gust to ty nie wychodzisz z obsługi przerwań. W przerwaniu masz "delayms(DS18B20_TCONV_12BIT);" (to jest pewnie 750ms...) jeżeli przerwanie się wywołuje częściej niż co 750ms (+ew czas na obsługę LCD itd.) to w praktyce procesor działa tak: 1.uruchamia się w main(); 2.... 3.Włączenie przerwania sei(); 4.Wywołanie przerwania 5.Długo trwa przerwanie......
Napisałem delay oparty o timer konfiguracja TIM1: void TimerConfig() { RCC_APB2PeriphClockCmd(RCC_APB2Perip... ENABLE); TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_ClockDivision=... TIM_TimeBaseStructure.TIM_CounterMode=TI... TIM_TimeBaseStructure.TIM_Period=72; TIM_TimeBaseStructure.TIM_Prescaler=1;.....
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...
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...
Brakuje Ci drugiego : _delay_ms(500) Dodano po 4 Nie używam składni typu: _delay_ms(500), ponieważ w pliku delay.h jest następująca informacja: The maximal possible delay is 262.14 ms / F_CPU in MHz. Ale jest także napisane: When the user request delay which exceed the maximum possible one, _delay_ms() provides a decreased resolution functionality....
....... panie autor.... zastanów się, nad tym co się dzieje na twoim wejściu INT ??? Przerwanie sobie jakoś tam zainicjalizowałeś i ok, ale co masz na wejściu ??? bo wg mnie - trzeci stan Hi-Z. Czyli napięcie ci pływa - brak podciągania .... i dziwisz się, że przerwanie jest wciąż wyzwalane nawet bez naciskania przycisku? ..... Podciągnij wejście albo...
Musisz inkrementować wartość wypełnienia pwm (0-255) i po każdym zwiększeniu o jeden dać przerwę o długości zgodnie z twoim oczekiwaniem. jeżeli np. rozjaśnianie ma trwać np 5s to dzielisz 5000(ms) / 255 i to będzie długość przerwy. Na początek możesz dać delay dla testu ale docelowo zdecydowanie nie polecam i wykorzystaj np. millis. Ściemnianie tak...
Dałem pętlę while(1) w main i dioda nadal nie miga. Gdze ją dodałeś? U mnie działa. [syntax=c] #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define LED_PIN (1<<PD7) #define LED_TOG PORTD ^=LED_PIN volatile int licz; int main(void) { DDRD |= LED_PIN; TCCR0 |= (1<<CS02); TIMSK |= (1<<TOIE0);...
Witam, Chciałem zrealizować opóźnienie czasowe załączenia urządzenie po wystąpieniu przerwania o czas tau2 który został zliczony przez timer wynosi on ok 70ms, tau2 jest w us czyli ok 70000us Napisałem dwie funkcje w oparciu o delay_ms i delay_us i otrzymuje dwa różne rezultaty, dlaczego? ISR(INT0_vect) { if (zal==1) { wl=1;...
Kilka uwag: - korzystaj z funkcji i rozbijaj program na funkcje. Niektórzy twierdzą, że jeśli blok ma więcej niż 10 instrukcji to należy go wyrzucić do funkcji. Moze to przesada, ale ułatwia czytanie kodu. - nie zostawiaj niewykorzystanych pinów jako wejścia w układzie - łapią zakłócenia, co w centralce alarmowej nie jest zalecane. - wewnętrzny pull...
W końcu znalazłem przyczynę problemów - dzięki sugestii Andrzej__S zweryfikowałem jeszcze raz układ by się na 100% upewnić czy mam wszystko dobrze podłączone i wszystko było OK tylko ja zapomniałem o jednej oczywistej rzeczy - sterowanie oświetleniem odbywa się za pomocą TRIAKA :) Gdy załączałem triaka w obsłudze przerwania z timera to jego wyłączenie...
Nie wiem czy to celowe czy sobie ktoś jaj nie robi na Wielkanoc ale jezeli sobie zdajesz sprawe że kod jest niewłasciwy to dlaczego sie dziwisz że ci niewłasciwie działa? Mnie sie wydaje że poprostu ten program ci sie wiesza jak nadpisze stos i dlatego co jakis czas jest tak jak opisujesz. Na czerwone własnie te pisanki. Pierwsze przykazanie asemblerowca...
Twoje procedury obsługi przerwań są stosunkowo długie. Np. ISR(TIMER1_COMPA_vect) trwa ok. 670 taktów zegara. Z kolei odstęp między kolejnymi przerwaniami przy zmiennej okres1=127, jak sam napisałeś, wynosi 8*128=1024 taktów. Jeżeli zmienną okres1 zmniejszysz np. do 80 taktów, to przerwania będą częściej niż trwa ich obsługa, więc niektóre zostaną po...
oraz jeszcze: 1. stosujesz stare funkcje obsługi przerwań a nowe wektory - stosuj nowe funkcje ISR(): http://nongnu.org/avr-libc/user-manual/g... i wywal nagłówek #include <avr/signal.h> 2. returny w funkcjach ISR() i main() są zbędne. 3. Ostatnia uwaga kol Zaquadnik jest baaaardzo istotna. Nie dość, że czekasz w funkcji...
Ja myślę, że to nie będzie to.. To raczej nie kodowanie Sony tylko SPACE - kolega mirek jest od tego specjalistą :) A mi natomiast udało się odczytać pilota. Zrobiłem to tylko pętelkami i na piechotę, ale ważne że działa! :) Gubię jeszcze gdzieś bity bo 1. i 2. na pilocie powodują takie samo zaświecenie diod. W zasadzie to dekodowanie można to zrobić...
Czy nie masz przypadkiem do projektu dodanego pliku rs232.c a w nim zadeklarowanych funkcji main, wyslij ? W tej linijce Executing: "C:\Program Files\HI-TECH Software\PICC\STD\9.60\bin\picc.exe" -oodbierz.cof -modbierz.map odbierz.obj delay.obj rs232.obj widac 3 obiekty odbierz.obj delay.obj rs232.obj.
Nie chcesz pisać to nie. W każdym razie, twój program, w przerwach pomiędzy przerwaniami gdy będzie ono aktywne, będzie wykonywał pętle główną. Autor chce, aby po uaktywnieniu czujnika, pojawiła się fala led. Ja zaprzęgnę do tego przerwanie od timera, ty penie też. U mnie po wystąpieniu zbocza, ustawie flage, przertwania od timera zrobia fale swiatła....
Stała rada - żadnych delay(), tylko przerwanie timera i zmiana sterowania serw w tym przerwaniu. Nie rozumiem? Co jest złego w dawaniu po 1, 2 stopnie po bardzo małej przerwie? Bo gdy timer odlicza, to mikrokontroler może wykonywać inne zadania. W przypadku funkcji delay(); może jedynie czekać aż ten delay się skończy.
w ten sposob pozbylem sie delaya w ogole Jeżeli nie masz żadnych delay w loop() to tym bardziej możesz przenieść obsługę przycisku w to miejsce. Proponuję użycie EasyButton: https://github.com/evert-arias/EasyButto... Funkcja read() z tej biblioteki też nie wprowadza żadnych delay(), a detekcję naciśnięcia przycisku można sobie elegancko podpiąć pod...
To nie ma prawa zadziałać. Kilka uwag odnośnie schematu blokowego: 1. blok "Ustawienie wartości początkowych timera T0" w procedurze obsługi przerwać to nie jest właściwe miejsce. Ta wartość powinna być ustawiona raz na początku głównego programu 2. Porównanie "P4.3 == 0", "P4.4 == 0", itp. jest bez sensu, bo to chyba są piny wyjściowe, które sterują...
To byłoby OK ale ja w tych odstępach między impulsami chcę jeszcze dokonywać sprawdzeń i obliczeń a w wypadku delay nie jest to możliwe. Niestety
Czy jest możliwość, aby po powrocie z przerwania na PORTC pojawiła się ostatnia wartość sprzed wywołania tegoż przerwania? O ile dobrze zrozumialem twoj problem to rozwiazanie jest proste - na poczatku przerwania zapamietaj stan PORTD w jakiejs zmiennej i odtworz go na koncu obslugi przerwania. Co do delay w przerwaniu to sie nie przejmuj tym co pisza...
Po pierwsze powinieneś pisać kod bardziej po bożemu czyli stosować rzutowania. Po drugie Atmega 8 domyślnie pracuje na 8 znakach i nie trzeba tego ustawiać. Upewnij się że masz wyłączoną w komputerze kontrole przepływu. Funkcja _delay_ms przeznaczona jest do pisania własnych opóźnień bo sama jest ograniczona i 2000 jako argument nie przyjmie. Według...
Mam timery, ale przy użyciu timerów nie mogłem uzyskać zadowalającej mnie dokładności. Szczerze mówiąc to sposób jaki zastosowałem podsunął mi jeden z doświadczonych uzytkowników elektrody:) Do Dondu: Dzięki za radę. Sprawdziłem. Kod zmienia się znacznie przy zmianie optymalizacji. Dzięki i pozdrawiam Dokładnośc i powtarzalność bez timerów? w przypadku...
To mogłoby się zgadzać, ponieważ z dokumentacji czasy zawarte w ramce (narastania, opadania, czasy trwania stanów) są wyrażone w nanosekundach ;) więc trzeba by przeliczyć ile czasu zabiera jeden cykl procesora przy 16MHz i zobaczyć ile czasu zajmuje 25*6+16 cylki maszynowych PS: problem rozwiązany. Dałem zamiast każdego DELAY(SHT_DELAY); funkcję _delay_us(5);...
[syntax=avrasm]#include <LiquidCrystal.h> #include <EEPROM.h> #include <Button.h> /*EEPROM ADRES (1) - pre (5) - przerwa (9) - impuls (13)- pauza */ Button menu = Button(10, PULLUP); Button plus=Button(11,PULLUP); Button minus=Button(9,PULLUP); Button start=Button(12,PULLUP); LiquidCrystal lcd(8, 7, 3, 2, 1, 0); long pre=0; //czas...
A jak masz 10 przycisków wykorzystasz 10 przerwań? marnotrawstwo. wykorzystasz jeden licznik i po kłopocie zero opóźnień typu delay. Same zalety. minus? jeden: wykorzystany licznik.
Spokojnie. Twój kod z tego co widziałem napisany jest w ASM i dla mnie, w tej chwili jest niezbyt przydatny, bo po prostu tego nie ogarniam. Skoro nie mam podstaw do wypowiadania się na jego temat to co mam komentować? Czytaj uważniej co pisze - kazałem ci tylko przejrzeć komentarze do kodu a nie komentować go. Może jakbyś zerknął na kod a raczej tylko...
Dobra jak dodam przerwanie w które będzie obsługiwało wyświetlacz, nie wpłynie to na poprawność pomiaru? Pomiar prędkości masz na przerwaniach. Mało tego, sprzętowe przechwytywanie, więc czas obsługi innych przerwań nie wpłynie na pomiar. Pomija skrajności w rodzaju delay_ms(1000) w przerwaniu.
Co do 300 i 400 przerwania są w blokach OB ( z help-u ) OB1 End of startup or end of OB1 1 Free cycle OB10 Time-of-day interrupt 0 OB11 OB12 OB13 OB14 OB15 OB16 OB17 OB20 Time-delay interrupt 0 OB21 OB22 OB23 OB30 Cyclic interrupt OB31 OB32 OB33 OB34 OB35 OB36 OB37 OB38 OB40Hardware interrupt OB41 OB42 OB43 OB44 OB45 OB46 OB47 OB55 Status interrupt...
Przez ostatnie dni trochę popróbowałem i coś tam wychodzi... Mogę już wpisywać dane przerwy... Mam jednak problem z tą przerwą pomiędzy kolejnymi ruchami silnika. aktualnie do wykonania tej przerwy używam delay(), niestety użycie tego blokuje wszystko, przez co nie mogę swobodnie zmieniać wielkości tej przerwy... jedynie jak się wstrzelę klikając cały...
Cześć. Zbudowałem zgrzewarkę opartą na kodzie z netu i przy wgrywaniu najpierw nie miał biblioteki a po wgraniu z netu bibilioteki button wyskakuje błąd exit status 1 'PULLUP' was not declared in this scope Mam podejrzenie że zła bibliotekę wgrałem ale nie wiem jak to sprawdzić lub która bibliotekę wybrać bo jest ich masa. Kod poniżej : (mam nadzieję...
(at)ElektrodaBot Nanieś te poprawki [syntax=arduino] #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <SoftwareSerial.h> // Definicja struktury ramki danych #pragma pack(push, 1) struct DataFrame { byte startSequence[6]; // Początek ramki byte data[21]; // Pozostałe dane, łącznie 27 bajtów z początkiem ramki }; #pragma pack(pop)...
Kod tak z grubsza na arduino , ale na Logo będzie Ći łatwiej, jeśli opanujesz np:bloki. Jeśli zdecydujesz się na Logo, to przenieś post do działu ,, automatyka sterowanie PLC ,, tam prędzej ktoś pomoże . // PINY GUZIKOW na ARDUINO MEGA int dodaobr = 9;//przycisk ,ustawianie dodawania temperatury int odejobr = 8;//przycisk ,ustawianie odejmowania temperatury...
Witam, Mam taki kod : [syntax=c] int SigPin = 9; int PotPin = 2; int pot; int zalaczanie; int przerwa; void setup() { pinMode(8, OUTPUT); //Konfiguracja wyjść pod diodę LED pinMode(SigPin, OUTPUT); Serial.begin(30000);//Uruchomienie komunikacji przez USART } void loop() { digitalWrite(8, HIGH); //Włączenie diody delay(100); //Odczekanie 1 sekundy digitalWrite(8,...
Wychodzi na to ze to wina srodowiska? Da sie jakos naprawic te usterke? Powiem szerze ze na eclipse bardzo przyjemnie mi sie pracuje:) ale jak takie bledy ma..to mozna caly tydzien szukac przyczyny.. Ja bardzo przepraszam za to co napiszę teraz, a i tak to będzie moja bardzo delikatna reakcja na elektrodzie, ale to co powyżej jest napisane to kompletna...
Czujniki to ds'y? Czytasz je z delayem?
int pot ; unsigned long czas; unsigned long drugiczas; void setup() { pinMode ( 8, OUTPUT ); pinMode ( A4 , INPUT ); pinMode ( 3, INPUT_PULLUP ); pinMode ( 9, OUTPUT ); pinMode ( 10 , OUTPUT ); Serial.begin ( 9600); } void loop() { pot= analogRead ( A4); pot = map(pot , 1, 1022 , 1,5); czas= millis(); switch (pot){ case 1: przerwa=1800; // 50ml case...
Używam kości 512. Ogólnie jednorazowo zapisuję to co jest wyżej, czyli 8 bajtów. Jeśli chodzi o if'y to delaya dałem, żeby była przerwa pomiędzy zapisami (myślałem, że to rozwiąże problem niepoprawnego zapisu). Tak czy inaczej na końcu funkcji zapisu do EEPROM i tak jest delay 5ms. Zapomniałem wyżej wspomnieć, że problem ten pojawia się tylko jeśli...
Możesz użyc tzw. flag w programie. W programie obsługi przerwania od timera musisz stworzyc znacznik minięcia określonego czasu. Oto fragment programu w którym w przerwaniu Timera ustawiam taki znacznik. [syntax=c] //--------------------------------------... // czesc wspolna procedury obslugi przerwania //--------------------------------------...
Witam wszystkich. Mam pewien problem z ATtiny85. Jest to układ do stroboskopu z regulacją częstotliwości oraz współczynnika wypełnienia. Program napisałem w środowisku Arduino IDE i na Arduino Uno wszystko działało bez problemów. Po przeniesieniu programu na ATtiny85 nie mogę regulować wypełnienia. Dwa potencjometry 10k są podpięte pod pin 2 i 3 czyli...
Pomiędzy rozjaśnianiem a ściemnianiem są 5 ms przerwy. Jeśli i to jest za długo, to po prostu usuń z kodu oba " delay(5) " .
Dodam jeszcze, że budzenie z przerwania TWI z IDLE MODE jest CHYBA(?) w tej tabelce jako OTHER I/O: http://obrazki.elektroda.pl/7969103400_1... Dodano po 1 Po zaimplementowaniu zapisu i odczytu wszystko gra i buczy :) Procesor śpi gdy TWI śmiga. WNIOSKI KOŃCOWE - 24C128 IS27 oznacza kość z 2,7V czyli działającą na wyższym zakresie napięcia...
Poza tym pierwsza i ostatnia linia to to samo: [syntax=c]GPIOA->BSRRH = 0x2;//(1UL << 1);[/syntax] A wystarczy: [syntax=c] while(1) { GPIOA->BSRRH = 0x2;//(1UL << 1); Delay(n); GPIOA->BSRRL = 0x2;//(1UL << 1); Delay(n); } [/syntax] i jest ładny prostokąt.
Dlatego tak się dzieje, że _delay_ms(50); powoduje, że procesor mieli sobie coś w pętli przez 50ms nie interesując się niczym innym niż przerwaniami. Jeżeli chcesz coś robić w pewnych określonych interwałach czasowych użyj przerwań od timera.
Jeżeli używasz scanNetworks(), to powinieneś po wyświetleniu i zapisaniu dostepnych sieci WiFi użyć scanDelete (), aby zwolnić rezultat skanowania z pamięci RAM. https://espressif-docs.readthedocs-hoste... Przykład: https://github.com/espressif/arduino-esp...
Wydaje mi się, że będzie podobnie jak dla "for" z pierwszej wersji, ale jutro postaram się sprawdzić. Dzisiaj wymyśliłem, że podzielę duży krok na mniejsze które się nie tną i oddzielę "delay". Wpakowałem delay (100) po każdych 3000 krokach. Poszło, ale stukał na każdej przerwie i wyglądało to beznadziejnie. Zmieniłem delay na (0). Pracuje płynnie i...
https://obrazki.elektroda.pl/2568884200_... Witajcie moi drodzy Zapraszam na kolejną część mojego tutoriala PIC18F2550 i kompilatora SDCC . W tej części zademonstruję jak używać wyświetlacza 7-segmentowego z PIC18F2550 . Kod obsługi wyświetlacza będzie oczywiście napisany w oparciu o przerwania i timery . Cały proces powstawania układu...
Bardzo prosta sprawa: argument delay (x) podaje się w milisekundach. Oznacza to, że aby przerwa wynosiła 1 sekundę, musisz wpisać tam 1000. Wpisanie 100 spowoduje zatrzymanie programu tylko na 0,1s, co właśnie zaobserwowałeś.
W dobrze napisanym kodzie delay nie jest potrzebny. OW robi się na przerwaniach - UART albo timer.
if (j>21 && j<23) // 5-secundowy delay po 22 W miejsce operatora logicznego && możesz próbowac zastosowac operatora bitowego & . To jest nieprawidłowa rada, logiczny a bitowy to zupełnie inne działanie. A co do nieszczęsnej stałej 23, gdyby to był mój algorytm bym to bardziej wyraziście rozwiązał, albo przez zmianę stanu w...
A przy kodzie RC5, bo przy nim raczej zostanę? [syntax=c]case 0x20: // Roleta Dół digitalWrite(LED5, LOW); delay(20); digitalWrite(LED5, HIGH); delay(20);[/syntax] Takie coś działać, działa, ale oczywiście z przerwami 20ms. Jest jakaś opcja, żeby przerobić ten kod i żeby działał, że jeśli mam przycisk wciśnięty to cały czas trzyma załączoną diodę/przekaźnik?
Przepraszam, miałem troche przerwę od tematu z powodu uczelni, ale już wracam. . Ten drugi sposób to ciągłe sprawdzanie w pętli głównej stanu bitu np. LED1 w PORTC i gdy wykryjesz że został ustawiony odliczyć stały delay i zgasić go. Dodano po 6 ... to wracając do ludzików, musisz jakoś drugiego ludzika (który samodzielnie podejmuje decyzje) zmusić,...
/* * grr.c * * Created on: 2009-08-24 * Author: kayou */ #include <avr/io.h> // dostêp do rejestrów #include <util/delay.h> // zawiera definicjê _delay_loop2 #define przerwa 5 int main(void) // program g³ówny { uint8_t pwm=180; // zmienna zawiaraj¹ca wartoœæ wype³nienia DDRD = 0x80;...
Przepraszam ze post pod postem, ale chce cos dodac dla potomnych :) Gotowy kodzik do operowania dioda rgb z uzyciem pwm wraz z #include <avr/io.h> // dostęp do rejestrów #include <util/delay.h> // zawiera definicję _delay_loop2 #define przerwa 5 int main(void) // program główny { uint8_t pwm=180; // zmienna zawiarająca wartość...
Po małej przerwie odpisuje. Płytka termo-transfer co do napięć wyżej już napisałem. W załączniku fotki.
Zasadniczo te wyświetlacze mają interfejs identyczny z HD44780. Pamiętam tylko w jednym miejscu jakaś komenda działała inaczej, ale to dotyczyło bodajże home czy czegoś takiego. I teraz najlepsze - zarówno wyświetlacz graficzny jak i alfanmeryczny mają ten sam sterownik (z tego co wiem) różnią się tylko tym jak są ułożone aktywne piksele (czy są przerwy...
funkcja delay przerwanie delay relay delay
panel sterować nawiew mercedes vectra błędy komputera pasek rozrząd citroen
Podłączenie węża podciśnienia w BMW E30 1.8 benzyna Lata sprzedaży nawigacji samochodowej Modecom MX4