Nie sprawdzałem wcześniej bo uwierzyłem ci na słowo, że sprawdziłeś rejestry ATMega8. W rejestrze TIMSK przerwanie overflow dla timera0 to TOIE0 ale jest to bit 0 a nie 1. W związku z tym inicjacja powinna wyglądać tak: TIMSK=0x01 lub jak wspomniałem wcześniej zdefiniować bit TOIE0: #define TOIE0 0 wtedy zadziała TIMSK=(1<<TOIE0) Bardzo polecam...
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...
#include<avr/io.h> #include <avr/interrupt.h> #define F_CPU 1000000 int main(void) { TCCR0 = 0x05; //(1 << CS02) | (1 << CS00); prescaler na 1024 TIFR |= (1 << TOV0); TIMSK |= (1 << TOIE0); // aktywne przerwanie overflow // timer_enable_int(_BV(TOIE1)&...
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...
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);...
Witam... Generalnie rzecz biorąc procedury opóźnienia czasowego nie nadają się do modulowania diody IR... Częstotliwość nie jest zbyt stabilna to raz... Dwa nie uzyskasz 36kHz musisz skorzystać z dobrodziejstw timera... Np. tak... #include<avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <inttypes.h> int...
Kod piszę "na sucho", więc lepiej sprawdź czy działa.[syntax=c] #include <avr/interrupts.h> void timer0_init(void){ TCCR0 = _BV(CS02); //Mode 0, normal operation, prescaler 64 TIMSK |= _BV(TOIE0); //Timer/Counter0 Overflow Interrupt Enable } volatile unsigned long millis=0; volatile unsigned int okresy_migania_ledow[4] = {100,200,300,400}; ISR(TIMER0_OVF_vect)...
//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...
Po niewielkich zmianach powinno działać też na Attiny85. Wrzucam kod dla Attiny85 (nie testowany; nie mam jak): [syntax=c]//############################... // SPWM implementation for Attiny85 // Clock frequency 8MHz internal clock oscillator // High Fuse: 0xFF, Low Fuse: 0xE2 // // Signals generated: // - SPWM...
Ten kod jest napisany dla ATmega103 ( niedostępny już w handlu) a jego następca to ATmega128. Poniżej poprawki dla WinAVR ( ten kod był dla kompilatora IAR): 1. #include <iom103.h> #include <ina90.h> ma być #include <avr/io.h> #include <avr/signal.h> 2. type def struct{ ma być typedef struct{ 3. interrupt /**** A V R A P P L...
DDRD|=(_BV(PB5) | _BV(PB6) | _BV(PB7)); DDRD|=(_BV(PE3) | _BV(PE4) | _BV(PE5)); Widzisz tu subtelną różnicę...? Działające wstawki dla pwm na Tim1 i Tim2: [syntax=c]void Timer0Init(void) { DDRB|=(1<<4); TCCR0 |= (1<<WGM01)|(1<<WGM00)|(1<... OCR0=0; } void Timer2Init(void) {...
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...
Witam. Chciałbym prosić o pomoc. Czy ten kod jest poprawny. Program działa bez zarzutów. Natomiast, gdy włączę przerwanie"sei". Układ się zawiesza. [syntax=c]void init_Ex1() { // Timer clock = I/O clock / 1024 TCCR0 |= (1<<CS02)|(1<<CS00); // Clear overflow flag TIFR |= (1<<TOV0); // Enable Overflow Interrupt TIMSK |= (1<<TOIE0);...
Cześć, po analizie działania enkodera obrotowego (mechanicznego) i ilości problemów, jakie on dostarcza, postanowiłem skonstruować prosty układ elektroniczny, który "wygładzi" impulsy enkodera. Układ posiada dwie wersje. Obie są na przerzutnikach Schmitta. Pierwszy na pojedynczych układach TI SN74LVC1G17: https://obrazki.elektroda.pl/5101546100_...
główny plik wygląda tak #include<avr/io.h> #include<ścieżka do rc5.h> int main() { DDRD=0x00;;//Porty D jako wejścia DDRB=0xFF;//PORTYB jako wyjścia PORTB=0xFF;//portb w stan wysoki rc5_init(); sei(); while(1) { if(rc5data) { PORTB=0x00; } } } Dodano po 13 włożyłem wszystko...
Tu uruchamiasz timer0 z preskalerem ... [syntax=c] //######## konfiguracja timera1 ############## TIMSK |= (1<<TOIE0); //Przerwanie overflow (przepełnienie timera) TCCR0 |= (1<<CS02) | (1<<CS00); // źródłem CLK, preskaler 1024 TCNT0 = timer_start;// //Początkowa wartość licznika //######################################... [/syntax]...
Pusty blok jest dlatego, że utknąłem na konfiguracji Timer0. Jeśli chodzi o rejestry, to podejrzewałem, że jest tak, jak Kolega pisze. Wartość TCNT0 = 6; trzeba będzie wpisać do przerwania Timera Przy ustawieniach: [syntax=c] TCCR0A = (1 << CS01)|(CS00); // źródłem CLK, preskaler 64 TIMSK = (1<<TOIE0); //Przerwanie overflow (przepełnienie...
Mam ustawiony timer na 4kHz [syntax=csharp]cli(); TCNT1 = 0; TCCR1 = 0; OCR1C = 249; // 4000 Hz (16000000/((249+1)*16)) OCR1A = OCR1C; TCCR1 |= (1 << CTC1); TCCR1 |= (1 << CS12) | (1 << CS10); TIMSK |= (1 << OCIE1A); sei();[/syntax] W przerwaniu timera machałem pinem [syntax=csharp]ISR(TIMER1_COMPA_vect) { //licznik timer1 przepełnienie...
Witam, troche odswiezam kotleta ale moze ktos bedzie mi w stanie udzielic rady, zbudowalem wlasna wersje wyswietlacza, po częsci bazujac na tym temacie (serdecznie pozdrawiam autora) mam problem z kodem, mianowicie nie potrafie zrozumiec czemu (obstawiam jakies sprzetowe opoznienia) przy probie wyswietlenia czegos, moj procek wyswietla powiedzmy to...
Opisujesz kod inny niż wkleiłeś: [syntax=c]int main(void) { DDRD = 0xFF;//diody DDRC = 0xff;//przyciski //######## konfiguracja timera ############## TCCR0 |= (1<<CS02) | (1<<CS00); // źródłem CLK, preskaler 1024 TIMSK |= (1<<TOIE0); //Przerwanie overflow (przepełnienie timera) sei(); //Globalne uruchomienie przerwań while(1) { //...
Witam Mam napisany taki kod do obsługi timera. Przerwanie ma być co 100ms kwarc mam 8MHz. Czy dobrze to jest? skąd się to 12500 wzięło jak mi wychodzi 8000000/64=125000? [syntax=c]TCCR1B = (0<<CS12)|(1<<CS11)|(1<&l... // CLK/64 TIMSK = (1 << TOIE1); // Timer/Counter1 Overflow Interrupt Enable TCNT1 = 0xffff - 12500; ISR(TIMER1_OVF_vect)...
Nie jestem autorem kodu, który zamieszczam. Kod znalazłem gdzieś na forum, jeżeli jego autor nie życzy sobie abym go udostępniał niech da mi znać. rc5.h http://www.roboternetz.de/wissen/images/... TSOP1736 podpinam tak jak na obrazku (tylko pod PD3 - INT1), rezystor 10k
Z tym |= i = juz kombinowałem i nic nie dało. Ja nie chce overflow dlatego mam OCR1A ustawione i używam trybu compare i wpisuje TIMSK = 0x10 żeby włączyć porównywanie z OCR1A.
Nie wiem czy to dobrze rozumiem. [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> void mydelay(uint16_t delay) { int f; for (f = 0; f<delay; f++) _delay_ms(1); } int main(void) { //########### I/O ########### DDRB |= (1<<PB0); DDRC &=~ (1<<PC5); DDRC &=~ (1<<PC4); PORTC =0xff;...
Atmega32 ma rejestr TIFR, czyli usuń "1". [syntax=asm]; Clear interrupts (if any happened). sbi _SFR_IO_ADDR(TIFR), OCF1A[/syntax] ; TIFR - Timer/Counter Interrupt Flag register .equTOV1= 2; Timer/Counter1 Overflow Flag .equOCF1B= 3; Output Compare Flag 1B .equOCF1A= 4; Output Compare Flag 1A .equICF1= 5; Input Capture Flag 1 edit. Jeszcze TIMSK zamiast...
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()...
Witam. Nie mogę dobrać parametrów timera tak by osiągnąć zadaną częstotliwość. Potrzebuje teraz osiągnąć by timer1 się przepełniał 10 razy na sekundę czyli co 100ms. Oto mój kod (jego kluczowe fragmenty): https://obrazki.elektroda.pl/3526196900_... Czyli mamy częstotliwość CPU 16MHZ. Dzielimy ją przez prescaler 64 i wychodzi 250kHz....
Musiałbyś dodać zmienną, która będzie służyła do odmierzania czasu bez impulsów, tzw. "timeout". Jeśli przez okres ponad 10 s nie przyjdzie żaden impuls, to n=0. Wbrew pozorom, liczenie timeoutów najłatwiej zrealizować w przerwaniu :) Dodano po 1 fragmenty kodu: inicjalizacja przerwań (akurat dla Atmega32) [syntax=c] TCCR0 |= (1 << CS02); TIMSK...
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>...
Założyłem ten temat, bo chciałbym (i prawdę mówiąc muszę) zrozumieć program znaleziony, nawet chyba u Was na forum, dekodujący sygnał rc5. Historia jest typowa: "projekt, którego nie chcę, a który muszę." Dzięki z góry za pomoc. Nie besztajcie mnie zbyt mocno. Wspomniany kod: #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h>...
Działający kod, dioda zmienia stan co sekundę. #include<avr/io.h> #include <avr/interrupt.h> #define F_CPU 1000000 char licznik = 0; //zmienna dla licznika programowego int main(void) { TCCR0 = 0x05; //(1 << CS02) | (1 << CS00); prescaler na 1024 TIFR |= (1 << TOV0); TIMSK |= (1 << TOIE0); // aktywne przerwanie overflow...
Witam ponownie pomijając poprzedni problem pojawił się nowy. Potrzebuje używać przerwań od przepełnienia dwóch timerów T0 i T2. Po ich skonfigurowaniu i włączeniu pojawia kłopot gdyż żaden nie chce zliczać, jeżeli używam ich pojedynczo to wszystko jest ok. Poniżej wstawiam część programu z konfiguracją timerów. TIFR |= (1 << TOV2)|(1...
Troche długo mnie nie było ale miałem parę spraw na głowie. Co do tego Timera to ostatnio znów walczyłem i konfiguracja jest w porządku. Wina leży najprawdopodobniej gdzieś na płytce (bądź w procesorze), bo gdy podpiąłem kwarc do innej płytki z atmega128 to Timer działał bez zarzutu. Tak więc temat zamknięty. Dzięki wszystkim za pomoc! Pozdrawiam! P.S....
Dzięki, już sobie z tym poradziłem, mam za to problem z timerami w atmedze 168. Mogę włączyć tylko jeden timer, gdy ustawiam drugi TIMSK to żaden nie wykonuje przerwania .Pewnie coś przeoczyłem w datasheet , z tego co wiem imer 0 i 2 sa od siebie nie zależne i mają oddzielne preskalery. ISR(TIMER0_OVF_vect) { } ISR(TIMER2_OVF_vect)...
Mi nie chodzi konkretnie o przerwanie. Jest tak: Timer t0 pracuje w trybie asynchronicznym i co 0.5s generuje przerwanie Ja w tym przerwaniu sprawdzam zawartosc rejestru TCNT odpowienio przeliczam ilosc impulsow ktore zliczyl i wyswietlam. SIGNAL(SIG_OVERFLOW0) { Rpm = TCNT2; Speed = TCNT1L; outp(0x00, TCNT3); outp(0x00, TCNT1L);...
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...
Witam, naskrobałem taki program do rozjaśniania i ściemniania diody. Chciałbym dorzucić do niego warunek że jeżeli wcisnę przycisk 1 to dioda miga w jeden sposób a gdy wcisnę przycisk 2 to w inny. Tylko nie mam pojęcia gdzie wcisnąć taki warunek. Dokładniej miałoby to wyglądać tak że jeśli wcisnę przycisk 1 to dioda rozjaśnia się i gaśnie przez 10s...
Nie ma na razie tego wiele więcej. Program do skomplikowanych nie należy. #define F_CPU 8000000 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include "funkcje.h" #include "LCD.h" volatile unsigned char sekundy; SIGNAL(SIG_OVERFLOW2) // RTC, przerwanie...
dziękuję dondu Twoje wskazówki pomogły i o jakieś 0,5kHz zaczął szybciej generować przebieg. Jednak to i tak jeszcze mnie nie ratuje. Poniżej podaję program główny: [syntax=c]// program główny int main(void) { DDR_AD=0x00; // Port jako wejścia analogowe i cyfrowe PORT_AD=0x00; // Wejścia z podciąganiem DDRB=0xFF; //wyjscia DDRC=0xFF; //wyjscia na zakres...
Po przerobieniu kod wygląda tak: // Testowanie timera 0 (przerwania) #include <avr/io.h> // dostęp do rejestrów #include <avr/interrupt.h> // funkcje sei(), cli() #define T0_INIT 256-250 #define tbi(PORT,BIT) PORT^=_BV(BIT) // przełącza stan BITu w PORTcie na przeciwny 1->0 ; 0->1 //unsigned...
//############ Procedura obsługi przerwania od przepełnienia timera ############ ISR(TIMER0_OVF_vect) { n++; if(n>=1000) // Kwarc 16000000Hz / Prescaler 64 / timer 8 bitów czyli 256 - poczatek liczenia od 6 czyli 250 =1000Hz czyli 1us { n=00; sek++; if(sek>=60) { sek=0; min++; if(min>=60) {...
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...
Witam! Mam taki dość nietypowy problem. Kontroler ma reagować na jedno z trzech przerwań: TIMERa 0 i dwóch zewnętrznych (czujki ruchu). Te przerwania zewnętrzne zliczają liczbę reakcji czujek, natomiast TIMER 0 ma odmierzać czas i dzięki niemu co kilka sekund mają być wyświetlane statystyki. Bez TIMERa 0 wszystko działa ok, ale statystyki lecą cały...
Zrobiłem takiego myka i wydaje się że wszystko działa tak jak należy. #include<avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <inttypes.h> #include <util/delay.h> int main(void) { DDRD=0x00; DDRB = 0xFF; DDRA |= _BV(PA0); PORTA |= _BV(PA0); TCNT0 = 34; //wartość początkowa...
Niestety efekt jest wciąż ten sam, cały czas dostaje wartość 134 na terminalu. Nie mam pojęcia co innego mogło by go resetować. Dodano po 9 Aktualnie wszystko zajmuje zaledwie 27% pamięci SRAM, więc raczej nie dochodzi do nadpisywania danych. Jedynym zasobożernym kodem jest ten od USARTA. EDIT: Obserwując efekt PWM można by stwierdzić, że nie zachodzi...
1. warningów brak 2. używam AtmelStudio i F_CPU podaje w ustawieniach projektu AVR C Compiler -> Symbols i w Definied Symbols F_CPU=16000000 i tylko tam 3. [syntax=c] //Ustawienia dla TIMERA 0: clk 16M, presk 1024, owerf 256, 61Hz #define _5SEK 305 #define _60SEK 3662 #define _5MIN 18311 #define _LIGHT_OFF 305//7234 //2min volatile int _5s; volatile...
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! Chcąc dodać zegar do mojego projektu musiałem wygenerować przerwanie, które dodawałoby 1 do zmiennej co 1s. napisałem programik jak poniżej, lecz niestety zliczając późni się o około 1/1,5s na minute... ktos wie gdzie robię błąd? gdzieś się pomyliłem? http://obrazki.elektroda.pl/9649052700_1... Preskaler ustawiony na 64, czyli...
[syntax=c] #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define TIMER0_ON (TIMSK |= _BV(TOIE0)) #define TIMER1_ON (TIMSK |= _BV(TOIE1)) #define TIMER0_OFF (TIMSK &= ~_BV(TOIE0)) #define TIMER1_OFF (TIMSK &= ~_BV(TOIE1)) #define led1_ON PORTD |= (1<<PD1) #define led2_ON PORTD |= (1<<PC0)...
[syntax=csharp]#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 początkowej wartości timera #define timer_start 6 //zmienna pomocnicza-licznik używana w przerwaniu volatile uint8_t cnt=0; void...
timsk przepełnić timsk przepełnienie buffer overflow
iveco daily ciśnienie oleju vestel firmware 17mb95s głośniki manta spalone
schemat zasilacza symetrycznego 17mb95s firmware
Sinopower SM7342EKKP MOSFET in NVIDIA Graphics Cards Beretta Xiao: Brak podgrzewania wody użytkowej