www.elektronik.si
Ali program ne sledi encoderju?

www.elektronik.si -> Bascom sekcija

Avtor: marko11Kraj: Dobrepolje PrispevekObjavljeno: 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

Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: 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

Avtor: marko11Kraj: Dobrepolje PrispevekObjavljeno: 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 ?

Avtor: lojzek PrispevekObjavljeno: 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

Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: 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

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: 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, ..

Stran 1 od 1

Powered by phpBB © 2001,2002 phpBB Group