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.

lotnick
-
-
Posty:66
Rejestracja:19 lip 2005, o 13:09
Lokalizacja:Sosnowiec
Kontaktowanie:
Mam problem z timerem.

Postautor: lotnick » 3 sie 2005, o 16:18

$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 :-)

FF
-
-
Posty:14
Rejestracja:6 sie 2005, o 10:14
Lokalizacja:Jaworzno

Postautor: FF » 6 sie 2005, o 10:25

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 :evil:
Program przepisałem z książki "Programowanie mikrokontrolerów AVR w języku BASCOM".
Prosze o pomoc.

radzio
Moderator
Moderator
Posty:967
Rejestracja:13 maja 2003, o 10:33
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: radzio » 6 sie 2005, o 10:46

A fusy na zewnętrzny kwarc ustawione? Jak 8 razy dłużej pracuje to na 100% nie :573:

FF
-
-
Posty:14
Rejestracja:6 sie 2005, o 10:14
Lokalizacja:Jaworzno

Postautor: FF » 6 sie 2005, o 10:54

A fusy na zewnętrzny kwarc ustawione? Jak 8 razy dłużej pracuje to na 100% nie :573:
Dopiero uczę się bascoma i nie mam pojęcia co mówisz i co trzeba zrobić...

radzio
Moderator
Moderator
Posty:967
Rejestracja:13 maja 2003, o 10:33
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: radzio » 6 sie 2005, o 11:18

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 :)

lotnick
-
-
Posty:66
Rejestracja:19 lip 2005, o 13:09
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: lotnick » 6 sie 2005, o 11:26

w książce jest błąd!!!!!!!!!!!!!!!!!!!!!

nie pisz : Load Timer0 = 250
tylko : Load Timer0,250

tak jest w dokumentacji bascom avr

FF
-
-
Posty:14
Rejestracja:6 sie 2005, o 10:14
Lokalizacja:Jaworzno

Postautor: FF » 6 sie 2005, o 11:34

w książce jest błąd!!!!!!!!!!!!!!!!!!!!!

nie pisz : Load Timer0 = 250
tylko : Load Timer0,250

tak jest w dokumentacji bascom avr
Może Ci jakiś paproch wleciał i odczytałeś , zamiast =.
Ja na stroine 159 mam napisany program i dzięki "radzio"wi wszystko mi super działa :D :D :D .
(Użyłem mega8 bo jest tańszy)
Dzięki za pomoc :D :D :D

lotnick
-
-
Posty:66
Rejestracja:19 lip 2005, o 13:09
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: lotnick » 6 sie 2005, o 11:37

W ksiazce jest = a w dokumentacji jest przecinek!
Po tym jak zmieniłem "=" na "," wszystko działa i nie musze ustawiac jakichś fusów.

FF
-
-
Posty:14
Rejestracja:6 sie 2005, o 10:14
Lokalizacja:Jaworzno

Postautor: FF » 6 sie 2005, o 11:45

W ksiazce jest = a w dokumentacji jest przecinek!
Po tym jak zmieniłem "=" na "," wszystko działa i nie musze ustawiac jakichś fusów.
A może masz racje.
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 :D

Fredy
-
-
Posty:141
Rejestracja:27 mar 2005, o 21:45
Lokalizacja:Małopolska

Postautor: Fredy » 7 sie 2005, o 22:07

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 :)
A gdzie masz te zakładki - w Bascomie AVR? Ja u siebie nic takiego nia zauważyłem.

K_o_n_r_a_d
-
-
Posty:58
Rejestracja:30 lip 2005, o 00:36
Lokalizacja:Lublin

Postautor: K_o_n_r_a_d » 7 sie 2005, o 23:12

A gdzie masz te zakładki - w Bascomie AVR? Ja u siebie nic takiego nia zauważyłem.
Jak naciśniesz przycisk programowania (taki zielony) to rozwija Ci się meni i tam wybierz Manual Program
Pozdrawiam, Konrad.

lotnick
-
-
Posty:66
Rejestracja:19 lip 2005, o 13:09
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: lotnick » 13 sie 2005, o 14:23

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

FF
-
-
Posty:14
Rejestracja:6 sie 2005, o 10:14
Lokalizacja:Jaworzno

Postautor: FF » 13 sie 2005, o 14:39

Może "Lock and Fuse Bits" :P
Bo jak nie zmienisz prawidłowo to a ATmega8 korzysta z wewnętrznego oscylatora 1MHz
o ile się nie mylę.

lotnick
-
-
Posty:66
Rejestracja:19 lip 2005, o 13:09
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: lotnick » 13 sie 2005, o 15:06

nie, bo u mnie tylko troche źle chodzi a nie 8 razy wolniej

[ Dodano: 16-08-2005, 22:01 ]
no i co ?? żadnych pomysłów??
Sprawdzcie proszę jak to chodzi u WAs i dajcie jakąś propozycję zmiany. Ewentualnie prosiłbym o jakiś dokładny przykład.

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 59 gości