Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięMam problem z timerem.
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
$crystal = 4000000
Config Portd = Output
Config Portb = Output
Portd = &B0000111
Portb = &B11011111
On Timer0 Odmierz_1s
Dim Licz_8ms As Byte
Enable Interrupts
Enable Timer0
Timer0
Load Timer0 = 125
Do
Loop
End
Odmierz_1s:
Load Timer0 = 125
Incr Licz_8ms
If Licz_8ms = 125 Then
Licz_8ms = 0
Toggle Portb.5
End If
Return
Jest to programik z "Programowanie(...) w BASCOM" zaadaptowany na potrzeby AVT3500.
Wydaje mi sie ze stan portu b.5 powinien zmieniac sie co sekunde, a zmienia sie co 2sekundy.
[ Dodano: 03-08-2005, 18:40 ]
Wlasnie zauwazylem, ze zmiana wartosi przy LOAD TIMER nie ma wplywu na dzialanie programu. Program zachowuje sie tak jakby nie bylo tych linii czyli zlicza zawsze 256.
[ Dodano: 03-08-2005, 18:43 ]
[shadow=orange]load timer,125 [/shadow]!!!!!! fuck....ale barannn jestem
Config Portd = Output
Config Portb = Output
Portd = &B0000111
Portb = &B11011111
On Timer0 Odmierz_1s
Dim Licz_8ms As Byte
Enable Interrupts
Enable Timer0
Timer0
Load Timer0 = 125
Do
Loop
End
Odmierz_1s:
Load Timer0 = 125
Incr Licz_8ms
If Licz_8ms = 125 Then
Licz_8ms = 0
Toggle Portb.5
End If
Return
Jest to programik z "Programowanie(...) w BASCOM" zaadaptowany na potrzeby AVT3500.
Wydaje mi sie ze stan portu b.5 powinien zmieniac sie co sekunde, a zmienia sie co 2sekundy.
[ Dodano: 03-08-2005, 18:40 ]
Wlasnie zauwazylem, ze zmiana wartosi przy LOAD TIMER nie ma wplywu na dzialanie programu. Program zachowuje sie tak jakby nie bylo tych linii czyli zlicza zawsze 256.
[ Dodano: 03-08-2005, 18:43 ]
[shadow=orange]load timer,125 [/shadow]!!!!!! fuck....ale barannn jestem
Cześć
Mam podobny problem...
$crystal=8000000
config pind.0=Output
config timer0=timer,prescale=256
On Timer0 Odmierz_1s
Dim Licz_8ms as Byte
Enable Interrupts
Enable Timer0
Load Timer0 = 250
Do
Loop
End
Odmierz_1s:
Load Timer0 = 250
Incr Licz_8ms
if Licz_8ms = 125 then
Licz_8ms = 0
Toggle Portd.0
end if
return
Użyłem mikrokontroler Atmega8 (i też Atmega16) i programator STK300.
I teraz stan portów d zmienia sie o ok 9s a nie co 1s
Program przepisałem z książki "Programowanie mikrokontrolerów AVR w języku BASCOM".
Prosze o pomoc.
Mam podobny problem...
$crystal=8000000
config pind.0=Output
config timer0=timer,prescale=256
On Timer0 Odmierz_1s
Dim Licz_8ms as Byte
Enable Interrupts
Enable Timer0
Load Timer0 = 250
Do
Loop
End
Odmierz_1s:
Load Timer0 = 250
Incr Licz_8ms
if Licz_8ms = 125 then
Licz_8ms = 0
Toggle Portd.0
end if
return
Użyłem mikrokontroler Atmega8 (i też Atmega16) i programator STK300.
I teraz stan portów d zmienia sie o ok 9s a nie co 1s
Program przepisałem z książki "Programowanie mikrokontrolerów AVR w języku BASCOM".
Prosze o pomoc.
Więc tak :
Podłącz programator pod uK i włacz Bascoma. Uruchom programator. Przejdź do zakładki Lock and Fuse Bits. Powinny się pojawiać po kolei pozycje na liście (w mierę odczytywania) Gdy już lista się wypełni to pod szarym wierszem "Fusebits" masz 4 wiersze o białym tle. W wierszu "Fusebit A987" z listy rozwijanej wybierz 1111:1111. Potem kliknij przycisk "Write FS".
NIC INNEGO NIE ZMIENIAJ I NIE NACISKAJ! Bo możesz trwale zablokować procesor.
PS. Opis jest dla Mega16. Jak zakłądka wygląda dla Mega8 nie wiem bo jej nie mam. Ale pewnie podobnie
Podłącz programator pod uK i włacz Bascoma. Uruchom programator. Przejdź do zakładki Lock and Fuse Bits. Powinny się pojawiać po kolei pozycje na liście (w mierę odczytywania) Gdy już lista się wypełni to pod szarym wierszem "Fusebits" masz 4 wiersze o białym tle. W wierszu "Fusebit A987" z listy rozwijanej wybierz 1111:1111. Potem kliknij przycisk "Write FS".
NIC INNEGO NIE ZMIENIAJ I NIE NACISKAJ! Bo możesz trwale zablokować procesor.
PS. Opis jest dla Mega16. Jak zakłądka wygląda dla Mega8 nie wiem bo jej nie mam. Ale pewnie podobnie
Może Ci jakiś paproch wleciał i odczytałeś , zamiast =.w książce jest błąd!!!!!!!!!!!!!!!!!!!!!
nie pisz : Load Timer0 = 250
tylko : Load Timer0,250
tak jest w dokumentacji bascom avr
Ja na stroine 159 mam napisany program i dzięki "radzio"wi wszystko mi super działa .
(Użyłem mega8 bo jest tańszy)
Dzięki za pomoc
A może masz racje.W ksiazce jest = a w dokumentacji jest przecinek!
Po tym jak zmieniłem "=" na "," wszystko działa i nie musze ustawiac jakichś fusów.
Kiedyś pisałem z książki i też mi nie działało więc dałem sobie spokuj z timerami.
a teraz miałem taki program
$regfile = "m8def.dat"
$crystal = 8000000
Config Lcd = 16 * 1a
Config Lcdpin = Pin , E = Portc.0 , Rs = Portc.1 , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5
Cls
Lcd "Welcome"
Dim I As Word
Config Timer1 = Timer , Prescale = 256
On Timer1 Times
Enable Interrupts
Enable Timer1
Timer1 = 34285
Do
Loop
End
Times:
Timer1 = 34285
I = I + 1
Cls
Lcd I
Return
Zwracam honor
A gdzie masz te zakładki - w Bascomie AVR? Ja u siebie nic takiego nia zauważyłem.Więc tak :
Podłącz programator pod uK i włacz Bascoma. Uruchom programator. Przejdź do zakładki Lock and Fuse Bits. Powinny się pojawiać po kolei pozycje na liście (w mierę odczytywania) Gdy już lista się wypełni to pod szarym wierszem "Fusebits" masz 4 wiersze o białym tle. W wierszu "Fusebit A987" z listy rozwijanej wybierz 1111:1111. Potem kliknij przycisk "Write FS".
NIC INNEGO NIE ZMIENIAJ I NIE NACISKAJ! Bo możesz trwale zablokować procesor.
PS. Opis jest dla Mega16. Jak zakłądka wygląda dla Mega8 nie wiem bo jej nie mam. Ale pewnie podobnie
-
- -
- Posty:58
- Rejestracja:30 lip 2005, o 00:36
- Lokalizacja:Lublin
A mi sie znowu cos zjeb...
Teraz probuje na LCD i zauwazylem ze na minute opoznia mi okolo 2 sekundy
Mozecie mi to sprawdzic:
'a to prawda:
'kwarc daje 4MHz
'podzielone na prescale 256 daje 15625imp/sek do timera
'wpiszemy 125 do timera(bedzie sie przepelnial co 125 impulsow)
'po 15625/125=125 przepelnieniach timera minie minuta
'$sim
$crystal = 4000000 'częstotliw oscylatora taktującego uK
Dim Hours As Integer
Dim Minutes As Integer
Dim Seconds As Integer
Dim Licz_8ms As Byte 'zmienna pomocnicza zliczająca odcinki czasu równe 8 ms
Cls
Cursor Off
Hours = 0
Minutes = 0
Seconds = 0
Config Timer0 = Timer , Prescale = 256 'Timer0 jako timera z podziałem preskalera przez 256
On Timer0 Odmierz_1s 'przerwanie od przepełnienia Timer0 o etykiecie Odmierz_1s
Enable Interrupts 'odblokowanie globalnego systemu przerwań
Enable Timer0 'odblokowanie przerwania od przepełnienia Timer0
Load Timer0 , 125 'wartość początkowa Timer0
Do
Loop
End 'koniec programu
Odmierz_1s: 'początek podprogramu obsługi przerwania od przepełnienia Timer0
Load Timer0 , 125 'wartość początkowa Timer0
Incr Licz_8ms
'zwiększ o jeden wartość zmiennej pomocniczej Licz_8ms
If Licz_8ms = 125 Then 'jeżeli wartość tej zmiennej równa 125 (125*8 ms = 1) to odliczono 1 sekundę
Licz_8ms = 0
Gosub Przelicz
End If 'koniec warunku If...Then
Return 'powrót z przerwania
Przelicz:
Incr Seconds
Cls
If Seconds = 60 Then
Seconds = 0
Incr Minutes
End If
If Minutes = 60 Then
Minutes = 0
Incr Hours
End If
If Hours = 25 Then
Hours = 0
Minutes = 0
Seconds = 0
End If
Upperline
Lcd "GODZINA:"
Lowerline
Lcd " " ; Hours ; ":" ; Minutes ; ":" ; Seconds
Return
Teraz probuje na LCD i zauwazylem ze na minute opoznia mi okolo 2 sekundy
Mozecie mi to sprawdzic:
'a to prawda:
'kwarc daje 4MHz
'podzielone na prescale 256 daje 15625imp/sek do timera
'wpiszemy 125 do timera(bedzie sie przepelnial co 125 impulsow)
'po 15625/125=125 przepelnieniach timera minie minuta
'$sim
$crystal = 4000000 'częstotliw oscylatora taktującego uK
Dim Hours As Integer
Dim Minutes As Integer
Dim Seconds As Integer
Dim Licz_8ms As Byte 'zmienna pomocnicza zliczająca odcinki czasu równe 8 ms
Cls
Cursor Off
Hours = 0
Minutes = 0
Seconds = 0
Config Timer0 = Timer , Prescale = 256 'Timer0 jako timera z podziałem preskalera przez 256
On Timer0 Odmierz_1s 'przerwanie od przepełnienia Timer0 o etykiecie Odmierz_1s
Enable Interrupts 'odblokowanie globalnego systemu przerwań
Enable Timer0 'odblokowanie przerwania od przepełnienia Timer0
Load Timer0 , 125 'wartość początkowa Timer0
Do
Loop
End 'koniec programu
Odmierz_1s: 'początek podprogramu obsługi przerwania od przepełnienia Timer0
Load Timer0 , 125 'wartość początkowa Timer0
Incr Licz_8ms
'zwiększ o jeden wartość zmiennej pomocniczej Licz_8ms
If Licz_8ms = 125 Then 'jeżeli wartość tej zmiennej równa 125 (125*8 ms = 1) to odliczono 1 sekundę
Licz_8ms = 0
Gosub Przelicz
End If 'koniec warunku If...Then
Return 'powrót z przerwania
Przelicz:
Incr Seconds
Cls
If Seconds = 60 Then
Seconds = 0
Incr Minutes
End If
If Minutes = 60 Then
Minutes = 0
Incr Hours
End If
If Hours = 25 Then
Hours = 0
Minutes = 0
Seconds = 0
End If
Upperline
Lcd "GODZINA:"
Lowerline
Lcd " " ; Hours ; ":" ; Minutes ; ":" ; Seconds
Return
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 35 gości