Gdybym miał tak sformatowany kod, to te nie byłbym w stanie go uruchomić... A Twoje kolejne podstawienia różnych wartości na OCR1A nieszczególnie mają sens.
A zmieniłeś Timer na Timer1? Przecież bez tej zmiany Timer nie jest ładowany i zlicza nie 1000 lecz 65536 cykli. Co daje właśnie około 64-krotne spowolnienie.
Dokumentacja mówi WYRAŹNIE: najpierw należy ładować wartość do TCNT1H (który zostaje zapisany do rejestru TEMP), a dopiero potem do TCNT1L, co pociąga za sobą wpisanie do TCNT1 aktualnej części jako dół i wartości TEMP jako góra (przy odczycie najpierw należy odczytać dół, potem górę). Ciągu skutków powodujących takie zachowanie a inne nie chce mi się...
Witam wszystkich serdecznie, Czy da się na timer1 wygenerować 2 przebiegi o niezależnie zmienianej częstotliwości? Czy powinienem użyć drugiego licznika? W żadnym trybie nie uzyskasz 2-ch niezależnych przebiegów o zmiennej częstotliwości z tego samego timera. Owszem, możesz wygenerowac dwa sygnały PWM z kanałów A oraz B o dowolnym wypełnieniu, lecz...
Ja zawsze wpisuję Timer1 = var i to jest wartość początkowa licznika , a wpisując instrukcję load , podajesz ilość impulsów do zliczenia , a nie wartość początkową timera, kompilator sam wylicza wartość początkową.( chyba ). Timery zliczają w górę.
Przecież pisze jak na tacy: 1. Licznik nie doliczy do 5000 w trybie CTC - zatem logicznie myśląc trzeba ten tryb wyłączyć . 2. Jeśli licznik ma pracować w trybie CTC to wartość z OCR1B musi być mniejsza niż OCR1A.
W jaki sposób objawia się problem? Tak poza tym, to mam kilka uwag: 1) program nie będzie zbyt dokładnie odmierzał czasu, może gubić całe 100 milisekundowe odcinki czasu, 2) sekundy, minuty, godziny będą trwać o jedną "mniejszą" jednostkę za krótko, tzn. np. minuta będzie trwać 59 sekund zamiast 60 sekund, 3) definicję częstotliwości kwarcu powinno...
Bo WGM12 jest w TCCR1B a nie w TCCR1A. W tym momencie Twój licznik pracuje w trybie Normal i liczy do 65536 i raz na taki cykl ustawia flagę od porównania czyli co 2,09 sekundy.
:):) I znowu na odwrot:) Jak ustawisz TCCR1B=0xC; Czyli to o co Ci chodzi(tryb CTC) to musisz zostawic makro wywolujace przerwanie takie jakie miales:) SIGNAL(SIG_OUTPUT_COMPARE1A) ale radzilbym zmienic na taka nazwe: ISR(TIMER1_COMPA_vect)
twój program doskonale miga diodą zgodnie z zamierzeniem ale musisz poczekać nie sekundę a kilka minut bo z powodu niezerowania licznika count kolejne mrugnięcie zachodzi dopiero po przekręceniu inta :) (btw. w tej sytuacji volatile jest niepotrzebne)
$regfile = "m8def.dat" Config Pinb.1 = Output $crystal = 1000000 Config Timer1 = Timer , Prescale = 64 Config Timer0 = Counter , Edge = Rising On Timer1 Odmierz_1s Dim Licz As Byte , I As Byte Enable Interrupts Enable Timer1 Start Timer1 Timer1 = 65535 - 15625 Do Loop End Odmierz_1s: Timer1 = 65535 - 15625 Incr Licz If Licz = 5 Then Licz...
W ATmega8 Timer1 może być skonfigurowany jako PWM o rozdzielczości 8, 9 i 10 bitów.
Jeżeli to jest przetwornica to nie pisz UPS. To kwestia tylko zamiany przed główną pętlą Do Loop: Reset tr1 Set tr1 W kodzie tym początkowym. Pamiętaj o tych 10ms.
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....
A jak policzyłeś 0x7A11?? Licząc "od tyłu" wychodzi: 0x07a11 * 256 = 31249 * 256 = 7.999.744 Czyli blisko 8MHz. Gdybyś miał 0x7A12 to byłoby równo 8MHz. Czy taki masz kwarc?
Jaka jest maksymalna częstotliwość pracy kwarca wewnętrznego Atmegi8? ATmega nie ma w środku kwarc u , tylko oscylator RC, to tak gwoli ścisłości. Mam ustawione 4Mhz i kiedy ustawiam prescaler w timerze 16bitowym na 64 (TCCR1B|=1<<CS11|1<<CS10;) tak aby przerwanie spowodowane przepełniniem timera było wywoływane mniejwięcej co 1s 4000000/64/2^16...
A co jeśli do pierwotnego kodu dodasz: [syntax=c]ISR(TIMER1_COMPB_vect) { }[/syntax]
$regfile = "m8def.dat" $crystal = 8000000 Config Timer1 = Pwm , Pwm = 8 , Compare B Pwm = Clear Down , Prescale = 1 Config Portb = 255 Config Portc = 255 Config Portd = 255 Portb = 0 Dim A As Byte 'Czerwony Dim B As Byte 'Zielony Dim C As Byte 'Niebieski Dim D As Byte 'Czas A = 0 B = 255 C = 255 D = 4 Zolty: Do Pwm1b = A Set Portb.4 Waitms...
Problem masz ewidentnie z programowaniem Flash, a nie z kompilacją. Może spróbuj z innym programatorem.
Tu masz dzilajacy kod;) fast PWM na timerze1 rozdzielczosc 8 bit. .include "m8def.inc" .org 0x00 rjmp reset RESET: ldi R16,low(RAMEND) out SPL,R16 ldi R16,high(RAMEND) out SPH, R16 ldi r16,1<<WGM10|1<<COM1A1 out TCCR1A,r16 ldi r16,1<<WGM12|1<<CS10 out TCCR1B,r16 ldi r16,122 out OCR1AL,r16 ldi r16,0xFF...
spr dodać 'volatile' przy deklaracji zmiennej, możliwe że kompilator optymalizując wpisuje na stałe wartość zadeklarowaną na początku, w przerwaniu jej wartość się nie zmienia, dla kompilatora jest ona w tym miejscu jako stała ...
Zatem zapisy sa równoważne. Istotne to może być przy preskalerze = 1.
to zatrzymanie timera przed załadowaniem wartości jakby pomogło (przynajmniej nie zachowuje się dziwnie) teraz miga w równych odstępach ... Home Lcd "P=" ; P ; "us" Lowerline Lcd "I=" ; I ; "us " ; Licznik If Licznik = P Then Portd.2 = 0 End If If Licznik >= C Then Portd.2 = 1 Licznik = 0 End If ... Dobra odczepiam się od portów :) I już mówię dlaczego...
Widzę że nie rozumiesz zapisu WGM13:0. To oznacza 4 bity. WGM13 WGM12 WGM11 WGM10 Czyli do tych 4 bitów musisz wpisać 15(d)=1111(b). W tabeli 39 na stronie 99 dokumentacji masz nawet to rozpisane.
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...
Sprawdź w symulacji co się dzieje z rejestrem TCCR1B (a szczególnie z bitami CS10 - 12) po komendzie "timer1 = 0".
A nie łatwiej jest policzyć DO ilu ma liczyć a nie OD ilu? :) i robić przerwania COMP a nie OVF? Ja tak robię i na kwarcu 4MHz timer1 odlicza sekundy bardzo ładnie. Ale u Ciebie timer1 wydaje się mieć dobrze ustawianą wartość. Przy prescalerze 256 musisz mieć 15625 taktów zegara, aby osiągnąć sekundę. W drugim coś mi nie gra. Odliczasz od 0x0F czyli...
Witam. Mam pytanie czy jeśli korzystam z trybu przechwycenia od licznika ICP to, czy jednocześnie na drugiej połówce Timera1 można robić np PWM, czy porównanie, ogólnie czy można z niej korzystać. Wiem, że preskaler jest jeden dla obydwóch połówek. Próbowałem i jakoś to się nie zgrywa ze sobą. Może ktoś poda przykład takiego użycia. Będę wdzięczny.
Pokaż cały kod. Autor postu zachował się chamsko wobec niego - takim nie należy pomagać tylko ignorować. ?? Czym kogokolwiek według Ciebie uraziłem :O ?
Program działa i nawet licznik się zatrzymuje tylko jaką mam pewność że jest to 250ms? chodzi mi o to żeby uzyskać jak największą dokładność. Dzięki za ten przykład, spróbuję... Nie wiem dokładnie , do czego Ci to potrzebne ale przykład z przerwaniem , który podałem wcześniej działa z dokładnością do ~2 cykli zegara(500)ns.Czy to niezbyt dokładnie...
No jest kretyński :) TIMSK = _BV(TOIE1); // wlacz obsluge przerwan T/C1 TIMSK = _BV(TOIE0); //jw dla T/C2 TIMSK = _BV(TOIE1) ; // wlacz obsluge przerwan T/C1 TIMSK |= _BV(TOIE0); //jw dla T/C2 albo TIMSK = _BV(TOIE1) | _BV(TOIE0) ; ;)
A zmieniałeś FuseBity? :]
Dla powyższego przykładu wartość dla Timera1 powinna być 7999. 1000ms/800ms=1,25Hz *100=125Hz (clock speed 8000000Hz / (prescaler 8 * częstotliwość 125Hz)) - 1 = 7999 lub dla prescalera 256 wartość wpisywana do licznika 24999 da przerwanie co 0,8s EDIT: Ta linijka coś nie pasuje If Ms1 = 80 Then nie powinno być 100 zamiast 80 EDIT2: A, żeby nie było...
Proszę bardzo ;) Timer napędzany jest od systemowego taktowania. Jeśli każę mu policzyc do jeden i odwrócić pin to w pierwszym takcie zegara licznik Compare1a ma zero i pin nie jest odwracany ;) Dopiero za drugim razem pin jest odwracany. Z tego powodu że żeby mieć częstotliwość na pinie trzeba go raz mieć w stanie wysokim a raz niskim, a da się to...
Witam Ostatnio zmienialem fusebity tak aby uC pracowal z zewnetrznym rezonatorem 8MHz. Poustawialem wszystko przez PonyProga i wygladalo,ze wszystko jest oki, no i zaczolem sprawdzac. Popelnilem maly program, ktory zapala i wygasza diode co 1 s. Wszystko bylo by fajnie, gdyby nie to ze wedlug tych ustawien i zegarze 8MHz dioda powinna migac co 0.5s....
Witam. Chciałem skorzystać z Timera1 w procesorze Atmega8 w trybie fast PWM nastawiłem rejestry w nastepujący sposób: TCCR1A |= _BV(WGM11) | _BV(WGM10) | _BV(COM1A1) | _BV(COM1B1); TCCR1b |= _BV(WGM13) | _BV(WGM12) | _BV(CS10); DDRB = 0xFF; Oczywiście wszystsko się kompiluje itd. ale problem występuję gdy próbuję wpisać do OCR1A coś większego niż 0x03FF...
Właśnie przed chwilą też uruchomiłem zegar na ATMega8 choć wykorzystujący kwarc 32kHz (tzw. zegarkowy) niezależny od generatora głównego procesora. Jeżeli chcesz pozostać przy swoim pomyśle (równie dobrym) to w BASCOM-mie po kompilacji przejdź do opcji programatora gdzie będziesz miał trzy zakładki FlashROM ,EEPROM i Lock and Fuse Bits. Więc wybierz...
Podczas programowania układu natrafiłem na problem dotyczący sterowaniem PWM przy pomowy wewnętrznego timera. Port wyjściowy timera steruje kluczem tranzystorowym do którego podłączony jest wentylator 12V. Oto moja funkcja ustawiająca rejestry timera. void pwm() { //OC1A as output DDRB |= _BV(PB1); //PWM Phase, frequency correct...
char: -128..127 unsigned char 0..255 int -32768..32767 unsigned int 0..65535 long -2147483648..2147483647 unsigned long 0..4294967295
Witam. Mam problem z przerwaniami w atmega8. Wcześniej nie potrzebowałem przerwań więc to zagadnienie mnie nie interesowało. Potrzebuję wywołać przerwanie zewnętrzne int0 które uruchomi timer1, a ten zacznie odmierzać czas. Proszę o pomoc. Pierwsza zasadnicza uwaga to nie zauważyłem w programie konfiguracji interruptu0- coś np. takiego: config INT0=...
Potem calosc zestroilbym dodajac nopy i ewentualnie korygujac minimalnie timer Jak czas odmierza timer, to nop nie nadadzą się jako coś do korekcji częstotliwości.[/quote] Nie chodzi mi o korygowanie chwili wystapienia przerwania,lecz o dokladny moment zmiany stanu portu w procedurze obslugi przerwania.
Ja się tam na BASCOMie nie znam, ale ten program to wyglada mi na generator liczb pseudolosowych ;) Weź się skup i zastanów co chcesz uzyskać. Kompletnie nie rozumiem, co Ty robisz z tym T. Co to ma reprezentować? Podpowiem, że jeżeli chcesz wyświetlić liczbę X z zakresu 0..99 na swoim wyświetlaczu, to byłoby to chyba coś takiego (zakładając, że wyświetlacz...
Piszę program w AVRStudio 4.13SP2. Działanie programu jest (a właściwie powinno być) następujące: Mikrokontroler generuje sygnał PWM o częstotliwości 50Hz i czasie trwania od 0,5ms do 2,5ms. Sygnał wysyłany jest na wyprowadzenie OC1A. Przy wyzerowaniu licznika podczas zliczania w dół wywoływane jest przerwanie włączające przetwarzanie A/C. Wewnątrz...
Muszę użyć układ dwóch timerów ponieważ w docelowym układzie zakres czasowy Timera1 będzie za mały. Czy procesor zliczy na T1 impulsy generowane na OC2 ? Obawiam się sytuacji, że przy wspólnym CLK gdzieś mi się zbocza miną pomiędzy OC2 a T1 i układ nie zatrybi... Oczywiście że zbocza te mogą się minąć, ale to jest bez znaczenia. Podczas synchronizacji...
Zmieniłem w liniach z Load na Timer1 = A ale nic to nie dało nadal 10us. Podejrzewam że nie pracuje z preskalerem =1 prawidłowo. Gdzieś czytałem z rok temu że kod programu będzie pracował z zegarem 14MHz (tak jest u mnie) a Timery z 8Mhz. Prawda czy nie ?. Z obliczeń na kalk.exe do wyliczania Timerów jeden cykl Timera przy 14Mhz to około 0.07us.Czyżby...
.. Czy moje założenia są poprawne? Przerwania nie będą potrzebne jeżeli: a)serwo masz podłączone do wyjścia OC1A i nie korzystasz z przechwytywania - tryb Fast PWM(Mode 14) b)serwo możesz podłączyć do wyjścia OC1B - tryb Fast PWM(Mode 15)
Po pierwsze jakie czasy chcesz obliczać i jakie przerwania po co ??? To jest bascom nie assembler, deklarujesz na wstępie programu prędkość kwarcu a kompilator troszczy się o resztę tj. dajesz deklarację $regfile = "m8def.dat" $crystal = 12000000 Po drugie, procedura obsługi wyświetlaczy LCD (mowa tu o alfanumerycznych HD44780) jest w BASCOM zaimplementowana...
Witam Mam do zrobienia generator na atmedze w którym zadaję częstotliwość oraz wypełnienie sygnału prostokątnego. Udało mi się odpalić i generator i PWM z osobna ale mam problem z ich połączeniem. Chcę taktować Timer2 (na nim robię PWM) z wyjścia Timera1. Czysto teoretycznie wydaje mi się to możliwe ponieważ Timer2 może pracować w trybie asynchronicznym....
A nie powinieneś czasem użyć bitu OCF1 i przerwania "0x006 TIMER1 COMPA Timer/Counter1 Compare Match A"?
Tak, dziękuje. Doszedłem do tego dzisiaj rano. Wszystko funkcjonuje w miarę poprawnie. W wolnej chwili udostepnie kod dla pozostałych osób z tym samym problemem.
Przecież to jest taka sama metoda jak tutaj opisywana.
Timer1 = Wynik tak sie wpisuje daną do timera1 a tak powinno być Wynik = Timer1 teraz Timer1 bedzie wpisywał wartość do zmiennej Wynik bedzie działać
Dziękuję za odpowiedź. Nie wiedziałem ze muszę podawać wartość OCR1A w przerwaniu bardziej wydawało mi się że trzeba zerować. Chcę użyskać przerwanie do 1 sekunde, 8000000/256=31250 jest dobrym obliczeniem? Taktowanie procka 8 Mhz. [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> // dioda LED #define LED_PIN (1<<PD7) #define...
Wykorzystuję TIMER1
Eeeee tam.... Jak to się nie da!? Przykład konfiguracji dla atmega8: Config Timer1 = Pwm , Prescale = 1 , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down Config Timer2 = Pwm , Async = on , Prescale = 1 , Pwm = On , Compare Pwm = Clear Up Pwm1a = 255 Pwm1b = 255 Ocr2 = 255 Pozdrawiam.
Witam, Piszę program do atmega8 i mam problem z ustawieniem Timer1. Dopiero zaczynam programować więc proszę o wyrozumiałość. Chciałbym ustawić tak timer1 aby zaczął liczyć czas od pojawienia się na portd.3 pierwszego impulsu do drugiego impulsu, zapisał wartość do zmiennej, wyzerował się i zaczął zliczać czas od drugiego do trzeciego impulsu zapisał...
tak jesli timer1 jest tylko do odliczania tej jednej sekundy i do niczego innego go nie potrzebujesz
pewnie wspaniala komenda $crystal, czy jakkolwiek to tam sie pisze... 'no przeciez zadeklarowalem czestotliwosc kwarcu,,, czemu mi nie dziala...??????!!!!!1111 jeden jeden !!!111???/// ' 4\/3!!
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...
a spróbuj zmienić z "Clear Up" na "Clear Down". wtedy będziesz miał 0Mocy dla 0 wpisanego do rejestru PWM. a moze pomyliłeś coś na zewnątrz chipa ??
Jak więc go skonfigurować i na którym pinie jest "wyjście"? Konfiguruje się normalnie jak timer1?
OC2 to wyjście wykorzystywane przez Timer2 - nie Timer1. Wystarczy skonfigurować T2 - i po kłopocie... (Przestudiowanie noty katalogowej układu rozwiązałoby problem)
ATmwga 8 ma 3 timery... 2x 8-bit i 1x 16bit... Timer2 może pracować z kwarcem zegarkowym... Timer1 jako PWM... A timer0 jako licznik...
Witam. Napisalem posta w dziale mikrokontrolery ale nikt mi nie odpowiedzial wiec prosze teraz Was o pomoc. Otoz mam program w asemblerze do generwania przebiegu przez PWM za pomoca licznika1(16 bit) po uruchomieniu symulatora dziala wszystko i stany na wyjsciu OC1A sie zmieniaja, jednak juz po zgraniu programu do procka stan na pinie sie nie zmienia....
Poczytaj sobie ten watek : http://www.elektroda.pl/rtvforum/timer0-...
zumek, wartość którą wpisuje do OCR1A obliczyłem wykorzystując ten program... A ja Ci podałem wzór, który "stworzyłem" wykorzystując dokumentację ATMega8 :D 1+OCR2= \frac{F_CPU}{N*f}
tak na pierwszy rzut oka: TCCR1B=(1 << CS10); //ustaw timer1 z preskalerem 1 TCCR1B=(1 << WGM12); //ustaw timer1 w tryb CTC Taki zapis nie wykona tego czego byś oczekiwał. Używasz operator przypisania =, co powoduje że pierwsza linia jest "pomijana" a w TCCR1B masz wartość (1 << WGM12). Użyj operatorów sumy i iloczynu...
Witam! Bawię się czujnikiem ultradźwiękowym mierzącym odległość, z którym komunikuje się za pomocą interfejsu I2C. Dane z czujnika za pośrednictwem amtegi8 (8MHz) wyrzucam na kompa za pomocą RS-232 (9600 baudrate). Problem polega na tym aby obliczyć czas jaki upływa pomiędzy kolejnymi pomiarami i wyświetlać go z resztą danych na komputerze. Trochę poczytałem...
(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...
Tryb Capture służy do przechwytywania zawartości licznika a nie do jego przeładowywania.
Witam W jaki sposób mogę skonfigurowac atmegę 8 aby odbiór rc5 zrealizować na timerze1.Ta timerze 0 mam odliczanie sekund oczywiście wprzerwaniu.Mam skonfigurowane tak: Config Int1 = Low Level , [timer = 1] Config Rc5 = Pind.3 [timer = 1] Enable Int1 Enable Interrupts On Int1 Rc5 Config Timer0 = Timer , Prescale = 1024 Enable Interrupts...
Tryb CTC jest w atmega8 na timer1 i timer2, Jeżeli chcesz mieć dokładnie to zastosuj któryś z powyższych timerów. przy odpowiednim skonfigurowaniu timera może on automatycznie zmieniać stan na odpowiednim wyjściu. (dla timer 1 jest to OC1A/PB1 OC1B/PB2, a dla timer2 OC2/PB3) W trybie CTC nie musisz ciągle wpisywać wartości do TCCRx.
Czy ktoś z was wykorzystywał Timer1 do generowania fali PWM w trybie PWM Phase Correct oraz w trybie PWM Phase and Frequence Correct. Czytałem w tym zakresie noty katalogowe ale niestety nie bardzo zrozumiałem o co chodzi. Głowny mój problem to moment wpisu do rejestru OCR1A. Byłbym bardzo wdzięczny za kilka słow wyjaśnienia oraz kawałek kodu w asm....
Człowieku - Jesteś wielki... Ja tych kaw musiała bym wypić litry i zjeść kilogram cukierków, a d*psko rośnie :) Mam jeszcze jedno pytanie: Jeśli by to przerabiać na Tiny261, 2313, albo Atmega8, to jak konfigurować timer i ADC? Np dla Tiny261 doczepił mi się bascom do tych parametrów: Unknown CONFIG parametr (internal) i unknown variable dim COMPARE0:...
WGM11 i WGM10 razem z bitami WGM12 i WGM13 z rejestru TCCR1B ustalają własnie tryb pracy. Table 39 na stronie 99 Datasheeta ATMegi8 z 07/2007. Inne procesory to inne numery tabelki i strony w Datasheecie, ale opis prawie identyczny. Podałem przykład dla ATMega8 żebyś wiedział gdzie szukać.
W ATmega8 masz 3 timery:TIMER0(8bit bez funkcji PWM),timer1(16bit z 2 kanałami PWM),i timer2 (8 bit z jednym kanałem PWM) i do tego musisz się zastosować. Wyjścia PWM to PORTB.1, PORTB.2 i PORTB.3 Możesz jeszcze zrobić programowy PWM np. na timer0 i będziesz miał PWM na wyjściu na jakim tylko chcesz. [syntax=basic4gl][/syntax] $regfile = "m8def.dat"...
Proszę o pomoc, co jest źle w tym ustawieniu Timera1 jako CTC Według dokumentacji po ustawieniu Timera jako CTC powinien on liczyć do wartości wpisanej w ORT1A jeśli ustawimy WGM13 na 1 lub, jeśli ustawione na 0 to maksymalna wartość będzie ustawiana w ICR1. Niby wszystko jest ustawione jak trzeba a na wyjściu OC1A jak nie było przebiegu tak nie ma....
kurcze mi nie wychodzi :| timer chodzi co 1s ale reszta do kitu Dodano po 25 program chodzi :) oczywiscie musisz go przerobic na wlasne potrzeby dodac tyle ile chcesz przekaznikow i zmienic czasy w programie bo tam jest 10s i 40s ten program jest przygotowany pod ATmega8 i kwarc 8MHz $regfile = "m8def.dat" $crystal = 8000000 Config Pind.0...
Co robię źle Noty katalogowe czytasz po łebkach, a zwłaszcza fragmenty dotyczące rejestrów. - W TCCR2 nie ma bitów WGM12/CS02/CS00. - W Timer1 oba rejestry TCCR1A/TCCR1B należy konfigurować no i w CTC tylko OCR1A ma znaczenie.
W kodzie stoi jak byk .... ISR(TIMER1_COMPB_vect) ani widu, ani słychu :-P Dokładnie, a ja już w innym podobnym twoim temacie podpowiadałem ci , że robisz niestety kardynalne błędy podczas konfiguracji Timer1. Bo w książce miałeś timer0 i było tak: [syntax=c]TIMSK |= (1<<OCIE0);[/syntax] Więc gdybyś przeniósł to na Timer2 - to byłoby mniej boleśnie...
Jaca: mikrokontrolerami bawie sie od 2 miesięcy i nie wiem dokładnie co to są te fuseBit-y jakbyś mógł to wyjaścić byłbym wdzięczny. Dexter77: Fakt, pomyliłem sie przepraszam. Tdv: Wartość wpisuje do Timer1.
TCCR1B &=~(_BV(CS12)) | ~(_BV(CS11)) Ww. zapis oznacza tyle co TCCR1B &= ~(1 << 2) | ~(1 << 1), to znowuż jest równoważne TCCR1B &= ~4 | ~2. W zapisie zerojedynkowym będzie TCCR1B &= 1111 1011 | 1111 1101, przy czym po wykonaniu operacji OR na tych ślicznych liczbach postanie z nich 1111 1111...
nie słyszałem, ale już buszuję w datasheecie. Pamiętaj że po puszczeniu przycisku wynik musi być wyświetlany. Po wciśnięciu przycisku 2 następuje reset zmiennych. Może jest przerwanie wyzwalane zmianą stanu logicznego na którejś nóżce? Zmieniałoby CS12 na 0 tym samym wyłączając timer1 :)
Czyli jest maly postęp. Sprubujmy takiej przeróbki: Pob_rc5: Disable Int0 Disable Timer1 Enable Interrupts Getrc5(address , Command) Enable Timer1 Command = Command And &B01111111 Set Odebrany_kod Return Ciekawe co zrobi. Chyba że jest błąd w książce.
Witajcie. Robię bliźniaczy do wykonanego przeze mnie na '51 projekt układu do pomiaru częstotliwości na AVR w C. Przyjęta przeze mnie logika to: ATMEGA8 - kwarc 10 MHz 1. podawanie sygnału badanego na wejście INT1 2. Timer1 jako licznik z preskalerem CK/1024 2. INT1 wyzwalane zboczem opadajacym 3. Gdy przyodzi przerwanie to nastepuje sprawdzenie czy...
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...
Wystarczy wpisać do rejestru licznika zero oraz wyzerować preskaler. Na przykład Timer0: 1. TCNT0 ustawiasz na zero 2. ustawiasz bit PSR10 w rejestrze SFIOR. Ale uwaga! W tym przypadku PSR10 zeruje także preskaler Timer1. Szczegóły w datasheet. Jak już poprawisz program to napisz proszę w komentarzu do artykułu. :)
Przede wszystkim musisz zacząć kolego od poznania timerów. Do odmierzenia czasu używamy timerów ponieważ zlicza nam czas w tle działania procesora. Używając polecenia wait zatrzymujesz kompletnie uC na ten czas. Konfiguracja dla AtMega8 8Mhz u mnie wygląda tak: Config Timer1 = Timer , Prescale = 256 ''''konfiguracja timera On Timer1 1s ''''przy przerwaniu...
Nigdzie. Tak działają single. - patrz na http://babbage.cs.qc.edu/IEEE-754/Decima... Wpisz wartośc 0.00167 i zobacz reprezentajcę tej liczby w formie not rounded, wynik to: 1.6699999e-4 (czyli te 0.0001669)
(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.
podaje blad przy kompilacji - albo nieumiejetnie wstawiam ten czynnik:)
Witam, potrzebuję wygenerować przerwanie analogicznie do stworzonego w atmega8. W Atmega8 użyłem Timer1 tryb CTC, teraz chcę osiągnąć podobny efekt na pic16f1716. Może ktoś pomóc? [syntax=c] void Init_Timer1A(void) { TCCR1A = 0x00; TCCR1B =(1<<CS11) | (1<<CS10) | (1 << WGM12); //tryb CTC (WGM12), Prescaler = 64 (CS11,cs10) clk = 8Mhz...
Wyniki są randomowe, nie ma znaczenia czy przeszkoda jest bliżej czy dalej, w przypadku poruszania się przeszkody zmiana jest jednak monotoniczna, im bliżej tym czas zliczania timer1 jest mniejszy.
Która atmega? W atmega8 możesz użyć: Timer0 - odmierzanie czasu Timer1 - zliczanie impulsów Timer2 - PWM
Witam. Na forum jestem nowy, ale Atmege8 gryzę już od roku:). Zakładam że czytałeś datasheet'a od Atmega8 i niestety nie udało Ci się zrozumieć.Jeżeli tak to Ci pomogę. Po pierwsze w Atmega8 masz trzy timery/countery: -Timer0 8bit -Timer1 16bit -Timer2 8bit Timer1 i Timer2 możesz wykorzystać jako PWM,gdyż mają wbudowaną taką funkcje. Wiadomo że 16bitowy...
Witam Ten program został napisany na MCU - AT89C2051 ! A nie na AVR Atmega8, dlatego Bascom avr ma problem. Aby go skompilować Musisz to zrobić w Bascom 8051. Ps. przymierzam się do zrobienia tego detektora od roku, ale jakoś czasu nie mam...
Jeśli pomiędzy przerwaniem od timera a wpisaniem do niego nowej wartości upływa zbyt "długi" czas to może się okazać, że timer zgłosił przerwanie w międzyczasie, które zostanie uwzględnione jeśli zapiszemy Timer1 = Timer1+wartość, a utracone jeśli zastosujemy Timer1 = wartość.
robie uklad gdzie chce wykorzystac element max6575lzut.. zapoznalem sie z dokumentacja jednakze nie otrzymuje wartosci zmierzonej.. moze wiecej szczegolow.. uklad podlaczylem do wejscia portd.2 (int0) uP atmega 8... wybralem 5us/K (przez odpowiednie polaczenie wyprowadzene ukladu max).. w programie na wstepie ustawiam port jako wyjscie i ustawiam w...
2 kanaly na timer1 a kolejne 2 na timer2 :]
Nie pytałem by Ci dopiec, tylko chciałem stwierdzić na ile trzeba Ci tłumaczyć :) Nazwę pinu używaj taką jaką jego funkcje wykorzystujesz, więc nie pisz PBB0(ICP1) tylko ICP1. Wynika to z tego iż w innej obudowie lub innym procesorze może być na innym pinie niż PB0, a warto pisać tak aby było bardziej uniwersalnie. Napisz jak rozumiesz działanie tego...
atmega8 przerwania timer1 bascom atmega8 timer1 atmega8 zegar timer1
tablet zamiast nawigacji sygnalizator otwarcia drzwi zasilacz samodzielnego montażu
Jak połączyć szeregowo tranzystory MOSFET? Dźwięk "pip" w telefonie stacjonarnym Orange - problem z połączeniami