Nie to przerwanie. Zobacz na mój post wyżej. Ma być przerwanie overflow a nie compare A.
Timer0 w Atmega8 może pracować tylko w trybie OVERFLOW (przepełnienia).
Przecież chodzi o tryb pracy normal. overflow. Dodano po 12 Przecież chodzi o tryb pracy normal. overflow.
Problem dotyczy wysyłania danych przez USART z atmegi8 do PC. Mianowicie poprawnie wysylane jest tylko kilkanascie pierwszych bajtow. W symulacji w tym momencie wyskakuje błąd "Stack Overflow at 0x0068" i "Excessive stack overflow, stop sim". Co mam zrobić? Podprogram realizujący wysyłanie bajtu przez USART: rs232: ldi licznik, 0x09 cbi PORTD, 1...
Ale w takim razie musze obsłużyć nie SIG_OUTPUT_COMPARE1A tylko coś innego ale co??? Ja chciałem robic porównanie do wartości granicznej (ustawionej przeze mnie) a nie do overflow
Zaglądając do dokumentacji mikrokontrolera i wybierając jedną z dwóch możliwości: 1. preskaler timera - jedno z ustawień preskalera powoduje zatrzymanie timera czyli "No clock source (Timer/Counter stopped)." 2. zerując bit TOIE0 (jeśli użyjesz timer0), czyli Timer/Counter0 Overflow Interrupt Enable
a nie włączasz gdzieś jakiegoś przerwania, którego nie obsługujesz? avry mają tak, że jeżeli włączysz jakieś przerwanie, np overflow od TC1, a go nie obsłużysz, to podczas wystąpienia przerwania następuje restart procka
(at)ElektrodaBot W twoim programie wg BASCOM-AVR są błędy: Error : 254 Line : 17 Variable expected [TIMER1 OVERFLOW] Error : 46 Line : 17 Assignment error, unknown variable (DIM) [___WR24: 0 TIMER1 OVERFLOW: 0] Popraw program.
W każdym. Tylko trzeba pamiętać, że aktualizacja OCR w tym trybie jest natychmiastowa więc zmiany w czasie działania mogą powodować paskudny jitter. No to nie wiedziałem, nie spotkałem nigdy takiego zastosowania w Atmega8 i Timer0. Uważałem, że może pracować tylko w trybie overflow.
Standard. 1. Szukaj: volatile 2. Bezsensowne typy danych 3. Nie podałeś całego programu, lub nigdzie nie używasz overflow - kompilator optymalizuje i wywala.
Dokumentacja ATmega8, strona 71: The bit TOV0 is set (one) when an overflow occurs in Timer/Counter0. TOV0 is cleared by hardware when executing the corresponding interrupt Handling Vector. Alternatively, TOV0 is cleared by writing a logic one to the flag. When the SREG I-bit, TOIE0 (Timer/Counter0 Overflow Interrupt Enable), and TOV0 are set (one),...
W tym trybie który wybrałeś (Single Mode) możesz generować PWM na PA0, PA1 i PA2. Zobacz sobe ten kod: [syntax=c]#define PERIOD_EXAMPLE_VALUE (0x01A0) //dec 416 F_PWM = 3.333MHz/4/416/2 = 1KHz (in dual slope PWM) #define DUTY_CYCLE_EXAMPLE_VALUE0 (0x00D0) // dec 208 (208/416 = 50%) #define DUTY_CYCLE_EXAMPLE_VALUE1 (0x003E) // dec 62 (62/416 = 15%)...
atmel.com nie działa ? ;-) http://atmel.com/dyn/resources/prod_docu... TOIE0: Timer/Counter0 Overflow Interrupt Enable When the TOIE0 bit is written to one, and the I-bit in the Status Register is set (one), the Timer/Counter0 Overflow interrupt is enabled. The corresponding interrupt is executed if an overflow in Timer/Counter0 occurs,...
To właśnie zostało uruchomione - musi działać. Pisane pod WinAVR [syntax=c] #define SET(port, bit) port|=(1<<bit) #define RESET(port, bit) port&=~(1<<bit) #define NOT(port, bit) port^=(1<<bit) //Przerwanie wywolywane 100 razy na sekunde ISR(TIMER1_COMPA_vect)// == SIG_OUTPUT_COMPARE1A { NOT(PORTD,PD6); } int main (void) { SET(DDRD,PD6);...
Słabo przeglądał Pan tę notę: The bit TOV0 is set (one) when an overflow occurs in Timer/Counter0. TOV0 is cleared by hardware when executing the corresponding interrupt Handling Vector. Alternatively, TOV0 is cleared by writing a logic one to the flag. When the SREG I-bit, TOIE0 (Timer/Counter0 Overflow Interrupt Enable), and TOV0 are set (one), the...
Programuję w ASM ale tylko Atmega8/16 więc wklejam ci taki przykład: [syntax=asm] .CSEG .org 0x0000 //poczatek deklaracji skokow dla przerwan rjmp _poczatek reti reti reti reti reti reti reti reti rjmp _150_timer0 //przerwanie overflow timer0 reti reti reti reti reti reti reti reti reti _poczatek: in r16, TIMSK//timer0 overflow interrupt enable ori...
Witaj, Ja też walczę z SPI od pewnego czasu, ale używam SPI w Atmega8515 jako Slave. Jeśli dobrze zrozumiałem, to masz problem z USI w Attiny26. Z tego co wyczytałem w pdf'ie i z tego co pamiętam jak się bawiłem tym prockiem, to USI można skonfigurować jako normalny SPI. Musisz tylko odpowiednio ustawić bity rejestru USICR. Nie wiem po co liczysz impulsy...
Nową wartość dla OCR wpisuj w przerwaniu Overflow, a nie CTC. W przypadku Timer1 dla obu OCR1A i OCR1B jednocześnie (prawie ;) )...
Witam, Uruchom normalnie Timer w trybie PWM. Teraz dodadkowo potrzebne Ci będa dwa przerwania tego timera: CTC i Timer Overflow. W przerwaniu CTC ustawiaj pin a w przerwaniu OVF go zeruj lub odwrotnie jeśli chcesz tryb invert PWM. Nie zapomnij o od maskowaniu przerwań i ustawieniu globalnej flagi zezwalającej na przerwania oraz nie przesadź z częstotliwością...
Skąd wiesz, że licznik działa a brak obsługi przerwania jeżeli licznik jest jest zwiększany właśnie w przerwaniu...?.?.? Wiesz o tym, że przerwanie jest wywoływane kiedy TCNT0 jest równe zero...? Czyli zmienna time będzie równa overflow*256...
//timer 1 16bit konfiguracja (ICP1) TCNT1=0; //ustawienie poczatkowej wartosci timera 1 TCCR1B |= (1<<ICES1); //pomiar na narastajacym zboczu TIMSK |= (1<<TICIE1) | (1<<TOIE1); //zezwolenie na przerwanie od ICP i od overflow TCCR1B |= (1<<CS12) | (1<<CS10) ; //prescaler 1024...
(at)seba_x:A co to za bzdura?:> • Peripheral Features – Two 8-bit Timer/Counters with Separate Prescaler, one Compare Mode – One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode A co do pytania autora, nie, zliczanie umożliwiają tylko dwa pierwsze timery. Trzeciego można używać jako wewnętrznego. Nie tylko...
Masz zły wektor przerwań. http://www.atmel.com/images/atmel-2486-8... http://www.nongnu.org/avr-libc/user-manu... Ustawiłeś przerwanie od overflow timera. TCCR0 nie ma bitu WGM01. Zajrzyj do manuala jak to poustawiać.
To by się zgadzało - w help-ie jest chyba nawet wyjaśnione: So LOAD TIMER0, 10 will load the TIMER0 with a value of 246 so that it will overflow after 10 ticks. Wystarczyłoby uczyć się języków :) Dzięki!
brakuje instrukcji sei(); włącza ona globalną obsługę przerwań. Umieść ją zaraz przed pętlą while(true) Dodano po 5 a poprawnie jest TIMSK1 = _BV(TOIE1);
Ech, pośpieszyłem się, właśnie czytam notę katalogową... W Atmega8 możesz tylko na tym timerze korzystać z trybu Overflow (Wartość (0xFF-<Wartość dla OCR0>) należy wpisywać co przerwanie na jego początku). Dopiero nowsza wersja (Atmega88) ma tryb CTC. Na szybkiego to możesz przejść na Timer2 w trybie synchronicznym, ma zbliżone rejestry. Timer1...
Wojtek - wchodzisz tutaj: [url=http://www.frank-zhao.com/cache/avr... z kalkulatorem 16MHZ z preskalerem 1024 oznacza że: - 1 sekunda nastąpi po 15625 cyknięciach timera - przerwanie następuje przy przepełnieniu jeśli wybierzesz OVERFLOW, ale może tez nastąpić przy COMPARE, od tego zależy jaką wartość wpiszesz do timera (czy odejmiesz...
OPIS FUNKCJI LOAD Action Load specified TIMER with a reload value. . . . It will do the calculation. (256-value) So LOAD TIMER0, 10 will load the TIMER0 with a value of 246 so that it will overflow after 10 ticks. TIMER1 is a 16 bit counter so it will be loaded with the value of 65536-value. Czyli u ciebie ładuje 65536 - 65436 = 100 Przepełnienie właśnie...
AVE... Do wszystkich funkcji podajesz nazwę bitu w rejestrze portu i nazwę bitu w rejestrze kierunku. Przykładowo dla PICa te rejestry to PORTx i TRISx, gdzie x to nazwa portu (A, B, C, etc.). Zatem przykładowo kod dla PIC16F do sprawdzenia obecności dwóch sensorów na dwóch pierwszych pinach portu A i ustawienie stosownych flag w dedykowanej ku temu...
A może w duchu rywalizacji zaczniemy nowy wątek w którym każdy będzie mógł przedstawić swoją implementację bufora kołowego? Jeśli będzie wola w narodzi to założę taki wątek wraz z wymaganiami. Nowy wątek niepotrzebny. https://github.com/DISTORTEC/distortos/b... https://github.com/DISTORTEC/distortos/b...
Po małych zmianach działam na czymś takim. Pomimo taktowania z wewnętrznego kwarcu nie widać efektu. Jakiegokolwiek. [syntax=c]/* * RealTimeClock.c * * Created: 2013-11-17 01:46:48 * Author: Piotr Pabian */ #include <avr/io.h> #include <avr/interrupt.h> void init_RTC(void) { //ASSR = 1<<AS2; //Enable asynchronous mode TCCR2 = (1<<CS22)|(1<<CS21)|(1<&l...
• Bit 0 – TOV0: Timer/Counter0 Overflow Flag The bit TOV0 is set (one) when an overflow occurs in Timer/Counter0. TOV0 is cleared by hardware when executing the corresponding interrupt Handling Vector. Alternatively, TOV0 is cleared by writing a logic one to the flag. When the SREG I-bit, TOIE0 (Timer/Counter0 Overflow Interrupt Enable),...
Dzięki za pomoc, nie wiem jak to pominąłem, ale już wiem o co chodzi. Czasami wystarczy wskazać miejsce i już człowiek se radzi. Zamieszczam odpowiedź na wypadek, gdyby też ktoś tego szukał: "The bit TOV0 is set (one) when an overflow occurs in Timer/Counter0. TOV0 is cleared by hardware when executing the corresponding interrupt Handling Vector. Alternatively,...
Prawdopodobnie kod nadajnika masz błędny. Lepiej zrobić tę funkcję na timerach. ;) Będzie ładniej i stabilniej. Funkcje delay mają dużą tolerację, za dużą. I to, że w programie ustawisz F_CPU jako 16900000 nie znaczy, że procesor działa z takim taktowaniem ;) Musisz mieć taki kwarc. Zmienna ta jest tylko pomocna przy niektórych obliczeniach dla kompilatora...
A w pliku "m8def.inc" stoi: .equINT0addr=$001; External Interrupt0 Vector Address .equINT1addr=$002; External Interrupt1 Vector Address .equOC2addr =$003; Output Compare2 Interrupt Vector Address .equOVF2addr=$004; Overflow2 Interrupt Vector Address .equICP1addr=$005; Input Capture1 Interrupt Vector Address .equOC1Aaddr=$006; Output Compare1A Interrupt...
Jeżeli jest niedokładne, to zreferuj na ile jest to niedokładne i czym ta niedokładność jest powodowana. Czy w którejś metodzie/trybie pracy gubi się impulsy albo zabiera więcej czasu na ich zliczenie? A z tym 'średniowieczem' to juz lekka przesada. Zapewne kolega gaskoin nieco się zagalopował :D Co jednak powiesz o konstrukcji np. TCNT0 = 200; na...
Witam, chciałbym przy użyciu Atmega8 i zewnętrznego kwarcu odmierzać i zliczać setne części sekund, sekundę mogę łatwo wyłapać z timera1 według przykładowych obliczeń 4000000MHz / 256 = 15625 65536 - 15625 = 49911 lub 8000000Mhz / 256 = 31250 65536 - 31250 = 34286 Nie mam jednak pomysłu jak....... Z góry dziękuję za pomocne wypowiedzi. Aby odmierzac...
To nie Bascom jest przyczyną tylko źle napisany program ;). 1. odczyt timera1 16bit odbywa się po przez rejestr pomocniczy TEMP, ten rejestr jest też używany przez inne procedury i funkcje i jeśli jest użyty to właśnie niszczona jest wartość High timer1 bo ona tam jest wpisana gdy używasz komendy. wpisując tak timer1 do tablicy możesz gubić High timer1....
Hmm... Spróbuj regularnie migać LED, jednocześnie komunikując się z PC, obsługując pomiar temperatury za pomocą 1wire (DS18B20) i wyświetlać ją na LCD, używając waitXX... ;) Timer0 jak nic do zastosowania... Tymczasem małe co nieco w załączniku (miganie LED z użyciem timera), zarówno dla ATmega8, jak i na ATmega8515. Ponieważ ATmega8 nie posiada przerwania...
O, widzę, że ktoś oprócz mnie również ma ten problem :D Przede wszystkim musisz uwzględnić ten pin SS, o którym wspomniałeś, bez tego ani rusz. Za każdym razem gdy coś wysyłasz po SPI musisz ustawiać SS na zero, a po wysłaniu SS na 1. Warto również zajrzeć do bibliotek, które udostępnia Atmel, jest to nota AVR319, do pobrania stąd [url=http://www.atmel.com/devices/ATTINY...
SIGNAL(vector) { asm volatile(""::)... } jak i twoja wersja wykorzystująca ISR(vector) ISR(vector) { asm volatile(""::)... } generuje dokładnie ten sam kod: __vector_X: /* tu prolog */ /* kod */ /* tu epilog */ reti Tak utworzona funkcja przerwania blokuje pozostałe...
proszę bardzo: #include <avr/io.h> #include <avr/interrupt.h> int liczba; SIGNAL (SIG_OVERFLOW0) { if(liczba++==675) { PORTC=~PORTC; liczba=0; } } int main( void ) { DDRC=0xFF; // port C jako wyjście PORTC=0x00;; // początkowy stan portu C - niski TCCR0=0x03; // prescaler 64 TCNT0=0x00; //...
Przekopałem już niejedno forum i na każdym z nich robią to na inną modłe... Ale co bym nie tworzył to i tak nie działa... Uprościłem program do min i nic... Prosze niech ktoś mnie oświeci co jest nie tak... Aha do portu PB1 podłączona dioda żeby było wiadomo, że coś się dzieje... #include<avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h>...
Do obsługi Timera1 są 4 wektory i nie wiem, które aktywować, co wpisać w procedurze odwołującej się, czy w ogóle jest taka potrzebna. Czy wystarczy tylko uruchomić te przerwanie i sygnał będzie generowany automatycznie ? Tabelka jest prosta: TIMER1 CAPT Timer/Counter1 Capture Event Zdarzenie z przechwycenia licznika (zwykle przez zmianę na pinie...
Robię mały projekcik, w którym potrzebuję 4 kanałów PWM. Chciałem to rozwiązać programowo, niestety nie udaje mi się ożywić mojego timera, a konkretniej przerwanie (zarówno overflow jak i compare) nigdy się nie wykonują. Umieściłem w funkcji obsługującej to instrukcję gaszenia diody, lecz program nigdy tam nie doszedł. Nie mam pojęcia co robię źle,...
No to coś napisałem na AVRStudio 4.05.0.181 (na kolanie) :) . Co prawda na ATmega8 , ale przeportowanie to pestka(niektóre wektory przerwań do skasowania/zmiany nazwy i "2313def.inc" zamiast "m8def.inc" , prędkość kwarcu Xtal też do poprawki...), raczej tu chyba nie ma rozkazów niezaimplementowanych w AT90S2313 . ;included in next file - line ".device...
Witam, czytając książkę A. Pawluczuka natknąłem się na inicjację wektorów przerwań. Jak wiadomo w książce jest wykorzystywany µC ATmega8515 (niestety ja korzystam z ATmegi32). Przykładowa tablica tutaj: .orgINT0addr ;External Interrupt0 Vector Address reti ; ;---------------------------------------... .orgINT1addr...
Zamiast Overflow, spróbuj CTC Mode, nie trzeba przeładowywać licznika na początku przerwania: TCNT2=jakaś wartość Musisz jednak się namyśleć jak to ma być wartość aby przerwanie występowała w pożądanych odstępach czasu.
A może prościej te impulsy podawać na wejście zegarowe timera, ustawionego tak, że top=15 i po zdarzeniu overflow generuje ci przerwanie? Oczywiście można też zrobić to na int, tak jak planujesz, ale mój sposób jest całkowicie sprzętowy. W Bascomie nie pomogę, ale może skoro zaczynasz to warto zacząć od c?
Więc nie dołączyłem żadnych kondensatorów. Czy słusznie? Słusznie. Zmieniłeś nową funkcję przerwania ISR() i jej wektor na stare (przestarzałe) SIGNAL(): http://www.nongnu.org/avr-libc/user-manu... Zmień na ISR(). Szczerze muszę przyznać że nie do końca wiem co ustawiłem w TIFR oraz TIMSK, znalazłem to w którymś z tematów...
Rozpisuj to na zdefiniowane symbole bitów, bo by to sprawdzić musimy zerkać do datasheet: [syntax=c] TCCR1B=TCCR1B & 0xBF; TCCR1B=TCCR1B | 0x40; TCCR1B=0xC1; //enable overflow and input capture interrupts TIMSK=0x24;[/syntax] No i dodawaj komentarze byśmy wiedzieli, co chciałeś daną linijką kodu osiągnąć i móc to sprawdzić. I zaczerpnij wiedzy o volatile:...
(at)Markosik20 Dziękuję za zainteresowanie! :-D Nie zrozumieliśmy się. Nie chcę transmitować znaków w czasie rzeczywistym. Druga sprawa - w RS485 masz wiele nadajników, jeden master reszta slave - nie można sobie tak śmiecić na linii (po znaku), to nie buforowany RS232! Inna sprawa, że docelowo przesył będzie w trybie ASCII (później rozszerzę soft o...
Częstotliwość tu nie odgrywa większej roli. Regulację uzyskuje się przez zmianę śrendiego czasu wyświetlania cyfry. Czyli np, dwa przerwaina timera - overflow - zmiana cyfry, przerwanie compare - wygaszenie wyświetlacza. Regulujesz jasność przerwaniem compare, dla 16-bitowego licznika masz głębię 16-bitową (teoretycznie). Tego typu koncepcję masz pokazaną...
SIGNAL ( SIG_OVERFLOW0 ) { TCNT0 = T0_INIT; counter++; if ( overflow > 0 ) overflow--; } Jeżeli zapisujesz cos do EEPROMu to napewno nie rob tego w przerwaniu wywolywanym tak czesto (0,125us), ani w petli glownej programu. Pamiec EEPROM ma okresloną maksymalną ilość cykli zapisu i wymazywania. W ATmega 8 wynosi ona 100...
Możnma PWM doi sterowania silnikami generować programowo, wtedy ilość wyjść praktycznie dowolna. Nie wiem tylko jakie masz wymaganie co do tego PWM, bo ot tak an tym co masz można zrobić dziesięciostopniową regulację z częstotliwością PWM 10Hz. Wystarczy wykorzystać do tego przerwanie timera 2, którego już i tak używasz. Można też zwiększyć częstotliwość...
A oto prosta funkcja (kompiluje się w najnowszym AVRStudio) :D : #include <ATmega8535.h> .include "m8535def.inc" ; Prohibits use of non-implemented instructions (ATmega8535) #define XTAL 11059200 #define USART_BAUD 19200 #define _UBBR(_X,_X_BAUD) ((_X/(16*_X_BAUD))-1... #message "_UBBR =="...
No to próbuję: [syntax=c] //* \section OA Original author //* Andy Gayne is the original author of this application note. //*/ //program z noty Atmela 136 //przerobiony na ATMega8, kwarc 11059200 i okrojony program #include <avr/io.h> #include <avr/interrupt.h> //! Pin mappings #define CHMAX 6 // maximum number of PWM channels #define PWMDEFAULT...
Jak rozumie pytasz nadal o pierwotny problem? Możesz na przykład zastosować zmienną, która będzie pamiętała aktualny stan klawisza (że był naciśnięty) i dopóki klawisz nie zostanie puszczony, nie dopuści do ponownego zapalenia diody. Wykorzystaj do tego na przykład instrukcję if. hmmm, ten program ktory podalem dziala bez problemu, chodzi mi tylko...
Dzięki za pomoc ale mimo zmiany fusów niestety dalej te same objawy. Chyba będę musiał poszukać innego sterownika. zrzuty z PonyProga: http://obrazki.elektroda.net/47_12116974... http://obrazki.elektroda.net/75_12116989... co ciekawe, po grzebaniu w fusebitach nie mogę wgrać wsadu bascomem wyskakuje komunikat:"Integer overflow" same...
Witam, Napisałem program, który docelowo miał odbierać dane z komputera przez modem BT HC-05 interfejsem UART oraz potwierdzać odebranie danej, oraz wysyłać dane z ADC jeśli przyciśnięty zostanie przycisk (w rzeczywistości jest to wycinek pewnego programu, więc niektóre zmienne etc. mogą być bez sensu). Odczyt ADC wykonuję wykorzystując przerwania capture...
Nie wiem z czym masz dokładnie problem, ale bawiąc się kiedyś w asm napisałem program zmieniający wypełnienie na PB1 (OC1A) w zależności od wartości odczytanej z przetwornika A/C. Może okaże się Tobie pomocny: #include "m8def.inc" .def acc = r16 .def result = r17 rjmp RESET ; Reset Handler reti ;EXT_INT0 ; IRQ0 Handler reti ;EXT_INT1 ; IRQ1...
Witam. Niestety mam problem z uruchomieniem tego układu korzystam z kodu LCD+ATMEGA8+Odbiornik+pilot #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #define RC5BitHigh() (bit_is_set(PIND,PD3)) #define RC5BitLow() (bit_is_clear(PIND,PD3)) #define WAITFORTIMER()...
Mógłby ktoś z was zerknąc w mój kod i sprawdzić co jest nie tak?? /***************************************... Chip type : ATmega8L Program type : Application Clock frequency : 8,000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 ****************************************... #include...
Moim celem było aby mikrokontroler odliczał w górę co sekundę i wynik pokazywał na wyświetlaczu - pierwsze podejście do timer0. Początkowo sam obliczyłem wartości preskalera dla 8MHz, jednak na wyświetlaczu liczby pojawiały się ok 100 razy za szybko. Zastąpiłem swoje obliczenia tymi z tej strony: http://www.robotyka.net.pl/mikrokontrole...
Ok dzieki Piotrek. Przypomniales mi o parzystosci juz wszystko gra. male przeoczenie.. Ja stosuje metode uzupelnienia "white char" czyli spacja:P =>> Dar.El to jest moj poczatek :) (az taki laik nie jestem :P) .nolist .include "m8def.inc" .list ;***************************************... ;* DEFINICJE ZWIAZANE Z REJESTRAMI * ;***************************************...
Potrzebuję pomocy w konfiguracji Timer1 (ten mam wolny) ewentulanie modyfikacja obecnej konfiguracji Timer0. Obecna konfiguracja jest dla odliczania odpowiedniego czasu dla ramek RC5 odbieranych przez odbiornik TSOP322 przy taktowaniu procesora z F_CPU=8MHz, w celu oszczędności energii chcę zrobić odbieranie przy częstotliwości 1MHz. Jak widać z obsługi...
Pozmieniałem tam gdzie wywalało błędy. Teraz mam takie. e:/avr/arduino/arduino-1.0.5-r2/hard... TVB_atmega8a.cpp.elf section .text will not fit in region text e:/avr/arduino/arduino-1.0.5-r2/hard... region text...
poprawiłem błędy, ale nadal nie działa. Dodano po 1 Wciąż nie znam całego kontekstu, ale zaczniemy od tego, co już wiemy. Upewnijmy się, że wszystkie elementy są poprawnie skonfigurowane. 1. W funkcji `USART_Init()`, skonfiguruj rejestry UART do odbierania i nadawania danych. Sprawdź, czy prędkość BAUD jest prawidłowo ustawiona. 2. W funkcji `USART_RX_init()`,...
] Gdybym chciał jednak mierzyć załóżmy do 1kHz to wymaga aby zliczać przepełnienia? Dlatego napisałem..."Nie znaczy to jednak..." w złym obliczeniu 1 sek wartość wynosiła 61630, przy prawidłowym obliczeniu wynosi 34 286 uwzględniając czas 1sek, częstotliwość taktowania 8MHz i prescaler 256. Przecież czas (1 sec.) odmierzasz timerem0, który jest 8-bitowy...
1. Nie mam żadnych warningów 2. ??? Nie jest to bynajmniej moje pierwsze przerwanie, ani tym bardziej flaga. Po czym wnosisz, że nie wiem jak działają? 3. Owszem, zablokowałem całe przerwanie odpowiadające za ICP w momencie, gdy zaczął się sygnał. Zamierzone działanie, co w nim złego? 4. ??? "Podłączyłem pod PORTB.0 (ICP) odbiornik podczerwieni TSOP31236"...
Po zaprogramowaniu timera w tryb CTC oraz skorzystaniu z porad, dioda zapala się lecz nie gaśnie po określonym czasie. Nie jestem pewny co źle zrobiłem, wykorzystanie innej zmiennej sprawiało że dioda w ogóle się nie zapala. Prawdopodobnie źle zaprogramowałem timer, a jako że info na timer timera CTC z przerwaniem znalazłem tylko po angielsku więc bardzo...
Nie możesz tylko używać Timera2 do innych celów, bo właśnie jest on używany przez RC5 Funkcja GETRC5 domyślnie wykorzystuje Timer0 a nie Timer2. Oczywiście można to zmienić w konfiguracji, jednak autor tego nie czyni. Zatem pozostają mi dwie opcje, albo przestać używać timera0 do odliczania 1s odcinków czasu i zaprzęgnąć do tego timer2 (co może nie...
Ciekawe, czytałem już te tematy. czy bez tego kwarca 32khz sie nie obejdzie? Jednak nie łapię tych timerów. Generalnie timer służy jako licznik przerwań :), wewnętrznych albo zewnętrznych na pinie TO, zewnętrzne przerwania widziane są z portu TO, a wewnętrzne przerwania generuje prescaler - wewnętrzny przerywacz "sterowany" kwarcem zewnętrznym lub...
napisałem tak i nie działa ;/ gdzie może być błąd? (tranzystor PNP do OC1A - PB1 atmega8). sprawdziłem przed chwilą w bascomie, i telewizor reaguje na komendy rc5send z BASCOMA. unsigned int RRR=0; void rc5send(void) { TCCR0 |= (1<<CS00); TCCR0 |= (1<<CS01); // use CLK/64 prescale TCNT0 = 0x6F; //888 cykli dla...
ADC w tym przypadku będzie się wyzwalać z częstotliwością zależną od OCR1A Czy aby na pewno? Jako wyzwalacz dla ADC mogę wybrać jedynie: - Timer/Counter1 Compare Match B , - Timer/Counter1 Overflow, - Timer/Counter1 Capture Event. Na tej liście nie ma Timer/Counter1 Compare Match A , które odpowiedzialne jest za tryb CTC...robiw
Witam Mam prośbę o rozjaśnienie pewniej sprawy - mam do Atmegi8 podpięty odbiornik IR (SM3385P) cudo to zostało wymontowane z jakiegoś odbiornika Czujnik podpięty jest pod PB0 - do tego posiadam pilot TTS35AI - od zestawu SkyStar2 - do przetestowania wykorzystałem program ze strony http://hobby.abxyz.bplaced.net/index.php... Kod poniżej...
Cześć, uczę się wykorzystania timerów w mikrokontrolerze Atmega8A. Chcę aby dioda migała co sekundę. Wykorzystuję do tego 8 bityowy timer0. Taktowanie ustawione mam na 8000000Hz, a preskaler na 1024. Chcę, żeby przepełnienie występowało co sekundę czyli żeby dioda migała co sekundę, ale tak się nie dzieje. Zmieniam wartość TCNT0 na 30, bo taka wychodzi...
Cześć! W swoim projekcie zasilanym bateryjnie (3V) użyłem Atmegi8A. Zazwyczaj do podobnych zadań dawałem Attiny13A który muszę przyznać ma bardzo rozbudowane tryby uśpienia. Nie mniej potrzebowałem licznych pinów ósemki stąd wybór ;) Aktualnie zrobiłem Idle mode z wybudzeniem przez Timer2 Overflow. Wyłączyłem też AC (komparatora) bo go nie potrzebuję....
Zrobiłem wszystko co w tym poradniku który mi podałeś n oi to samo . 13:57:26 **** Incremental Build of configuration Release for project test03 **** make all 'Building target: test03.elf' 'Invoking: AVR C++ Linker' avr-g++ -Wl,-Map,test03.map,--cref -mrelax -Wl,--gc-sections -mmcu=atmega8 -o "test03.elf" ./DigitalIn.o ./DigitalOut.o ./ds18b20.o ./hd44780.o...
1. Eliminacja drgań zestyków podana przez kolegę Pandor-a jest tylko pewna ideą, bo w praktyce tylko dzieli częstotliwość drgań, jakie moga się przytrafić przy bardzo intensywnie używanych zestykach, co jest istotne jeżeli program ma rozróżniać ilość naciśnięć, bo w innym wypadku nie ma potrzeby zawracać sobie tym problemem głowy. Proponowałbym w pętli...
Witam, Chciałem napisać prosty program do włączania i wyłączania 5 diod podłączonych do portów PC0-PC4 uP atmega8. Diody zapalą się po ustawieniu na portach stanu 0. Diody mają samoczynnie migać, a czas pomiędzy włączeniem, a wyłączeniem diod będzie ustawiany w timer0. Niestety uP po 294 cyklach uP restartuje się tj. wraca do funkcji reset. 294-ty cykl...
POWERSAVE (ATMEGA88) This mode is identical to Power-down, with one exception: If Timer/Counter2 is enabled, it will keep running during sleep. The device can wake up from either Timer Overflow or Output Compare event from Timer/Counter2 if the corresponding Timer/Counter2 interrupt enable bits are set in TIMSK2, and the Global Interrupt Enable bit...
Witam, proszę o wyjaśnienie zasady działania sygnału PWM [syntax=c]int main(void) { DDRB |= LED1 | LED2; //Wyjścia LED //Inicjalizacja Timer1 (PWM) TCCR1A |= (1<<COM1A1) //Zmiana stanu wyjścia OC1A na niski przy porównaniu A | (1<<COM1B1) //Zmiana stanu wyjścia OC1B na niski przy porównaniu B | (1<<WGM11); //Tryb 14 (FAST PWM, TOP=ICR1)...
Jak używam funkcji z util/delay.h to mój kod zajmuje za dużo pamięci w procesorze i nie chce sie kompilować ;/ Edit: Error4region `text' overflowed by 548 bytes funkcję opóźniającą wziąłem ze strony: http://teslabs.com/openplayer/docs/docs/...
A jednak w pełnym kodzie masz kilka przerwań. I dwa z nich są NOBLOCK. To zobaczmy co piszą na ten temat: #define ISR_NOBLOCK # include <avr/interrupt.h> ISR runs with global interrupts initially enabled. The interrupt enable flag is activated by the compiler as early as possible within the ISR to ensure minimal processing delay for nested interrupts....
Witam. Potrzebuję pomocy z dostosowaniem kodu napisanego na atmegę8 na attiny13. Domyślam się że największym problemem będą tutaj timery, ale jestem w ich temacie puki co zielony, a potrzebuję koniecznie(i niestety pilnie) odbiornika IR który zmieści się i będzie działał na attiny13. Jak całość kodu działa rozumiem(jest świetnie opisana komentarzami)...
Witam! Napisałem program w C do mierzenia napięcia przez ADC w ATmega8, odczytuję z przetwornika wartość bitową od 0 do 1023. I dotąd jest wszystko ok, ale chcę sterować diodą na innym pinie(np PB1) w ten sposób, że gdy wartość odczytana będzie mniejsza od 500 to dioda ma nie świecić, a gdy przekroczy 500 ma świecić. Problem w tym, że gdy włączę układ...
Witam, Czy nakierowałby mnie ktoś w jaki sposób wykorzystując PWM można zrealizować płynne sterowanie jasnością diody LED przy użyciu pilota nadającego w standardzie RC5? Do tej pory udało mi się zrealizować płynne sterowanie jasnością diody wykorzystując PWM i microswitche - oto kod: [syntax=c]#define F_CPU 8000000UL #include <avr/io.h> #include...
Witam. Na zlecenie piszę pewien projekt, którego częścią jest dekodowanie sygnału z pilota Rc5. Z początku zrobiłem to na mojej eksperymentalnej płytce z układem ATmega32, gdzie dolutowałem czujnik w powietrzu. Ustawiłem procka na wewnętrzny rezonator 4 MHz, gdyż taki udało mi się znaleźć na internecie działający przykład dekodowania Rc5, no i ruszyło,...
Witam Mam problem z ultradźwiękowym miernikiem odległości na atmedze8. Generacja częstotliwości przebiega prawidłowo, na odbiorniku za torem wzmacniaczy otrzymuję widoczny syglał odbity od przeszkody. Błędy pojawiają się przy komparacji sygnału z napięciem referencyjnym. Wynik jest bardzo niedokładny, ponadto od drugiego bądź trzeciego pomiaru procesor...
Witam, Chciałem poprosić o weryfikację mojego programu do sterowania mocą (poprzez triaka) na Atmega8. Działanie programu: Najpierw włączone jest przerwanie zewnętrzne na INT0 od detektora zera sieci. W przerwaniu od detektora załączany jest timer, którego wysterowanie (liczba impulsów do zliczenia) jest proporcjonalna do wskazania ADC (potencjometr)....
Witam serdecznie. Co poprawić w kodzie aby wykorzystywać 3xPWM z płynną zmianą, bo jak dotąd pwm od t1 działa płynnie a przy t2 przycina, co poprawić ?? #include <inttypes.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/sleep.h> #include "iocompat.h" /* Note [1] */ enum { UP, DOWN };...
Witam, zrobiłem tak jak napisano wyżej z tym przerwaniem od timera ,niestety dalej to nie działa jak chce przerobiłem trochę schemat zeby łatwiej sprawdzić co jest grane i dopisałem kilka linijek od siebie ;/ niestety działa to tak że program zmieni się gdy trzymam przycisk ale po puszczeniu go wyrzuca go do do opcji default... nie rozumiem do końca...
Na razie sprawdz czy w ogole sie przerwanie wywoluje, bo dioda moze szybko mergotac i ci sie wydaje ze swieci bo mozesz miec cos z fusami np. #include <mega8.h> #include <delay.h> volatile int licz ; // Timer 2 overflow interrupt service routine interrupt [TIM2_OVF] void timer2_ovf_isr(void) { licz=0; } void main(void)...
Za moment sprawdzę z diodami, ale zauważyłem pewną rzecz - wywaliłem na chwilę instrukcje dotyczące przycisków innych niż C więc zostawiłem tylko pierwszy blok instrukcji - tam gdzie włączam timer - oraz blok ostatni, gdzie zeruję wartości obu OCRów. Teraz z kolei nic się nie dzieje, na oscyloskopie na wyjściu OC1B widzę tylko piki co jakiś czas. Czyżby...
mam jeszce jeden problem, według kodu z linku dondu #include <avr/io.h> #include <avr/interrupt.h> //definicja LED1 (do którego pinu podłączony LED1) #define LED1 PB0 //definicja LED2 (do którego pinu podłączony LED2) #define LED2 PB1 //definicja KLAWISZ (do którego pinu podłączony KLAWISZ) #define KLAWISZ PC0 //definicja...
Witam to mój pierwszy post na tym forum, stąd możecie mi wierzyć jak bardzo jestem zrozpaczony:) jeśli temat jest w złym miejscu to prosiłym moderatora o przeniesiegnie i z góry przepraszam:) zwykle staram się rozwiazywać wszystkie problemy sam ale tym razem mam coś czego nie jestem w stanie zrozumieć. Pracuję chwilę nad programem którego działanie...
dondu [code][syntax=c] #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <stdlib.h> #define LED1 PD0 //definicja LED1 (do którego pinu podłączony LED1) #define LED2 PD1 //definicja LED2 (do którego pinu podłączony LED2) #define wejsc_1 PC5 //definicja ADCIN (wejście ADC) #define wejsc_2 PC4 volatile...
Dzięki za odpowiedź. Już kilka prostych programików na tym uC popełniłem i nie miałem większych problemów. Ten był pierwszy który modyfikował Fuse Bity. Jedynym efektem działania programu jest miganie LED B1 i B2 z częstotliwością <> 10Hz. Poniżej całość programu: [syntax=c] #include <stdio.h> #include <avr/io.h> #include <util/delay.h>...
Witam, Mam problem z transmisją szeregową na ATMEGA8L. Próbowałem wszystkich znalezionych na forum możliwości ale nic nie pomogło. Może zacznę od połączeń: atmega8l <-> MAX3232 <-> PC MAX-sior (właściwie zamiennik SP3232ECP) podłączony jest według zaleceń datasheet'a. Miedzy MAX-em a PC-tem jest zwykły kabel rs232 (w sensie, że nie przejściówka...
buffer overflow timsk overflow stack overflow
skrzynia crunch sygnał syrena renault scenic zawieszenie
Pilot do tunera Yamaha TX-592 RDS: dostępność i alternatywy Zatwierdzanie kodu radia w Ford Focus II