|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
marko11 Član
Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 866 Aktiv.: 3.88 Kraj: Dobrepolje
|
Objavljeno: Ned Nov 22, 2015 1:44 pm Naslov sporočila: Ali program ne sledi encoderju? |
|
|
Hi
Ko vrtim encoder počasi z roko se parametri na LCDju pravilno prikazujejo, ko pa zavrtim malo hitreje pa ne sledi več, se program kar resetira.
Ali program ni pravilno napisan?
Encoder ima 100 razdelkov na obrat, uC je Mega8, uporabljam Bascom AVR
Koda: |
$regfile = "m8def.dat"
$crystal = 4000000
Dim Wtime As Byte
Dim Stevec As Integer
Dim Dolzina As Single
Cha Alias Pind.2
Chb Alias Pind.3
Config Cha = Input
Config Chb = Input
Const Debouncetime = 1
Config Int0 = Falling
Enable Interrupts
Enable Int0
On Int0 Enkoder
Config Lcdbus = 4
Config Lcd = 20 * 4
Initlcd
Cursor Off Noblink
Wtime = 10
Stevec = 0
Set Chb
'LCD zaslon
Config Lcdpin = Pin , Db7 = Portb.0 , Db6 = Portb.1 , Db5 = Portb.2 , Db4 = Portb.3 , E = Portb.4 , Rs = Portb.5
'/////////////// * Glavna zanka * /////////////////
Do
Waitms Wtime
Locate 1 , 1 : Lcd Dolzina
Waitms Wtime
Loop
End
'///////////////////////////////////////////////////
Enkoder:
If Cha = 0 Then
If Chb = 0 Then Incr Stevec Else Decr Stevec
End If
' Tukaj precuna v mm. 1 obrat je 5 mm pomika
Dolzina = Stevec * 0.05
Return
|
Kako spremenljivko Dolzina ki je (Single) napisati tako, da izpiše samo dve decimalki, sedaj jih izpisuje 9?
Lp, marko |
|
Nazaj na vrh |
|
|
Vlado Član
Pridružen-a: Sre 03 Mar 2004 21:35 Prispevkov: 561 Aktiv.: 2.52 Kraj: Ljubljana
|
Objavljeno: Ned Nov 22, 2015 3:20 pm Naslov sporočila: |
|
|
Marko,
kakšne so vrednosti za stack?
Ker tega nimaš v programu, predvidevam da imaš privzete vrednosti (Options ->Compiler->Chip).
Preveri vrednosti in jih povečaj.
Priporočam da to vpišeš na začetku programa (tako bodo te vrednosti vedno enake za ta program).
Kar se tiče single, pa uporabi ukaz:
Config Single = Scientific , Digits = 2
LP |
|
Nazaj na vrh |
|
|
marko11 Član
Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 866 Aktiv.: 3.88 Kraj: Dobrepolje
|
Objavljeno: Ned Nov 22, 2015 8:06 pm Naslov sporočila: |
|
|
Vlado je napisal/a: |
Marko,
kakšne so vrednosti za stack?
Ker tega nimaš v programu, predvidevam da imaš privzete vrednosti (Options ->Compiler->Chip).
Preveri vrednosti in jih povečaj.
Priporočam da to vpišeš na začetku programa (tako bodo te vrednosti vedno enake za ta program).
Kar se tiče single, pa uporabi ukaz:
Config Single = Scientific , Digits = 2
LP |
Koda: |
$hwstack = 128
$swstack = 128
$framesize = 128
|
Če vpišem v program take vrednosti, ali bo zadostovalo? oziroma kako se določi velikost?
Uporabljam interni oscilator 4 Mhz, ali to zadostuje? Kolikšna je najvišja vrednost za interni oscilator za Mega8 ? |
|
Nazaj na vrh |
|
|
lojzek Član
Pridružen-a: Pet 25 Jan 2008 8:00 Prispevkov: 3356 Aktiv.: 16.96
|
Objavljeno: Ned Nov 22, 2015 9:34 pm Naslov sporočila: |
|
|
Po spominu... Interni oscilator pri Megi8 ima 1 MHz, ampak je to osnovna frekvenca deljeno z 8. Torej ima max interno frekvenco 8MHz, če nastaviš ustrezne fusebite- izklopiš CLKDIV/8 |
|
Nazaj na vrh |
|
|
Vlado Član
Pridružen-a: Sre 03 Mar 2004 21:35 Prispevkov: 561 Aktiv.: 2.52 Kraj: Ljubljana
|
Objavljeno: Ned Nov 22, 2015 9:50 pm Naslov sporočila: |
|
|
Marko,
stack bo več kot dovolj.
Tako kot imaš zdaj narejeno ti enkoder nebo štel gor/dol, ampak samo v eno smer.
Poglej v Help-u ENCODER, tam boš našel primer za uporabo enkoderja.
Citiram: |
Waitms Wtime
Locate 1 , 1 : Lcd Dolzina
Waitms Wtime
|
ta del bi jaz popravil tako da bi dodal še eno spremenljivko dolzina_old ter
Do
if dolzina <> dolzina_old then
locate 1,1:Lcd dolzina
dolzina_old=dolzina
end if
Loop
Na ta način se boš izognil nenehanemu pisanju na LCD, pisal boš samo po potrebi.
Vedeti moraš da LCD ni tako hiter, WR pin je vezan na minus, Bascom pa namesto kontrole tega pina ima fiksno zakasnitev 20 ms.
Obstaja knižnica ki omogoča uporabo R/W pina in je pisanje na LCD hitreje.
LP |
|
Nazaj na vrh |
|
|
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.03 Kraj: Dragomer
|
Objavljeno: Tor Feb 02, 2016 9:37 am Naslov sporočila: |
|
|
Nisem še delal z encoderjem, in nimam ga doma, da bi poizkusil,
toda jaz bi se lotil encoder branja tako, da bi kontatke vezal na INT0 in INT1 pine in vsebino vbral v interrupt rutini.
No lahko da bi potem imel problem z odskakovanjem kontaktov, .. _________________ Prepričan sem, da je inteligentnih bitij v vesolju veliko. A ker so inteligenta, se nam nočejo prikazati. |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 76 dni
Powered by phpBB © 2001, 2005 phpBB Group
|