Jaki masz programator? Ściągnij sobie lepiej MkAvrCalculator. Jest to naprawdę bardzo przyjemny programik i nie ma możliwości abyś źle ustawił fusebitów i zablokował procka. W bascomie ustawianie fusebitów jest dość trudne i może przysporzyć sporo kłopotów. Pozdrawiam.
"Tą" liczbę masz zapisaną w zmiennej Liczba_przerwan_tim0 a nie w ośmiobitowym (czego się chyba obawiałeś) rejestrze timera0 - więc nie ma problemu.
Tak poza tematem, czy to sie nie pisze "Load Timer0, 100" ? i zrob timer0=cos na starcie i w przerwaniu.
Nie bardzo jest co komentować, bo najważniejszej procedury (ISR) nie pokazałeś. Jedno jest pewne: Taka konstrukcja i wywołanie procedury 800_ms zakończy się opóźnieniem programu głównego o parę mikrosekund i tyle. Zmienna Licz_8ms będzie się inkrementować tzw. "sobie a muzom". Co więcej, nawet jakbyś poprawnie skonstruował tą procedurę to dalej zamiana...
[syntax=basic4gl]$regfile = "m8def.dat" $crystal = 10000000 Config Timer0 = Timer , Prescale = 128 Load Timer0, 5 On Timer0 czas Enable Interrupts Enable Timer0 Do If Pinc.0 = 1 Then Start Timer0 end if If Pinc.0 = 0 Then reset portd.1 end if Loop czas: set portd.1 stop Timer0 return [/syntax] Tak na szybko,... nie testowany. Zrobić możesz wszystko,...
Spróbuj skompilować ten programik pod konkretny mikrokontroler. W Bascomie domyślenie masz ustawione AT90S2313. Użyj dyrektywy: $regfile = "m8def.dat" - dla ATMega8, $regfile = "2313def.dat" - dla AT90S2313, Może pomoże :)
0vf0 jest to przerwanie od licznika Timer0 po jego przepełnieniu- można napisać Timer0.
Spróbuj jej na początku dać disable timer0 , a na końcu enable timer0.
Timer0 w Atmega8 może pracować tylko w trybie OVERFLOW (przepełnienia).
A gdzie masz polecenie Start Timer0?
Jeszcze po odblokowaniu przerwań dopisz Start Timer0 .
Config Timer0 = Timer , Prescale = 32 Enable Interrupts Enable Int0 On Int0 Przerwanie1 Nosave Cls 'tutaj wysyłasz impuls pierwszy start timer0 Do : Loop Przerwanie1: stop timer0 'tutaj co ci sie podoba lcd "odleglosc:" ; wynik 'co tam jeszcze chcesz 'wysyłasz impuls start timer0 return End
Zegarek oprócz funkcji wyświetlania czasu ma pokazywać temperaturę i mieć możliwość sterowania z pilota (RC5). Normalnie (by default) Bascom używa Timer0 dla RC5. Jeżeli Timer0 masz zajęty do inego celu, więc potrzebujesz skonfigurować Timer2 dla RC5. e marcus
To jeszcze schemat poproszę :D
witam! mam taki problem: chcę zliczać zewnętrzne impulsy, timer mam skonfigurowany w taki sposób: config Timer0 = counter, edge = falling, noice cancel = 1, na portd.4 mam ustawiny wewnętrzny pull-up i dodatkowo zewnętrzny rezystor podciągający 4,7k.do masy kondensatorek 100 nF. Licznik oczywiście mi liczy ale zlicza też przypadkowe impulsy. widać to...
A może byś kod pokazał? Przeciez napsal ze ma bledny kod .... Load Timer0 = 144 co winno byc: Load Timer0 , 144 albo jezeli preferuje zapis ze znakiem rownosci to: Timer0 = 112 ' gdzie dzialanie (256-144=112) wykona Bascom. e marcus
Nie widzę u Ciebie nigdzie polecenia START Timer0, spróbuj to dodać zaraz po Enable Timer0 :D
Kod wydaje sie ok, przy czym moje walki z odmierzaniem czasu mowia ze trzeba brac poprawke na Bascoma /i to duuuza/. Sprawdzilem pod symulatorem (Bascom) i program dziala, w realnym procku pewnie czasy sie rozjada.
Witam. W tych dwóch liniach kompilator zgłasza ci błędy bo to nie są polecenia z Bascom AVR tylko z Bascom 8051. Dlatego Bascom AVR ich nie rozpoznaje.
Load Timer0 = 100 Niewłaściwa składnia. Ma być: Load Timer0 , 100 albo Timer0 = 155
Skopiowałem, skompilowałem, wgrałem. Reasumpcja przedwczesna. Co w zasadzie ma wyzwolić to opóźnienie? Co za pomysł konfigurować zezwolenie na obsługę przerwania od przepełnienia Timer0 w pętli głównej?
Poi pierwsze. Do BASCOM-a jest pomoc - także po polsku, której to zresztą jestem autorem. Wersję on-line (beta) znajdziesz na mojej stronie WWW. Jak one działają? Zliczają impusy. Albo z prescalera, albo z zewnątrz. Patrz nota katalogowa. W którą stronę zliczają? Zwykle liczą w górę. W trybach PWM liczą też w obie strony. Patrz nota katalogowa. Jak...
Już kiedyś się na tym złapałem przy pomiarach oscyloskopem :) Teraz będę chciał te 22kHz załączać na czas 0,5ms a następnie przerwa 1ms czy do tego mogę użyć przerwania od Timer0 ?? dzięki za wcześniejszą pomoc
Tylko jak teraz dopisać tą konfiguracje led? Tak jak chcaiłem z rgb zrobić
Witam, potrzebuje prostego programu który zliczy ile razy na sekundę wciskany jest przycisk. Np na jednym z portów pojawi się 0 kiedy przycisk zostanie wciśnięty, program ma zliczyć ilość impulsów przez sekundę i zwrócić daną do zmiennej. Proszę o pomoc lub podpowiedź. Niestety jestem początkujący i niezbyt rozumiem Liczniki-Czasomierze Timer0 i Timer1....
Czy zmieniałeś fabryczne ustawienia fusebits?Jeżeli nie to masz odpowiedż.[url=http://mirley.firlej.org/...
[syntax=basic4gl] $regfile = "m8def.dat" $crystal = 4000000 Dim Co4ms As Byte Dim Flaga As Bit Config Pinb.1 = Output Config Timer0 = Timer , Prescale = 256 On Timer0 Zegar Enable Timer0 Start Timer0 Co4ms = 0 Flaga = 0 Portb.1 = 0 Do If Flaga = 1 Then Flaga = 0 Incr Co4ms End If If Co4ms = 250 Then Co4ms = 0 Toggle Portb.1 End If Loop Zegar: Set Flaga...
Witam ogarnąłem już dużo na temat programowania w bascom, tylko mam kolejny problem, mianowicie chciałbym zaprogramować obsługę serwa pilotem nadającym w RC5 lecz gdy połączę obsługę rc5 i serwa mam takie błędy i nic nie działa: ........ Pojedynczo programy działają ok. ................. Rc5+ servo (nie działa) Pozdrawiam. Zauważ że zarówno 'Config...
Kawałek kodu, który powinien Ci pomóc z odmierzaniem czasu: Odmierz_1s: Load Timer1 = 12500 Incr Licz_10ms If Licz_10ms = 10 Then Licz_10ms = 0 End If Return Zlicz: Incr Czestotliwosc Return Odmierza 1s, a potem zlicza ilość przerwań na timer0. Przerób na swój kwarc.
Witam. Zmień zapis Load Timer0=250 na Load Timer0,250
Dziwne, że Bascom nie zgłosił błędu. Moim zdaniem powinno być: Load Timer0, 5 albo Counter0 = 5 Brakuje również Start Timer0, ale może Bascom i tak go uruchamia.
Co do wyłączenie światła po 30 sek. Dodaj dodatkową zmienną bit która będzie ustawiana np: na 1 po wyłączenia światła przez timer po 30 sekundach a dzięki niej nie będzie ponownie włączane światło przez wciąż otwarte drzwi (stan niski na wejściu uC). Dopiero zamkniecie drzwi ( stan wysoki na wejściu uC) spowoduje zmianę tej zmiennej na 0 dim 30SEK as...
trzeba 4 postow na elektrodzie, zeby w koncu zabrac sie za datasheeta... niezle. 4\/3!! Takie rzeczy tylko w Bascomie A co ma Bascom do fuse bitów?
Ale która konkretnie, czy Enable interrupts, czy Enable Timer0, czy oba na raz? Moim zdaniem to kolejny bug bascoma, znów może jakieś pokręcone rejestry, itp. Dokładnie problemu zidentyfikować nie mogę, bo takich procesorków nie mam, ani czasu tez zabardzo na takie badania. Jedyne co mogę doradzić to: a) zrobienie własnoręcznie przejściówki m8515/m32...
A tak w szczególe to na TIMER0 nie ma PWM w M8 . Jest natomiast na TIMER2
Proszę: [syntax=basic4gl] $regfile = "" $crystal = Config Portb = Output Config Timer0 = Timer , Prescale = 1 Enable Interrupts Enable Timer0 On Timer0 Int_pwm Dim Pwm(4) As Byte Dim Pwm_ct As Byte Pwm(1) = 32 Pwm(2) = 64 Pwm(3) = 96 Pwm(4) = 128 Do Loop End Int_pwm: Incr Pwm_ct If Pwm(1) > Pwm_ct Then Set Portb.0 Else Reset Portb.0 If Pwm(2) > Pwm_ct...
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...
Niestety ledwo w bascomie się orientuje a w C to niestety... A jak to w bascom'ie miałoby to wyglądać. Rozumiem, że ma to być oparte o Timer0?
Po Config Timer0 wpisz dodatkowo TCCR0 = 4 Config Timer0 = Timer , Prescale = 256 Tccr0 = 4 Tylko musisz coś zrobić z START TIMER0 i STOP TIMER0 bo one przywrócą wartość po CONFIGu i program dalej nie będzie działał. Najprościej będzie usunąć te instrukcje. dodano 20 Sie 2008 08:05 Mail z opisem błędu poszedł już do MCS Electronics. Zbaczymy jaka będzie...
Piszecie, piszecie a nikt nie zobaczył jaki SYF jest w przerwaniu: [syntax=basic4gl] Wyswietl: For N = 1 To 4 Step 1 Portb = Lookup(n , Katody) Portd = Lookup(l(n) , Tablica) Waitms Czas Next N Load Timer0 , 125 Return [/syntax] Zjechaliście go za Waitms i słusznie, ale zobaczcie jak magicznie zrobił multipleksację na For-Next. Jajca niesamowite. Rekinisko,...
Mam takie coś. Co jest nie tak? $regfile = "m8def.dat" $crystal = 8000000 $sim Config Timer0 = Timer , Prescale = 64 Config Portd = Output Portd.0 = 0 Portd.1 = 0 Portd.2 = 0 Dim Sekundnik30 As Byte Dim Minutnik As Byte Dim W As Byte Led1 Alias Portd.0 Led2 Alias Portd.1 Led3 Alias Portd.2 Stop Timer0 Timer0 = 0 Do Start Timer0 Wait 1 Led1 = 1 Wait...
Do drasmen: jeżeli chcesz aby układ zadziałał musisz przestawić fuse bity na wew. generator np. 8MHz a do pinów gdzie podłączasz kwarc musisz wpiąć kwarc zegarkowy 32.768kHz. Program dla autora tematu: 'Program wykorzystujący przerwanie od timera0(8 bitowego) generowane co 8ms 'jeżeli przerwanie zostanie wywołane 125 razy, otrzymamy 1 sekundę...
a możesz jakiś najprostszy przykład podać odmierzenia za pomocą timera np. 1 sekundy, próbuje odmierzyć 1 sekundę ale nie bardzo umiem posłużyć się timerem ustawiłem timer0 tak: Config Timer0 = Timer , Prescale = 256 ale dalej nic nie wymyśliłem
A czy przypadkiem nie powinno być Load Timer0, 111 Oraz Toggle PORTB.1
Chodzi mi zamiast tego "wielkiego przecinka" użyć kropkę dziesiętną wyświetlacza drugiego :) Jeśli odbiornik jest podłączony z któryś wejść INT to możemy RC5 zrobić na przerwaniu. I dostaniemy Timer0, który posłuży do PWM.
Ach, jeszcze jedno, w Bascomie nazwy zmiennych oraz etykiet nie mogą się zaczynać od cyfry (2ms).
Excray a co Masz na myśli pisząc "w funkcji wpisać"? Trochę nie rozumie tego co Napisałeś. Pisze program w Bascomie.
Config Hitag = 64 , Type = Em4095 , tymczasem w dokumentacji : syntax for EM4095 prescale - The pre scaler value that is used by TIMER0. A value of 8 and 256 will work at 8 MHz.
A możesz napisać, co to za błędy. Prawdopodobnie dotyczą timera. Timer0 8515 i timer0 attiny13 to nie zupełnie to samo i stąd te błędy :cry: . Czasami też używam bascoma, ale w kwestii poleceń typu "config", to w ogóle mu nie wierzę i po prostu trzeba wziąć do ręki dokumentację procka i samemu odpowiednie rejestry poustawiać :D
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...
He..He.. W książce kilkanaście rozdziałów wcześniej napisali. „W mikrokontrolerach AVR nie jest, zatem możliwe swobodne ustawianie priorytetów źródeł przerwań, tak jak to jest np. w 8051. Czasami może zdarzyć się, że podczas obsługi jednego z przerwań potrzebne będzie obsłużenie innego przerwania.”.. bla..bla..”Wykrycie przez odbiornik...
Masz błąd setki razy omawiany: Load Timer0 = 250 Zajrzyj do helpa i sprawdź jeszcze raz skladnię tego polecenia. Load Timer0, 250 lub Timer0 = 6 edit. Sorry pomyłka już późno było. Teraz wartości są poprawne.
Wielkie dzięki ;) Rezystor całkowicie rozwiązał problem. Moze i rozwiazal jeden z problemow i to nie calkowicie. Popatrz na swoj kod: Licz: Incr Przerw0 If Przerw0 = 3125 Then Incr Setne Czy na pewno beda to setne sekundy? Druga sprawa to jest bledem umieszczenie startu STOPERA w "Do ... loop, uzaleznione od stanu pinu. Od momentu nacisniecia przycisku...
Witam , dzięki za podpowiedź :) jeśli chodzi o datascheet, to przeglądałem, ale nie od razu trzeba pojąć to w mgnieniu oka :) . Propozycja ZbeeGin wydaje się dużo prostsza i przejrzysta. zrozumiałem zasadę działania takiej konstrukcji, Timer0 ma być generatorem PWM a Timet1 ma odmierzać odcinki czasu i przepełnienie wysyłać na końcówkę taktującą Timer0....
Config Portb = 63 : Portb = 63 Config Timer0 = Timer , Prescale = 1 Enable Interrupts : Enable Timer0 : On Timer0 Time Do Loop End Time: Timer0 = Zmienna Toggle Portb.3 Return Zmieniając wartość zmiennej "Zmienna" zmieniać będzie się częstotliwość impulsów.
A sprawa płytki , czy wszystko jest na niej dobrze połączone. Nie jestem w stanie sprawdzić na układzie próbnym ,nie posiadam wyświetlacza matrycowego. Jeśli płytka jest ok , to zmniejsz maksymalnie prędkość procka, prescaler,Timer0 abyś widział jak kolumny zapalają się bardzo powoli
Proszę bardzo: Config Timer0 = Timer , Prescale = 256 On Timer0 Odmierz_8ms Enable Interrupts Enable Timer0 Counter0 = 6 .... Odmierz_8ms: Counter0 = counter0 +6 .... instrukcje return
Oczywiście poszukam, chodziło mi tylko o to czy do obsługi przycisku powinienem zarządz do roboty Timer0, czy można wykorzystać np któryś z używanych juz Timerów?
Witam. .............. Program testowy ma działać tak, na początku na sekundę wyświetla 36 na wyświetlaczach (i to zawsze się dzieje), później ma liczyć od 00 do 99, i tak w kółko. Pozdrawiam Zmieniłem trochę twój code. -Nie testowany.... (tylko symulator)........ [code][syntax=basic4gl] ' Example for 2 digit LCD display (Common Anode) ' Anodes are...
Proszę rzucić okiem na dokumentację ATMega32 w sekcji Timer0/Counter0 and Timer1/Counter1 Prescalers , rys. 39 i porównać sobie z rys. 31 w tej samej sekcji w dokumentacji ATMega8. Czy widać jakąś różnicę? A zatem 2x większe taktowanie wymusi całkowitą zmianę w programie.
Z bascomem zacząłem jakiś miesiąc temu, w C zacznę programować jak jeszcze trochę poduczę się bascoma (już zacząłem, to skończę). Napisałem taki program: $regfile = "m8def.dat" $crystal = 1000000 Config Portb = Input Config Portd = Output Config Portb.0 = 1 Config Portb.1 = 1 Config Portb.2 = 1 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3...
kolega john_t myli się co do możliwości swobodnego ustawiania priorytetów przerwań. Wystarczy nie właczać globalnego zezwolenia i ręcznie sprawdzać przerwania (polling) Program autora wątku nie jest specjalnie skomplikowany (podejrzewam) więc spokojnie można dodać procedurę sprawdzania przerwań (zapewne nawet pod Bascom, w którym domyślam sie pisze...
Nie wiem czy dobrze kombinuje i trochę mi nie pasuje co zrobiłem. Do tego celu wykorzystuje polecenie Config Serialin które po konfiguracji wygląda tak: [syntax=basic4gl] Config Serialin = Buffered , Size = 20 Config Timer0 = Timer , Prescale = 256 Dim A As String * 10 Dim Odczyt As Bit Dim I As Word On Timer0 Przerwanie Enable Interrupts Enable Ovf0...
w ten sposób to raczej nie przejdzie chodzi o to że timer1 działa jako przerwanie a gdy wykorzystuje do obliczania impulsów drugiego tajmera czyli timer0 to dzieją się cyrki wyśiwetla mi np co druga sekunde itd wszystko to na atmega8
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....
BASCOM 8051 i BASCOM AVR odmennie traktują RC5 dlatego nie ma się co sugerować przykładami nie odnoszącymi się do właściwego kompilatora. W AVR, TIMER0 a INT0 są zupełnie niezależne. Nie ma tu opcji zewnętrznego bramkowania licznika jak w rodzinie 8051. W AVR w ogóle nie ma takiego rejestru jak TCON!
Wielkie dzieki za te informacje. Jak tylko znajde wolna chwile sprobuje ponownie zajac sie tym ATmega8535. Ale mam jeszcze jeden problem. Wlasciwie to moze nie problem, ale moze ktos wyjasnilby mi jak to jest z Timerami w tych AVR-ach. Przykladowo, Timer0 daje przerwanie np. co 10us, ale procedura wykonywana w tym przerwaniu trwa np. 15us. Co wtedy...
Myślę, że można bez problemów ten program przerobić. Będzie jednak kilka problemów. 1. Maksymalny zegar dla układów serii L to chyba 8MHz, chociaż mogę się mylić. W oryginale uC chodzi na 12MHz. 2. Trzeba zmienić konfigurację TIMER0 i TIMER1 które w AVR Bascom sa "trochę" inne. Ale w ogóle sądzę, że jest to do zrobienia.
Sorry, Wiesz ja to sie z tym bawie tylko i program pisze w bascomie metoda prob i bledow. Nie ma większego znaczenia w jakim środowisku programujesz (Basic albo C). Istotny jest koncept projektu i sposób rachunkowy, reszta to tylko inna forma zapisu programu. Wybrałeś za narzędzia: Timer1 i jeden z interruptów zewnętrznych. Zatem jest tez bez znaczenia...
...Ja zapytam - dlaczego ? pytam powaznie . W skrócie: Procedura przerwania od Timer0, która steruje serwami, powinna być wywoływana co 10uS, a faktycznie jest wykonywana co 10uS+czas jej wykonania.Czym wolniejszy $crystal i więcej zadeklarowanych serw, tym gorzej :(
Tak co jeden cykl. Prescale jest 64 wiec nie tu chyba problem. Nic sie nie dzieje na wyswietlaczu a w symulatorze tez nie pokazuje zmian zmiennych. To nie jest jeden cykl, ani też 64 jakby wynikało z podziału prescalera. Wszystko można odczytac w symulatorze, tylko musisz potrafic posługiwac się jego ustawieniami i funkcjami. Poniżej masz przykład...
Witam. Przy obliczeniach nie bierzesz chyba pod uwagę prescalera. Raczej pojemności Timera0. Kolego marcin-k . Aby policzyć ilość impulsów podaną na wejście T0, powinieneś wykonać następujące obliczenie: Czestotliwosc*256+timer0 . PS "Czestotliwosc", to oczywiście nazwa Twojej zmiennej :)
Wracajac do tematu czy moglbym prosic przynajmniej o pseudo kod obslugi przykladowo drgania w przyciskach , wysterowania przekaznika np przez 2s oraz komunikacji 1wire jednym timerem (atmega8 ma az 2 timery wiec pewnie szybko skoncza sie jego mozliwosci chcac napisac kod bez zatrzymywania) Cały dowcip polega na tym że z tego 8 bitowego timera możesz...
Dziwne jest to że w starszej wersji ten kod działa, a raczej nie powinien :). W helpie pisze że funkcja GetRC5 wykorzystuje timer0 i przerwanie od tego timera. Umieszczenie tej funkcji w przerwaniu INT0 wydaje się być błędne. Przerwanie od timera się nie wykona, dopóki nie zakończy się obsługa przerwanie INT0.
Taka składnia dotyczy tylko Timer1/Timer3/Timer4/Timer5. Nie zadziała poprawnie dla Timer0 i Timer2. Choć z moich osobistych obseracji to najnowszy BASCOM-AVR i spora grupa procesorów poprawnie obsłuży taką składnię: CONFIG TIMER0 = PWM , PRESCALE = 1 | 8 | 64 | 256 | 1024 , COMPARE A PWM = CLEAR UP | CLEAR DOWN | DISCONNECT , COMPARE B PWM = CLEAR...
Po uruchomieniu zasilania najpierw odczekaj chwilkę, później skasuj flagę przerwania INT1 i dopiero zezwój na obsługę przerwania INT1. Nic to niestety nie daje... Przerwanie od timer0 i INT0 obsługiwane są bezbłędnie, a jak dodam enable INT1, to już nie. Coś ze stosem? $hwstack = 64 $swstack = 16 $framesize = 16
Witam, Bardzo proszę o sprawdzenie czy program jest poprawnie napisany. Nie korzystałem do tej pory z instrukcji Watchdog, więc nie mam pewności czy jest ona poprawnie umieszczona. Zadaniem programu jest stały pomiar napięcia i w razie wystąpienia spadku załączany jest przekaźnik na czas 2 minut. Jeżeli spadek będzie występował czały czas to przelaźnik...
$regfile = "m8def.dat" $crystal = 8000000 $baud = 9600 '-- Wejscia przycisków Config Portd.2 = Input Config Portd.3 = Input ' -- podciągnięcie Set Portd.2 Set Portd.3 ' -- porty sterowania segmentami LED Config Portd = Output Config Portc.5 = Output Config Portc.4 = Output Config Portc.3 = Output Config Portc.2 = Output ' -- tranzystory Config...
Timer0 przepełni ci sie tak szybko że nie zdażysz zareagować. Jeśli chcesz liczyć czas tym timerem to musi on sie przepełnić kiladziesiąt razy (a ile to musisz ustwić w obsłudze przerwania tego timera) Nie pisuję programów w Bascomie więc nie wiem czy czasem nie popełniasz błędu typu wyjscie z procedury przez skok z niej do jakiejs etykiety a nie przez...
Odświerzę trochę temat. Ja konkretnie muszę w miarę precyzyjnie zmierzyć prędkość obrotową w możliwie krótkim czasie. prędkość w zakresie 750-6500 obr/min. Dysponuje tarczą 25 nacięć na obrót i fotokomórką szczelinową która daje ttl na wyjściu. Puki co ttl generuje z generatora ne555 by uniknąć błędów pomiarów związanych ze stroną mechaniczną systemu....
chcialem zrobic sterowanie dioda rgb, 6 przyciskami po 2 przyciski do jednego koloru lub potencjometrem. narazie widze ze potencjometrem bedzie problem ale mam ksiazke do bascomu rozwiazanie z przyciskami to pare linijek kodu. chcialem zrobic go na atmega8 ale jak sie nie myle to jest tylko timer0 i timer1 i to mi nie wystarczy na sterowanie 3 kolorow...
Rozwiązałem to tak: $regfile = "m8def.dat" $crystal = 8000000 Config Pinc.2 = Output Config Pinc.3 = Output Config Pind.4 = Input Config Pind.7 = Input ' Portd.4 = 1 Portd.7 = 1 Portc.2 = 1 Portc.3 = 1 Lewy Alias Pind.4 Prawy Alias Pind.7 Dim Flaga As Byte Dim B As Byte Dim C As Byte Config Timer0 = Timer , Prescale = 256 On Timer0 Odmierz1s...
cóż chylę czoło przed bascomem i odmiennością od C, jednak jakby nie patrzeć jeśli zacząć np. cykliczne powiększanie od najmniejszej wartości do największej wyjdzie na to samo czyli 65535 kolejnych operacji zwiększania :)
Witam! Z pewnością chcesz wykorzystać mechanizm "polling" :) jak to się ładnie nazywa w dokumentacjach. Po pierwsze w ATmega8 nie ma flagi Tirf.0, jest natomiast flaga Tifr.0 o którą zapewne Ci chodzi, dlatego pewnie nie do końca che działać. ;) Pozatym aby używać przerwań w ATmega8 musisz też odblokować globalny system przerwań, ponieważ po starcie...
ja to rozumiem ale to były wahania ze raz dawał 0 potem następny 30, a następny pomiar 60... 0 0 30 60 60 0 30 trochę duża rozbieżność... zlutuje to jeszcze raz zobaczę co się będzie działo Dodano po 2 Wywaliłem tranzystor wstawiłem sam rezystor podciagajacy . załadowałem program [syntax=basic4gl] Dim Wynik As Long Dim Wynik1 As Long Config Timer0 =...
Timera1 nie użyjesz do RC5 ale jak poczytasz HELP Bascomiczny to zobaczysz z łatwością, że można spokojnie podłączyć go do Timera2 Tak więc albo możesz zmienić RC5 na Timer2 ale możesz nie zmieniać tylko swoją procedurę w Timer0 przenieść do Timer2 i po zawodach . Reasumując masz dwa wyjścia a ty szukasz trzeciego z Timerem1 ;)
Funkcja GETRC5() Opis: Funkcję tą opracowano na podstawie noty aplikacyjnej AVR410 firmy Atmel. W czasie działania funkcji używany jest licznik TIMER0 i związane z nim przerwanie. Licznik ten jest służy do generacji wymaganych opóźnień podczas próbkowania sygnału. TIMER0 może być dalej używany przez program, lecz należy się liczyć z wynikłymi...
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...
(at)emarcus: O ile się nie mylę, przy prescalerze 64 i cżestotliwości 8MHz timer0 będzie miał skok co 8us, czyli licznik bedzie przepełniał się co 2,048ms, więc do poprawnego odliczenia 1s w obsłudze timera należy załadowywać do niego Timer0 = 6, i dodać licznik, który 500 razy zliczy przepełnienia. A co do tych parametrów, to zawsze wstawiałem domyślne...
Witam Mam problem ze zmuszeniem licznika T0 w bascomie do pracy z częstotliwością większą niż 25kHz. $regfile="m8def.dat" $crystal="8000000" Config portd.0= output Config timer0=timer,prescaler=1 Enable interrupts enable timer0 start timer0 on timer0 nosna do loop end nosna: load timer0,1 toggle portd.0 return Program napisany...
tak, o to chodziło. Zależność miedzy częstotliwością a OCR2 powinna być liniowa? Bo układ steruje obrotomierzem i niestety wskazania jego nie są liniowo zależne od „f” a powinny. W samochodzie są liniowo zależne od częstotliwości impulsów z cewki. Podejrzewam, że wypełnienie 50% wprowadza nieliniowość w obrotomierzu. Jak mogę zmniejszyć...
zbychmg teoretycznie mógłbym dopisać tak jak wspomniałeś ale to nie rozwiąże problemu kiedy np. uruchomię Pr1 (np zaświecę diodę), ustawię ją na powiedzmy wait 50 i będę chciał ją wyłączyć przed czasem. Ogólnie to jest prosty programik po to abym mógł nauczyć się obsługi TIMERA aby móc później zastosować go w bardziej rozbudowanych programach. Kod...
Mam coś takiego: [syntax=basic4gl]Config Timer0 = Timer , Prescale = 256 On Timer0 Odmierz Dim Licz As Byte Enable Interrupts Enable Timer0 Load Timer0 = 250 Stop Timer0[/syntax] i przerwanie: [syntax=basic4gl]Odmierz: Load Timer0 = 250 Incr Licz If Licz = 150 Then Licz = 0 Toggle Buz End If Return[/syntax] tylko że to miga 1 sekunde a ja potrzebuje...
Config Timer0 = Timer , Gate = Internal , Mod = 2 GATE ??? Syntax CONFIG TIMER0 = COUNTER , PRESCALE= 1|8|64|256|1024 , EDGE=RISING/FALLING , CLEAR TIMER = 1|0 CONFIG TIMER0 = TIMER , PRESCALE= 1|8|64|256|1024 Jednosci = Licznik Mod 10 Jednosci - byte Licznik - word ........ = nie da rady
Jak dla mnie to powinno być tak. Nie mam kompilatora pod rękom nie jestem pewien czy jest dobrze ale to mniej więcej to. Kod: $regfile = "m8def.dat" $crystal = 1000000 Config Portd = Input ' ustawiam we/wy Dim A As byte 'po co marnować pamięć A = 0 Config Timer0 = Timer , Prescale = 1024 Enable Timer0 Enable Interrupts Do If Pind.4 =...
Odkopię temat bo mam problem też z Attiny13. Problem jest następujący: po skonfigurowaniu timera0 jaki licznik zaczyna on zliczać kolejne takty procesora z określonym preskalerem ale w momencie użycia procedur waitms lub if timer0 zatrzymuje się. Dzieje się tak podczas sprawdzania na sprzęcie jak i na symulatorze. Program powinien działać poprawnie,...
konfiguracja TIMERA: [syntax=basic4gl]Config Timer0 = Timer , Prescale = 256 'konfiguracja Timer0 jako timer On Timer0 Przerwanie 'wywołanie procedury liczącej przy przerwaniu Enable Timer0 'włączamy Timer0 Enable Interrupts 'włączamy przerwania[/syntax] [syntax=basic4gl] Loop Prztimer: Incr Licznik If Licznik = 100 Then Licznik = 0 If Licznik = X Then...
Z przerwaniami nie jest tak trudno. Enable Interrupts Config Timer1 = Timer , Prescale = costam Timer1=costam2 Enable Timer1 On Timer2 etykieta Config Timer2 = counter , edge=falling Enable Timer2 On Timer2 etykieta2 coś takiego na przykład dobry zwyczaj to czas realizacji procedury pod daną etykietą był w granicach 10us, a wszystko pakuj do pętli głównej...
Mam inny pilot który bankowo nadaje w RC5.I nic.Zero reakcji W takim razie po co przy konfiguracji Getrc5 można zmienić domyślny Timer0 na Timer2? Czy tylko po to żeby zwolnić Timer0 jeśli jest używany do innej funkcji? i co nam daje zmiana mnożnika PRESCALE określana przy funkcji GETRC5? W gruncie rzeczy chodzi mi o to że mam parę projektów wykorzystujących...
Czyli jak to dokładnie działa ? Dodaje w configu coś takiego ? [syntax=basic4gl]Config Timer0 = Timer , Prescale = 256 Enable Timer0 : On Timer0 Prztimer0 Enable Interrupts[/syntax] I właściwie to wszystko czy jak ? Niestety nie potrafię znaleźć niczego konkretnego, jak coś jest to czysta teoria bez przykładów. Jak gotowy program to zazwyczaj zbyt rozbudowany...
timer0 atmega8 bascom timer0 timer0 bascom
budowa słuchawek bluetooth instrukcja manipulatora satel miernik ladowania akumulatora
żarówka szeregowo początkujący elektronicy
Subaru Impreza III 2.0 – kompatybilność przetwornic HID Koito, Matsushita, Denso Junkers podgrzewacz wody – buczenie, przyczyny, diagnostyka, Bosch Cerapur, Condens