chciałem odmierzac odciniki czasu na T1 i nie wiem jak odczytac wartosc licznika. dla timera 0 znalazłem przykład : state = inb(TIFR) & _BV(TOV0); while (state != _BV(TOV0)); niestety inb(TIFR) ... nie działa dla T1 w "iomacros.h" jest makro inw(TIFR)... i też lipa. pomimo ,że używam tego nagłówka #include <compat/deprecated.h>....
Sprawdź w dokumentacji do winavr (avr-libc) czy to jest właściwy wektor tego przerwania dla atmega168...
Hej. Po pierwsze Timer0 w atmedze8 nie ma PWM A więc do PWM możesz korzystać tylko z Timera 1 oraz Timera 2. Po drugie twój problem leży w nazwach poszczególnych rejestrów konfiguracyjnych atmegi 8 sprawdź w dokumentacji atmegi8 jak w rzeczywistości nazywają się rejestry TCCR0A, TCCR0B, OCR0A bo tego dotyczy komunikat błedu. Poza tym pamiętaj że port...
Witaj, Pobieżnie patrząc na program, wygląda prawidłowo. Może podłącz do jakiegoś pinu LED i zmień: [syntax=c]ISR(TIMER1_COMPA_vect) { PORTTESTOWY ^= (1<<pin_testowy); //zmień stan LED na przeciwny }[/syntax] i sprawdź czy co 1sek się zmienia. Oczywiście ustaw pin jako wyjście.
$katalog_WinAVR$/doc/avr-libc/avr-libc-u... Tworzysz osobny plik w asemblerze (.S, nie .s) zawierający procedurę obsługi przerwania, kompilujesz do pliku .o i linkujesz z pozostałymi plikami. W dołączanym wo WinAVR szablonie Makefile jest przewidziane miejsce na wypisanie źródeł w asemblerze (ASRC = $tu wpisz nazwy plików$). Przykład,...
Witam chciałem skonfigurować timer1 w ten sposób że: 1.chodzi on cały czas odliczając 0-255 2.Przerwanie wywoływane jest po pierwsze po każdym przepełnieniu (czyli SIG_OVERFLOW1) 3.Przerwanie wywoływane jest w określonym czasie odliczania zapisanym w ICR1 (czyli TIMER1_CAPT_vect) Mój kod inicjujący przerwanie wygląda tak: TCCR1A = (1<<WGM10);...
Witam Buduję komputer pokładowy, którego jedną z funkcji będzie zegarek. Przeglądając forum i inne źródła natrafiłem na wiele postów podnoszących kwestię nawet 7805 jako bardzo prądożernego (4mA). Obecnie mój układ pobiera 28mA, więc sporo, a w zimę wiadomo.... Podczas postoju samochodu wyświetlacz 2x16 i jego dioda będą wyłączone. W jaki sposób powinno...
uC zasilany z 5V. Po dłuższej przerwie (pauza na zaliczenie sesji) wziąłem się znowu za ten projekt. I tak... przegooglowałem neta i ze strony http://winavr.scienceprog.com/avr-gcc-tu... zapożyczyłem kod obsługujący timer input capture. Przerobiłem go pod potrzeby ATmega32, ale też do końca nie wiem czy poprawnie....
Jeżeli w swoim kodzie , wykorzystujesz tylko procedury przerwania INT0 i TIMER1 i RC5_init() ,to wystarczy obliczyć i zmienić , wartości ładowane do TCNT1H,TCNT1L. Piotrek
dzięki za odpowiedzi, też mi właśnie się to jakieś wydawało pokręcone i że trzeba by ten ov_counter przemnożyć przez maksymalną wartość licznika a nie poprostu dodać ..... ale tak dla ciekawości podaję źródło tego kodziku: http://winavr.scienceprog.com/avr-gcc-tu... stronka ta wyglądała mi na taką z której...
WinAVR rzucał się, bo nie dołączyłeś nagłówka. Mylisz pojęcia. WinAVR nie ma pojęcia o tym czy ten timer działa, nie ma pojęcia co to jest timer, w sumie nawet nie ma pojęcia po co odczytujesz ten rejestr, bo kompilatorowi nic do tego. Timer nie działa, bo go nie włączyłeś. Nie licz na ostrzeżenia kompilatora, bo po prostu ich nie dostaniesz. 4\/3!!
Napisałem już trochę kodu i po próbie dodania funkcji atof() kompilator wystawił nie coś takiego: avr-gcc -mmcu=atmega32 -Wl,-Map=GPS.map main.o adc.o Button.o delay.o getgps.o lcd_2.o timer2.o timerf.o uart.o timer1.o dtoa.o oblicz.o -o GPS.elf d:/winavr-20100110/bin/../lib/gcc/av...
Witam Próbuję zrealizować multipleksowanie wyświetlaczy 7-seg.(dwóch) na atmega8, piszę w C, korzystam z WinAVR, mam wyświetlacze ze wspólną anodą, wykorzystałem tranzystory PNP. Z częstotliwością zegara nic nie kombinowałem więc mega pracuje na 1MHz. Napisałem taki kod: #include <avr/io.h> #include <avr/interrupt.h> /* cyfry na wyświetlaczu...
Zumek masz rację problem jest z występowaniem przerwań niestety TIMSK |=(1<<TOIE1); też nic nie zmienia ale dzięki - utwierdziłeś mnie w tym że problem tkwi w przerwaniu Pozdrawiam To przyjrzyj się również temu ... TCNT1L = 0xDC; // załadowanie do licznika TIMER1 wartości początkowych TCNT1H = 0x0B; // określających częstotliwość występowania...
Porównaj rysunki - Figure 34 s.90 (Timer0) i Figure 46 s.110 (Timer1) - Timer/Counter0 ma wejście Tx ? Ewentualnie może być napędzany z "kwarca zegarkowego" 32768 Hz. Masz za to T1 i T2 na otarcie łez... ;) Pozdrawiam, Light-I
Witam.To pochodzi z programu gdzie byl procek at90s8535 ale po ewentualnej modyfikacji nazw rejestrow powinno dzialac..... unsigned int pwm=100; void update_pwm (void) { cli (); outp (pwm>>8,OCR1AH); outp (pwm,OCR1AL); sei (); } void timer1init (void) // inicjacja timera 1 - tryb PWM { outp (pwm>>8,OCR1AH); outp (pwm,OCR1AL); outp (0x00,OCR1BH); outp...
Witam, 1) kod powinien mieć wcięcia, to nie asembler 2) niestety kurs z tamtej strony ma już ze 2 lata, avr-libc się trochę zmieniło od tamtego czasu. Polecam korzystać z w/w dokumentacji w jęz. angielskim do weryfikacji funkcji itp. 3) jak już pisałem, GIMSK został "przemianowany" na GICR. 4) zamiast SIGNAL() używa się ISR() 5) trzeba czytać, co kompilator...
Do zrealizowania na zaliczenie kursu był program wykorzystujący timery i przerwania do pomiaru czasu. W skrócie wprowadzamy czas w void start(void)//rozpoczecie odliczania { sprintf(message,"Odliczanie "); message[15]=' '; LCD2x16_clear(); display(message, false); //konfiguracja timerow TCCR1B |=...
Wektorów przerwań szuka sie nie tyle w dokumentacji winavr co w dokumentacji kontrolera, który się programuje. Nazwa wektora to nazwa przerwania ze spacjami zastąpionymi podkreślnikiem i dodanym przyrostkiem _vect np przerwanie od przepełnienia timera 1 w atmega 32: w dokumetnacji sekcja Interrupts (str. 42) 10 $012 TIMER1 OVF Timer/Counter1 Overflow...
Zamieniłem te biblioteki i wyskakuje kilka ostrzeżeń i jeden błąd: 1) data.h:4: - warning: ignoring #pragma language #pragma language=extended 2) sound.c:38: - warning: implicit declaration of function '__enable_interrupt' __enable_interrupt(); // enable interrupts 3) sound.c:211: - warning: ignoring #pragma vector #pragma vector = TIMER1_OVF_vect 4)...
Oczywiście że jest. W innym wypadku wcale by nie działał. Zauważ że w większości przypadków programowanie przebiegało poprawnie. Możliwe że wersja na 16MHz jest dość stara bo mało kto takich używa. Programatora używam od jakiś 2 lat bez większych problemów. Początkowo z Bascomem teraz z WinAvr i Eclipse. Problemy pojawiły się dopiero przy tym kodzie....
Czy dobrze jest to wykonane? czyli przerwanie wywolywane z częstotliwością 50Hz. Mam jeszcze pytanie czy to mi się skopiluje w tej wersji WinAVR co ja posiadam. Ponieważ napisałeś, że ISR to jest nowsze od SIGNAL. #include <avr/io.h> #include <avr/interrupt.h> int main (void) { DDRB |= (1 << 0); // Ustawienie bitu...
a jakoś po ludzku ktoś mógłby to wytułmaczyć? Może odniose się do konkretnego - mojego - przykładu: Mam maina który obśługuje flagi pochodzące z trzech przerwań: - uart0 Rx - uart1 Rx - timer1 W każdym z tych przerwań występue Funkcja wysyłająca znaki przez uart1. Jest też funkcja wysyłająca dane po uart0 i czekające na ustawienie flag z uart0. Wszystkie...
Witam Próbuję się dowiedzieć jak używać przerwań, ale marnie mi to idzie. Nigdzie nie mogę znaleźć informacji tłumaczące od A do Z co i jak i przez to mam bałagan w głowie. Znalazłem pewien kod w necie i paru rzeczy nie rozumiem: 1. W "SIGNAL (SIG_OVERFLOW0)" ustawiona jest wartość początkowa więc dlaczego kolejny raz jest to wykonane w "int main(void)-->TCNT0...
Dzięki wielkie za pomoc, spróbuję to wykorzystać ;) tak kilka słów wyjaśnienia, procesor jest od podstaw napisany przeze mnie w ramach pracy magisterskiej. Język Verilog, wszystkie układy arytmetyczno-logiczne napisane w opisie strukturalnym,reszta mieszanie. Testuję na razie w fpga Actel AGL250 (ledwo się mieści z peryferiami) ale docelowo ma być wykonany...
Witam, Pomysł dobry ale sypie się najprawdopodobniej z powodu zbyt dużej ilości przerwań. Proponuje projekt sterownika "równoległego", taki wykorzystałem w mojej pracy inżynierskiej. Wprawdzie korzystałem tylko z 8 serw ale 16 też obsłuży po drobnej modyfikacji. Program zabiera większość mocy procesora do obsługi przerwań ale tylko przez czas 2ms potem...
Witam ponownie, przepraszam za opóźnienie. Niestety nie mogłem zająć się urządzeniem przez ostatnie kilka dni. Na oryginalnych ustawieniach(timer1[16 bit], 1MHz, bez prescalera) działa bez większych czknięć z większych odległości. Z bliska problemy z transmisją są częstsze, ale dalej w granicy bezczelności. Niestety timer1 jest używany do innych rzeczy...
Dokładnie tak jak piszesz i btw serwo się rusza:). Prosty kod na przerwaniu przy zegarze 16mHz jakby ktoś potrzebował:[syntax=c]//serwo #define SERWO_DDR DDRD #define SERWO_PORT PORTD #define SERWO_PIN (1<<PD6) //ustawienie timera_1 do PWM serwa (20ms cykl wypełnienie 1-2ms) TCCR1B |= (1<<CS12); //preskaer 256 TCCR1B |= (1<<WGM13)|(1<<WGM12);...
Witam, W dokumentacji dowolnego mikrokontrolera ATmega z łatwością można odnaleźć tablicę z wektorami przerwań, np. taką: 1 $0000 RESET 2 $0002 INT0 External Interrupt Request 0 3 $0004 INT1 External Interrupt Request 1 4 $0006 INT2 External Interrupt Request 2 5 $0008 INT3 External Interrupt Request 3 6 $000A INT4 External Interrupt Request 4 7 $000C...
Witam, Panowie pomóżcie, bo już wariuje.... mam taki (kawalek) kodu w pętli for( ; ; ) if(intflags.rx_int){ cli(); intflags.rx_int = 0; sprintf(str,"stala= % 2.2f\n",(double)ram_fuel... printstr(str); printstr("nowa: "); fscanf(stdin,"%f",&ram... eeprom_write_block(&ram_fuel,&am...
(at)emarcus - Fabrycznie jest 1MHz. Ze wzoru, który znalazłem w Internecie wartość ICR1 jest OK. W takim razie, co robię nie tak ? W takim razie jedyna odpowiedź jaka mi się nasuwa to: Nie myślisz!!! Skąd masz pewnośc, że ten program znaleziony w internecie jest dobrze obliczony? Przecież możesz to sobie obliczyc sam............... W nagłówku programu...
Witam ponownie. Jak się spodziewałem problemy wystąpiły:/. Dodałem obsługę pozostałych dwóch przycisków i praktycznie rzecz biorąc wróciłem do punktu wyjścia. Co gorsze nie zapisałem kodu, który działał, więc nie wiem, gdzie leży błąd. Próbowałem go odtworzyć z pamięci, ale nic nie wychodzi:/ Najpierw aktualny kod: Zmodyfikowana funkcja Freddiego Chopina...
Witam, Napisałem program na ATMEGA32 w WinAVR20080430 i na symulacji teoretycznie wszystko działa, a w rzeczywistosci program działa poprawnie przez godzinę czasem 3 godziny i procek resetuje się. Program zlicza impulsy z wejść w przerwaniach INT0, INT1 i mierzy czasy tych impulsów uzywając Timer0 i Timer1. Okres najkrótszego impulsu podanego na INT0...
Oto mój kawałek Kodu może CI się przyda: #include <avr\io.h> #include <avr\interrupt.h> #include <avr\signal.h> #define tau0 6; #define vliczt0 7; #define LCD PORTD #define E PORTC #define RS PORTC #define DQ1 PC0 #define DQ2 PC1 #define h_DQ DDRC = ~_BV(DQ) #define l_DQ DDRC = _BV(DQ) #define IN_DQ PINC & _BV(DQ)...
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 =="...
A tu się z Tobą nie zgodzę, jest takie coś (przynajmniej w WinAVR) EMPTY_INTERRUPT(vector) i czasem dobrze jest tego użyć No o tym wiem, zapomniałem dodac i nie chciałem już mącić poczatkującemu ;) Tylko chodziło mi o to, że nie można robić przerwań typu ISR(TIMER1_OVERFLOW) {}
Ok, to teraz od początku: uC - ATMega8 taktowanie - wewnętrzny oscylator 1MHz przetwornik - układ całkujący, rezystor 10kΩ kondensator 10µ, do tego wtórnik na WO. Piszę to w WinAVR, a tam kompilator to chyba avr-gcc jest. Pomiar napięcia na wyjściu WO za pomocą woltomierza. W celu wygenerowania PWM nie jest konieczne używanie przerwań, więc...
Dzięki za zainteresowanie tematem. Rzeczywiście mogłem lepiej opisać problem na samym początku. Już naprawiam błąd. System wygląda w ten sposób, że Atmega128 taktowana sygnałem o częstotliwości 14.745600 MHz (F_CPU = 14745600) podłączona jest bezpośrednio do 3 osiowego drivera silników krokowych TB6560. Konkretnie mówiąc pin 3 portu D podłączony jest...
Umieść kod tak, żebym mógł go skompilować, bo jak zwykle nie wierzę. Mam ten kompilator, korzystam i nie takie cuda pisałem... Daj kod, który ma wszystko a potem napiszę ci, co zrobiłeś źle i co rozumiesz przez Przy optymalizacji "s" tego co po while(1) nie ma!! A symulacja potwierdza, że program się zapęta w pustym RJMP. Kompilacja w jednej z poprzedniej...
Podałem wyraźnie, że oprogramowanie napisałem w WinAVR ;) Nie uznaję czegoś takiego jak bascom (wystarczyło mi raz w życiu się na nim przejechać...). Przedstawię "odchudzone" kody źródłowe - aby były całkowicie funkcjonalne należy troszkę dopisać. Ogólna idea jest przedstawiona. Sam main w programie jest niewielki. Dla przykładu pokażę jak zrealizowałem...
Moim problemem jest brak stabilności kodu dla tego mikrokontrolera. Kod skompilowałem w AVR Studio 4 z WinAVR w aktualnej wersji (2010). Kłopoty objawiają się poprzez skok do początku programu. Nie jest to reset - np. zakłócenia na linii RESET. Analizowałem rejestr statusu MCUSR. Początkowo przyjmuje on wartość 0x01, co znaczyłoby reset od POR. Jest...
Witam forumowiczów, zacząłem realizować projekt zegarka, kalendarza i termometrów z owego linku: http://obrazki.elektroda.pl/6128170300_1... Proszę o porady i sugestie jak można rozwiązać ten problem :P
Witam! Skonstruowałem sobie urządzenie, które ma służyć do optymalnego ustawienia sterownika kotła. Mierzy temperatury na zewnątrz i wewnątrz, liczy ich średnie, minima i maksima, jest podłączone do sterownika kotła pod przekaźnik (przez transoptor) i zlicza ilość załączeń podajnika w różnych trybach pracy i sumaryczny czas. Od dłuższego czasu walczę...
Witam wszystkich forumowiczow. Mam zrobic stoper odmierzajacy czas z wyswietlaczem lcd z sterownikiem HD44780 na ATMEGA 128 (na zajęciach jest takie pudło z całym mikrokontrolerem oraz wbudowaną klawiaturą i wyświetlaczem) w programie Programmers Notepad #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #define...
Witam Serdecznie Proszę o pomoc. Staram się zrobić pomiar temperatury na DS18B20 z wykorzystaniem LCD na HD44780 (docelowo pomiar na 3 dallasach). Mam atmege48 z kwarcem 11,059MHz. Mam też dobrze zrobionego delay'a (przynajmniej tak mi się wydaje). Dopiero rozpoczynam przygodę microcontrolerami i co krok napotykam jakić problem, dodatkowo słabo znam...
Witam wszystkich. Zaprojektowałem i uruchomiłem zegarek z wyświetlaczami LED(SA10-21GWA) i układem PCF8583 współpracującym z mikroprocesorem Atmega8 oraz układami PCF8574AP na szynie TWI(i2c). http://obrazki.elektroda.net/21_12497604... http://obrazki.elektroda.net/58_12497606... http://obrazki.elektroda.net/95_12497605...
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, moglby mi ktos sprawdzic komunikacje SPI atmega8+mcp4922. Wgrywam ten kod za pomoca winavr+stk200. W pliku jest schemat mojego ukladu. Z gory dzieki za pomoc [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> #include "spi.h" #include "config.h" #define IMP_NA_OBR 2500 #define F_CPU 16000000 #include <util/delay.h> //------------...
timer1 odlicza timer1 licznik timer1 zlicza
schemat rozrząd toyota zacisk hamulcowy ręczny airbag kasowanie
radio preludium glosnik sansui potecjometr
Brak zasilania na zaworze w Peugeocie Partner 1.6 HDI Nokia 3210 - Karta SIM odrzucona: Przyczyny i rozwiązania