Co do Bascoma to i kompilator może być winny. Spróbuj skompilować na starszej wersji Bascoma np. 1.11.9.5
No nie bardzo. Pętle busy waits są w przerwaniu niewskazane. Zrób tak jak napisał (at)BlueDraco : odczyt poprzedniej konwersji-start następnej konwersji-wyjście bez czekania. [syntax=c]ISR(TIMER1_COMPA_vect) { switch(wejscie) { case 2: adc3=ADC; ADMUX = 0; ADMUX = (1<<REFS0)|wejscie; ADCSRA |= (1<<ADSC); break; case 3: adc2=ADC; ADMUX =...
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...
Hmm teraz to już zgłupiałem. Niestety wyprowadzeń IM nie ma. Ale znalazłem notę tego samego wyświetlacza na podobnym pcb i wg tego co tam jest napisane wynika, że zwarcie R7 pozwala sterować poprzez 8bit. Oto link [url=http://www.techtoys.com.hk/Displays... Natomiast bardzo zastanowiło mnie to, że...
sprawdziłem w bascomie , co około 8ms jest przerwanie i przechodzi do "przerw" , czyli program ok
Magiczne hasło brzmi PULL-UP. Sprawdź w datasheet i tysiącach publikacji w sieci.
Co do Twojego pierwszego problemu to prawdę mówiąc nie wiem, ale zwróć uwagę na to że po zakończeniu obsługi przerwania zawartośc R16 i R17 jest zamieniona: ... .org 0x0012 rjmp t1Ovf ... t1Ovf: push r16 push r17 in R16, PORTC ldi R17, 0b00000011 eor R16, R17 out PORTC, R16 pop r16 ; R17 pop r17 ; R16 reti ... Może to wina własnie tego. Co do Towjego...
Enkodery dają na wyjściu kod Graya i trzeba to zdekodować zanim zaczniesz zliczać impulsy. Jak to zrobić masz w przykładach do mojej książki o C na AVR (link w stopce, przykłady są za darmo).
Niedawno było: TWI_master.c i TWI_master.h może wydawać się nieco skomplikowany, ale skorzystanie z zaimplemntowanych tam funkcji jest stosunkowo proste. We wątku, do którego link podałem, jest przykład obsługi pamięci I2C z wykorzystaniem tych funkcji.
To akurat może być. Słuzy to do progamowego wyzwalania tego przerwania, jak jest taka potrzeba. wiem, ale podłączyłem do portu INT1 przycisk więc to nie ten przypadek :) A jak za chwilę będzie chciał włączyć pull-up dla przycisku i weźmiemy pod uwagę, że robi się to tak: If PORTxn is written to '1' when the pin is configured as an input pin, the pull-up...
Bezpośrednio raczej nie z uwagi na rezystancję wejściową ADC i ujemny zakres napięć. Trzeba pokombinować z wzmacniaczem operacyjnym w układzie podbijającym składową stałą o 2,5V.
Te procesory się aż tak nie różnią. Dodatkowe funkcjonalności pinów nie przeszkadzają w niczym dopóki ich nie uruchomisz. (PCINT - Pin Change Interrupt trzeba wiedzieć jak włączyć). Jest duża różnica jeśli chodzi o Timery właśnie. Mega8 ma na przykład tylko jeden rejestr Compare dla Timer2 dlatego inaczej się nazywają. Opisałem to u siebie na stronie...
Nic nie robiłem to czysty ardunio nano Więc jeżeli to klon to zapewne ma stary bootloader, który zawiera błąd z ustawieniem WDTON. Powinieneś zacząć od wgrania optiboot do tego Nano.
Wg mnie dobrze kombinujesz z buforem statycznym. Jeśli masz tylko dość pamięci to powinieneś pójść tą drogą, a odpowiedź na Twoje pytanie jest dość proste, tak mi się wydaje. Zrób po prostu funkcję, która będzie zwracała wskaźnik do Twojego bufora, coś na kształt: [syntax=c] uint8_t * buffer_get_ptr(void) { return UART_RxBuf; } [/syntax] W pliku nagłówkowym...
W dokumentacji jest napisane ile razy wolniejszy ma być zegar asynchroniczny . Poza tym jeśli procedura obsługi jest dłuższa niż czas miedzy przerwaniami program nie będzie działał i to raczej normalne zjawisko. Zasadniczo asynchroniczny zegar używa się tylko do wolnych operacji wymagających takiego rozwiązania np RTC resztę pędzi się szybkim zegarem...
W trakcie wykonywania tego podprogramu zostało zgłoszone przerwanie zewnętrzne na nóżce int1 atmega328p. Czy atmega328p przerwie wykonywanie podprogramu nóżki int0 Zależy jak zadeklarujesz przerwanie, czy ISR bez atrybutu lub z atrybutem ISR_BLOCK albo jako SIGNAL czy ISR z atrybutem ISR_NOBLOCK lub jako INTERRUPT. Jeśli przerwanie w przerwaniu jest...
nie podciągnąłeś wejścia PD2 do plusa zasilania PORTD|=_BV(2);
A skąd wiesz, że się nie wykonuje? Jedyne co widzę, to to, że w przerwaniu zerujesz wyzerowany port. To raczej trudno zauważyć.
Proszę nie odsyłajcie mnie do wujka google bądź noty katalogowej A jednak odeślę cię: http://www.atmel.com/Images/doc8161.pdf Strona 9, oraz strona 57 (tablica). The interrupts have priority in accordance with their Interrupt Vector position. The lower the Interrupt Vector address, the higher the priority. Myślę, że to rozwieje twoje pytania :) A Wujek...
RTFM, pdf nt. ATMega32, strona 19: Bit 3 – EERIE: EEPROM Ready Interrupt Enable Writing EERIE to one enables the EEPROM Ready Interrupt if the I bit in SREG is set. Writing EERIE to zero disables the interrupt. The EEPROM Ready interrupt generates a constant interrupt when EEWE is cleared. Gdyby się nie dało zrobić jak pisałem tobym Ci głowy głupotami...
Jedyna zmienna, którą trzeba przechowywać, to old_A; można by zrezygnować z B, która jest używana raz, wstawiając read_B() zamiast B. I jest też sposób, by zrezygnować z A: porównujesz read_A() z old_A, jeśli się różnią, to zmieniasz old_A i zliczasz, kierunek według poprawionego old_A i read_B(). Przerwanie musi być na obu kierunkach zmian sygnału...
Dołącz bibliotekę <avr/interrupt.h>
Witam. Zwykły kwarc 32K. Usypiasz procesor i możesz go budzić na żądanie w określonym czasie. Jak wszystko pójdzie dobrze uzyskać pobór prądu na poziomie 1uA w stanie uśpienia.
Fusebity raczej. Np przez ich zmianę nie generuje już zegara albo wejście reset ma zmienioną funkcję. Swojego czasu na elektrodzie powstał fusebit doctor: https://www.elektroda.pl/rtvforum/topic1... Można to kupić (pogoogluj) ale dla jednego procesora nie ma sensu. Spróbuj procesorowi podać zegar z zewnątrz, może zareaguje...
:D Ale nadal mnie nurtuje dlaczego przy takim programie i włączonym wewnętrznym pull-up generuje Ci się przerwanie, pomimo stanu wysokiego na wejściu INT1. Co tam masz podłączone?
Po pierwsze, timer liczy od 0 do 255, ale to oznacza 256 impulsów pomiędzy przepełnieniami, czyli powinno być 256, a nie 255 * 128us. Po drugie zaokrągliłeś wynik z 32.64 do 32 przed dzieleniem, co w efekcie dało niedokładny wynik ilości przepełnień. W rzeczywistości częstotliwość przerwań można obliczyć dużo prościej: ( 8000000 / 1024 ) / 256 = ok. 30,5176.....
Cześć Pobierz notę katalogową np. Attiny2313a i popatrz jak wygląda kod obsługi USART'a, bo masz błędy w kodzie. Nie chce mi się wierzyć, że nie da się osiągnąć tego czego oczekujesz na Attiny. W przerwaniach timer'a, czy to jednego czy drugiego, możesz manipulować rejestrami COM0Xn, przerwaniami TIMSK. Powinieneś osiągnąć możliwość włączania i wyłączania...
Zacznij używać TAB-ulatora w kodzie bo analiza Twojego kodu to katorga. Popraw i załącz ponownie. Mamy się domyślać w których liniach występują warningi? Dla Ciebie Warning = Błąd: : http://mikrokontrolery.blogspot.com/2011...
Niestety problem znów się pojawił: Program nie wchodzi do pętli while, gdzie warunek jest niespełniony dopiero po zatrzymaniu dopiero co ustawionego rejestru licznika, próbowałem jeszcze inny sposób, z bitami zmiennej flag ustawianymi w przerwaniach - do przerwania wchodzi, ale jak wróci do programu to nie wychodzi z pętli - tak jakby warunek był cały...
Witam. Zapis (składnia) Load Timer1 jest zły. Sprawdź w pomocy Bascoma.
Jesli chodzi o C++ to niestety nie pomoge, pewnie funkcja wysiwetlajaca liczby interpretuje je jako signed i stad ten problem.
Dokładnie w tej linijce TIMSK | = 1<<TOIE2; //wlacz t2 czyli wysylaj co 5 s stan impulsow Przez ustawienie TOIE2 kasowałaś TOIE0
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...
Odblokowałeś globalne przerwania ale nie odblokowałeś indywidualnego od UART_RXC. Flaga RXCIE w rejestrze UCSRB. JarekC
http://www.elektroda.pl/rtvforum/topic17... http://www.elektroda.pl/rtvforum/topic17...
Moze chodzilo Ci o PORTD|=(1<<6); lub PORTD&=~(1<<6); ? ;]
Poczytaj w tym wątku - znajdziesz wyjaśnienie. http://www.elektroda.pl/rtvforum/topic24...
Żeby zrobić za pomocą Timera - to nie możesz używać trybu PowerDown tylko Sleep - żeby właśnie Timery mogły działać to po pierwsze. W taki trybie jednak będziesz miał nieco większy pobór prądu niż w pełnym PowerDown. Więc wszystko zależy na ile ma wystarczać bateria o ile jest to coś zasilane z baterii. Bez PowerDown'a na pewno będzie to sporo krótszy...
Dopisz "volatile".
W trakcie obsługi przerwania przychodzi następne i czeka w kolejce. I czekać będzie nie ważne jak bardzo zostanie "przeciągnięte" przerwanie.
Parę nop-ów bym wstawił. Piszą że 50ns wystarczy (mniej niż jeden cykl AVRa), ale więcej nie zaszkodzi. A po każdym zapisie z 5ms przerwy, bo tyle trwa zapis.
Działa ;-) Ustaw Breakpoint na linijce (prawy myszy Toggle Breakpoint) [syntax=avrasm]com LED[/syntax] naciśnij F5 (Run) jak zatrzyma się na Breakpoint wykonaj kod przerwania krokowo F11 naciśnij F5 (Run) jak zatrzyma się na Breakpoint wykonaj kod przerwania krokowo F11 itd. Zamiast 15625 ładuj do OCR1A 15624. Wieczorem wrzucę inny sposób migania tym...
Mnie wychodzi, że to nie jest tryb CTC tylko normalny. Po drugie na przerwanie compare trzeba zezwolić w rejestrze TIMSK - bit OCIE0 - masz < zamiast << stąd problem. Jak masz jakieś wątpliwości co do konfiguracji, to użyj symulatora AVR Studio. Można sobie w nim też ustawić tryb pracy i odczytać wartości rejestrów kontrolnych dla niego i potem...
Tak, możesz tak zrobić i zadziała to poprawnie. Ale napisz co chcesz osiągnąć. Bo może prosciej jest skorzystać z przerwania odbiornika UART - jest ono generowane w chwili odebrania bajtu danych przez UART i nie ptrzeba korzystać z rozwiązania jakie wymyśliłeś.
na podstawie flagi z przerwania INT2 na początku pętli głównej wchodzić w uśpienie. Ale pętla główna jest wykonywana powiedzmy 0.5 sek. Co sekundę wykonywane jest przerwanie od Timer2. Więc procesor będzie w uśpieniu tylko ok. 50% czasu. Ale problem z długim wykonywaniem się pętli głównej wystąpi tylko za pierwszym razem po zaniku zasilania (ustawienie...
mogą być 2 bity startu, bo standard RC5 właśnie tak jest "skonstruowany", że posiada 2 bity startu. Natomiast jego rozszerzenie czyli RC6 wykorzytuje drugi bit startu jako normalny bit danych. Ok - teraz odpowiedź dla autora, wydaje mi się, że uda się to wyjaśnić bo sam kiedyś miałem podobny problem ze zrozumieniem tego etapu dekodowania. Cały problem...
1. Ustawiasz cały portD jako wyjścia a na nim są wejścia INT którymi chcesz generować przerwania. 2. używasz starych wektorów przerwań, używaj nowych ISR: http://www.nongnu.org/avr-libc/user-manu... 3. pokaż schemat swojego układu. 4. return(0) jest zbędne. Wystarczy: [syntax=c]while(1){};[/syntax]
Z tego co wiem "PIN Change Interrupt" ma np. Atmega168 i Atmega 328. Atmega 32 - jakoś nie widzę takiej możliwości. Proszę o poprawienie mnie, jeśli się mylę. Oczywiście zawsze można skorzystać z tych specjalnych pinów - INT0, 1 czy 2 lub zasymulować taką kontrolę stanu pinu w zwykłym przerwaniu - np. timera.
Witam szanownych użytkowników, ............. Dodam jeszcze moje spostrzeżenie. W dokumentacji mikrokontrolera ATmega32 było, że należy ustawić piny INT0, INT1, INT2 jako wyjścia. Proszę o rady. Prawdopdobnie nie zrozumiałeś DS, albo nie doczytałeś do końca paragrafu. Zdaje się że twoje referencje odnoszą się do fragmentu DS poniżej: " The External...
Tutaj masz hex'a z tego programu, skompilowanego przez avr-gcc dla atmega32 1Mhz. Zobacz czy zadziała, a ja sprawdzę makefile.
Wydaje mi się, że podczas wykonywania komend obsługujących LCD (Locate, Lcd) dzieje się jedna z dwóch rzeczy: a) przerwania zewnętrzne są wyłączane (nie są obsługiwane przerwania, które są zagnieżdżone jedne w drugich), ...............) Tak ma być czy robię coś źle? Jakieś pomysły o co może chodzić i jak podejść do problemu? Pokaż gdzie i jak masz...
To bedzie działac tak jak piszesz. Program wróci do miejsca przerwania czyli po wykonaniu B do przerwania A a potem do programu głównego. Ja to stosuje w większosci programów bo to nawet konieczność np przy stosowaniu UART .
Zadeklarowałeś "Zmianna" a przypisujesz "Zmienna". :) Edit: Wyjście z procedury obsługi przerwania wykonuje się za pomocą Return a nie Goto Glowny ! Resztę błędów znajdziesz sam. :)
A co na to symulacja programu? Taki program wgraj: .nolist .include "m32def.inc" .list ; ## START ########################################... .cseg ;=======================================... ;= WEKTORY PRZERWAŃ = ;=======================================... .org 0x0000 rjmp reset_vector ; po...
Software PWM możesz zrobić na dowolnym pinie wyjściowym cyfrowym. Użyłbym timera 8-bitowego. Należy wtedy włączyć i obsłużyć dwa przerwania: 1. przepełnienie (przy przejściu licznika z wartości 255 na 0) - ustaw wtedy stan wysoki na wymarzonym pinie 2. przekroczenie wartości - ustaw wtedy stan niski na wymarzonym pinie Przykładowy kod: https://www.elektroda.pl/rtvforum/viewto...
Witam, Popełniłeś kilka błędów: - aby odblokować przerwania od przepełnienia timera 1 trzeba ustawić bit 2 a nie 5 w rejsestrze TIMSK - wektor przerwania od przepełniania timera 1 to nie 0x12 a 0x24 Dobrze jest przy pisaniu w C korzystać z funkcji dostarczanych wraz z kompilatorem "intrinsic function" takich jak __interrupt_enable, __interrupt_disable,...
Co to może być? Wróżka jest na urlopie. Pokaż kod źródłowy.
// ================= PROCEDURA OBSŁUGI PRZERWANIA COMPARE MATCH ISR(TIMER0_OVF_vect) Błąd. To jest przerwanie od przepełnienia licznika. Przerwanie od porównania to: TIMER0_COMP_vect . W nagrodę Pomógł od mniej spostrzegawczych użytkowników i moderatorów :) A co do tranzystorów, to oczywiście lepsze by były PNP, ale z NPN też będzie działać (trochę...
Pin INT w PCF jest typu otwarty dren. Potrzebujesz więc rezystor podciągający. No dokładnie ale spokojnie wystarczy programowe podciągnięcie wejścia INT do VCC - na 100% też będzie działać poprawnie.
Hmm, ja bym jednak dodał miganie pinem z timerka, chociaż wydaje się że procek idzie w maliny. Jeśli siada wszystko jak wygląda zasilanie? Może tu tkwi problem. Wepnij sondę zaraz przy zasilaniu ustaw wyzwalanie na 4.9V np i sprawdź czy się wyzwoli. Czym taktujesz procesor? Może warto wstawić generator. Ustaw BOR dodatkowo. gaskoin, volatile czy nie,...
Przerwanie jest zgłaszane, gdy zostanie odebrany bajt. Wywal przynajmniej jedno z porównań z 13. Przecież jeśli jest równe 13 to nei ma sensu sprawdzać, czy jest różne od 13. Stare przysłowie pszczół, które cytuję to co 3 dni: żadnego oczekiwania w obsłudze przerwania. Wyrzuć Waitms 100 z obsługi przerwania! Nie możesz również nic nadawać w obsłudze...
Ale jeśli mniejsze, to już po 1 takcie zliczania powinno wyskoczyć z przerwania a tak nie jest. Taktowanie timera to 16MHz/1024 = 15625Hz. Pojemność timera to 256, więc przerwanie pojawia się z częstotliwością 15625/256 = ~61Hz. Aby uzyskać opóźnienie ok. 1 sekundy przerwanie musi pojawić się 61 razy i dopiero za 62 zapalić lub zgasić diodę. I tak...
zliczanie impulsów z dwóch enkoderów Jeżeli to są enkodery inkrementalne z sygnałem A, B i ew. Home, zrezygnuj z megi64/128. Xmegi mają wsparcie sprzętowe do obróbki sygnału z takich enkoderów przez użycie liczników w połączeniu z eventami. Na STM32Fxxx zrobisz to łatwiej i być może szybciej korzystając z gotowców. generowanie dwóch przebiegów PWM...
fuse bity wyłączasz nie w programie tylko przy programowaniu. np w PonyProg klikasz "Command > Security i Configurations bits..." Potem wciśnij "Read" i zobaczysz jak masz ustawione te bity. Jeżeli tym się jeszcze nie bawiłeś to radzę nic nie ruszać poza wspomnianym bitem JTAGEN, który będzie zaznaczony ptaszkiem (trzeba go odznaczyć) i wcisnąć "Write"....
Ten programik miał tylko uruchomić zmianę stanu na porcie w przerwaniu. Pętla while u mnie jest nieskończona tak jak to zaobserwowałem w innych programach, jak na razie nic się w niej nie dzieje bo testuje same przerwania. Dziękuje ci za pomoc popołudniu wprowadzę poprawki i sprawdzę czy zadziała. Może masz jakiś przykład działającego programu który...
Uruchamianie timera przed zaprogramowaniem okresu nie jest najlepszym zwyczajem. Wartość wpisywana do OCR to okres - 1. Napisz po prostu: OCR1A = FCLK / 256 - 1; (O ile częstotliwość zegara jest zdefiniowana pod nazwą FCLK - nie pamiętam, bo skończyłem z AVR jakieś 4 lata temu.)
Na C to w przyszłości - niedalekiej ( literatura już jest ). Na razie wybrałem Bascom, żeby zrozumieć o co w tym biega. Jestem raczej "manualny", czyli łatwo mi się składa układy. Ale chciałem coś swojego mieć, coś co się przyda. Na razie utknąłem na UART ( sterowanie mikrokontrolerem przez RS485, generalnie przez RS ), więc dla chwili przerwy zająłem...
Chcialbym napisac najprostrzy program aby sprawdzic czy progra mi wogole wchodzi w przerwanie czyli czy zapali diode. Ale zupelnie nic sie nie dzieje. Zarówno symulacja programowa w AVR Studio, jak i program uruchomiony na realnym sprzęcie działa poprawnie. Albo się pomyliłeś co do podłączenia diody, albo procesor jest uszkodzony. Po drobnej zmianie...
SS musisz wykorzystać, bo tylko stan tego pinu gwarantuje przejście pozostałych linii interfejsu SPI w stan wysokiej impedancji. Przerwanie od SS nie jest potrzebne - niski poziom tego sygnału aktywuje interfejs i powoduje wysłanie SPDR. Po zakończeniu wysyłania bajtu danych możesz otrzymać przerwanie zakończenia transferu SPI w którym to przerwaniu...
a co z przerwaniem porównania kanału B?
Akurat bit stopu jest o tyle ważny, że bez niego mogłoby nie być przerwy ,stanem wysokim na linii, pomiędzy ramkami.
W google piszesz atmega32 i pierwszy link to dokument doc2503.pdf http://www.atmel.com/dyn/resources/prod_...
Sprawdzaj flagę w rejestrze TIFRx bez włączania przerwania w TIMSKx.
Co do programu na megę328: 1. Niepotrzebnie dołączasz sfr_defs.h 2. O F_CPU w kodzie było już miliony razy na forum. 3. Dla ułatwienia obliczeń prędkości polecam util/setbaud.h 4. W rejestrze UCSR0C ustawiasz bity, które po resecie są ustawione. 5. W UCSR0B nie włączasz przerwania od odbioru (bit RXCIE)! Dodatkowo niepotrzebnie stosujesz sumę bitową...
Obawiam sie że atmego bez naprawde sprytnie napisanego softu jest po prostu za słaba do tego celu. Wez po uwagę że float mnożenie to ok 2980 taktów zegara przy zmniennych typu volatile. Dla porównania. Dzielenie na pewno więcej. Dane dla innych typów danych: uint8 => 19 cycles uint16 => 24 cycles uint32 => 103 cycles int8 => 37 cycles int16 => 33 cycles...
To co dawid512 napisał jest najprawdopodobniej na atmega32. Musisz poczytać dokumentację i zmienić ten kod, gdyż timer0 na atmega8 ma trochę mniejsze możliwości. [dodano] Można też skorzystać z timer2, jego obsługa będzie łatwiejsza.
Płytka nie jest najlepsza, ale widywałem gorsze. Myślę, że przed wymianą płytki należy jeszcze spróbować w następującej kolejności: 1. Dobrać i dodać snubber na styki przekaźnika http://www.te.com/content/dam/te/global/... rozdział 4.5 2. Przekaźnik powodujący zakłócenia wywalić z płytki...
Sygnały CTS i RTS służą do sterowania transmisją zabezpieczają przed zbyt szybkim wysyłaniu danych mogących spowodować utratę części informacji do sterowania tymi sygnałami najlepiej wykorzystać przerwania generowane przez uart umożliwi to zatrzymanie transmisji na czas w którym modem jest zajęty innymi operacjami . W internecie znajdziesz wiele opisów...
Wysłałem adres, dostałem ack, to teraz od razu powinien być bajt z pamięci, nie? A w jaki sposób slave ma Tobie przysłać odpowiedź w tym samym czasie, gdy Ty wysyłasz do niego zapytanie? Odbywa się to tak: ... // wysyłasz adres układu z bitem kierunku ustawionym na READ TWDR = RTC_ADDR_R_0; // włączasz magistralę TWCR = (1<<TWEN) | (1<<TWINT);...
Pusty bufor nie oznacza końca wysyłania poczytaj jakie przerwania generuje uart i kiedy .
Ta wstawka asm nie jest prawidłowo napisana, działa tylko dlatego, że kompilator nie wykorzystał jak dotychczas rejestrów R14 i R15. Jeśli program rozrośnie się na tyle, że kompilator będzie wykorzystywał te rejestry to program przestanie działać. Jak wspomniałeś poza eterem, masz możliwość skorzystania z ATmega32 i podpięcia wszystkich sygnałów do...
Wypróbuj ten kod: [syntax=c] #define F_CPU 16000000 #include <stdlib.h> #include <avr/io.h> #include <util/delay.h> //-------LCD------------------------ #define LCD_ADDRESS (0x7C) /* * LCD_commands */ #define LCD_CLEARDISPLAY 0x01 #define LCD_RETURNHOME 0x02 #define LCD_ENTRYMODESET 0x04 #define LCD_DISPLAYCONTROL 0x08 #define LCD_CURSORSHIFT...
Argumenty do dyskusji są w nocie aplikacyjnej Atmela sprzed kilkunastu lat. Myślałem, że wszyscy wypowiadający się w temacie PWM znają ją od dawna. Tak krótko chodzi o to, że ponieważ kolejne wyjścia przestawiasz w kolejnych if-ach, to przy ustawieniu takiego samego wypełnienia rzeczywiste wypełnienia poszczególnych wyjść będą różne. Poprawnie robi...
Witaj, Jak się domyślam problem z komunikacją 1Wire. Sprawdź czy w stosunku do częstotliwości z jaką taktowany jest Twój procesor dobrze są dobrane parametry czasowe transmisji. W 1Wire jest zdefiniowanych kilka okienek czasowych - czy są dobrze odliczane? Gdy uruchamiasz transmisję wyłącz przerwania. Pzdr. asd
Tak przerwanie ma być wykonywane bez przerwy co 2ms. Zapis jednego pomiaru trwa ok 40ms. Czyli nie da się w ten sposób tego zrobić ?
Mam ustawiony timer w Input Capture Ustawienie timera z przepełnieniem licznika IC_Timers 40000 (po prostu potrzebowałem równy czas też dla odmierzania zegarka i innych bajerów do odmierzania czasu ) przerwanie co 20ms. https://obrazki.elektroda.pl/6280175200_... Od lewej okres, czas stanu wysokiego, aktualny timer ICR1, poprzedni timer...
Po wejściu do przerwania i odłożeniu wszystkich rejestrów na stos wyzeruj R1, a dlaczego to się już domyśl i wyjaśnij innym.
Witaj! 85 stopni też mam tak często jak odepnę czujnik, ale po wpięciu spowrotem pokazuje ok, (aktualnie w Lublinie -15,5 stopnia ;) ) więc wychodzi na to, że albo masz przerwę gdzieś, albo faktycznie czujnik jest trafiony. Pozdrawiam
Może też mieć na to wpływ błędne obliczenie UBRR dające nieoptymalną wartość dla tych częStotliwości zegara i transmisji. Cyfry mogą wtedy przechodzić poprawnie, a litery już nie. Takie użycie przerwania UART jest bezsensowne. Mniej czasu zajmie odczyt UDR w pętli zdarzeń, a jeszcze lepiej zrobić całą reakcję na znak w przerwaniu UART, z uśpieniem procesora...
Ja robiłem multipleksowanie 8 cyfr i odczyt 2 ds_ów i jedynie co to trzeba liczyc CRC bo jesli przerwanie wystąpi w chwili komunikacji z ds_em to wyswietla głupoty. Pozatym zero migania lub przerw w działaniu wyswietlacza.
Ok. Wiadomo że ma liczyć impulsy. Czy teraz w danej jednostce czasu np. przez 1s oraz pomiar za pomiarem? Czy może po osiągnięciu liczby impulsów np.5 ma być następny pomiar a może przerwa? Z jakiego źródła pochodzą te impulsy? Jakiś schemacik może?
No, chyba żartujesz. ATMega32 ma 21 wektorów- str.44 ds. A ATmega8515- 17 wektorów. I niektóre nazwy są inne.
Przerwań się nie wywołuje - one "wywołują" się same. 4\/3!!
Udało mi się uruchomić ten przetwornik. Jak zauważył janbernat niesłusznie uznałem, że nie ma sensu podpinać wyjścia oznajmującego zakończenie konwersji przez przetwornik (SSTRB) do INT2. Pracuje on ładnie zarówno gdy między ADC, a uC pośredniczy BC547C lub BD237(tranzystor NPN firmy SGS-THOMSON, akurat takie coś miałem pod ręką). Nie sprawdzałem natomiast...
Na jakiej podstawie twierdzisz, że problemem są priorytety przerwań? Przerwania występują na tyle sporadycznie, że nie ma tutaj miejsca na problemy. Jeśli wysyłany jest znak '2', to porównanie (i==2) jest błędne TCCR2 = 1<<CS00 | 1<<CS02 | 0<<CS01 ; proponuję zapisać tak: TCCR2 = (1<<CS00) | (1<<CS02) |...
Witam, Przedstawiam a tym artykule jak można na jednym przerwaniu obsłużyć pokazany poniżej impulsator. Może komuś się przyda. http://obrazki.elektroda.pl/6570210900_1... http://obrazki.elektroda.pl/3250862500_1... Wyjście B enkodera może by na innym dowolnym pinie, wymaga jedynie zmian w algorytmie. /* wyjście impulsatora...
może inaczej , Clockrate moge ustawić na więcej ale to i tak niczego nie zmienia . Odbiornik odbiera dane po wysłaniu z nadajnika i ładnie wyświetla na lcd . Pytanie to bardziej chodzi o to czemu timer0 w odbiorniku jest blokowany lub chodzi tyle samo czasu co przerwa WAITMS w nadajniku . Przerwanie do SPI jest krótkie ale po wysłaniu danych następuje...
Możesz użyć jednego timera. Procedura obsługi przerwania nie może przeszkadzać w obsłudze innych przerwań. W Twoim przypadku nie ma innych przerwań, więc jedyny warunek to ten, żeby procedura obsługi wykonała się w czasie mniejszym niż odstęp pomiędzy przerwaniami. To jest w sam raz dobry materiał na projekt z pustą pętlą główną, i tak to należy zrobić.
Możliwe. Tylko ja nie jestem ekspertem w tej dziedzinie i próbuję dopasować jedno z rozwiązań, na które natrafiłem. Sketch, który działa bezproblemowo (sic!) na ATmega328 chcę przenieść na Attiny85, żeby zmnejszyć rozmiar PCB. I to jest mój problem i jednocześnie temat dyskusji. A nie to ile przerwań wygeneruje jeden przeskok enkodera, bo wiem, że tych...
Może spróbuj sterowania w inny sposób - za pomocą przerwania INT2 (wywoływanego przyciskiem) uruchamiaj i zatrzymuj licznik TC0 (parametry PWM są ustawione u Ciebie poprawnie) tzn ustawiaj bity TCCR0|=(1<<CS00)|(1<<CS01) kiedy chcesz uruchomić licznik i zeruj je jeżeli chcesz zatrzymać. Samo ustawianie wartości wypełnienia czyli rejestr...
atmega32 przerwa timer atmega32 przerwa przycisk stm32 przerwa przerwa
uszkodzony skaner canon komunikacja bluetooth przedłużenie kabli
zwrotnica magnat quantum kalkulator simlock nokia
Świeca zapłonowa Champion RCJ7Y do Oleo-Mac 937 Świeca zapłonowa do pilarki Faworyt RG 5300 18A: NGK BPMR7A i zamienniki