INT0 jest na pinie PD0, a ten definitywnie ustawiłeś jako wyjście, więc nie może działać.
Skonfiguruj rejestry SPH i SPL, czyli wskaźnik stosu ustaw na koniec SRAM (SP = 4095)
Ojj widze ze chyba chcesz za duzo na raz zrobic... TCCR0 = _BV(CS02) | _BV(CS02) ; Ani w jednej ani w drugiej atmedze nie jest to dzielnik przez 32. Nawet jak by tak bylo, to i tak masz gdzies to co pisalem wczesniej. Zostalo by ci 150 taktow zegara na wyjscie z przerwania i wykonanie maina, czy jest wystarczajaco byc moze, ale nie sadze...
Powiem tak: symulator działa bardzo dokładnie (przed chwilą sprawdziłem). Odwzorowuje wszystkie detale SPI. W dokumentacji jest napisane, że jeśli pin SS jest wejściem o stanie niskim, to bit MSTR jest kasowany. Ponieważ DDRB konfigurujesz po SPCR, to nie udaje Ci się ustawić bitu MSTR (zostaje on natychmiast skasowany) i SPI pracuje jako slave. Przesuń...
Zapewne dlatego, że przed włączeniem przerwać nie wyzerowałeś znacznika ich zgłoszenia.
A jaki konkretniej problem masz? Nie możesz włączyć timera, pogubiłeś się w rejestrach i bitach...?
A to jest ciekawe... bo... 20: TCNT2 = 0x00; +0000006C: BC14 OUT 0x24,R1 Out to I/O location 21: TIMSK = 0x80; +0000006D: E880 LDI R24,0x80 Load immediate +0000006E: BF87 OUT 0x37,R24 Out to I/O location 22: sei(); +0000006F: 9478 SEI Global Interrupt Enable +00000070: CFFF RJMP PC-0x0000 Relative jump +00000071:...
z tego co widziałem to nie konfigurujesz odpowiednich rejestrów odpowiedzialnych za zewnętrzna przerwania. zobacz do noty katalogowej musisz skonfigurować rejestry: External Interrupt Control Register A – EICRA External Interrupt Control Register B – EICRB External Interrupt Mask Register – EIMSK External Interrupt Flag Register –...
Coś przeczuwam, że ma delay() czy waits() albo while() w przerwaniu :) taaak - to byłaby masakra niestety :( ale pisał też o testowaniu w pętli głównej więc podejrzewam właśnie, że pojęcie "drgania styków" są jeszcze autorowi obce.... a można o tym ładnie przeczytać np tutaj ;) http://mikrokontrolery.blogspot.com/2011...
Jeszcze tylko włącz przerwania wogóle Dodano po 1 A w obsłudze przerwania je blokuj Dodano po 1 Cli blokuj Sei odblokuj tak samo jak w 51 :) Dodano po 1 Tzn Pierwszy krok w procedurze obsługi przerwania to zablokawanie przerwań wogóle na czas obsługi i ponowne odblokowanie na koniec przerwania :)
Sprawdź czy w projekcie masz ustawiony właściwy typ procesora
Oops pomyliłem system binarnym z dziesiętni wagami bitów :D zaraz poprawie edit:najprościej uint8_t k;//deklaruje wcześniej ponieważ będe używał poza pętlą for(k=0; k<4; k++){ if( (PIND>>(4+k))&... ){k++;break;}//k++ ponieważ otrzymam 0-3 a potrzebuke 1-4 uint8_t j = ( i*4 ) + k; jeszcze...
ja mysle ze najpierw powinienes dodac odpopwiedni plik definujacy co ma to sei robic......... bez tego ani rusz , dodaj za pomoca include , oblsuga sei i cli jest o ile dobrze pamietam w pliku signal
Gdybyś miał tylko jeden adres przerwania, istotnie ograniczyło by to właściwości procesora. Prawdą jest, że przerwania w AVR nie mają priorytetów. W danej chwili możesz mięć włączoną dowolną ilość przerwań. W przypadku jednoczesnego zgłoszenia wykonane zostaną zgodnie z kolejnością w wektorze.
Rejestr przesuwny nie jest tym samym co rejestr wyjściowy. Wobec czego masz 16 taktów na odczyt. Oczywiście przy tak dużej prędkości cale 16bitow musisz odebrać w jednym przerwaniu.
Nie widzę problemów przy symulacji w AVR Studio (4.14) Twojego programu. Sprzętowo nie mam jak sprawdzić gdyż nie posiadam obecnie żadnego ATMega128/64.
Prescaler musi być co najmniej 8.
Witam Dla prędkości 19200 wysłanie 1 bajtu trwa około 520us czyli 10 razy mniej niż częstotliwość wysyłania. Nie ma problemu chyba, że będziesz zbierał przez pół dnia a następnie po otrzymaniu polecenia z komputera wysyłał je. W tym wypadku eż nie ma problemu ponieważ wysyłaniem danych przez RS-a odbywa się sprzętowo a nie softwarowo. Oznacza to, że...
Może zostać zwolniony. Przerwanie w momencie wystąpienia jest odnotowywane w odpowiednim rejestrze i 'czeka' tam aż nie zostanie zresetowane/wykonana procedura obsługująca to przerwanie.
Z przerwaniami sobie poradziłem, natomiast w dalszym ciągu zapisywanie/odczytywanie z pamięci FLASH nadal sprawia problem. Przerwanie: static void IrqHandler(void *arg) { i += 1 ; } /* KONIEC OBSLUGI PRZERWANIA */ int main() { DDRD = 0x00 ; // PORTD jako wejscie PORTD = 0xFF ; // podciagniecie wejsc do 1 //EICRA = 0xAA...
ATmega128 ma "tylko" 8 zewnętrznych przerwań i nie ma tam przerwania PCICR. Przerwania możesz deklarować poprzez nazwy rejestrów: ON INTX lub jak dla M168: ON PCIEX i dalej korzystać z normalnej składni Bascoma.
Nie do końca ogarniam ten datasheet i korzystałem z tego co znalazłem w innym temacie. W takim razie będę próbował dalej.
No dawanie w przerwaniu delaya to nie jest dobry pomysl ;)
Czyli czytamy sobie ;) http://www.nongnu.org/avr-libc/user-manu...
Nie znam tego kompilatora ale skoro to działało na ATmega8 to tylko się w 128 zmieniły adresy rejestrów oraz wektorów przerwań. Sprawdź to a najlepiej zobacz w listingu czy jest właściwie umieszczony wektor przerwania.
Wyłącz przerwania na czas transmisji 1wire
Widocznie nie dokładnie.Zwracam honor. Chyba za bardzo przykułem uwagę na połączony intx z portx.Więc może to właśnie sprawia problem że powinien być jasno ustawiony jako wejście albo może pomoże ustawienie portu jako pd6 jako wejście przed włączeniem zewnętrznego przerwania.
Odkryłem, że nie wiedzieć czemu wraz z przerwaniami TIMERa 0 wywoływane są przerwania INT0 oraz INT1 pomimo, że nic się na nich fizycznie nie dzieje. Nie mam pojęcia czemu się tak dzieje... może jakieś pomysły? z góry dzięki pozdrawiam herszt
W atmedze 128 nie ma przerwań PCINT, są tylko przerwania INT0-3 na pinach PD0, PD1, PD2, PD3. Przerwania PCINT są tylko w nowszych atmegch.
hierarchia przerwań jest rozpisana w nocie katalogowej ale to ma znaczenia tylko wtedy gdy dwa przerwania wystąpią idealnie w tym samym czasie a jest to mało prawdopodobne. jest za to coś ważniejszego. w w rejestrze procesora jset taka flaga "I" która zazwala na przerwana. przy normalnej pracy powinna być ona ustawiona by zazwolić na przerwania. gdy...
To ześmy sie zgrali... Fusebit Extended P ustawiony na "1:Atmega128 Mode" Oki oki sorki, ale ja to tak bez nerwów :D . Czasami udaje mi się samemu rozwiązać problem zanim na forum ktoś odpowie, albo tematy pozostają bez echa, ajk np programowy SPI i AD7843. Naprawdę port zmienia stan, jak potraktuje się go normalnie jako wyjście, ale jako przerwanie...
No niestety, dokumentacja nie pozostawia złudzeń. Moim zamierzeniem było użycie timera 3 tak, aby wykonywał dwa osobne zadania w dwóch różnych przerwaniach. Timera 1 już używam. No niestety będe musiał sobie poradzić inaczej. Dzięki.
Przerwania w takich mikrokontrolerach to nie wątki niestety - całkowicie złe podejście. Ale kombinować warto ;) Ja zwykle wykorzystuję jakiś Timer do generowania tzw tyknięć systemowych co jakiś krótki czas np kilkanaście- kilkadziesiąt ms oraz oznaczania tylko kilku flag oznaczających upływ kilku stałych odcinków czasu np Flaga co 40ms, Flaga co 1s...
Nazwa wektora przerwania może mieć inną nazwę w pliku definicji dla procesora ATMega128.
Zmienna jest typu: volatile float obrabiam ją w przerwaniu.
Witam. Szukałem na elektrodzie podobnych tematów, ale jak ktoś się już o takie coś spytał to został zaraz odciągniety od tego pomysłu i proponowano mu robienie takiego czasomierza na uprocku. A ja muszę zrobić to na PCF8583. Już tłumaczę o co chodzi: Mam dosyć skomplikowany układ na ATmega128 (jeszcze nie jest dokończony, ale prawie :) ). Chodzi mi...
Czy wiesz co to jest prolog i epilog w assemblerze? Czy wiesz co to jest stos? Z tego co wiem w obsłudze przerwania powinno stosować się krótki i prosty kod, natomiast w moim przypadku potrzebuję po wystąpieniu przerwania przejść do wykonywania programu w pętli. Od takich spraw są flagi (czyli np. zmienne globalne), którym w przerwaniu ustawiasz jakąś...
Proponuję poczytać o EIFR... I proszę zastanowić się, czy warto (i dlaczego) kasować flagi przerwań w procedurze jego obsługi...
read_time jest oczywiście volatile?
Stary, ja nawet nie wiem jak ustawic te przerwania (nigdy nad tym jeszcze nawet nie myślałem)... więc to chyba nie jest tego przyczyna :D no chyba że zrobiłem to nieumyślnie :) hehe można jakoś sprawdzic te przerwania??
Jeżeli klawisz jest mechaniczny to napewno jego styki drgają i pojawiają się zakłucenie w postaci kilku po sobie następujące przerwania, to może być przyczyną twoich kłopotów.
Taki jest Bascom niestety. Wiele rzeczy w tym kompilatorze czasem powoduje bardzo dziwne zachowanie, bo W TEORII enable disable interrupts powinno zablokować wszystkie przerwania...
Za pomocą bitów CSn2 CSn1 CSn0 możesz ustalić podział częstotliwości kwarcu przez 1,8,64,256,1024. Aby uzyskać dokłądnie sekundę musisz ustawić podział na 8 lub 64. Wtedy do timera musisz wpisać odpowiednio 65536-62500 lub 65536-15625 (do rejestrów TCNTnH starsze 8 bitów i TCNTnL młodsze osiem bitów). Przepełnienie jest sygnalizowane flagą ToVn którą...
Nie nie rób się kaczką albo sie prześpij ahahahahahaha :D OCIE1B zamieniasz na OCIE1A OCR1B zamieniasz na OCR1A zamieniasz wektor TIMER1_COMPB_vect na TIMER1_COMPA_vect kasujesz wszędzie to TCNT1=0 bo nie ma sensu Dla Timer0, w przerwaniu, pod linijką "dot ++ ; " dopisz TCNT0 = 6; To też można na palcach policzyć: 8MHz to jest na sekundę a sekunda ma...
Nota atmela mówi, że jeśli timer pracuje w trybie asynchronicznym, to należy testować flagi Update Busy (3 flagi) w ASSR, po tym należy wyzerować flagę przerwania.
Oj przeczuwam kłopoty, piszesz że przesiadasz się z małego AtMega na AtMega128, a tam niektóe rejestry mają zmienione nazwy lub wręcz niektóre bity są w innych/nowych rejestrach. dla AtMega8..32 działa coś takiego #define GLOBAL_INT_ENA()asm("se... #define GLOBAL_INT_DIS()asm("cl... #define INT0_ENA()...
A liczenie Ci samo idzie bo umieściłeś kod "liczący" w jakimś przerwaniu: SIGNAL(SIG_OVERFLOW0) { licz++; } Nie wiem co to jest, ale wygląda jak przerwanie od Timera0. Dodano po 2 Już pomijam fakt że obsługa przycisków w przerwaniu (bez żadnego odkłócania, bo samo wykorzystanie przerwania to może jeszcze nie jest tragedia) jest trochę...
1. Jakie prędkości masz po obu stronach? 2. Nie możesz tego zrobić sprzętowo? 3. Programowo robisz odbiór i nadawanie na przerwaniach i przepisujesz z jednego bufora dane do drugiego... 4. Jakie funkcje ma pełnić Atmega? Czy ma to być tylko monitor połączenia czy co?
Wlaczasz przerwania tylko po co skoro nie masz zadnych procedur do ich obslugi ?? Bardzo mozliwe ze Bascom wtedy skacze na poczatek pamieci powodujac ze wszystko rusza od nowa. Pozdro Dexter
czy jak to mam zrobić: dodaje <avr/interrupt.h> sei() // to uaktywnia przerwania? i dalej nie działa, trzeba to jakoś podpiąć przerwanie?
40 linii to tylko 5 portów a ATmega128 ma ich przeszło 6 czyli w zupełności Ci wystarczy. Niektóre porty mają możliwość generowania przerwania jak się zmieni ich stan ale przy tej rozdzielczości (5ms) wystarczy skanowanie wszystkich wejść a po wykryciu zmiany zapisać bieżący czas w buforze. Po zerwaniu się wszystkich przewodów cały bufor możesz wysłać...
rejestry PINx w atmedze128 są tylko do odczytu więc nie wolno do nich nic zapisywać. jak chcesz sprawdzić stan przycisku to robisz tak: ustawiasz pin do którego jest podpięty jako wejście podciągasz go do stanu wysokiego w pętli głównej sprawdzasz czy dany pin nie jest = 0 (co będzie miało miejsce gdy go naciśniesz) czyli mniej więcej tak: PORTA |=...
Cześć. Zrobiłem coś takiego - czyli odczyt stanu klawiatury matrycowej na przerwaniach dla ATMega128. Kod w załączniku. Nie wiem tylko jak zrobić, żeby odczytywał jedno wciśnięcie klawisza. Przy takim programie po wciścnięciu klawisza rombie wykonywanie tego przerwania jak najęty aż do puszczenia klawisza. Mnie chodzi o to, że jak wcisne klawisz ma...
To: ldir16,(1<<RXCIE0) | (1<<RXEN0) | 1<<TXEN0 Nie powinno być w nawiasie? Nie wiem jaki to kompilator, może ten nie akceptuje tego bez nawiasów. I tutaj: ldir17,0x00 ldir16,USART_Speed ;transmisja 4800 b/s ldir16,0x00 stsUCSR0A,r16 ldir16,(1<<RXCIE0) | (1<<RXEN0) | 1<<TXEN0 stsUCSR0B,r16 ;włączenie odbiornika RS...
Witam. Jestem poczatkujacym w C i powili uruchamiam sobie kolejne moduly proca atmega128, napotkalem niestety na problem w uruchomieniu timera1, wyglada na to ze wogole nie startuje bo nie wchodzi mi w obsluge przerwania przepelnienia licznika, ma to dzialac tak ze przy kwarcu 11.0592MHz po odpowiednim zaladowaniu licznika ma mi zapalac diode co ok...
Łopatologicznie: Najpierw ładowana jest stara zawartość rejestru odpowiedzialnego za włączanie lub blokowanie przerwań (korzysta z tego np. polecenie ENABLE). Potem włączane jest przyjmowanie przerwań z linii INT4, tak jakbyś wykonał ENABLE INT4. A na końcu nowa zawartość rejestru zostaje zapisana w pamięci procesora. I od tej pory przerwania z INT4...
Mam pytanie wiecie dlaczego dostaję taką odpowiedź z kompilatora: ../g.c:22: error: 'GICR' undeclared (first use in this function) ../g.c:22: error: (Each undeclared identifier is reported only once ../g.c:22: error: for each function it appears in.) Mam procek Atmega128 oto kod programu: // Testowanie przerwań zewnętrznych #include <avr/io.h>...
No to mamy winowajcę. Robienie czegokolwiek długotrwałego w przerwaniu to chory pomysł, ale problem polega na tym, że procedury obsługi LCD nie blokują przerwań na czas wykonywania operacji na LCD - dołóż blokowanie i odblokowanie przerwań na prymitywach LCD i zadziała (jako proteza). żeby zadziałało dobrze - przenieś obsługę 1Wire do pętli głównej.
Przerwania i delay'e mogą działać razem. Co dokładnie ma robić ten fragment kodu?: [syntax=c] while(1) { PORTA|=0x10; _delay_ms(10); PORTA|=0x02; }[/syntax]
A dlaczego kolega ma ustawiony bit ADLAR w ADMUX ( ADMUX = 0b00100000; )? Przecież to włączenie wyrównania do lewej w rejestrze ADC, więc trzeba to chyba później uwzględnić w obliczeniach. Chciałbym jeszcze zauważyć, że sprintf() operuje na zmiennej czterobajtowej, która w każdej chwili może zostać zmieniona przez przerwanie od ADC przykładowo w czasie...
Mam dziwny problem. Atmega128 pracuje wykorzystując dwa uarty. Obydwa podpięte pod terminal. UART0 tylko i wyłącznie ustawia flagi po interpretacji treści. To przerwanie zawiesza się po uruchomieniu funkcji z przerwania UART1 . Wywoływana funkcja do poprawnego wykonania się potrzebuje stanu flag z UART0. Niestety UART0 zachowuje się tak jakby go nie...
Po co koledze ten CTC? Prescaler ustaw na 128 i wykorzystaj przerwanie przepełnienia licznika. Fint = Fosc / preskaler / 2^ilość_bitów_licznika = 32768Hz / 128 / 256 = 1Hz Przy CTC trzeba pamiętać, że występuje taki jeden mały szczegół jak 1+OCRn , gdyż licznik musi przynajmniej zliczyć jeden impuls. A ty go nie uwzględniłeś: Fint = Fosc / (preskaler...
Jeszcze przy okazji warto albo obsłużyć przerwania od odbioru, albo je wyłaczyć.
Tak, coś źle popatrzałem i ze 125kHz zrobiła mi się ATMega128 :) Nie pytaj jak :)
Nie bawiłem się ATtiny2313, ale jeśli ma PWM to da się zrobić jakieś odtwarzanie dźwięku z próbek. Robiłem takie coś na ATmega128. Puszczasz generator PWM na najwyższej częstotliwości i jakiś timer do generowania przerwania okresowo. Timer determinuje częstotliwość prókowania. Podczas każdego przerwania timera wpisujesz nową próbkę do rejestru generatora...
Oj nieznam C... w ASM to banał, trzeba tylko odpowiednio ustawić timery i przerwania.
Raz się tak naciąłem, bit AS0 zmienia źródło taktowania procesora i po wprowadzeniu w power save odciął mi timer ... i procesor zawisł bo czekał na przerwanie od Timera0. Dlatego to pytanie. Proponuję jeszcze raz sprawdzić, czy nasz odblokowane przerwania przed wejściem w uśpienie, może zmienić bity SUT1..0, aby szybciej wstawał.
Z tego co wyczaiłem to mega popędzana jest kwarcem 14,7456 MHz (kwarc do USART)... Timery ustawione są tak, że przerwanie wywoływane jest co 0,05s stąd podstawowa zmienna zliczająca do sekundy zwiększana jest co drugie wywołanie przerwania (odpowiadają za to variable i variable1)... Spróbuj przeanalizować ten kod i skonfrontować go z dokumentacją do...
Mam prośbę, prosze o podpowiedź w nastepującej kwesti: Mam jakis program główny oraz pisze teraz booloadera w jednym projekcie (kompilowane jednoczesnie). Bootloader tylko na potrzeby tego jednego programu. W jakims osobnym pliku np. Boot.c pisze funkcje np void firmware (void) BOOTLOADER_SECTION; a jak w tym projekcie dopisac teraz przerwanie od UART1...
3) Generalnie na początku makra SIGNAL wyłączane są przerwania (funkcja cli), a na końcu są odblokowywane (sei), tak więc nie ma zagnieżdżenia przerwań, po prostu niektóre pomiary gubisz. 2) wg noty katalogowej do masy przez kondensator 1) jeśli ich nie używasz, to należy je ustawić jako WYJŚCIE, i można na nich ustawić stan 0. Nie powinny wisieć w...
To może zamiast wyłaczać przerwanie od timer1 trzebaby pomysleć od odblokowaniu niektórych przerwań w przerwaniu.
Konfiguracja prescalera jest w TCCR0 B a nie TCCR0A.
Mam wrażenie, że przycisk jest tylko dla testów. Ja też mam takie wrażenie, ale zawsze wolę od razu kogoś nakierować na właściwy tor żeby nie działał po omacku. Dla początkującego taki sposób wydaje się zwykle jedynie słuszny gdy pozna się przerwania w jakiś tam stospniu. Tymczasem to błędne założenie i warto robić debouncing od samego początku bo...
Błąd transmisji na poziomie 0.2% to jest bardzo mały błąd. Transmisja będzie śmigać super. Jeśłi chodzi o przerwania od UARTA i Timera to są one zamiennie - to znaczy że jeśli procek obsługuje przerwanie od Tmiera to w tym czasie blokuje inne przerwania które czekają w kolejce. Dlatego jeśli Twoje przerwanie od Timera jest takie długie to może być problem....
Przez buforowanie transmisji... Po odebraniu pierwszego znaku odpalasz timer i zaczynasz ładować kolejne znaki do tablicy... Przy każdym następnym znaku resetujesz timer... Jak string się kończy timer się przepełnia i generuje przerwanie...
Skąd taki kod wytrzasnąłęś ? Skoro ustawiasz przerwania, to wypadałoby też obsługiwać ich wektory i to każdy oddzielnie…
Z tego co pamiętam to ta funkcja wysyła te dane do bufora z którego są pobierane w wyniku obsługi przerwania od Tx
Ja aby byc pewnym czy procek dziala czy nie zrobilbym mruganie dioda na przerwaniu. Dac odliczanie 1 sekundy i wszystko byloby jasne.
Możesz wykorzystać odpytywania sprawdzasz wartość bitu w rejestrze pinA , niektóre mikrokontrolery posiadają port posiadający dedykowane przerwanie (pcinit) po odpowiedniej konfiguracji zmiana na tym porcie powoduje wywołanie przerwania.
Podobno działa to przerwanie a problem był w zwarciu na PC. Dziwne że w symulatorze nie działało. Cuda i dziwy hehe. Pozdrawiam
nie widzę odblokowania przerwań od odebranego znaku przez UART. Samo SEI nie wystarczy.
Spróbuj tak: wyłącz przerwania wyzeruj UCSR0B, ustaw UBRRL na 0x4d, i znów ustaw UCSR0B.
Nie stosuj itoa w przerwaniu, tylko jakąś flagę dla pętli głównej, że możesz przekonwertować czas.
zaraz sprawdzę ale ja murze odmierzać krótkie czasy i nie wiem czy to nie będzie przeszkadzać muszę trochę policzyć. Czyli po prostu jest za mało czasu pomiędzy przerwaniami i instrukcje wewnątrz nie nadążają się wykonać tak?
Nie napisałeś jak obsługujesz wyświetlacz. Jeśli nie sprawdzasz zajętości tylko odczekujesz jakiś czas przy wysyłaniu danych to być może przerwania przychodzą zbyt często zanim dane zostaną wysłane do wyświetlacza i sie coś psuje. Sama obsługa przerwania trwa może zbyt długo.
Wykorzystujesz naraz przerwania (których nawet nie zadeklarowałeś) i pooling? Albo jedno albo drugie :]
Widzę u Ciebie duże przywiązanie do Atmela, więc możesz wziąć jakiegoś ARMa i na nim zbudować układ realizujący założoną funkcję. Na przykład [url=http://www.atmel.com/devices/SAM3S4... Zaletą tego modelu jest przyjemna obudowa. Wadą jest brak możliwości pracy z zewnętrzną pamięcią S(D)RAM. Jeżeli przylutujesz TQFP44 czy 48, to tak samo idzie...
Przerwania dla USART wydaje mi sie że działają poprawnie, dlatego nie załączam kodu obsługi USART. Przerwania same w sobie muszą działać poprawnie, jeśli tylko procesor jest sprawny i taktowanie, i zasilanie poprawne. Tym niemniej kod obsługi przerwania może zawierać błędne założenia, które mogą być przyczyną.
I teraz sygnał po Transceiverze chciałbym pościć po SPI na uP(Atmega128 lub Atmega162) I tutaj moje pytanie czy jest to dobre rozwiązanie, i czy układ wyrobi się z odbiorem danych po SPI???? Wydaje mi się że na SPI nie bedzie to pracowac. Musisz podłączyc sygnał z transceivera do jakiegoś portu z przerwaniem i z odpowiednią częstotliwością (zależną...
Witam wszystkich. Pisze program do pewnej maszyny gdzie pracują silniki krokowe itp. Ale jest tez pomiar temperatury (termostat) jak zrobic zeby co ok 2s niezaleznie od głównego programu procesor sprawdzal czy wlaczyc czy wylaczyc grzalke. Slyszalem o przerwaniu z przepelnienia licznika ale nigdy tego nie praktykowalem. Procek to ATMEGA 128 a kompilator...
Ja bym próbkował w przerwaniach od jakiegoś timer'a np. co 0,1ms. W atmega128 jest chyba wyzwolenie przetworzenia timera na ovf/CC timera
Raczej musiałbyś pokazać cały kod. Poza tym nie stosuj w kodzie magic numbers, oprócz mikrokontrolera nikt raczej nie wie co to jest np. UCSR1B=0x98. Do definiowania funkcji obsługi przerwań używaj makra ISR a nie #pragma.
dziękuje, rownież życzę spokojnych radosnych i wesołych Świąt Bożego Narodzenia. Pozdrawiam. Adam //EDIT: Tam sie tylko zapytam.. jakim cudem pętla nieskonczona generuje zwłokę? bo na pewno kilka ms (us) nie trwa takie cos: wait=3; TCNT0=0; while(wait); chyba ze nie wiem jak działa while, to mnie douczcie (jesli mozna).. pętla while(wait);...
Odpowieadajac: 1. Nie 2. Nie wiem, Nie wiem co rozumiesz przez sygnał. 3. Nie widzę możliwości pracy liczników master-slave Może są jakieś "trikologiczne metody". Mozesz sprzetowo używając sygnałów OCxx jako zródło sygnału np. Albo przez przerwania. Myślę że wybrałeś zły sprzęt do tego zadania.
Być może pomocny będzie temat: http://www.elektroda.pl/rtvforum/topic93... Tematem jestem zainteresowany. Jeśli uda Ci się rozwiązać problem to proszę o podanie rozwiązania, głównie chodzi mi o LCD w sekcji bootloader. A jak jest z przerwaniami w bootladerze. Czy można stosować przerwania tak jak w normalnej aplikacji czy trzeba je jakoś zmapować?
Program w przerwaniu lepiej niech za długo nie siedzi. Jeśli musisz już takie rzeczy robić, to w przerwaniu ustawiasz flagę, którą to potem sprawdzasz w programie.
DAC0808 - nie ma kompletnie żadnej filozofii. POdłączasz go do jakiegokolwiek ośmiobitowego portu, ustawiasz kierunek (DDRx = 0xff;) i zapiszujesz wartość (PORTx = wartosc;). PCF8591 - http://elportal.pl/index.php?module=Cont... część szósta, pobierz listingi. ADC0820 - podobnie jak DAC0808 podłączasz do portu ośmiobitowego....
Moim zdaniem masz rację, że przerwania powodują problem. Miałem kiedyś podobną zagwozdkę z obsługą klawiatury PS2 + multipleks. Problem rozwiązało zezwolenie na przerwanie przerwania multipleksowania, tak aby przerwanie (w moim wypadku) od obsługi klawiatury miało "wyższy priorytet" i mogło wywłaszczyć przerwanie multipleksowania.
Jeżeli nie planujesz jakiegoś skomplikowanego programu, to spokojnie w ATMEGA32 możesz dać kwarc 16MHZ i na podstawie przerwania z któregoś z TIMERów zrobić cyk-bajer pikny zegarek z melodyjką (alarmem).
Wlasnie do tego doszedlem, wystarczylo wylaczyc bit WGM12 i przejsc w normalny tryb pracy (nie wiedzialem ze przerwania od porownania tez tu dzialaja ) Temat zamknięty
przerwania atmega128 atmega128 przerwania bascom podstawa atmega128
lodówka bosch rozszczelnienie wpisany tekst komórek ariston komin
telefon czysty hwinfo64 sensor
Napięcia logiczne na złączu diagnostycznym Seagate SSHD ST1000LM014 Odpowietrzanie ogrzewania podłogowego: zasilanie czy powrót?