Timer0 w Atmega8 może pracować tylko w trybie OVERFLOW (przepełnienia).
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
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),...
//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...
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);...
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...
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...
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...
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...
Napisz program w Bascom dla Atmega8, który będzie liczył pojedyncze impulsy w ciągu 24 godzin z zapamiętaniem najkrótszego odstępu między tymi impulsami, wynik wyświetlał na wyświetlaczu 2x16 opartym na HD44780. Oczywiście, chętnie pomogę Ci napisać ten program. Poniżej znajduje się kod, który powinien zrealizować to, co opisujesz. Wprowadziłem kilka...
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
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ć.
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...
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...
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...
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!
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...
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>...
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; //...
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ą...
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...
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...
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, 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)...
Witam, chciałbym przerobić projekt z tego linku http://www.elektroda.pl/rtvforum/topic90... Mianowicie zostawić odliczanie czasu i wyświetlanie go a dodać do niego funkcję w której o wpisanej "na stałe" godzinie w funkcji załączy przekaźnik. Przekaźnik jest 4 modułowy więc potrzebuje 4 wolnych pinów. Kod, który zmodyfikowałem wygląda następująco...
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...
[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)...
Tak wiem jestem okropny w te klocki. Więc tak, teraz używam timera do przerwania. Mógłbyś mi wytłumaczyć czemu mam nie używać free runu? Floaty zastąpiłem intigerami. Efekty: piksele wyświetlają się na określonych poziomach. Niestety są między nimy spore odstępy. Poza tym gdy są przesuwane w lewo(aby był efekt zmieniającego się przebiegu) nie są aktualizowane...
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...
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, Pisze kod do projektu termometr na czujniku LM35 i Atmega8. Wartości zmierzonego napięcia z czujnika zapisuję w zmiennych TEMP oraz DZIESIATKI i JEDNOSCI. Mój problem polega na tym, że nie wiem jak mam zadeklarowac zmienne DZIESIATKI i JEDNOSCI aby mozna było te wartości przekazywać do obsługi przerwania ISR(TIMER0_OVF_vect) w którym chcę wyświetlać...
No nie znam sie za bardzo ale jestem przekonany że problem jest w schemacie, jeśli jednak się myle proszę oto kod: [syntax=csharp] #include <avr/io.h> #include <avr/interrupt.h> //#include <avr/pgmspace.h> #include <util/delay.h> #define FOTOTRANZYSTOR (1<<PC0) #define LEDS (1<<PB3) #define LEDS_OFF PORTB &= ~LEDS;...
Spróbowałem własnych sił i oczywiście z pomocą forum, stworzyłem taki kod: int flaga=0; // flaga czy INT0 jest "0" czy "1" int a=0; // zmienna zwiększana przy każdym przepełnieniu licznika 0 int main(void) { //ustawienia wejścia INT0 DDRD&= ~(1<<DDD2); // konfiguracja - WEJSCIE ustawianie zera PORTD|=1<<PIND2;...
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...
zrobiłem pomiar ADC na 2 kanałach a wynik wyświetlam na LCD mam ale problem z tym że adc jest 10 bitowy i gdy chce wyświetlić wynik licząć na to że bedzie od 0 do 1023 okazuje sie że wyświetlą jakies brednie powyżej 4200 ... nie rozumie czemu. jezeli wyswietle sobie wynik tylko z ADCH ( rejest 8 bitowy 0-255) to pokazuje poprawie od 0 do 255 na lcd...
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...
Więc od początku. Wzorowałem się na tym schemacie: http://obrazki.elektroda.pl/7178254200_1... (jest, tu mały błąd PC0, PC1, PC2, PC4 - ale to wykryłem na początku) po drobnej przeróbce kodu, stoper działa tak jak tego potrzebuje. (zmiany, jakie dokonałem opisałem po polsku) jedynie potrzebuje duużych cyfer. załączam cały kod: [syntax=c]#include...
Witam. Robię miernik częstotliwości na ATmega8 z wyświetlaniem na LCD HD44780 w trybie 4-bit (mam zrobiony prototyp). Opanowałem już wyświetlanie (z obsługą BF), ale teraz przystawiło mnie z pomiarem liczby impulsów zliczanych na wejściu T1 mikrokontrolera. Wynik co prawda jest wyświetlany, lecz jest on niestabilny w taki sposób, że skaczą 2 ostatnie...
Witam Robie PWM ( tryb 14 -atmega8) jego sterowanie odbywa sie za pomocą 16 bitowego rejestru ICR1 który to odpowiada za uzyskaną częstotliwość na wyjściu OCR1A (PB1) . Jezeli do rejestru ICR1 przypisuje stała wartość to wszystko jest ok, dioda poprawnie swieci, wynik na lcd jest OK. W momencie kiedy rejestr ICR1 zależy od adc1 to wtedy wyswietlacz...
Witam, proszę o pomoc w dokończeniu kodu do pomiaru temp. Wyświetlacz LCD 2x16 podlaczyłem do portu D atmega8. Czujnik temp. DS18s20 podlaczylem do pinu 2 Port B. Rezustor podciagajcy 4,7k s szyny danych DQ na zasilanie 5V. Wygenerowałem sobie kawałek kodu w codevision. Próbowałem rózne funkcje znalezione w necie ale nie działa wiec proszę o pomoc....
Witam, Chciałbym napisać jakiś najprostszy program w VB do obierania wartości zmiennej wysyłanej przez Atmegę, wysyłana jest zmienna Lngfreq Program wgrany na atmęgę poniżej [syntax=basic4gl] 'Filename Encoder_100.bas 'Version 1.00 'Date 2012-03-19 'Purpose Test of ALPS STEC11B13 encoder (reichelt.de) 'Author Georg Latzel, DL6GL 'Copyright (c) Georg...
Podłącze się pod temat: Postanowiłem pobawić się trochę dalmierzem opartym na SRF05 i korzystając z innego rozwiązania przekodowałem (ze zrozumieniem) program, który ma za zadanie pokazywać odległość od przedmiotu. Istotą mojego problemu jest to, że atmega32 idzie w maliny i nie bardzo wiem dlaczego... pomiary wykonują się, ale czasami procek wiesza...
Jeśli chodzi o sprzętowego PWMa to chyba pokuszę się o AVR136, tylko zamiast atmegi wykorzystam attiny2313. Zasymulowałem sobie to na razie tylko w proteusie i całkiem ładnie to śmiga :) ________________________________________... Ok. Potrzebuje Waszej pomocy. PWMy ładnie działąją (12 kanałów), ale nie wiem jak zwiększyć częstotliwość tego PWMa....
Witam, proszę pomóżcie. Zrobiłem woltomierz na Atmega8. Wynik jest wyświetlany na LCD 2x16. Jednak zamiast np. 1.23 wyświetla 123. Zamieszczam kod:
Witam wszystkich Na wstepnie o tym co zrobilem...Zmontowalem ukladzik do zdalnej rejestracji temp, tzn. do Atmega8 podlaczylem 2 czujnik DS18B20 i siemensa s55...na sms'a o okreslonej tresci, pobierana jest temp. i wysylana nadawcy sms'a.... Uporalem sie z czujnikami i teraz siedze nad komunikcja z siemensem... Mam to zrobione na razie tak, ze kazdy...
Witam jestem początkujący w tej dziedzinie a otrzymałem zadanie złozone z 2 członów a mianowicie mam napisac program naciskam przycisk dioda sie zapala naciskam znów dioda gaśnie naciskam ten sam przycisk i go trzymam to diody sie zapalaja po kolei wykonałem płytke i na mikro. atmega 8 wykonałem równiez te programy tylko sek w tym ze sa w osobnych kodach...
A spróbuj to: [syntax=c] /* Program do przetwarzania sygnału z 6 sygnałów 1-2ms (do sterowania serw modelarskich) na wypełnienie PWM. kwarc 11059200Hz procesor ATMega8 Wypełnienie PWM- 0 w okolicach sygnału 1.5ms Zwiększa się od 0 do max w zakresie 1.5-2ms Zwiększa się w zakresie 1.5-2ms od 0 do max Co 20us sprawdzamy stan pinów PORTB na który są podawane...
Szukałem na internecie poradników do terminala UART i udało mi się zrobić coś takiego z kawałków znalezionych w sieci. Problem polega na tym, że mój kompilator wyrzuca błędy a nie pokazuje mi gdzie one są (i tym samym nie mogę ich skompilować) i jeśli ktoś może sprawdzić poprawność kodu w 1. i 2. main.c(są to dwa odzielne programy w dwóch projektach...
Fuse bits ustawiłeś na 4000000 MHz? W IDE (kontrollerlab) mam ustawione 1 MHz, ale teraz zmieniłem na 1000000UL Pokaż co jest w uart.h. To jest z tej bibloteki: i biblioteki http://homepage.hispeed.ch/peterfleury/u... Pokaż schemat. Brałem go z polskiej książki o programowaniu rs232 w Bascomie: max232 + 4x10uF + 100nF Po pierwsze czy ustawiłeś...
Witam. Chce odkuryć temat. Mianowicie mam podobny problem. TSOF1736, ATmega8, standardowe taktowanie 1MHz, rezystor 3k pullup, int0. Zmienilem prescaler w tym programie z 8->1, oraz poprawilem wlaczanie przerwania od przepelnienia, wiec czasy powinny sie teraz zgadzac. Moj makefile: PRG= led OBJ= led.o MCU_TARGET = atmega8 OPTIMIZE = -O2 DEFS = LIBS...
buffer overflow timsk overflow stack overflow
konica minolta bizhub zębatek tablica chara progmem simple oscillator
bateria parkside podłączenie przekaznika
Einhell Dual – nagły brak lasera w piła ukośna: typowe usterki, diagnostyka, naprawa Einhell TE-SM 2131 – brak lasera, nie świeci wiązka, naprawa przełącznika i modułu