Może spróbuj w ten sposób : $crystal = 4000000 Config Pind.5 = Output 'ustawienie wyjścia na pinie który standardowo sygnalizuje przepełnienie timer-a Config Timer0 = Timer , Prescale = 1 'ustawienie timer1 dzielnik 1 On Timer0 Przerwanie_timer1 'wywołanie przerwania po przepełnieniu timera Timer0 = 145 'wartość początkowa od której timer bedzie zliczł...
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...
Zrobiłem ostatnio coś takiego: http://www.elektroda.pl/rtvforum/topic15... Z poprawką Atoma chodzi dobrze. Dla ULN program należy uprościć do 4 lub 8 stanów. No i przerobić na ATTiny. Prędkość obrotową można regulować zmienianiąc wartość początkową Timer0. P.S. Postaraj się zapomnieć o waitms- należy to stosować tylko wtedy gdy nie zależy nam...
1. W jakim celu konfigurujesz liczniki, wpisujesz im wartości początkowe, a potem wywołujesz ich zatrzymanie przez STOP TIMER0/TIMER2 skoro nigdzie indziej ich ponownie nie uruchamiasz? 2. Jakim cudem kompilator nie protestuje gdy w pętli głównej umieszczasz samo ON TIMER0/TIMER2 nie podając trzeciego słowa kluczowego GOTO/GOSUB i ostatniego ich parametru?...
Hmm dalej nie kumam do końca o co chodzi jestem początkujący ... Znalazłem taki program w książce do odmierzania 1 s tylko jak to do mojego programu dołączyć [syntax=basic4gl]'Przykład wykorzystania Timer0 do generowania w przerwaniu '1 sekundowych odcinków czasu 'Program co sekundę w przerwaniu zmienia na przeciwny stan linii 'PD0 sterującej diodą...
witam. potrzebuję odmierzyć równo 1 sekundę, przykład wziąłem z kodu : http://obrazki.elektroda.pl/8005169500_1...
Load Timer 250 pojawił się 2 razy bo pierwszy jest wykonyawny przed wejściem do pętli a następny w pętli. W tym programie jest dodatkowa zmienna Licz_8ms bo Timer0 nie może odmierzyć całej sekundy w jednym przebiegu. Przy użyciu Timer1 i odpowiedniego kwarcu można osiągnąć przerwania co 1 s. Jest to korzystne bo odmierzanie czasu jest nieco dokładniejsze....
Jeżeli chce ustawiać wartość początkową timer0, to oczywiście ma problem. Ale pytanie brzmi - po co? Timer powinien chodzić na okrągło z lub bez preskalera przepełniając się i zerując. A program ma zliczać przepełnienia i wprowadzać kalibrację, która i tak jest konieczna ze względów, które opisałem powyżej. dla 8 bitów: 4MHz / 4 / 256 = 3906,25 przerwań/s,...
Jeżeli chodzi o sumulatory Bascoma AVR i 8051 to nie nalęży im za bardzo wierzyć w podawane czasy, jężeli przerwanie miało być wywołane np. co 10ms, Bascom mówi 15 to należy go olać i wierzyć we własne obliczenia (o ile są poprawne).
timer2 w ciągu 10 minut późni się o jakieś 12 sekund, a timer0 zdaje się nie reagować na wartość początkową wpisaną do rejestru TCNT0 Z zegarem wewnętrznym 12/600 = 2% porównaj z DS. A timer 0 reaguje, tylko Ty nie dostrzegasz różnicy 131 cykli na 10 minut -) Tą wartość to jakby nie tylko raz trzeba było wpisać. Albert
load timer0=250 to jest wartość początkowa timera
W tym kodzie masz ładowanie do licznika wartości początkowej, więc licznik zlicza Ci do 250, a nie do 256. MOżesz zrobić sobie 118 ale twedy z procedury obsługi przerwania wywal ładowanie do TCNT0 wartości początkowej.
No to przy 16 Mhz początkowa wartość Timer0 powinna mieć wartość 131 i wtedy otrzymujemy przerwanie dokładnie co 8ms. Dane z "pomocnika AVR" Ale to nie istotne. Wydaje mi się, że istotna jest obsługa przerwania od UART, bo jest w niej parametr "NOSAVE" i być może to powoduje problem. Taką obsługę stosujemy tylko jeśli chcemy ustawić flagę. Co do Load...
Raz jeszcze: Load timer służy owszem do załadowania wartości początkowej ale w postaci- "load timer0,250" wtedy odlicza on 250 cykli,ze znakiem równości używasz tylko jeśli dajesz polecenie "counter0=250" i wtedy w tajmer0 zostaje umieszczona wartość początkowa=250 czyli odliczy tylko 6 cykli do przepełnienia.
zumek Właśnie mam przed sobą książkę P. Marcina Wiazania (Programowanie mikrokontrolerów AVR w języku bascom) i cytuję za nią: Counter0 = 206 ' zapisanie licznika Timer0 wartości początkowej 206 To przypisanie jest równoważ następującej instrukcji: Load Timer0, 50 ' zapisanie di licznika Timer0 także wartości początkowej 206 Kurdę aż dziś odwiedziłem...
Autor ma ustawiona za duża częstotliwość multipleksu. Proszę zmniejszyć częstotliwość multipleksowania wyświetlacza. Zwiększyć preskaler i wpisać wartość początkową do timera0 np. Config Timer0 = Timer , Prescale = 256 : Enable Interrupts : Enable Timer0 Load Timer0 ,65 i dalej w obsłudze przerwania Co4ms: Load Timer0 ,65 i sprawdzić czy pomogło.
Wiedze na temat przerwań czerpałem z poradnika : http://std2.phys.uni.lodz.pl/mikroproces... kolega raz pisze ze load timer0 250 jest nie poprawny a potem pisze że poprawny wiec od czego jest zależne jaki czas jest po jednym przepełnieniu czy to ma 8ms lub 4ms jaki jest poprawny wzór na obliczenie jle ma być przepełnień...
Hmm. Dobrze napisałeś, że Tobie się wydaje, że obydwa Timery odliczają dobrze, a tak nie jest. Wydaje mi się, że chciałeś uzyskać przerwanie co 8ms ? Więc musisz po każdym przeładowaniu timera go ładować początkowa wartością. Czyli dla timer0 to będzie 6, a dla timera1 to będzie 57536. Ale i tak nie wiem czemu musisz używać dwóch timerów by generować...
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...
Na początku programu ustaw timer: [config timer0=timer,prescale 64'(na przykład) enable interrupts'(odblokuj przerwania) on timer0 obsluga_syreny'(nazwa podprogramu gdzie ma skoczyc w przerwanie) enable timer0 counter0=6'(wartość początkowa licznika,na przykład) ----------------------------------------... obsluga_syreny: .... ..... .... ... counter0=6'(na...
No widzisz, nie czytasz tego helpa. Timer się inaczej ładuje. Chcąc mieć początkową wartość timera0 równe 250 piszemy: Load timer0 , 6 Co do zmiany timera na Timer1 to trzeba wiedzieć, że ten timer jest 16 bitowy
Witam Wykonałem układ, który komunikuje się z PC przez moduł BTM-222. Komunikacja USART, asynchroniczna 38.400 kbps, 1 bit parzysztości, 1 bit stopu. Jeśli zadeklaruję na stałe, że wielkość bufora wynosi np. 30, i wysyłam z PC 30 znaków, to komunikacja działa bez zarzutu. Problem w tym, że chciałbym, aby program działał, przy różnej ilości odbieranych...
Load Timer0 = 45 - jak sądzę oznacza nadanie wartości początkowej timerowi. Oznacza to, że powinieneś załadować tę wartość do rejestru TCNT0. Zakładam, że funkcja inicjująca BASOM inicjuje go w tryb normalny (czyli mode 0). W funkcji przerwania: - Incr A, Incr B - po prostu dodaj jeden do zmiennych A i B lub wykonaj inkrementację - If A = 305 Then ......
Dzięki wielkie za pomoc. Doczytałem teraz w datasheecie, że jest takiego coś możliwe. Teraz rodzi się moje kolejne pytanie. Timer0/Counter0 ma tylko 1 przerwanie, generowane, gdy rejestr, tegoż licznika zostanie przepełniony, to zostanie wygenerowane przerwanie. Jeśli Atmega8 wykryje mi na pinie T0 stan wysoki, to mi inkrementuje rejestr TCNT0? Jeśli...
Chcę napisac własny program z wykorzystaniem Timerów. Na początek proszę o wytłumaczenie dlaczego w poniższym programie: 1. wykorzystano podzial częstotliwości zegara (po preskalerze 256) 250/125 zamiast wykonac jedno dzialanie? 2. uzyto wartość początkową Timera0 = 250 przed Petlą do Loop End . O ile wyjaśnienie podane przez Tomq jest błędne(!) Load...
Dla osób które chcą wykonać ten zegar od razu podpowiem, że smużenie to normalka. Proszę spojrzeć na program bascom autora. Prescaler 1, taktowanie wewnętrzne procesora 8Mhz. I proszę sobie obliczyć częstotliwość multipleksowania wyświetlacza. Przecież to idzie praktycznie na maksa. Powinno się zwiększyć preskaler i wpisać wartość początkowa do timera....
Wielkie dzięki Teedd, ale czy możesz mi jeszcze wyjaśnić o co tu chodzi, bo przecież instrukcja Load Timer0 = 25 powinna być tożsama z instrukcją Tcnt0 = 231. A przy okazji jeszcze jedno pytanko. Spotkałem się z tego typu zapisem: Timer0 = Timer0 + liczba (lub analogicznie Tcnt0 = Tcnt0 + liczba ), gdzie liczba to wartość początkowa wpisywana do licznika...
Witam, udało mi się coś wyskrobać i zrobiłem na razie sam generator częstotliwości, właściwie jakoś tam działa ale chyba napisałem to dookoła , może ktoś spróbował by to jakoś poprawić. Nie dodałem jeszcze generatora PWM, próbowałem ale nie wychodziło mi, chciałem taktować go z wejścia T1 ale nie udało mi się to, nie wiem jak go zmusic do tego żeby...
To nie jest ok: TCCR0B |= (1 << CS01)|(CS00); A w ogóle operacje |= na rejestrach sterujących są bez sensu. Jako początkujący na razie raczej "klepie" gotowe kody, jak działa to eksperymentuje, żeby skumać jak to działa. W większości przykładów, np. [url=http://mikrokontrolery.blogspot.com... jest...
Nie piszesz nic o pozostałych parametrach układu więc zakaładam, że uC chodzi na wewnętrznym RC=8MHz... Wygodnie jest wykorzystać timer1 (16-bit)... Mode 14 - fast pwm, wartość top (ICR1=10000), prescal=1... Przy takiej konfiguracji częstotliwość pwm wynosi ~800Hz, co dla żarówki jest aż nadto... Wyjście pwm PB1(OC1A)... Wypełnienie zwiększane o 1 co...
I dobrze. Aby zmieniać wypełnienie musisz uciec się do pomocy przerwania ( to wada ,ale za to 1 timerem możesz mieć 4 zupełnie niezależne PWM). A działać może to mniej więcej tak (przykładowo): Timer0 ustawiasz na najmniejszy oczekiwany okres (rozdzielczość). Ustawiasz stan początkowy i jego przełączenie w EMR. MR ustawiasz na oczekiwaną długość stanu...
Witam, Mam mały problem z napisaniem kodu tak aby ten program uruchamiał się za pomocą przycisku [syntax=basic4gl]Config Pinb.1 = Output 'linia pb1 jako wyjście Config Timer0 = Timer , Prescale = 256 'deklaracja timera jako czasomierza On Timer0 Przerwanie_co_2ms 'deklaracja jaka etykieta obsługuje Led Alias Portb.1 'alias dla wyjścia b.1 Dim Licznik...
Excray właśnie nad czymś takim myślałem. I nawet poczyniłem wstępne obliczenia po których wyszło mi że timer0 przy kwarcu 8MHz i prescaler ustawiony na 1024 przepełni się po 0,03276800s. Tylko jak wyliczyć ile muszę zliczyć tych przerwań aby wyszła 1s? Moje wyliczenia są kiepskie bo cały czas wychodzą ułamki. Pewnie trzeba ładować jakąś wartość początkową...
Mam oto taki problemik. Programik jest banalnie prosty i działa mniej więcej tak: Gdy zmienna (Wart) nie osiągnie 30 zostaje załączone wyjście Portc.0 . Po osiągnięciu tej wartości wyjście zostaje wyłączone i załącza się kolejne czyli Portc.1 . Podprogram kończy się na wyłączeniu wyjścia Portc.3 . To wszystko jest proste. Problemem dla mnie jest natomiast...
Powiedzmy że dla szukanych czasów 0.9 - 20ms najmniejszym "krokiem" regulacji będzie 0.08ms. Wtedy konfigurujesz Timer0 do pracy z preskalerem 64 i otrzymujesz 8MHz/64 = 125kHz czemu odpowiada czas 8us. Teraz wpisując do timera wartość początkową = 246 otrzymujesz 256-246=10 a zatem przerwanie od Timer0 zgłaszane będzie co 10x0.008=0.08ms. W obsłudze...
Witam próbuję wysterować silniki przez PWM, przeczytałem poradnik na mikrokontrolery.blogspot.com i z kodu zmieniłem porty, lecz dalej nic się nie dzieje ze silnikami... http://obrazki.elektroda.pl/9186829100_1... http://obrazki.elektroda.pl/4064646700_1... Wie ktoś jaka może być przyczyna lub co zmienić? Z góry dzięki.
Witam, Piszę program obsługujący diody umieszczone symetrycznie na obrzeżu koła. Diody mają działać tak, że przy obrocie koła świeci się tylko jego połowa. Pomiar dokonuje się jednym kontaktronem. Program powstał, testuje go na płytce uniwersalnej, a impuls pomiarowy wymuszam zbliżając magnes do kontaktronu. Niestety działa strasznie niestabilnie, a...
Cześć, właśnie próbuję opanować Timera0 w Atmedze8. Chciałem odmierzyć dokładnie jedną sekundę. Napiszę jak ja to widzę. Mikrokontroler pracuje na 12MHz. Użyłem preskalera 256, i mam 46875. A, że to duża liczba to podzieliłem przez 125, i dostaję 375. Czyli licznik musi 375 razy odliczyć 125 żebym dostał jedną sekundę. No to napisałem program: [syntax=cpp]#include...
Nie do końca tak (nie obroty wiatraka, wiatrak był tylko wzorcem bo nie mam w domu żadnego innego generatora o regulowanym wypełnieniu). Podpiołem sprzętowy PWM pod INT1 i teraz pokazuje dokładnie. #include <90s8535.h> #include <lcd.h> #include <stdio.h> charprzerw; unsigned int czas; interrupt [EXT_INT1] void ext_int1_isr(void)...
[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...
Może sie komuś przyda ... działajacy kod sprawdzałem testowalem niby wszystko działa czestotliwosc PWM = 123 Hz $regfile = "m8def.dat" $crystal = 8000000 Config Pinb.1 = Output 'Konfiguracja 4 pinów wyjściowych PWM Config Pinb.2 = Output Config Pinb.3 = Output Config Pinb.4 = Output Dim Wyp(4) As Byte 'zmienne wypełnienia Dim Licz...
...teraz pytanie takie w jakim czasie będzie się przeładowywał timer0 ? . No właśnie w jakim czasie?, podpowiem że jest to zależne od trwania cyklu zegarowego, od tego jaką ma wartość początkową timer i do ilu może zliczyć, oraz od ustawienia prescalera. Odnośnie kodu programu to sprawdź PW.
Witam, jako, że w szkole nie mam programowania nowych uc postanowiłem się tego sam nauczyć. Zainspirował mnie projekt prędkościomierza, więc wybrałem go. Jest to mój pierwszy program i dlatego też chcę zapytać czy ma on szanse na poprawne działanie. Sygnał z czujnika to sygnał z hallotronu, który odbiera sygnał co 1/6 obwodu koła (czyli 0.25m). Reszta...
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...
Witam Staram się zrobić odliczanie na przerwaniach - jak do tej pory nie używałem jeszcze przerwań, więc proszę o wyrozumiałość za banalne pytanie. A więc tak. Potrzebuję za pomocą Timera0 wprowadzić diodę w pulsację z częstotliwością 10Hz (to tak dla testu) Wszystko wydaje się w miarę proste. Skonfigurować T0 i przerwanie na ten zegar. A więc mam tak:...
Co do TIMERA0 proszę napisz dosłownie kawałeczek kodu $crystal = 1000000 Config Piny.x = 1 CONFIG TIMER0 = TIMER , PRESCALE = 8 Enable Interrupts Enable TIMER0 On Timer0 Dzwiek Timer0=193 Start Timer0 Do : Loop End Dzwiek: Timer0=193 Toggle Porty.x 'Na tym porcie powinien wygenerować się przebieg prostokątny o częstotliwości ok. 1kHz Return...
Spróbuj: $regfile = "m8def.dat" $crystal = 8000000 $hwstack = 32 $swstack = 8 $framesize = 24 Config Portd = Output Config Pinb.0 = Output Config Pinb.1 = Output Config Pinb.2 = Output Config Pinb.3 = Output ' ustawiam porty do saa1057 Dat Alias Portd.3 'SPRAWDŹ CZY DOBRZE ZDEFINIOWAŁEM Ena Alias Portd.2 Clk Alias Portd.1 'przyciski Ddrc =...
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]...
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ć...
Witam, Chciałem napisać program do liczenia 'sekund'. Jest to początek mojej drogi do zrobienia zegara. Problem jest taki, że po 5 minutach zegar spieszy już o 3 sekundy. Gdzie popełniłem błąd? Prescaler ustawiony na 1024, atmega na 8MHz na kwarcu wewnętrznym(może tutaj jest problem?), według informacji które posiadam przerwanie powinno być generowane...
Witam Mam sygnał z pinu PCF8583 (INT), który zmienia swój stan na przeciwny co sekundę. Chciałem napisać program, który zacznie liczyć impulsy (stan niski) doprowadzony z wyjścia PCF8583 do nogi procesora, jak policzy np. 5 takich impulsów, to zaświeci led. Pierwotnie miało to służyć do opóźnienia włączenia podświetlenia w LCD, ale użyłem Waitms i osiągnąłem...
Oto kod... lecz jeszcze nie sprawdziłem czy działa. $crystal = 8000000 $regfile "attiny2313.dat " Config Timer0 = Timer , Prescale = 64 Config Timer1 = Pwm , Pwm = 10 , Prescale = 64 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down Config Int0 = Rising On Int0 Impuls On Ovf0 Przepelnienie Enable Interrupts 'T0 - sumaryczna wartośc timera0 Dim...
A moje pytanie, czy przy takim algorytmie, pomimo tego że nie wykorzystuje przerwań a na pinie mam częstotliwość którą chciałem procesor będzie miał jeszcze "czas" na po prostu realizację programu ? Czy tak skonfigurowany timer wykorzystuje procesor ? Widzę że timery to twoja słaba strona, więc napiszę ci troche ... Wszystkie timery w AVR mają możliwośc...
Licząc, że jeden impuls trwa dokładnie 1 us i przy timerze zliczającym do 10 (startuje od 246 - Timer0) to po przekręceniu się timera uzyskujemy czas 10us. Przy długości impulsów w podanym zakresie timer powinien się przekręcić od 100 do 200 razy. Niestety program zlicza mi od 12 do 24 przekręceń tylko. Gdzie robię błąd ??? Nieprawidłowe obliczenia...
Timer0 ma też tryb CTC i przy ustawieniu prescale 1024 i odpowiednim ustawieniu rejestru OCR0 da się z niego uzyskać 100Hz. Wtedy można użyć Timer1 do liczenia.
Bardzo prosty wyłącznik czasowy spełniający wszystkie Twoje założenia: http://www.elektroda.pl/rtvforum/viewtop... Może nie jest zbyt miniaturowy ze względu na zastosowane elementy, ale z powodzeniem można zastosować mniejsze elementy. Może prawie analogowo, 555 (8-pinowy) w wersji SMD CMOS? Niestety do czasu 1min potrzebuje...
3. F_CPU definiuj w opcjach, a nie w kodzie: http://mikrokontrolery.blogspot.com/2011... 4. W jakim celu zerujesz TCNT2 w przerwaniu od przepełnienia licznika? ad 3. - w swoim kodzie mam tą linijkę zakomentowaną, ale źle skopiowałem ad 4. - z rozpędu, skopiowałem jej obsługę z timera zerowego i zmieniłem żeby miała wartość...
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...
Cześć. Z tego co widzę tak na szybko twój timer jest włączony cały czas wywal z 6 lini kodu to enable timer0, druga sprawa nie widzę tam nigdzie ładowania wartości początkowej do timera, chyba że miałeś taki cel. Timer będzie liczył w kółko. A na koniec po co Ci ta zmienna sekunda w obsłudze przerwania od timera jeśli ona nic nie robi ??? Aha i myślę(czasem...
Ten "ogrom zajmowanego miejsca" wynika z dołączenia przez kompilator, linker biblioteki zawierającej procedurę _delay_ms(); Wydaje mi się ze funkcja zadziała za "szybko" jak na 10 próbek. Żeby nie dokładać bibliotek możesz skorzystać z własnoręcznie napisanej funkcji opóźniającej, używając np timer0, timer1. Mam pod ręką skrawek takiej prosto napisanej...
Cześć Chciałem prosić kogoś o wskazówkę jak poradzić sobie z problemem wyświetlania wartości "Wartosc2" poniższego kodu. Mój problem polega na tym że w momencie naciśnięcia przycisku ( w programie to Up, Dwn ) gdy na wyświetlaczach jest np 1.1 wyświetlacze "resetują" się i wskazują wartość 00 po zwolnieniu przycisku wyświetlona zostaje poprawnie kolejna...
Poniżej zamieszam kod w Bascom pisany dla zestawu uruchomieniowego ZL11AVR. Dioda podczerwieni dołączona do Pinb.3. Chyba najważniejsze z tego, to komenda wyzwalająca migawkę: Sonysend &HB4B8F , 20 (Sony alpha korzystają z 20 bitowego protokołu SIRC) W razie pytań postaram się pomóc. [syntax=basic4gl] 'Program zegara wykorzystującego przerwania...
DEX - no cóż dlatego, bo taki układ już jest i nic nie da się teraz zrobić. Kolumny i wiersze są podpięte bezpośredni pod wymienione porty.. Więc bezpośrednie wykorzystanie zewnętrznego przerwania nie wchodzi w rachubę. mariuszlorenc - no wlasnie może o to mi chodzi, ale jak to się robi, bo to moje naprawdę pierwsze doświadczenie z Timerami, flagami...
Witam !! Napisałem program na sterowanie pilotem. Nie działa mi set Led_2. Przycisk 2 z pilota wykonuje warunek ale nie setuje portb.2 ? Co jest [syntax=c] $regfile = "m8def.dat" 'rejestry mikrokontrolera atmega8 $crystal = 8000000 'częstotliwość taktowania mikrokontrolera $baud = 9600 Config Portb = &B11111111 : Portb = &B00000000 'cały portB jako...
A może wyłumaczyć mi ktoś tak jaśniej niż whelpie bascoma ;) co to jest ten prescaler i co on dzieli. Może tak po kolei jak twój program widnieje: 1. Jeżeli PORTB jest przeznaczony do obsługi LCD to nie konfiguruj go w ogóle w stylu jaki podałeś w pierwszym poście. Config Portb = &B11111111 : Portb = &B11111111 ===> źle!!! Może to powodowac zakłócenia...
Timer zawsze odmierza do końca swojego zakresu. Timer0 oraz Timer2 są 8-bitowe, czyli liczą do 256, natomiast Timer1 jest 16-bitowy i liczy do 65536. Czyli jak takiemu Timerowi1 ustawisz wartość początkową 5536, to on policzy 60 000 taktów (do 65536) i potem wygeneruje przerwanie, czyli skoczy do odpowiedniego fragmentu kodu który mu zadasz (kod obsługi...
Szukałem odpowiedzi na to pytanie, lecz nie znalazłem, wiec postanowiłem rozpocząć nowy temat. Otóż mam problem z liczeniem kanałów DMX, a dokładnie z timerem0 którego używam w tym celu. Mikrokontroler to jak w temacie ATmega8, częstotliwość taktowania 8 MHz, ustawienia sprzętowego UART 250 000 baud. Według specyfikacji DMX najpewniej rozpoznać nowy...
Możecie rzucić okiem na kod? Zamiast Timera 2, zastosowałem Timer0 z przerwaniem co 0,008 s. Aby uprościć kod dodałem 2 funkcje. Niestety to spowodowało, że ani dioda nie świeci, ani wyświetlacz nic nie wyświetla. [syntax=c] #include <stdlib.h> #include <avr/io.h> #include <util/delay.h> # include <math.h> #include <avr/interrupt.h>...
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);...
Witam panowie od razu podkreślę że jeszcze uczę się bascoma więc proszę nie krzyczeć i nie usuwać tego postu do kosza Siedzę już nad tym 3 dzień i efekt mojej pracy nie najgorszy ale mam parę pytań po pewnych rzeczy nie rozumiem i nie mogę rozwiązać. Więc tak założeniem był pomiar temperatury przez ds18b20 wyświetlenie je na LCD i 4 wyświetlaczach 7...
FastAVR jest mocno związany z asemblerem i daje bardzo efektywny kod wynikowy - Bascom się chowa przy nim. Ale tak jak w asemblerze trzeba pamiętać o deklaracji i inicjacji każdej zmiennej. Pierwsze 3 linie definiują typ proca, głębokośc stosu, prędkość zegara - ważne dla symulatora. Definiuję przerwanie od Timera0 i ustalam tryb pracy Timera0 Definiję...
Witam. Mam problem. Mianowicie próbuje zmusić Timer0 do działania z kwarcem zegarkowym (w trybie asynchronicznym). Używając głównego kwarcu Timer0 działa. Poniżej fragment kodu odpowiedzialny za inicjacje timera: TCNT0 = timer0; // ustawienie wartosci początkowej ASSR |= (1<<AS0);//wlaczenie trybu asynchronicznego TIMSK |= (1<<TOIE0);...
Koledzy zapalanie zera potem 1 przy przejściu z 9 na 10 było spowodowane złym ustawieniem Timer0 tera wszystko działa jak chciałem . ........... mam nadzieję że ktoś się wypowie składni programu lub optymalizacji . Mimo że program ten wydaje sie byc poprawny , bo jakoś tam pracuje, ma jednak kilka błędów. Na pierwszy rzut: 1.Deklarujesz zmienne ‘E’...
Dopisalem reszte polecen z linku i mam blad ./main.c: In function 'main': ../main.c:22: error: 'timer_start' undeclared (first use in this function) ../main.c:22: error: (Each undeclared identifier is reported only once ../main.c:22: error: for each function it appears in.) ../main.c: In function '__vector_9': ../main.c:34: error: 'timer_start' undeclared...
Procesor uPC Mega16 z zegarem ustawionym na 8MHz timer: 125ns*1024*200= ok 26ms Config Timer0=Timer , Prescale = 1024 On Timer0 Przyciski . . potem . Enable interrupts Enable Timer0 Load Timer0, 200 Do Program główny Loop End Przyciski: Load Timer0, 200 kod przycisków incr licz if licz=19 then ' flaga co ok 0,5 s flaga_500ms=0 ' w warunkach początkowych...
Jedna uwaga! Za każdym razem, po wystąpieniu przerwania, następuje programowe ładowanie do licznika wartości początkowej, określającej częstotliwość przerwań. Należy pamiętać, że od momentu wystąpienia przepełnienia licznika (zgłoszenia przerwania) do momentu przyjęcia przerwania i jego obsłużenia upływa jakiś okres czasu (kilka - kilkanaście cykli...
Dzięki za kalkulator i wyjaśnienie Napisałem kod z timer1 do odmierzania odcinków czasu po 10 sekund. 10 sekund świeci led i następne 10 sekund nie świeci i tak w kółko. Oto kod: [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 1000000 Config Pind.0 = Output Const Timer1 Reload = 9765 Config Timer1 = Timer , Prescale = 1024 Load Timer1 , Timer1 Reload...
Do tej pory troszkę bawiłem się AT89C2051. Wykonałem pewien układzik który za pomocą Timera0 zliczał impulsy na wejściu T0 podczas 1sekundy którą odmierzałem Timerem1. Jako, że musiałem przeprogramować 51 do innych celów chciałbym go zastąpić Attiny2313 bo mam dwie sztuki. Zacząłem czytać książkę Dolińskiego aby wykonać program ale mam pewne problemy....
Przepraszam za dłuższą nieobecność. Nie mając nic nowego (i mądrego) nie pisałem. Ale w międzyczasie polutowałem zestaw startowy, a ostatnio napisałem inny program, który umożliwia (w zamyśle) liczenie dokładniej częstotliwości dla "paczki" impulsów, tym razem około 500 Hz. Wiem, że to dosyć skomplikowany tok myślenia, pewnie można to zrobić prościej,...
na każdym który napiszę jest tak samo, w nowym temacie powyżej podałem ustawienia fuse bitów, zaraz wkleję kawałek na którym teraz się bawię Dodano po 4 to kod na którym teraz się bawie '***************************************... '-------------------- konfiguracje ----------------------------------------... $regfile...
problem mój polega na nieprawidłowym wyswietlaniu cyfr . o ile w zakresie 0-99 wszystko jest ok., to powyżej 100 ma same zera : wyswietlacz ma 3 cyfry led-7-segmentowe i w założeniach ma liczyć czas od 0 do 999 sek pełny kod: '$sim $regfile = "m8def.dat" 'informuje kompilator o pliku $crystal = 8000000 'informuje kompilator o Config Portd...
...... ten wpis zamienię na: Load Timer0 , 144 - czyli tak aby TIMER0 zliczał do 256, ale przy załadowaniu na początku liczby 112. I chyba będzie dobrze... Wygląda że nie w pełni zrozumiałeś cały sens różnicy zapisu instrukcji dla timera. Tak jak pisałem wcześniej, instrukcja: Load Timer0 , 144 jest dla kompilatora wystarczająca, nie wymaga dodatkowego...
Mirekk36 Co do działania samego programu to trafiłeś w sedno:) Na INT0 ma podawaną szpilkę z detektora zera sieci. To przerwanie ustawia wartość w Timer0 i uruchamia go, a po dotarciu do jego przerwania wykonuje się ten kawałek kodu: Triac: 'program przerwania Timer0 Stop Timer0 'zatrzymanie Timer0 Portb.2 = 1 'wystawienie sygnału na moc3022 Waitus...
Witajcie, mam problem z odczytem wartości z 2 kanałów ADC. Procesor to atmega32. Używam Timer0 żeby przełączać kanały, a na wyświetlaczu wyświeltane są 2 wartości, ale obydwie pokazują to samo- odczytywany jest tylko jeden kanał Inicjalizacja ADC [syntax=c]void ADC_init() { // ADC ADCSRA = (1<<ADEN) |(1<<ADPS0) | (1<<ADPS2) | (1<<ADSC);...
Witam! Postanowiłem przetestować tryb asynchroniczny timera0 z podłączonym kwarcem 32768 Hz na płytce #include <avr/io.h> #include <stdlib.h> #include <avr/interrupt.h> #include "HD44780.h" volatile int time=0; int main (void){ TCCR0|=(1<<WGM01)|(1&l...
Program nadal nie działa, palą się na stałe tylko diody 1-4. Może źle ustawiam parametry przy inicjalizacji timera0, ale nie wydaje mi się, gdyż robię to z manuala od ATmega8. Będę musiał uzupełnić później te deklaracje w mega8.h, gdyż rzeczywiście kod jest bardziej przejrzysty. A deklaracje sei i cli w tej postaci jaką podałeś przechodzą kompilację...
Dzięki kolego za kod, widzę że jest to kod obsługi jakiegoś zegarka, bardzo podobny kod znajduje się u M.Wiązania. 'Program multipleksowego sterowania czterema wyświetlaczami '7-segmentowymi LED poprzez dekoder 4543 'cyfra załadowana do A będzie wyświetlana na wyświetlaczu 1 'cyfra załadowana do B będzie wyświetlana na wyświetlaczu 2 'cyfra załadowana...
nie pamiętam bardzo testowałem to na konkretnej pompie dotąd aż za bardzo sie nie grzała a podawała prawidłowo paliwo podaje kod jakiś znalazłem z pierwszych prób może się ktoś pokusi o poprawki jeszcze kilku zapaleńców i można by wrócić do projektu chociaż czasu brak Dodano po 16 Jednak teraz bym pozmieniał elektronikę gdyż dużo zależny od tranzystorów...
Odczytywać temperature po ustawieniu określonej flagi w przerwaniu. Kawałek kodu z mojego programu kiedy robiłem to jeszcze w Bascom Dim Flaga As Byte : Flaga = 0 On Timer0 Int_timer0 ' wskazanie do obsługi przerwania Timer 0 Const Factor = &H6A 'częstość wywołania przerwania timera Config Timer0 = Timer , Prescale = 64 'ustawiona na ok. 1,6ms Timer0...
Hej. Zbudowałem sobie wyświetlacz widmowy, tylko po wgraniu właściwego programu nie działa jak należy. Ale gdy wrzucę do procka coś prostego np. żeby mrugał naprzemiennie diodami to wszystko działa jak należy i zero mrugania wiec wnioskuję że prędkość obrotowa jest wystarczająca. Mój procesor to Atmega 8, wyświetlacz ma 8 diod 6 diod jest podłączonych...
Wkradła się pewna nieścisłość. Racja: nie "gdzie" tylko "kiedy" występuje przerwanie. Niestety to nadal nie rozwiązuje mojego problemu, dlatego że rozumiem przerwanie tak jak to opisałeś a mimo wszystko zachowuje się to wszystko nieco inaczej... Jeszcze raz: [syntax=c] //definicja LED1 (do którego pinu podłączony LED1) #define LED1 PC0 //definicja LED2...
Nie umiem odczytać temperatur z ds18b20. Rezystor podciągający jest(4.7k), VDD i GND też są podłączone. Linia danych podpięta jest pod pb.7 Aha wyświetliłem sobie też wartości odczytanych bajtów, zarówno 1szy jaki drugi mają wartość 0xFF. podaję kod może koś znajdzie błąd. Dim Cyfra(10) As Byte Cyfra(1) = &B00000101 Cyfra(2)...
Witam. Nie mam już pomysłu na rozwiązanie mojego problemu. Program działa, ale przy przesuwaniu tekstu w tablicy do prawej AVR GCC generuje dużo mniejszy kod (1002 bajty) niż jeśli zakomentuję tę część pętli głównej programu (1366 bajtów). Kompilacja przechodzi bez warningów w obu wypadkach. Dodatkowo po zaprogramowaniu układu program nie wraca do głównej...
Dzisiaj na stronie elportalu znalazłem komentarz na temat bascoma i ATtiny. Bascom nie obsługuje prawidłowo ATtiny. Start Timer0 czy stop Timer0 nie działa (przynajmniej dla ATtiny2313). Trzeba wpisać do odpowiedniego rejestru właściwą wartość żeby timer wystartował itp. Trzeba się zapoznać z dokumentacją. Rejestry sterujące timerami są podzielone na...
W jaki sposób napisać obrotomierz 0-10000 obr/min z dokładnością około 50 do 100 obrotów? Potrzebuje zrobić regulator obrotów silnika prądu stałego-czyli PWM ze sprzężeniem zwrotnym zrobionym na hallotronie. Ale najpierw musi być zrobiony obrotomierz, który czuwa nad obrotami-więc musi bardzo często sprawdzać ilość obrotów. Najlepiej zliczać czas jednego...
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)...
Lekko przerobiłem kod z tej strony: http://www.robotyka.net.pl/mikrokontrole... na taki: [syntax=c] #define F_CPU 1000000 //ustawienie oscylatora na 1MHz #include <avr/io.h> //dołączenie podstawowej biblioteki #include <avr/interrupt.h> //dołączenie biblioteki z przerwaniami char licznik = 0; //zmienna dla licznika programowego...
Witam, Mam problem z obsługą DS1820. Linia danych podłączona do portu P3.2. Mianowicie próbuję zrestartować magistralę, przedziały czasowe stosuję tak jak jest podane w TMOD=0x01; //timer0, tryb1, 16bit TH0 = 0x00; TL0 = 0x01; i wystartowaniu licznika TR0=1; to po ustawieniu flagi przepełnienia TF0=1 będę miał odliczoną 1mikrosekune? Powiedzmy coś w...
Dzięki wszystkim za opinie :D W odpowiedzi na wasze pytania, płytki robię metodą termotransferową z użyciem folii, projektuje w Eagle'u, serwa tak jak ktoś napisał na allegro chodzą po 23zł i właśnie na allegro je kupowałem, niezła cena jak za takie małe i dość silne serwo. Tolerancja odstępu puknięć układu jest wystraczajaca, na początku opracowałem...
Witam kolegów, głowię się już ładnych parę dni nad taką kwestią w procku: zrobiłem na Atmedze8 zegarek. Zewnętrzny kwarc 4MHz. Timer1 zajmuje się odliczaniem równych sekund, Timer0 osługą wyświetlania itp. Na czym polega problem? Zegarek spóźnia się, wg moich obliczeń na symulatorze w AVR Studio, o 0,345s na dobę. Nie jest to szok ani porażka, raptem...
wartość początkowa bascom początkowa wartość prędkość początkowa
zyxel aktualizacja makro otwiera lokalizacje wartość wierszu
Przebicie na drzwiach lodówki Samsung - przyczyny Spawarka Weco 150TP iskrzy, ale nie spawa - przyczyny