Są takie chwile w życiu elektronika-hobbysty, zwłaszcza programującego mikrokontrolery, gdy jego największym pragnieniem jest umieścić dwa układy w odległości kilkuset metrów i wymieniać między nimi dane. Tanie moduły radiowe nie dadzą rady. Moduły LoRa radę dadzą i do kilku kilometrów, ale kosztem zwiększonego poboru prądu. Ale załóżmy, że nie chcemy...
Napisałeś "wewnątrz" dlatego tak zrozumiałem. Tak wiem, że to mogło wprowadzić Cię w błąd. Ale istotne jest to, że na zacisku pojawiły się jakieś tlenki czy inne zanieczyszczenia, które praktycznie wyizolowały przewód. Zresztą podobną sytuację opisywałem tu na elektrodzie kilka miesięcy temu z czujką dymu sygnalizacji pożaru (już nie pamietam w jakim...
Witam. Nie mam już pomysłu na rozwiązanie mojego problemu. Program działa, ale przy przesuwaniu tekstu w tablicy do prawej AVR GCC generuje dużo mniejszy kod (1002 bajty) niż jeśli zakomentuję tę część pętli głównej programu (1366 bajtów). Kompilacja przechodzi bez warningów w obu wypadkach. Dodatkowo po zaprogramowaniu układu program nie wraca do głównej...
Z góry przepraszam za zamieszczenie całego programu - i tak jest okrojony do minimum - ale gotowy do skompilowania (ICCAVR) Chciałem uniknąć pytań z cyklu a co masz jeszcze w programie - może się gryzie... Problem dotyczy wysyłania danych za pomocą interfejsu RS232 w procesorze AT Mega8 ( pewnie i innych ale ja wałkuje akurat ten ) Nie moge dojść dlaczego...
sei powoduje odblokowanie przerwań procesora, ale nie ma nic wspólnego z przerwaniem pętli języka c. Do tego służy instrukcja break. Pamiętaj jednak, że pętla while wykonuje w kółko ciąg instrukcji ujętych w klamry, stąd też zewnętrznej pętli nie musisz przerywać - jej przerwanie spowoduje zakończenie programu. Natomiast istotnie powinieneś przerwać...
Przerwania mogą pochodzić z różnych źródeł: - od wejsc sterownika (sygn narastający i opadający) - od wyjść impulsowych (gdy wartość zliczona jest równa zadanej) - od szybkich liczników (gdy wartość zliczona równa aktualnej) - od portów komunikacyjnych - od szybkich timerów (liczy co 1ms) Gdy wystąpi któreś z powyższych zdarzeń następuje przerwanie...
Czy to mam szukać na jakiejś określonej częstotliwości AM ? Wystarczy dowolna częstotliwość na falach średnich możliwie daleko od silnych stacji radiowych w mojej opinii. Autor filmu specjalnie się nie przejmuje tym ustawieniem. W komentarzach do filmu pojawia się sugestia , aby przed całą operacją przy wyłączonej stacji dokującej obejść z radiem cały...
Witam! Zaczynam programowanie w C++ Builder 5. Właściwie to też nie znam podstaw C, ale mam pewien projekt do wykonania i od razu muszę zacząć naukę od środka. Projekt polega na sterowaniu układem przez port lpt. Już mi się udało zrobić pewne klawisze i zapalać kolejne diody podłączone do lpt, ale teraz potrzebuje zrobić coś takiego, aby jedna dioda...
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...
Witam! W programie pokazanym po niżej, po naciśnięciu przycisku s1 zapalają się kolejno diody od led1 do led8. $regfile = "m16def.dat" $crystal = 16000000 Config portb = INPUT Portb = &B11111111 config PORTA = OUTPUT porta = &B11111111 s1 alias pinb.0 s2 alias pinb.1 s3 alias pinb.2 s4 alias pinb.3 s5 alias pinb.4 led1 alias porta.0 led2 alias porta.1...
Witam, Napisalem gdzie zaczyna sie problem, uk wywołuje przerwanie samoistnie, zaraz po globalnym zezwoleniu na przerwania sei() sam przechodzi do przerwania i je wykonuje. Chce mieć możliwość przerwania pętli while w jakimkolwiek momencie. Sposób jaki zastosowałem uważam za mało efektywny ale nie wiem jak inaczej się za to zabrać. Pozdrawiam #define...
Witam, Chciałem w programie umożliwić sygnalizację przerwania pętli pomiarowej dla każdego wejścia modułu wejść analogowych SM331. Czy ktoś z kolegów wie, jaką wartość przyjmuje słowo PIW związane z danym wejściem analogowym, kiedy następuje takie przerwanie? Chodzi mi zarówno o wejście 4-20mA jak i wejście przy pomiarze temperatury. W dokumentacji...
Witam Czy jest jakaś możliwość, aby przerwać pętlę while buttonem? Np. mam przyciski start i stop i kiedy kliknę start rozpoczyna się pętla while i trwa do momentu kliknięcia przycisku stop. Problem jest taki, że kiedy uruchamia się pętla while w przycisku start, to nic innego nie można robić dopóki pętla ta się nie skończy. Czy jest jakiś sposób, aby...
Wewnątrz pętli while (bt == 'z') sprawdź wartość bt [syntax=c]char bt = Serial.read(); [/syntax] Albo wymusić przerwanie pętli break-iem. Ewentualnie przypisz do bt inną wartość. [syntax=c]char bt = '0'; [/syntax]
Potrzebuję pomocy w przerwaniu pętli while (linijka 146) założenie jest takie jeżeli BlutoothDane=s to ma wykonać tą pętle a jeżeli BlutoothDane=d to ma ją przerwać. problem jest taki, że nie przerywa pętli cały układ ma działać jako sterownik Led na bluetooth. Proszę o szybką pomoc. Proszę o przeniesienie do odpowiedniego działu.
Cześć, mam może głupie pytanie, ale nie mogę nigdzie znaleźć na nie odpowiedzi. Czy można jakąś komendą zakończyć iterację w pętli for w VBA? [syntax=vbscript]For Iterator = 1 To n Step 1 If k>3 Then 'wykonaj takie i takie zadanie ElseIf m>4 Then 'wykonaj takie i takie zadanie Else 'przerwij działanie kodu i przejdź do kolejnej iteracji End If Next[/syntax]
Witam, Mam problem z przerwaniem pętli oczekującej na dane z portu COM. Makro które napisałem ma za zadanie odczytać wartość z urządzenia zewnętrznego, ale dopiero jak na urządzeniu zostanie naciśnięty odpowiedni przycisk. Chciałbym aby działanie makra wyglądało w ten sposób, że użytkownik klika na dowolną komórkę, w której chce wprowadzić dane, wysyła...
Wyrzuciłem z obsługi przerwania pętle opóźnijące: SIGNAL(SIG_INTERUPT1){ if(bit_is_clear(PINC,PC5)){sbi(PORTC,PC5... else cbi(PORTC,PC5); } Niestety nic nie pomaga. Nadal nie działa.
Temat poprawiłem (wiem jak się pisze, tylko litery czasem nie załapują na mojej wysłużonej klawiaturze). Widzę, że mam dwie skrajne opinie, myślę, że najlepiej (najwygodniej dla mnie) będzie zrobić masę w postaci przerwanej pętli. Co do kabi ekranowanych - oba końce ekranu podłączamy do masy? Czy sprawdzą się w tej roli zwykłe kable głośnikowe np miedziane...
Jeżeli wpiszę continue w blok 3 to po spełnieniu warunku "jakisWarunek" program przejdzie do bloku 4 Niezupełnie. Po wpisaniu continue program - jak sama nazwa wskazuje - będzie kontynuował pętlę do..while w kolejnej iteracji. Do bloku 4 przejdzie po przerwaniu pętli poleceniem break; A w ogóle to w tym konkretnym przykładzie można by zrezygnować z...
[syntax=c]#include <avr/io.h> #include <avr/pgmspace.h> #include <avr/eeprom.h> #include <util/delay.h> #include <avr/interrupt.h> #include <string.h> #include <stdlib.h> #include "LCD/lcd.h" //dyrektywy dla preprocesora //dioda #define LED_PIN (1<<PC7) //do którego pinu podłączona dioda #define BUZZ_PIN...
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 z Arduino. Temat oczywiście nie zastąpi w pełni czytania noty...
Mam problem z przerwaniem w trybie asynchronicznym - Amtega328. Załączam program uproszczony do niezbędnych elementów: [syntax=c]//co 0.5s ISR(TIMER2_OVF_vect) { ... _delay_us(30); //V1 //while(TIFR2 & (1<<TOV2)); //V2 //while(TIFR2 & (1<<TOV2)) _delay_us(1);//V3 //while(TIFR2 & (1<<TOV2)) TIFR2 |=1<<TOV2;//V4 //cli();...
Witam. Natrafiłem dziś na problem z przerwaniem. Mianowicie mam DS18B20, LCD, UART i timery. Program wygląda tak, że temperatura z DSa jest wyświetlana na LCD, wszystko gra. Mam też przerwanie, w którym co sekundę wysyłane jest 6 bajtów do kompa (przez UART). Przerwanie jest od Timera co 1 sekundę. Wszystko gra do czasu. W pewnym momencie program sie...
ale nie wiem jak podejsc do przerwan zewnetrznych (przyciski). Przyciski mam podlaczone pod: P3.3 (Int1), P3.5(T1), P3.4 (T0), P3.2 (Int0). Jak to jest mozliwe ze sterujac multiplekserowo wyswietlaczami segmentowymi wysylajac aktywny bit na port P3, moge jednoczesnie zglaszac zewnetrzne przerwania (z przyciskow)?? Możesz. Ale dlaczego przyciski mają...
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...
W projekcie założyłem sobie dwa przerwania z dwóch timerów. Jedno (nazwijmy je A) wywoływane często i krytyczne czasowo (przerwanie musi być obsłużone jak najszybciej po jego pojawieniu się), trwające tylko kilkanaście cykli. Drugie (B) mniej krytyczne (właściwie w ogóle nie krytyczne), wołane rzadziej, trwające kilkaset cykli. Główna pętla programu...
Problem polega na tym , że zmienna nrzn działa poprawnie tylko w ciele funkcji przerwania, w pętli programu już nie. Jej wartość wynosi 0 poza przerwaniem. //Biblioteki #include <avr\io.h> #include <util/delay.h> #include <avr\pgmspace.h> #include <avr/signal.h> #include <avr/interrupt.h> //Zmienne unsigned char znak [10]...
Witam, mam problem z sprzętowymi przerwaniami na FreeRTOS-ie, dla LPC1768 (Keil v.4.60). Otóż, wstępnie już freeRTOSa ogarnąłem, taski, semaphory, softwareowe przerwania. Wszystko fajnie działa. Przyszedł czas na obsługę przerwań sprzętowych. Próbowałem dołączyć pliki .c i .h które mam do obsługi przerwań danej peryferii, jak i bezpośrednio do projektu...
Do badania stanu portu do którego są podłączone czujniki nie potrzeba przerwania. W pętli programu na okrągło badasz stan lini i jesli wykryjesz zmianę, obsługujesz ją wg. okreslonego algorytmu i z powrotem do badania lini.
Proszę zauważyć, że program to nic tylko przerwania (pętla while(1) jest pusta). O ile składnia programu jest ok to niestety pomimo tego, że toretycznie powinno działać to tak nie jest. Nie zwalam winy na kompilator ale czasami jest tak, że generuje on kod "inny" jakibyśmy chcieli. Proszę nie zapomniec , że trzeba te funkcje przekonwertować na 8-bitowca...
Witam Mam pytanie czy zechciano Ci się zajrzeć do dokumentacji S7-200? Pierwszy fragment. W czasie wykonywania pierwszego obiegu pętli po uruchomieniu sterownika (SM0.1) następuje powiązanie (ATCH) zdarzenia nr 0 (przerwanie od pojawienia się 1 na I0.0) z przerwaniem Q_0 (INT 0). ENI odblokowuje wszystkie przerwania. Drugi fragment: S7 – 200 posiada...
a jesli powiem ze tak tez próbowałem tylko ze odczyt z kodów z rc5 trwa z przerwą 600ms która musi byc pomiedzy odczytem a konwersją temperatury z ds1820 :( Jakoś nie widzę problemu. Przecież Int0 ma wyższy priorytet niż DS. Jerśli istnieją jakieś konflikty to należy zablokować przerwanie Int0 na czas inicjacji DS'a i odczytu temperatury. W trakcie...
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...
Witam Poszukiwałem rozwiązania mojego problemu już po forum ale nie znalazłem rozwiązania, a problem wydaje mi się dosyć prozaiczny aczkolwiek nie umiem go samodzielnie rozwikłać. Mianowicie posiadam w programie prostą strukturę zadeklarowaną jako: [syntax=cpp] struct godzina { uint8_t sek; uint8_t min; uint8_t godz; }; volatile struct godzina TimeOn,...
Witam, Pracuje nad kodem programu do komunikacji przez UART (mikrokontroler <-> komputer) i zastanawiam się nad sposobem implementacji w przerwaniach. Na razie zrobiłem to w taki sposób: - Nadawanie danych wykonuje w taki sposób, że w programie głównym zmieniam w wskaźniku adres początku tablicy którą aktualnie przesyłam przez UART, w przerwaniu...
W obsłudze przerwanie Timer1 zrób tylko ustawianie flagi, a załączanie i całą resztę przenieś do pętli głównej, właśnie tu sprawdzające stan tej flagi. Zamiast grzebać programowo W Timer1, wykorzystaj możliwości Timer1 compare, np w trybie PWM, bez używania przerwania. Ogólnie polecam : -- Pozdrawiam, Daniel
Warhard cyt: Powiedzmy że sygnał liniowo opada ze stanu wysokiego w stan niski w czasie 1 sekundy. (Bardzo ale to bardzo małe strome zbocze) Przerwanie ustawione jest na opadające zbocze. Czy AVR zgłosi mi tylko jedno przerwanie ?. Czy bede miał przerwanie za przerwaniem ? Przerwanie powinno być jedno bez względu na nachylenie zbocza bo na wejsciu jest...
Nie przeczytałem kodu( nieczytelny, popraw post na [code] wklej_Twój_kod [/code :) ]( bez uśmieszku)) Zakładam że Twój kod w przerwaniu 'sumuje czas', następuje przerwanie, kod przerwania wykonuje się i jeżeli będzie to robił dłużej niż okres przerwań 'timer'a to przyjdzie kolejne przerwanie i tu, w zależności od tego czy przerw. mogą się zagnieżdżać,...
Witam! Wykorzystując interfejs I2C chce komunikować się z akcelerometrem BMA180. Interfejs I2C zrealizowany sprzętowo za pomocą kontrolera I2C0 z wykorzystaniem przerwania.Samą komunikację już zrealizowałem, ale mam problem z jej rozwinięciem. Poniżej przedstawiam kod który działa "poprawnie". Główny problem polega na tym, że chciałbym napisać funkcję...
Witam wszystkich Elektrodowiczów! Potrzebuję zrobić ciągłą konwersję w przetworniku ADC (żeby nie tracić przebiegu sygnału analogowego, w czasie przesyłania już skonwertowanej wartości) i wysyłać dane po UARTcie. Do tego chcę wykorzystać przerwanie w ADC. Na 578 str. dokumentacji jest rozdział 29.5.3 o rejestrze AD0INTEN (Interrupt Enable), który mówi...
Witam szanownych użytkowników, Programuję mikrokontroler ATmega32, mam problem z przerwaniem INT2, które po starcie urządzenia się odpala mimo, że nie puszczam sygnału wyzwalającego przerwanie. Ponieważ projekt jest za duży, żeby zamieścić go w całości zamieszczam tylko najważniejsze fragmenty, a dodatkowo dodam plik .ZIP ze spakowanym projektem, który...
Witam. Od pewnego czasu walczę z chińską płytką (blue-pill) z STM32F103 na pokładzie i z tego co już się nauczyłem oraz co sobie w ReferenceManualu wyczytałem to wiem, że AVR'y odłożę na półkę:) Moja nauka jest w stylu 'bare-metal' wykorzystuję jedynie pliki nagłówkowe stm32f103xb.h i kilka od CMSIS które można wydobyć z STM'owych bibliotek, więc ich...
Hello all :) Jestem nowym userem więc na wstępie piszę z problemem (podpinam się pod ten wątek bo dotyczy przerwań USB w SAMiku) Napisałem sobie HIDa pod USB. Testowałem już różne urządzenia (mysz, klawiatura, joystick) i wszystko działa ok (włącznie z wcześniej opisanym problemem z czyszczeniem flag), do momentu w którym zamiast sprawdzać nadchodzące...
Ja myślę, że za dużo nawalone jest w przerwaniu. Ja bym to napisał tak, że w przerwaniu ustawiałbym tylko flagę, a odczyt robiłbym w pętli głównej i to nie wszystkich czujników na raz tylko jeden na przerwanie, a potem następny itd.
Witam Próbuję zrobić tak, aby po naciśnięciu 1 z 4 switchy zapalała się dioda led, i w zależności który wciśniemy, zaświeciła się dioda określoną ilość razy. Kod: #define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/signal.h> #define SET_OUT_LED DDRB |= (1<<PB3) //inicjacja #define SET_LED...
Pomóżcie, bo zacukałem się z obsługą odczytu RC5 w przerwaniu. Problem sprowadziłem do prostego programu, który miga dwiema ledami. LED2 zapala się w trakcie wykonywania wywołanej przerwami procedury odczytu RC5, LED1 ma się zaś zapalić na sekundę po odebraniu dowolnego rozkazu z pilota. Tymczasem całość działa tak, że LED2 owszem, przy naciskaniu klawiszy...
Mam jeszcze takie pytanie. Czy komunikacja poprzez USART powinna działać w oparciu o przerwania czy w oparciu o zwykłe funkcje też może być? Chodzi mi oto czy w bardziej zaawansowanym projekcie nie napotkam później jakiś przeszkód i nie będę musiał przerabiać całości. Pozdrawiam Można zrobić to na oba sposoby z tym że na przerwaniach jest znacznie...
Kurs: Instrukcje Wreszcie dochodzimy do instrukcji, czyli do działu który nauczy nas co robić z poprzednio poznanymi rzeczami. Powiedzieliśmy sobie o zmiennych, operatorach, a dzięki instrukcjom które zaraz poznamy, będziemy mogli wykonywać operacje na nich w szerszym tego słowa znaczeniu. Mamy instrukcje proste i złożone. Instrukcja prosta składa...
Program napisałem mniej więcej od nowa. Wygląda tak: #include <avr/io.h> #include <avr/interrupt.h> #define Potrzebne_50ms 33 volatile int licznik50ms=0; volatile int SygnalDCF=0; //0 - szukamy szczeliny początku transmisji, 1 - dekodujemy sygnał, 2 -koniec ramki DCF volatile int zbocze1=0; //0 - szukamy opadającego, 1 - narastającego volatile...
Witam, ostatnio zająłem się pisaniem stosunkowo prostej aplikacji na AVR ATmega8, potrzebnej mi na studia. Na celu miałem też trochę lepsze poznanie AVR. W czym problem : W moim programie chciałem przetestować typowe zachowanie uC, napisałem kilka prostych funkcji, włączyłem przerwania, zrobiłem pętle nieskończoną w której na moim wyświetlaczu 7 segmentowym...
Witam Mam niezrozumiały dla mnie problem z przerwaniami. Do tej pory ich nie używałem ale że rozwijać się trzeba pora i na nie. A więc mam kod jak poniżej (nie wklejam całego bo symulator nawet dalej nie dochodzi) i w momencie odblokowania przerwań "sei" a dokładniej w linijce ldi r17,0 nie wiem czemu przeskakuje do 8 od dołu "reti" po czym dochodzi...
Witam. Mam problem z przerwaniami w atmega8. Wcześniej nie potrzebowałem przerwań więc to zagadnienie mnie nie interesowało. Potrzebuję wywołać przerwanie zewnętrzne int0 które uruchomi timer1, a ten zacznie odmierzać czas. Napisałem coś takiego (oczywiście to część z większego projektu) '$sim $regfile = "m8def.dat" 'informuje kompilator o...
Witam. Piszę sobie sterownik temperatury w Bascom '51 i mam problem z przerwaniem. Otóż serce układu to AT89C52 do niego jest podłączony RTC DS1678. Ustawiłem RTC, aby na wyjściu INT generował co sekundę impuls. Podaję ten impuls na wejście INT0 procesora. W obsłudze przerwań dałem ustawienie zmiennej Bit na 1, na podstawie jego inicjuję w pętli głównej...
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 na płytce stykowej oraz programu na PICa przedstawię krok...
Cóż , jak napisałeś program , taki masz efekt :wink: Twoja pętla "while" jest źle skonstruowana. ... while(1) { if (i>19) //po osiągnięciu i>19 , wartość k jest ziększana z każdym // obiegiem pętli czyli z prędkościa zbliżoną do światła ;) { k+=1; if (k>2000) { i=0; k=0; P0= ~P0; //zgas/zapal diody...
Witam, zastanawia mnie dlaczego nie mogę używac rcall gdy jestem w procedurze obsługi jakiegoś przerwania (procesor to attiny2313). Podczas symulacji w AVR Studio strzałka jakby zatrzymuje się na tej instrukcji ale program nie wykonuje żadnego skoku. .include "tn2313def.inc" .def acc = r16 ; nadanie rejestrowi r16 nazwy symbolicznej .equ led...
Ten load Timer mnie zmylił. Zawsze ustalam wartość początkową. Wyliczenia i sprawdzenie: Tak jak podał mirekk36- przerwanie co 13.2us Z tego co podał atom1477- odkładanie na stos 14us. Czyli praktycznie cały czas w przerwaniu. Ale układ gubi co drugie przerwanie i na wyjściu toggle stan zmienia się co 28.1us (teoretycznie powinien co 26.4us ale ostatecznie...
Witam. Mój kod obsługi przerwania: [syntax=c] static void interrupt ISR(void) { if (TMR0IF) { //Kod obsługi przerwania wykonujący się ~2ms TMR0IF = 0; } if (SSPIF) { //Obsługa SPI SSPIF = 0; } } [/syntax] Obsługa z MSSP ma dla mnie większy priorytet niż obsługa od Timera0. Nie mogę jednak zrozumieć zasady działania systemu przerwań w tym uC. Myślałem...
Witam. Mam taki dziwny problem - odpalam sobie przerwanie co 10ms, w nim chciałem zrobić coś w stylu bufora dla danych wejściowych, ponieważ mam przerwanie z innego timera, które trwa dość długo (odczyt temp, ustawienie na podstawie tej wartości stanu wyjść, wypisanie temp. na lcd). Na to przerwanie dałem wyższy priorytet, i po prostu sprawdzam stan...
Mam problem z opanowaniem assemblera.Klawiaturę numeryczną muszę zrobić na przerwaniach. Tzn .wyciągnąć z kodu (pętli) wyświetlania i zrobić je na przerwaniach. I nie mam bladego pojęcia jak to zrobić . Pomóżcie ! kod: [syntax=asm] MOV DPTR, #klawisz ; załaduj adres tablicy start: MOV P3,#11111111B licz: MOV A,#0 MOV R1, #0 CLR F0 ; skanowanie wiersza...
Owszem zgadza się, ale: bacgroundworker - wątek_1 new thread - Wątek_2 - Gdy dam snd_sync w wątek_1 to nie mogę przerwać muzyki w dowolnym momencie z wątku głównego, bo dopóki muzyka gra każde wywołanie funkcji playsound(0,0, 0) w wątku głównym nie przynosi rezultatu. Różne kombinacje flag na końcu również nie przynoszą rezultatu, ale może jest coś,...
Witam! Pisze sobie program dla 2313, który w danych wysyłanych do (tego właśnie) procesora musi wyłowić pewnien krótki pakiet i odpowiedzieć na niego. Problem jest taki, że nie mogę tego zrobić w pętli głównej programu, gdyż pętla wykonuje się ok. 0.5 sekundy. Postanowiłem więc obsadzić procedurkę wyłapywania pakietu na przerwaniu. No i tu zaczyna się...
do ustawienia "1" na pinie nie potrzeba żadnego prądu. Ty musisz ustawić "0", żeby wywołać przerwanie i w związku z tym nie doprowadzasz do wejścia prądu, tylko go "wysysasz". Trzeba chyba ponad 100µA pobrać, żeby ustawić stan niski. '51 ma wyjścia typu otwarty dren z podciąganiem do + zasilania za pomocą układu na tranzystorkach polowych, ale...
$mod51 ;istotne dla kompilatora asm51 (at)(at)(at)(at)(at) ;przerwania t0 i t1 pre0 equ 30h ; deklaracje komórek zmienne "set" pre1 equ 31h ; deklaracje komórek zmienne "des" prex equ 32h ; deklaracje komórek zmienne "jed" ax equ 40h ; deklaracje komórek zmienne 7seg "jed" xx equ 42h ; deklaracje komórek zmienne 7seg "des" yy equ 44h ; deklaracje komórek...
Tu nie chodzi o nie wysyłanie znaku w pętli głównej programu, tylko o nie używanie go w przerwaniu. Sam printf chyba nic nie miesza, jako, że operuje tylko na pamięci, znaki wypisuje używając właśnie putchar(). Jedyna rzecz, która mogłaby być niewskazana jest taka, że funkcja printf() chyba nie jest wielowejściowa (reentrant), czyli jednoczesne wywołanie...
Poczytaj sobie od deski do deski to: W atmelowskich dataszitach nie doczytasz wszystkiego o "standardzie" ;) W rozdziale 2 Programmers guide, w podrozdziale Interrupts, na str. 2-12 znajdziesz małym druczkiem: In addition, for externall interrupts, pins INT0 and INT1 (P3.2 and P3.3) must be set to 1, and depending on whether the interrupt is to be level...
...no właśnie mega totalnie wyjątkowa sytuacja ;)... cały program to C + asm. Mam pętle, w której mam 10..15 rozkazów ams i ta pętla ma się wykonywać non stop. Zanim wejdę do pętli jest inicjalizacja pewnych zmiennych. I teraz aby zmienić inicjowane dane to jedyne co mogę zrobić to zmienić je w przerwaniu zew. ( w pętli nie mogę już dołożyć żadnego...
Witam, temat trochę stary ale nie chcę tworzyć nowego. Pierwsza sprawa to inicjowanie globalnych zmiennych używanych w przerwaniu jako volatile , tak aby przy optymalizacji kompilator nie nabałaganił (skoki adresów ect). Tak więc romario4 ma rację :) Pójdę o krok dalej - mam problem odczytywania zmiennej, inkrementowanej w przerwaniu. Muszę sprawdzać...
Tu tez jest mały problem, ponieważ w chwil wystąpienia przerwania, na lcd musi być to zakomunikowane, wiec uznałem ze tam należy to wstawić, wait jest tam po to by mrugał napis " NOT-AUS AKTIV ! “ zobacz jak to można zrobić bez tych dziwacznych wait w procedurach przerwań: '************ konfiguracja ... ... Dim Flaga as Bit Flaga = 0 Config Int0...
xury - skoro już wykorzystujemy Bytematch=13 to nadal spokojnie można korzystać z Input tylko warto całość dobrze przemyśleć jak? polecam do przeanalizowania przykładowy kod pod koniec poniższego tematu tak jak tam widać - polecenie Input jest uruchamiane tylko wtedy gdy jesteśmy pewni dzięki Bytematch że nadleciał znak (13) więc Input nigdy nie zawiesi...
Witam Aplikacja: Próbuję zrobić aplikację która odczytuje plik wav'e z karty sd (przez SPI2) i podaje go na DAC'a (SPI1). Potrafie osobno skorzystać zarówno z DAC'a jak i FatFs. I tak: Ustawiłem przerwanie które jest generowane 44100 razy na sekundę (I tutaj może być problem, za często). Podczas przetwarzania obsługi przerwania pobieram dane z podwójnego...
janbernat --> Wystarczy przerwania wyłączać na czas przesyłania poszczególnych bitów w odpowiednich pętlach, które wysyłają całość. Pewnie, że to też co nieco zabiera ale o niebo krócej niż gdy wyłączać przerwania na całe te czasy które tu przytoczyłeś. Druga sprawa to oczywiście jak się wykorzystuje w ogóle przerwania, bo jeśli w tym sposobie o którym...
dzięki za sugestie, zrobiłem to trochę inaczej Adc i pwm zostało w głównej pętli a LCD się zmienia co 1 sekundę bo miałem już gotowe takie przerwanie. Co o tym sądzicie? SIGNAL (SIG_OVERFLOW0) { second++; lcd_flag^=1; } int main(void) { ... while(1) { // adc // pwm if (lcd_flag==1) {lcd();}...
Czy przerwania są kolejkowane i po obsłużeniu komunikacji wykona kod przypisany do drugiego przerwania, czy informacja zostanie utracona? Może się tak zdarzyć, jeśli obsługa jednego przerwania będzie na tyle długa, że w czasie jej trwania jakieś przerwanie zostanie wywołane dwa razy (lub więcej). Czy komunikacja USB będzie działać stabilnie gdy podłączę...
Ok po kolei bo widać trochę zamieszałem. Zarówno w kofiguracji O0, O1, O2, Os występuje ten sam problem. Wchodzi cały czas do funkcji obsługi przerwań. Hard fault przestał występować po aktualizacji biblioteki core_cm3.h i c. Moje inicjalizacje wyglądają następująco: dokładnie na odwrót jak chce. Przycisk wciśnięty -> Nie ma przerwania żadnego. Przycisk...
Póki co jeden przycisk uruchamia pętle zmieniających się jpg ( animacja) a drugi miałby ją przerwać. Choć docelowo miałby ją przerywać odpowiedni sygnał z USB. Męczę się z tym backgrandworkerem, ale nie bardzo wychodzi. Jak wstawiam w Cross-thread operation not valid: Control 'pictureBox1' accessed from a thread other than the thread it was created...
Mam taki o to problem. W przerwaniach Timera0 jest odczyt z DS18B20 i multipleksowanie 4 7Segmentowych wyświetlaczy. No to rzeczywiście masz gigantyczny problem ponieważ ty nie masz czegoś tam w przerwaniach Timer0 :( ..... ty CAŁY program z pętli głównej przeniosłeś do przerwania - i dziwisz się że coś dalej nie działa - że inne przerwania coś nie...
piotrva wiem o drganiu styków przełącznika ale to nie one są problemem. Odlutowałem przełącznik i stykałem samymi kablami i efekt jest ten sam. Ogólnie problem polega na tym że przerwanie zachowuje się tak jakby reagowało albo na zmianę stanu logicznego na przeciwny albo na każde zbocze sygnału. Mol ten "end if" nie jest potrzebny jeżeli "if" zajmuje...
WTF?????? tmf czy zmienna ta musi być volatile? W tej chwili "data" nie jest używana poza przerwaniami. Imho - zwykła zmienna globalna z którą nie będzie (nie powinno być) problemu skoro nigdzie indziej jej nie używa. Masz rację, jakoś mi się uwidziało, że ISR się kończy zaraz po pobraniu danych, a dalej jest main. Oczywiście tak jak piszesz - najlepiej...
Witam. Posiadam inkubator i sterownik do niego. Wszystko jest okej gdy program działa na wait'ach. Chcę przepisać go do przerwania na timerze ale program mi się zawiesza po wgraniu. Po uruchomieniu nie zawsze pokaże temperaturę, po wyjściu z "menu" również czysty ekran zamiast pomiarów. Cała konstrukcja składa się z: *czterech przycisków Sw1-Sw4 *dwóch...
wyliczyłem dla 10 ms. Przy zegarze 12 MHz cykl rozkazowy trwa 1 us (tak jest taktowant licznik T0) 1 ms = 1000 us , czyli 10ms = 10000 cykli 65536 - 1000 = 55536 dec = d8f0 hex U ciebie widzę jeszcze jedną nieprawidłowość , w głównej pętli czekającej na przerwanie 2 x masz dostęp do rej. IE, a podczas tego dostępu przerwanie nie może być wykonane. Takich...
Tak wygląda część z przerwaniem. Cały kod jest dość długi i działa poprawnie, tylko z tym mam problem. Nie jestem w stanie wykryć co robię źle. [syntax=c] int k = 0; volatile char licz=0; ISR(INT4_vect) { licz = 1; } ///////PĘTLA GŁÓWNA PROGRAMU int main(void) { sei(); DDRE &= ~(1<<PE4); PORTE = (1<<PE4); DDRA = (1<<PA7); PORTA...
Cześć :) Sprawdzam różne rzeczy podczas nauki uarta dla xmega128a3u. Korzystam z biblioteki Atmela, uart w trybie z przerwaniami, software'owy cykliczny bufor odbiorczy i nadawczy. Mam tablicę z danymi w formie znaków ASCII. Oglądam sobie wszystko przy pomocy realterma, do PC podłączone za pomocą przejściówki rs485-usb. Chciałem na początek obliczyć...
Hej, mam problem, z którym walczę od dłuższego czasu. Posiadam przetwornik A/C, z którego dane (słowa 16 bitowe) wypuszczane są w postaci szeregowej (bit za bitem). Próbuję zebrać te dane za pomocą przerwania od GPIO, które wyzwalane jest zegarem generowanym przez przetwornik (inna linia niż dane). I teraz problem jest następujący: przy zegarze większym...
Dodam że alias Sprzeglo oznacza port PC5 Atmegi 328 która nie ma tam wyjść OC (ma tylko ADC5/SCL/PCINT13). Reszta kodu nie ma nic wspólnego z przerwaniami. Jest wyświetlacz lcd, przyciski i diody. Działające w pętli głównej. Zresztą wszystko pozostałe jest wykomentowane a załączony kod można uważać za kompletny. Dodano po 4 Czy masz coś konkretnego...
Cześć, postanowiłem zmienić swój stary model Atmegę16A na nowszą wersję więc zakupiłem Atmegę168A-PU. Problem w tym, że za żadne skarby nie mogę zrobić na niej choćby prostego mrugania diodami za pomocą przerwań. Połączenia są zrobione dobrze, konfiguracja również. Ustawiony jest preskaler, uruchomiona globalnie obsługa przerwań, ustawiona jest odpowiednia...
Analizując różne rozwiązania i potrzeby wymagane w zadaniu, aby nie uciekać się do RTOS, który to w AVR nie ma za bardzo sensu zrobiłbym tak: 1. zadanie transmisji do WS2812 2. zadanie generujące efekty 3. zadanie przełączania efektów Realizacja 1, wiadomo, USART i przerwania 2 - maszyna stanów w pętli głównej 3 - obsługa przycisku w pętli głównej Niestety,...
Zapewne kolega begiiner chce by zaraz po naciśnięciu przycisku wyszedł z pętli i tego co tam robił.... Jeśli jednak w pętli będzie delay kilka sekund no to Twoje rozwiązanie nie zadziała. Mi się nasuwają tylko dwa rozwiązania: - czyścić stos i zmienic adres powrotu z przerwania - dostosowac wszystkie funkcje do częstego sprawdzania jakiegoś znacznika...
Nie określiłeś jakiego mikrokontrolera używasz, bowiem większość ma wbudowany UART i twoja rola przy wysyłaniu ogranicza się właściwie do wpisania danej do bufora układu transmisji szeregowej (najczęściej jest to rejestr specjalny) i ewentualnie odczytu znacznika wysłania bajtu. Nie rozumiem więc dlaczego twoja obsługa przerwania zakłuca inne czynności....
Warunki przemysłowe stanowią nie lada wyzwanie dla projektantów. Wszelkiego rodzaju zakłócenia przenoszone po zasilaniu, pojemnościami, indykcyjnościami itd. Rada. Ekranowanie, odsprzęganie. Zamiast linii sygnałowych o dużych długościach należy zastosować np. transoptory. Wskazane ekranowanie kwarcu (ostrożne i szybkie przylutowanie jego obudowy do...
bawie sie troche w mikroprockach i zawsze organizowalem pętle czasu na pętli for . jednak czas najwyższy wykorzystać chyba coś dokładniejszego i do tego celu czyli przerwania.I tu jest moje pytanie jak skonfigurować program i napisać funkcje np nazwaną czas która po jej wywołaniu bedzie tylko generowała zwłoke 1s. po tym czasie wraca do programu i go...
No tu już nie mogę zdzierżyć :wink: Chcesz korzystać z przerwań od 2 timerów i dziwisz się ,że wchodzą w paradę transmisji 1wire.Te timery to będą nawet sobie wchodzić w paradę , jeśli ich praca nie będzie jakoś zsynchronizowana.Trzeba poprostu "widzieć" oczami wyobraźni pracę programu i tak go skonstruować by działał prawidłowo , lub potrafił się skorygować...
Witam Wszystkich Posiadam podłączoną pod przerwania zewnętrzne INT0 klawiaturkę matrycową 4x4. Całość zrealizowana jest za pomocą diod BAT43, które podłączone są pomiędzy wiersze, a INT0. Od strony INT0 podpięte do +5V, a wiersze są jeszcze podwieszone na rezystorach 3k. Przerwanie ma reagować na opadające zbocze. W nocie katalogowej wyczytałem, że...
Niestety , muszę Cię zmartwić :( W samej pętli głównej tracisz ~5 s na instrukcje WAIT i WAITMS , a do tego dochodzi czas wykonania funkcji i podprogramów.W tak zbudowanym programie , masz marne szanse na prawidłowy(w miarę szybki) odczyt klawiszy.Myślę , że należy skorzystać z timera i jego przerwania , co jest równoznaczne z poważną przebudową programu...
Zasymulowałem działanie tego programu w AVR Studio i mam małą zagrychę. Nie wiem czy to wina AVR Studio (raczej nie), ale przerwanie nie działa tak jak powinno :D zmieniam stan (załóżmy diody) na pinie 7. - Gdy stan ma sie zmienic z "1" na "0" to po wywołaniu przerwania tak się dzieje, ale gdy ma się zmienic z "0" na "1" to przy kolejnym przerwaniu...
EA = 1; TMOD = 0x01; TR0=1; TH0 = 0x4C; TL0 = 0x00; Przed while(1) licznik TO inicjuj tylko raz Nie wiem jaka była intencja ale licznik raczej jako 8bit z autoprzeładowaniem TMOD=2, bo w pętli trudno określi co będzie pierwsze - przerwanie czy inicjacja i przerwania może nigdy nie doliczyć ; brakuje ET0=1; deklaracja unsigned int licznik; jako globalna...
Ten pomysł akurat uważam za bezsensowny, chyba że go do końca nie rozumiem. Napisałeś, że mogę sobie odczytywać stan pinu. W jaki sposób? Zadaniem mego procesora nie będzie przecież jedynie odliczanie czasu, lecz obsługa wyświetlacza, przetwornika AD, analiza wyników. Sprawdzanie portu w pętli to totalna porażka - długa pętla będzie źródłem dużych błędów....
No nie to żebym od razu się domagał:) po prostu myślałem, że się ktoś zainteresuje i jak nie będzie widział tutaj potrzebnych informacji to powie mi jakich (a nie od razu zmiesza z błotem:) bo ja nie wiem co jest potrzebne żeby zdiagnozować ten błąd. Po kolei. Do tego nie robisz wcięć, przez co program jest nieczytelny. Szukałem jak wygląda na tym forum...
Dzięki za odpowiedz. To się wszystko zgadza. Inicjalizacja, UDR. Ale chodzi mi tutaj jak to zrobić na przerwaniach. Aby nie czekać w pętli while ( !( UCSRA & (1<<UDRE)) ); /* tu jest testowanie dwóch warunków */ JA musze obsługiować wtedy inne rzeczy. Głównym elementem działania jest własnie obsługa RS a więc nie miałbym czasu na obsługę np...