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, Tworzę projekt kompasu cyfrowego po szynie I2C pracujących na Atmega 328p-pu. Chciałbym zrealizować u siebie w projekcie przerwania, w ten sposób, że odbieram dane z kompasu->przerwanie i kolejno na początek. Przerwania na prostych przykładach realizowałem ale tutaj nie mam pomysłu jak to zainicjować. Wklejam główny wątek, z moją nie udaną...
czy ktoś byłby mi w stanie pomóc w ustawieniu przerwania na int1 urzywająć timera1 ? ponieważ nie radzę sobie z ustawieniem tego 16 bitowego timera. ogolnie przerwanie miało by wyłączać silnik jesli zostanie wciśniety przycisk bądź krancówka
Korzystając z tego kursu [url=]Link nie moge uzyskać migania diody przy modyfikacji kodu: [syntax=c]int main( void ){ DDRB = LED1; PORTB = LED1; TCCR2B |= (1<<CS21)|(1<<CS22); TCNT2 = 0; TIMSK2 |=(1<<TOIE2); sei(); while(1){ } } ISR(TIMER2_OVF_vect) { if (TCNT2 >= 10) PORTB &= ~LED1; if (TCNT2 >= 30) PORTB |= LED1; if (TCNT2...
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 Czy ja dobrze widze, ze mikrokontrolery serii ATmega nie maja ustawianego priorytetu przerwan ? Z manuala wynika, ze po wywolaniu przerwania system przerwan zostaje wylaczony. I zostaje wlaczony dopiero po wykonaniu podprogramu obslugi tego przerwania. Tak to wyglada i w manualu i w Bascomie. Oczywiscie mozna w podprogramie obslugi przerwania...
Witam, mam pytanie odnośnie wywoływania i odwoływania przerwań w przerwaniu. Czy dobrze myślę, że aby wywołać przerwanie w przerwaniu należy poprzedzić procedurę komendą sli()? Ale mam jeszcze inne pytanie - czy odwołując przerwanie w procedurze jego obsługi można go wyłączyć? Czy w tej samej procedurze można odwołać inne przerwanie. Np. w kodzie programu...
Mam kłopot z obsługą przerwania INT0 w ATmega32. Chciałem, żeby były generowane zboczem opadającym. Na nogę ITN0 wchodzi sygnał prostokątny 1Hz z wypełnieniem 50%. Jest rezystor podciągający do +5V. Kod jak niżej. Powinno generować sygnały na beeperzerz podłaczonym do portu D ale nic się nie dzieje. Bascom odmawia skompilowania linijki zawierającej...
Witam! Mam następujący problem: Kiedy włączam obsługę przerwania z portu szeregowego, procesor strasznie zwalnia, nie wyrabiam się w czasie z programem... Program jest w Bascomie, kontroler to Atmega32. Wszystko zwalnia tragicznie, nawet jeśli w podprogramie przerwania napiszę od razu powrót: Serial_int: Return Sprawdziłem też: Serial_int: Toggle PORTB.3...
Mam problem z przerwaniem od Timera0. Chodzi o to by Timer0 zgłaszał przerwanie w trybie pracy z porównaniem. Jest to tryb Clear Timer on Compare Match (CTC). Licznik zlicza zdarzenia zewnętrzne i w momencie zliczenia do zadanej wartości ma zgłosić przerwanie i zacząc liczyć od zera. Aby to osiągnąć do rejestru OCR0 wpisuję wartość do której licznik...
Witam. Zwracam się do Was z prośbą o rozwiązanie problemu. Chcę wysyłać do mikrokontrolera przez RS232 jednocześnie 5 liczb. Zależy mi na tym, żeby odbieranie ich realizowane było w przerwaniu. Przerwanie obsługuje tak: SIGNAL(SIG_UART_RECV) { i=UDR; } Mam tak, ale nie wiem, czy to dobrze: [code] volatile unsigned char tablica[5];...
Witam Mam problem Wszystko działało na portach PA PC i PD4-7 ale jak podpiąłem cały PD PB do drugiej części matrycy diodowej to przestało działać chyba przez przerwania. Zmieniłem rodzaj przerwania na czasomierz z uwagi ze chyba piny INT0 zmieniały stany. Wszystkie porty mam jako wyjścia a w części matrycy mam błędy zawsze w tym samym miejscu. Jaki...
W skrócie; co 1 sek wykonywane jest przerwanie w którym sa zliczane impulsy (dla wyliczenia częstotliwości) .Atmega pracuje z zewnętrznym rezonatorem kwarcowym 8Mhz.Niedawno kupiłem nowe Atmegi32 i o dziwo program zle dziala (wyliczana czestotliwosc "plywa" ) Kiedy wgrywam soft do atmegi kupionej dawniej wszystko jest ok . Teraz kupiłem 3 i na wszystkich...
Napisałem programik w celu testowania czasu w przerwaniu ADC. #include <stdint.h> #include <avr/io.h> #include <stdlib.h> #include <avr/interrupt.h> int main(void) { sei(); DDRB=255; DDRC=255; ADMUX = _BV(REFS0)|_BV(REFS1); ADCSRA = _BV(ADEN)|_BV(ADIE)|_BV&...
Witam !!! Mam pytanie, dawno nie programowałem avr-ów i chciałbym sobie przypomnieć czy przerwanie timera1 może kolidować z przerwaniem timera0 ? Chyba mogą bo przerwanie "stopuje" cały program ale chciałbym się upewnić... proszę o odpowiedź...
witam.Jestem nowy i poczatkujacy. Chcialbym napisac najprostrzy program aby sprawdzic czy progra mi wogole wchodzi w przerwanie czyli czy zapali diode. Ale zupelnie nic sie nie dzieje. moj kod: [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> int main(void) { DDRB|=(1<<PB0); PORTB|=(1<<PB0); // TIMER0 TCCR0 |= (1<<WGM01);...
Witam, ostatnio podłączyłem do Atmegi wyświetlacz od nokii 3310 i postanowiłem pouczyć się trochę timerów i przerwań. Chciałem napisać prosty programik liczący impulsy i wyświetlać je na LCD. W przerwaniu od INT0 zliczam impulsy, a w drugim przerwaniu co sekundę przepisuje ilość impulsów do zmiennej i kasuję liczbę impulsów. Problem pojawia się gdy...
Witam! Mam program, który wykorzystuje liczniki do wysyłania impulsów o danej częstotliwości. Częstotliwością steruję za pomocą zmiennej okres1, która jest mnożnikiem preskalera. Np. preskaler=8 clkio=1000000Mhz okres1=127, czyli co 8*128=1024us zmienia się stan na danym pinie przerwania od przepełnienia licznika (dla timera1a jest to pd5), co znaczy,...
Witam Mam pewien problem.Potrzebuję podczas odliczania Timera0 wykorzystać przerwanie Int0. Sprawa wygląda tak, rozpoczynam odliczanie timera0 do momentu pojawienia się sygnału narastającego na wejściu Int0 i w tym momencie muszę przerwać Timer0 i odczytać jego wartość. No i właśnie tu pojawia się problem. Zamieszczę moje wypociny: Config Timer0 = Timer...
Mam taki problem wykonuje pomiar co 2ms i chce go zapisać na kartę SD. Z moich obliczeń wynika że pojedynczy zapis na kartę SD trwa ok. 40ms. Jak zapisywać w czasie rzeczywistym te pomiary ?. Ktoś polecił mi żebym stworzył dwa buffory. Tylko nie za bardzo wiem jaka by miała być zasada działania takiego rozwiązania. Czytałem trochę o "Cirual Buffer"...
Witam. Kod jest taki: Jestem w petli... Naciskam klawisz "1" otrzymuję odpowiedź: Enter=0 Znak: Naciskam klawisz "2" otrzymuję odpowiedź: Enter=0 Znak: 1 Naciskam klawisz "3" otrzymuję odpowiedź: Enter=0 Znak: 2 Naciskam klawisz "4" otrzymuję odpowiedź: Enter=0 Znak: 3 Naciskam klawisz "5" otrzymuję odpowiedź: Enter=0 Znak: 4 Naciskam klawisz "ENTER"...
Witam. Mój układ ma realizować między innymi funkcję taką, że po naciśnięciu dowolnego przycisku na pilocie bez wprowadzania opóźnień z funkcji getrc5 wyłączać i włączać podświetlenie LCD. Problem nierozwiązany dla mnie od dłuższego czasu to występujące przypadkowo przerwania INT0. Jak wyeliminować ten problem programowo? Brak mi pomysłu na to. Oto...
Witam, Skonfigurowałem USART żeby wysyłać dane, do komputera lecą prawidłowo. Chciałem teraz odbierać dane z komputera, jednak chciałbym to zrobić w przerwaniu aby tam w tablicy buforować dane i co jakiś czas obrabiać je w głównej pętli programu. Problem jest z tym, że po uruchomieniu przerwań uzyskuję jakieś śmieci - tak mi się wydaje, bo nie wysyłam...
Prosze o podpowiedz-przykladzik jak configurowac (w ATMEGA32)przerwanie np. INT1 aby reagowalo na opadajace zbocze
Przepraszam, że odkopuję temat ale mam problem właśnie z timerem 0 w atmedze 328p i jak bym miał zakładać nowy temat to nazwał bym go prawie tak samo jak ten więc wolałem napisać w już istniejącym temacie. Chcę sprawdzić działanie 8-bit Timer/Counter0 w ATmega328P. Efekt do uzyskania prosty. Ustawiam pin C5 jako wyjście (na początku stan niski) i przy...
Dzięki za odpowiedzi. Myślałem, że jestem już na dobrej drodze, żeby to ogarnąć ale okazała się, że byłem w błędzie. Podłączyłem na krzyż przez UART dwie atmegi328p i do obu wgrałem taki sam kod: Nie wiem czy dane się poprawnie wysyłają, bo utknąłem na przerwaniach. Jedna atmega ma wysyłać co 1000ms cokolwiek, a druga gdy to odbierze ma (na razie) po...
Witam Męczę się nad umieszczeniem procedury odbioru RC5 w przerwaniu. Na atmega32 pod INT0 nie ma nic łatwiejszego ale przy tym procku już parę rzeczy mnie zaskoczyło ale nie spodziewałem się że będę miał problem z przerwaniami. Otóż TSOP mam podłączony pod pin PB7 ,nóżka numer 26 (patrz obrazek) Z tego co widzę to jest to INT7 prawda? Zrobiłem tak:...
Witam Jestem tu nowy więc proszę o wyrozumiałość. Od pewnego czasu próbuję zdekodować pilot(y) IR. O ile dużo jest wątków poświęconych dekodowaniu RC5 i innych to jednak nigdzie nie mogę się doszukać jak sprawdzić czas impulsu. Wykorzystuję timer i przerwanie zboczem narastającym ICR1 . W przerwaniu zmieniam na zbocze opadające a następnie dokonuję...
Co do uśredniania temperatury, w próbowałem to robić tak jak poniżej, ale nie działa. Ten odczyt powinienem robić np. W przerwaniu timera, np. co sekundę? To co robię poniżej ma w ogóle jakiś sens? [syntax=c] #include <avr/io.h> #include <util/delay.h> #include "HD44780.h" #define F_CPU 1000000UL #define VREF_DIVIDED 25 uint16_t adc_value;...
Witam Postanowiłem przetestować wszystkie przerwaniaw ATMEGA32. Program ma działać następująco: naciskam klawisz podpięty pod INT0 (podciągnięty rezystorem 1kom do Vcc) i licznik zlicza mi to naciśnięcie. Naciskam drugi klawisz podpięty pod INT1 (podciągnięty rezystorem 1kom do Vcc) i licznik zlicza mi to naciśnięcie. Teraz jeśli nacisnę klawisz podpięty...
Trochę hmmm mało szczęśliwa ta obsługa RC5. Zwykle robi albo powiem inaczej warto robić na przerwaniach zamiast wszystko w pętli głównej bo działa to zdecydowanie wtedy lepiej. Już samą tą procedurę można byłoby mocno uprościć, żeby nawet nie korzystać w ogóle z procedury obsługi przerwania, bo po co? skoro tam jest ustawiana tylko flaga na 1. Pomijam...
Jak się dobrze przypatrzysz temu schematowi, to nie powinieneś być zdziwiony: P.S. Zdecydowanie bardziej polecam lekturę datasheet od Atmega328 , niż jakieś tam opisy do Arduino - producent układu wie najlepiej, co stworzył.
Witam, Jestem w trakcie budowy sferycznego wyświetlacza widmowego. Globus składa się z 40 diod LED RGB sterowanych procesorem ATmega328P. Pozostał do rozwiązana ostatni problem a mianowicie wykrywanie położenia pierścienia, na którym są umieszczone diody LED. Pierwsze, co przyszło mi na myśl to zastosowanie diody emitującej promieniowanie podczerwone...
Buduję pewien układ zawierający dwa mikrokontrolery ATMega328. Nazwijmy je A i B. Mikrokontroler A ma kwarc 16MHz, a mikrokontroler B ma kwarc 8MHz. Mikrokontrolery są połączone przewodem 4-żyłowym o długości ok. 30cm, z których dwie żyły to zasilanie i masa, trzecia żyła łączy B0 mikrokontrolera A z C4 mikrokontrolera B, czwarta żyła łączy B1 mikrokontrolera...
Przykładowo chce pozostać przy 16 MHz, więc kompas pozostanie przy tym kodzie który mam. Należałoby zmienić więc Baudrate w pliku żyroskopu? Jakieś rejestry? Urządzenia mają inne adresy, więc mogę w pętli najpier odbierać dane z jednego urządzenia a potem z drugiego? Wwystarczy jedna inicjalizacja twi ? Konieczne są przerwania przy zmianie odczytu z...
Funkcja DZIAŁA [syntax=cpp]//Data utworzenie: 20-09-2014 #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #include <avr/pgmspace.h> #include "MYUART/myuart.h" #include "MK_TERMINAL/mk_term.h" #define REF_256 (1<<REFS1)|(1<<REFS0) #define REF_VCC (0<<REFS1)|(1<<REFS0) #define SR 8 typedef...
witam napisałem program w którym dokonuje pomiar poprzez sonar ultradzwiekowy uzywając komunikacje SPI ale niestety problem polega na tym że nie zależnie od odległości przeszkody silniki cały czas pracują tak samą prędkością. Dodano po 40 Jestem zielony w wskaźnikach i komunikacji SPI .Więc to mogłem jedynie źle zrobić.
Witam, mam kilka pytań odnośnie swojego problemu jaki napotkałem. Otóż stworzyłem dwie identyczne PCB (za pomocą frezarki), zrobiłem NCC (non copper clean), więc ścieżki są dość dobrze wyizolowane, problemem nie jest PCB. Problem to: ATmega na jedenej PCB działa a na drugiej nie. Wszystkie elementy takie same, wszystko to samo. Elektronika ma za zadanie...
Witam... Sądzę, że to powinno Ci pomóc...
Witam. Piszę program do obsługi LCD. Piszę w asm i pod ATmega32. Przerwy czasowe chcę zrealizować za pomocą liczników. Program dla sprawdzenia inicjacii - nie pełny i nie działa właściwie - napisany dla próby. Napisałem początek programu i chciałem go zasymulować ale wciąż pojawia mi się ten sam błąd z którym po raz pierwszy się spotykam i nie wiem...
Problem wygląda następująco. Pisze program na atmega32, gdy zostaje wywołane przerwanie od porównania dla timera 0 to program się restartuje. Jednocześnie, gdy zdefiniuje funkcje ISR(BADISR_vect) to wlaśnie ona jest wykonywana zamiast funkcji od timera :/. Gdy próbuje wywoływać przerwanie od przepełnienia timer 0 to w ogóle się ono nie wywołuje, a przerwanie...
Próbowałem 2 sztuki ATMEGA162. Obie pracowały stabilnie na 20MHz. Program pisany w C, niezbyt skomplikowany (operacje logiczne, arytmetyczne, skoki warunkowe, dostęp do pamięci etc, nie wykorzystywałem timerów, przerwań, pamięci EEPROM).
Moim zdaniem masz żłe napisaną obsługe przerwania. Procesor jak wejdzie w przerwanie to w niej wisim i wisi. Mogą być problemy ze stosem. Ja bym to napisał tak ze timerem bym wykonywał akcje a w przerwaniu ustawiał flage wciśniętych klawiszy. Otrzymujesz przerwanie i zapisujesz do zmiennej stan klawiatury. W przerwaniu z Timera sprawdzasz jaki stan...
Witam. Zlecę mały projekcik zegara czasu rzeczywistego z data na PCF8563 komunikującego się po I2C. Dane na wyświetlaczu, ATmega32- do ustawienia wykorzystywane są przerwania zewnętrzne INT0(Wybór) oraz INT1(ustawienie). Kontakt toomekn(malpa)gmail.com . Wszystko w C. 60zł . Program wyświetlacza LCD mam gotowy.
Używam biblioteki pana Mirka. [syntax=c]/* * mkuart.c * * Created on: 2010-09-04 * Autor: Autor: Mirosław Kardaś */ #include <avr/io.h> #include <avr/interrupt.h> #include <stdlib.h> #include "mkuart.h" // definiujemy w końcu nasz bufor UART_RxBuf volatile char UART_RxBuf[UART_RX_BUF_SIZE]; // definiujemy indeksy określające ilość...
// ================= 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ę...
Witam Mam Atmega32A + PCF8563 + PCF8574 + RFM12 + DS18B20 +DHT11. Port danych LCD to Port.A, ControlPort to Port.C. I2C standardowo na Portc.0 Portc.1. Niestety jest problem z obsługą I2C, tzn. zegar PCF8563 nie działa w ogóle ( na LCD puste pole ) , a klawiatura na PCF8574 - tylko jeden klawisz i to nie ten, który jest przypisany w kodzie ( działa...
Najbardziej martwi mnie dostępność bibliotek różnego rodzaju. Do Arduino było tego masa. Ponoć, że biblioteki tworzone dla AVR mogą być używane z STM, ale nie mam pojęcia jak to wygląda w praktyce, dopiero czekam na devboard do STM32F3. Aczkolwiek nie ukrywam, że możliwości STM-ów i ich cena oraz dostępność kuszą i to bardzo, zwłaszcza teraz kiedy mam...
Przykład kursu C :[url=]Link Debugger służy nie tylko do wykrywania błędów. Przed rozpoczęciem debugowania, można zdefiniować miejsca w kodzie, w których wykonywanie oprogramowania powinno zostać wstrzymane: punkty przerwania lub punkty przerwania. Z jednej strony można teraz sprawdzić dokładny stan oprogramowania w danym momencie. Na przykład dostaje...
chciałbym żeby na bieżąco sprawdzał ile światła pada Na bieżąco - tzn ciągle? Najsensowniej byłoby tu użyć przerwań. I albo "na bieżąco" (co nie wydaje mi się konieczne) monitorować ilość światła i w przerwaniach zmieniać tekst, albo wszystko oprzeć na przerwaniach. Może i banalne ale na razie nie czuje się pewnie w temacie C W internecie są dobre...
Przerwania to sprzętowe funkcje mikrokontrolera (Atmega328p w większości Arduino). Polecenie attachInterrupt() ustawia odpowiednie rejestry tak by odpowiedni bodziec (u Ciebie zmiana 0->1 na pinie 3) uruchomił przerwanie, a to uruchomiło funkcję jego obsługi (u Ciebie count() ). Inne zadania zostają na ten czas wstrzymane, a kolejne przerwania czekają...
Powód wystąpienia RESET'u można odczytać z rejestru MCUSR - strona 54 [url=]datasheet. Jeśli powodem jest np. flaga PORF, albo BORF, to problem może leżeć po stronie zasilania. W przypadku, gdy dojdzie do RESET'u, ale wszystkie flagi będą zerowe, to powód leży w programie - np. przeciążenie stosu, przerwanie które wystąpiło, ale nie ma dla niego wektora...
Cześć, Mam zapytanie dotyczące przerwania IRQ w module radiowym nRF24L01+. Moduł pracuje jako nadajnik. Wykorzystuję w nim funkcję potwierdzenia odbioru. Pomyślne odebranie danych przez odbiornik powinno skutkować wystawieniem w nadajniku stanu niskiego na IRQ. Ten sygnał chcę podać na wejście przerwania mikrokontrolera ATmega32A. Niestety, nie zawsze...
Mam następujący problem. Chce na zmianę odczytywać wartości z dwóch kanałow przetwornika AC w atmega32. Używam następującego kodu: unsigned char zm1,zm2; int main( void ) { DDRA=0x00; DDRB=0xff; PORTB=0; DDRD=0xff; PORTD=0; ADMUX=0X60; ADCSRA=0Xc6; while(1) //główna pętla programu { while (ADIF==0) {} zm1=ADCH; PORTB=zm1; //ADCSRA=0X46; ADMUX=0x61;...
Witam, Jestem początkującym w temacie, napisałem sobie sterowanie 8 serwami, ale chciałbym to robić bardziej dokładnie przy użyciu trybu CTC timera1 i sprzętowego rejestru przesuwającego. W następujący sposób go inicjalizuje // na początek włączamy tryb czasomierza i ustawiamy wyjscie na 0 w trybie normalnym TCCR1A = 0x00; // tryb czasomierza TIFR &=...
Dzien dobry. Piszę bootloader do procesora atmega32. Bootloader ma dzialać w terminalu więc konwersja ascii -> hex jest przeprowadzana w mikrokontrolerze. Po uruchomieniu, program ładnie się przesyła, wszystko wydaje się być OK. Po resecie jednak nic się nie dzieje. Skopiowałem całą zawartość pamięci i zauważyłem, że drugi bajt jest nieprawidłowo...
Ale o co Ci chodzi z tym zdefiniowaniem pinu? A z tym wyrzucaniem wartości licznika na cały port to tmf dobrze gada. Ale do tego jeszcze dojdziemy, na razie wytłumacz o jakie definiowanie chodzi. Bo chyba nie o #define? Żeby na każdym pinie mieć inną częstotliwość to tych pinów nie trzeba "definiować" czy "rozdzielać". Po prostu na każdym zmieniasz...
Witam serdecznie, mam pewien problem z rozkminienieniem tej biblioteki - led7seg.h.Mianowicie trafiłem na następujący przykład(AND-TECH) z jej wykorzystaniem by wyświetlać wartości na wyświetlaczu 7 segmentowym: Digit1 PORTB.0 Digit2 PORTB.1 Digit3 PORTB.2 Digit4 PORTB.3 Segment A PORTA.1 Segment B PORTA.2 Segment C PORTA.3 Segment D PORTA.4 Segment...
To po prostu odbiór danych zrób na przerwaniach. Procesor odbiera dane,zapisuje je w buforze i sygnalizuje, że są nowe dane. Program główny jak ma czas sprawdza flagę nowe_dane i je obrabia.
Co tutaj przekombinowałem? Atmega32. Tryb Licznika. Celem było zapalenie i gaszenie diod co sekundę. Preskaler = 256. Przerwanie tak wyliczone aby wykonywało się co sekundę. Timer 16bitowy [syntax=c] #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> ISR (TIMER1_OVF_vect) { PORTC ^= ~0xFF; //zmiana stanu portu C...
Ściągnąłem polskiego pdf-a do atmegi. Za pioruna nie mogę pojąć jak poustawiać to w programie. Wyobrażam to sobie tak: [syntax=basic4gl]Sub Stby() Do Config Int0 = Falling On Int0 Enable Interrupts Config Rc5 = Pind.6 , Wait = 2000 Getrc5(address , Command) Command = Command And &B01111111 Printbin &H1B ; &H5B ; &H32 ; &H4A; ' reset wyswietlacza i tu...
Płytka, a raczej płytki zostały wykonane pod zegar z multipleksowaniem na przerwaniach, ale jako, że mam problem z uruchomieniem tego ( jak chciałem testowo wyświetlać jedną cyfrę to świecą się wszystkie 6 cyfr, cyfry wyświetlają się prawidłowo, ale wszystkie ), więc spróbowałem z MAX7219. Może zacznę od początku Zasilacz ma trafo zalewane 8VA / 12V...
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
Witam, To pomogło. [syntax=c] volatile uint8_t pozMe = 0; [/syntax] W programie są przerwania.
Witam, chciałbym przedstawić moją konstrukcję która powstała w zeszłym roku i teraz publikuję ją Wam. Jest to uniwersalna płytka bazowa posiadająca następujące włąściwości: Procesor ATMEGA32A z kwarcem 8 MHz Rozmiar pcb identyczny jak wyświetlacza 2x16 znaków HD44780 (można je ze sobą skręcić. Wyprowadzenie złącza do wyświetlacza. Wbudowany zegar RTC...
Tak w zasadzie to ciągłe przetwarzanie z jednego kanału najlepiej zrealizować w przerwaniach. Można wtedy pokusić się o napisanie takiego handlera, który nie tylko będzie kolekcjonował dane, ale też je przetwarzał - proste filtrowanie czy uśrednianie. Wtedy otrzymywana wartość będzie bardziej realna niż bezpośrednie dane w których mogą występować chwilowe...
Witam, dasej: Dzięki za pomoc, po wpisaniu Twojego programu 100% działa. Powinno być chyba zamiast TIMSK1 ---> TIMSK, z kalkulacji miało wyjść 1Hz i tak jest. Tylko że usiłuję to zrobić bez wykorzystywania przerwań i z dużo wyższymi częstotliwościami. [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> ISR (TIMER1_COMPA_vect) { PORTD...
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.
Mam program, w którym uruchamiam przerwanie z pinu ICP. I wszystko działa jak należy, program jest przetestowany. Postanowiłem połączyć go z programem do obsługi karty pamięci pobranym z //**************************************... // **** MAIN routine FOR Interfacing microSD/SDHC CARD **** //**************************************...
Witam i pozdrawiam. Chciałbym co 5 minut wysyłać przerwanie z pcf8583 do atmegi32. W pcf wszystko działa, chyba (co zadany czas odpowiednie bity są ustawione i jak mierzę napięcie pomiędzy wyprowadzeniu pinu int pcf a +5v to najpierw mam zero a po upływie zadanego czasu 5v,czyli int jest w stanie niskim), obsługa przerwania w Atmega32 działa jak trzeba,...
Witam. Chciałbym wykorzystać przerwania timera1 w Atmega32 do realizacji pojedynczego pomiaru wartości na ADC. Timer ustawiam w tryb "PWM with phase correct", a ADC na pojedynczy pomiar: [syntax=c] //ustawienia timer1 TCCR1A |= (1<<WGM10) | (1<<WGM11); TCCR1A |= (1<<COM1A1); TCCR1B |= (1<<CS11); //POZWOLENIA NA PRZERWANIE TIMSK...
Witajcie, widzę, że dawno tu nikt nic nie naskrobał ;) Znalazłem się w dość nieciekawej sytuacji i czas ucieka mi między palcami jak nie powiem co. Mój problem rysuje się podobnie jak kolegom na wstępie. Naskrobałem kod do obsługi Master Transmitter AtMegi32 , lecz ciężko mi coś spłodzić w części Slave Receiver AtMegi168p . Bo chodzi mi o przesłanie...
Witam, Na forum jest od 4 lat, lecz to jest mój pierwszy post :) Nie dawno zacząłem zabawę z AVR-ami. Kupiłem potrzebne elementy, złożyłem i przystąpiłem do pisania programu. Niestety zatrzymałem się na komunikacji z serwerem http. Chciałbym aby mój kontroler łączył się z podaną stroną www wysyłając zadanie GET lub POST i pobierał z niej otrzymany ciąg...
Witam serdecznie. Rozpocząłem jakiś czas temu zabawę z mikrokontrolerem ATmega. Posiadam model ATmega32-16PU. Buduję zegar czasu rzeczywistego. Chciałem do tego wykorzystać przerwania z wbudowanego timera (przepełnienie). Po wielu nieudanych próbach synchronizacji ATmegi z rzeczywistym czasem postanowiłem policzyć taktowanie swojego mikrokontrolera....
wynik wyswietli sie 2x, a nie trzy, pytanie - dlaczego? Na to pytanie, odpowiedź jest prostsza :-) Kiedy wywołujesz return 0, funkcja main powraca (to ogólnie nie najlepszy pomysł). W asemblerze, wywołanie funkcji main wygląda tak: 48:32 d0 rcall.+100 ; 0xae <main> 4a:4e c1 rjmp.+668 ; 0x2e8 <_exit> Po zakończeniu funkcji main wykonany...
Witam, jestem kompletnie zielony w tym temacie. O ile znam się trochę na elektronice to programowanie to dla mnie magia. Otóż dostałem zestaw ze szkoły i mam go złożyć. W zestawie otrzymałem płytkę główną z procesorem Atmega32L, płytkę do sterowania silnikami, 3 czujniki odległości sharp, 4 czujniki białej linii. Dokupiłem jedynie przekładnie z silnikami...
Witam wszystkich, robię mały projekt do którego używałem Atmegę8. Zaczyna mi brakować pamięci więc stwierdziłem, że wymienię ją na Atmegę328. Niestety jest trochę zabawy z przerobieniem kodu, po pierwsze w Atmega328 nie można używać PD0 itp, tylko PORTD0. Po drugie timery ustawia się innymi rejestrami. Ogólnie program sobie przerobiłem, niestety została...
Sprawdzę to juto rano. Wyłączę przerwania przed inicjalizacją. Na dwie sekundy mam ustawiony w atmega32 odpalam wotchdoga identycznie i działa bez problemu.
Witam, jak w temacie, czyli źle wyświetlają mi się cyfry na LCD w sensie tak chcą ( 00 -> 01 -> 00 -> 01 -> 00 -> 08). Nie wiem po jakiej stronie leży problem. Pracuje na płytce ewaluacyjnej GOTRONIK z Atmega32A z RTC PCF8583 ( INT-PD2, A0-GND, SDA-PC1, SCL-PC0) Umieszczam kody programu: Main.c [syntax=c]#define F_CPU 16000000L #include...
Jesli dobrze masz ustawiony zegar (domyślnie 1MHz czyli w bascomie wpisujesz 1000000) wyłącz przerwania bo z nimi masz problem.
Mam problem z przełączaniem bitów Założenia programu są następujące Program przez określony czas ma włączyć 2 diody oznaczone Pompka1 i Pompka2 oraz wyłączyć Napowietrzacz po upływie czasu ma przełączyć tz: wyłączyć Pompka1 i Pompka2 oraz włączyć Napowietrzacz po upływie drugiego czasu znowu ma przełączyć. Niestety program nie działa dobrze Diody działają...
... Dlaczego tak się dzieje? :/ Dlatego, że przerwanie ISR(TIMER1_COMPA_vect) jest wywoływane co 128 taktów zegara, a wykonanie procedury przerwania timera1 zajmuje ~200 taktów. Po zakończeniu wykonywania przerwania od timera, gdy uC wraca do programu głównego, ma już ustawioną flagę od OCR1 i ewentualnie flagę RXC. Ponieważ timer "stoi wyżej" w hierarchii...
Chciałbym zrobić symulację naciśnięć klawiszy na klawiaturze PS/2 wykorzystując ATMega328 z rezonatorem kwarcowym 16MHz i interfejs PS/2 na USB. Posiłkowałem się tym opisem PS/2. Z opisu wynika, że urządzenie PS/2 (wspomniana klawiatura) musi być w każdej chwili przygotowane do odbioru danych z komputera, nawet, jak jest w trakcie transmisji do komputera....
Panowie, dziękuję Wam za dotychczasową pomoc. To co z Waszą pomocą zrobiłem wcześniej w zupełności wystarczyło. Teraz korzystając z wolnej chwili pobawię się tym tematem jeszcze trochę. Wydaje mi się, że nie spełniasz warunku, że przerwania mają być generowane przy każdej zmianie sygnału A i B przerwania w AVR od PCINT nie mają za wiele rejestrów do...
Cześć Jeżeli uruchomię moduł i wykonam poniższą sekwencję poleceń to wygląda na to, że wszystko działa poprawnie: [syntax=c] //================================ odczytuje numer IMEI modułu gsm uart1_puts("\rimei="); uart1_puts(IMEI); // wyswetlam dotychczas znany IMEI odczyt_IMEI(IMEI); // odczytuję numer IMEI modułu GSM uart1_puts("\rodczytany imei=");...
Bootloader startuje zawsze jako pierwszy, sprawdza status aplikacji i jeśli trzeba dokonuje aktualizacji (treść aplikacji jest w pamięci RAM programu bootloadera dla testów), następuje restart i aplikacja startuje. Po wywołaniu aktualizacji z poziomu aplikacji w taki sposób: [syntax=c] if(!(PINB&(1<<PINB5))){ eeprom_update_byte((uint8_t*)E2END,...
A msza włączone przerwania ? Pamiętaj że przerwania na pewno wydłużą czas. Pamiętaj również że to nie jest precyzyjne odmierzenie czasu tylko szacunkowe. Sprawdź również opcje optymalizacji jak są ustawione. Włączenie optymalizacji mocno !!!! skróci delaya . Pozdrawiam
Witam, Zaczynam właśnie zabawę z procesorami atmega i mam problem z watchdog'iem na atmega8. Pod atmega328 działa to super ale tam jest troszkę inaczej (jest WDIE, którego w atmega8 nie ma) Skorzystałem z przykładowego kodu z tej strony #include <avr/wdt.h> #include <avr/sleep.h> #ifndef cbi #define cbi(sfr, bit) (_SFR_BYTE(sfr)...
To ja jeszcze dodam, że przy braku pętli nieskończonej w main po powrocie (jak u Ciebie) wykonywany jest skok do _exit: [syntax=asm] 32:02 d0 rcall.+4 ; 0x38 <main> 34:24 c0 rjmp.+72 ; 0x7e <_exit>[/syntax] a tam jest : [syntax=asm]0000007e <_exit>: 7e:f8 94 cli 00000080 <__stop_program>: 80:ff cf rjmp.-2 ; 0x80 <__stop_program>...
Witam, miałem ten sam problem na malinie. Radio gubiło mnóstwo pakietów, zwłaszcza przy zbliżaniu ręki do modułu nrf24l01+. Rozwiązanie polegało na dodaniu bezpośrednio na pinach radia (Zasilanie) 2 kondensatorów - 1 ceramiczny 100n i elektrolit 100uF. Znacznie poprawiło jakość komunikacji zmniejszenie transferu do 256kb i przeniesienie kodu sterownika...
Zmieniasz wartość x w przerwaniu i w pętli główniej (pętlą while) To nie ma znaczenia, x nie jest zmienną globalną i jest widziana niezależnie w przerwaniu i w pętli głównej. Timerem TIMER0 odmierzasz czas 1ms. W pętli głównej inkrementujesz zmienną x (16 lub 32 bitową). Jeśli jest ona 16 bitowa to inkrementacja jej wymaga wygenerowania mniejszego...
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ą...
tmf napisał: W tym celu musisz tylko stworzyć odpowiedni deskryptor. No to troszkę bardziej złożone niż tylko napisanie deskryptora bo ta biedny AVR bedzie obsługiwać więcej endpoint-ów, musi napisać obsługę obydwu klas i odpowiednią maszynę stanów do rozdzielania ruchu do endpoint-ów, dużo więcej pamięci. Generalnie urządzenia composite są dość nieprzyjemne...
Witam podczas rozbudowy mojego poprzedniego programu zabrakło mi przerwań zewnętrznych więc postanowiłem zmienić Atmege32A-PU na wersję Atmega 324A-PU posiada ona znacznie więcej przerwań zewnętrznych ale podczas pierwszej próby uruchomienia wystąpił problem mianowicie Atmega nie jest wykrywane przez mkavrcalculator znalazłem w internecie że możne pomóc...
A po co podłączyłeś odbiornik do int0 skoro z niego nie korzystasz? Po za tym mówisz że fuse bity masz na zew. kwarc 16MHz a w programie informujesz że używasz 8MHz... Masz tutaj mój sprawdzony kod: $regfile = "m32def.dat" 'atmega32 $crystal = 8000000 'kwarc 8MHz Config Lcdbus = 4 Config Lcd = 16 * 2 'wyswietlacz 2x16 znakow Config Lcdpin...
Witam, Jestem w trakcie budowy komunikacji między ATmega32 a klawiatura PS/2. Wykorzystuje biblioteki zamieszczone na stronie //klawiatura.c #include <avr/io.h> //#include <avr/interrupt.h> #include <string.h> #include <inttypes.h> #include <stdlib.h> //#include <stdio> #include "hd44780.h" #include "atkeyboard.h"...
Witam Zmontowałem sobie układ Atmega32 z pojedynczym wyświetlaczem 5x7 i wszystko działa tak jak należy ale problem zaczyna się w innym miejscu. Potrzebuję połączyć 3 takie wyświetlacze, lecz nie mam pojęcia w jaki sposób to zrobić. Proszę o pomoc Tutaj podaję listing programu
Docelowo zrobię to na plikach wave, na szybko łatwiej było mi napisać pobieranie znaków niż czytanie odpowiednio nagłówków a potem tablicy znaków. Zmienię również typ z int na BYTE żeby nie było problemów z konwersją. Zrób to zaraz i nie baw się w to składanie, szkoda Twojego i naszego czasu. Zauważ że to co robisz, czyli mnożenie *100 później *10,...
problem w tym, że tak jak pisałem, nie istnieje kod odbierający dane z UART. Cały interfejs na potrzeby testów jest całkowicie wyłączony - nie inicjalizuję UART, nie ma żadnej implementacji przerwań związanych z UART (ani rxc, ani txc). Trudno mi to pokazać bo tego zwyczajnie nie ma. To może być banalna sprawa. Włączyłeś obsługę przerwań UART, spróbuj...
Poeksperymentowałem z częstotliwościami podawanymi z laboratoryjnego programowanego generatora kwarcowego na wejście T1. Przypomnę czas otwarcia bramki (T0) wynosi 64 ms. Dla fwe = 1000Hz wyniki T1 wynoszą 64 (od czasu do czasu 65) i to jest OK. dla fwe = 50000Hz stany T1 = 32000 +/-200. Czyli potwierdza to że problem jest w reakcji obsługi przerwania....