Kazalo po Svet elektronike forumu Svet elektronike
Revija za prave elektronike
 
AlbumAlbum   Pomoč pogostih vprašanjPomoč pogostih vprašanj   IščiIšči   Seznam članovSeznam članov   Skupine uporabnikovSkupine uporabnikov   Registriraj seRegistriraj se 
 Tvoj profilTvoj profil   Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil   PrijavaPrijava 

Bascom AVR in wait?
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
marko11
Profesionalec


Pridružen/-a: Ned Jan 2004 18:00
Prispevkov: 112
Kraj: Ponikve

PrispevekObjavljeno: Ned Sep 09, 2012 2:44 pm    Naslov sporočila: Bascom AVR in wait? Odgovori s citatom

Hi

Procesor Mega 8,
Progy programator,
interni oscilator 1M.

Imam problem v tem delu kode.

If Pind.4 = 1 Then
Wait 2
Portd.7 = 0
End If

Zakaj se tukaj ne izvede Wait 2, ampak se takoj izvede naslednji stavek "PortD.7" ??
Probal sem tudi z dvema If stavkoma in waitms 100, pa je isto.
Kaj in kje sem ga polomil? Ali je treba še kje kaj nastaviti?

Spodaj pa je celotna koda.

LP,marko

Koda:
 

$regfile = "m8def.dat"
$crystal = 1000000

Config Pind.2 = Input                                       'start Tipka
Config Pind.3 = Input                                       'Števec, Cikel, induktivni senzor
Config Pind.4 = Input                                       'induktivni senzor kovine
Config Portd.7 = Output                                     'rele

Config Lcdpin = Pin , Db7 = Portb.1 , Db6 = Portb.2 , Db5 = Portb.3 , Db4 = Portb.4 , E = Portb.5 , Rs = Portd.6

Config Lcd = 16 * 2
Config Lcdbus = 4
Cursor Off
Cls

'Initlcd

Dim Stevec As Integer
Dim Cikel As Byte
Stevec = 0
Cikel = 0
Portd.7 = 1


Locate 1 , 1
Lcd "'Marko' SEP.2012"
Locate 2 , 1
Lcd "Cikel: " ; Cikel
Wait 3
Cls


Do

If Pind.2 = 0 Then                                          'stikalo start
   Locate 2 , 1
   Lcd "Cikel: " ; Cikel

      If Pind.4 = 1 Then                                    'D4 induktivni senzor kovine
       Wait 2
         Portd.7 = 0                                        'vklopi Rele
      End If

          If Pind.3 = 0 Then
             Incr Cikel
               Incr Stevec
                  Locate 1 , 1
                  Lcd "Stevec: " ; Stevec
               Locate 2 , 1
               Lcd "Cikel: " ; Cikel

          Waitms 250

               If Cikel = 5 Then
                  Portd.7 = 1
                     Cikel = 0
                  Locate 2 , 1
                  Lcd "Cikel: " ; Cikel
               End If
          End If

Else
   Cikel = 0
      Portd.7 = 1                                           'D7 izhod RELE
   Locate 2 , 1
   Lcd "Cikel: " ; Cikel
End If

Loop
End
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 556
Kraj: Ljubljana

PrispevekObjavljeno: Ned Sep 09, 2012 7:49 pm    Naslov sporočila: Odgovori s citatom

Marko,
ali imaš prav nastavljene Fues bite?

Ko postaviš pin kot vhodni, če nimaš zunanjih pull up uporov moraš vklopiti notranje tako da postaviš pin na visok nivo.
Mogoče je v tem težava.
LP
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Jure
Urednik


Pridružen/-a: Pon Jan 2004 12:51
Prispevkov: 2132
Kraj: Ljubljana

PrispevekObjavljeno: Pon Sep 10, 2012 7:58 am    Naslov sporočila: Odgovori s citatom

Marko,

kaj pa ukaz $crystal?

Če ne definiraš tega, potem mikrokontroler ne more vedeti, s kakšnim kvarcem ga poganjaš.

Lp
Jure
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 556
Kraj: Ljubljana

PrispevekObjavljeno: Pon Sep 10, 2012 9:13 am    Naslov sporočila: Odgovori s citatom

Potem pa vzame privzeto vrednost iz zavihka OPTIONS -> CHIP
LP
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
marko11
Profesionalec


Pridružen/-a: Ned Jan 2004 18:00
Prispevkov: 112
Kraj: Ponikve

PrispevekObjavljeno: Pon Sep 10, 2012 5:31 pm    Naslov sporočila: Odgovori s citatom

Jure je napisal/a:
Marko,

kaj pa ukaz $crystal?

Če ne definiraš tega, potem mikrokontroler ne more vedeti, s kakšnim kvarcem ga poganjaš.

Lp
Jure


Ja saj sem definiral, lahko pogledaš zgoraj kjer je celotni program.
Koda:


$regfile = "m8def.dat"
$crystal = 1000000


Citiram:

ali imaš prav nastavljene Fues bite?

Ko postaviš pin kot vhodni, če nimaš zunanjih pull up uporov moraš vklopiti notranje tako da postaviš pin na visok nivo.
Mogoče je v tem težava.


Vlado, imam zunanje pull up upore.
kako pa naj nastavim Fuses bite?

Saj meni deluje Wait ukaz, če pogledate zgoraj v programu pred glavno zanko je ukaz wait 3, ki deluje.

Ne deluje mi samo v tem delu.

If Pind.4 = 1 Then
Wait 2
Portd.7 = 0
End If

Enostavno ispusti wait 2 ter vklopi PortD.7
Mogoče je kje narobe v samemu programu? Zato sem priložil celotni program.

LP,
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 556
Kraj: Ljubljana

PrispevekObjavljeno: Pon Sep 10, 2012 6:32 pm    Naslov sporočila: Odgovori s citatom

Marko,
poskusi tako da na en pin priklopiš LED in napiši program da utripa v sekundnem intervalu, potem bomo vedeli kaj bi lahko bilo.
LP
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Jure
Urednik


Pridružen/-a: Pon Jan 2004 12:51
Prispevkov: 2132
Kraj: Ljubljana

PrispevekObjavljeno: Pon Sep 10, 2012 7:56 pm    Naslov sporočila: Odgovori s citatom

Marko,

po moje je Pind.2 ves čas = 1,zato ti preskoči direktno v drugi del programa.

Lp
Jure
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 556
Kraj: Ljubljana

PrispevekObjavljeno: Pon Sep 10, 2012 8:12 pm    Naslov sporočila: Odgovori s citatom

Marko11 je napisal:
Citiram:
Enostavno ispusti wait 2 ter vklopi PortD.7


zakaj pa bi mu potem postavilo portd.7 ?
Nekaj tu ne štima, potrebna bo shema in izpis fuse bitov.
LP
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Jure
Urednik


Pridružen/-a: Pon Jan 2004 12:51
Prispevkov: 2132
Kraj: Ljubljana

PrispevekObjavljeno: Tor Sep 11, 2012 7:19 am    Naslov sporočila: Odgovori s citatom

Jure je napisal/a:

po moje je Pind.2 ves čas = 1,zato ti preskoči direktno v drugi del programa.


Pravilno bi moralo biti: Pind.2 ves čas = 0, zato preskoči...

Lp
Jure
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
protoncek
Profesionalec


Pridružen/-a: Sob Maj 2007 9:25
Prispevkov: 303
Kraj: Mengeš

PrispevekObjavljeno: Tor Sep 11, 2012 8:16 am    Naslov sporočila: Odgovori s citatom

hm...v omenjenem IF stavku naj bi ti pin 7 IZKLOPILO (portd.7=0), ti pa praviš da ti ga VKLOPI, kar pomeni da ti ga vklopi stavek:
If Cikel = 5 Then
Portd.7 = 1
Cikel = 0
Locate 2 , 1
Lcd "Cikel: " ; Cikel
End If

postavi ukaz wait 5 pred ta IF stavek pa boš takoj videl ali je to krivec.
Drugače pa - saj imaš LCD. Nanj piši spremenljivke (stanje portov) na različnih lokacijah pa boš hitro videl, kje ga lomi.

_________________
http://www.protoncek.com
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
stursc
Profesionalec


Pridružen/-a: Pet Feb 2005 14:50
Prispevkov: 109
Kraj: Ravne

PrispevekObjavljeno: Sre Sep 12, 2012 7:18 am    Naslov sporočila: Odgovori s citatom

Ne deluje mi samo v tem delu.
If Pind.4 = 1 Then
Wait 2
Portd.7 = 0
End If
Enostavno ispusti wait 2 ter vklopi PortD.7


Kot je napisal Jure, če d2 ni na 0 (nič) se ti naslednji IF stavki ne izvajajo.
kako je zadeva zamišljena se nisem poglabljal !


LP, stursc
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
marko11
Profesionalec


Pridružen/-a: Ned Jan 2004 18:00
Prispevkov: 112
Kraj: Ponikve

PrispevekObjavljeno: Sre Sep 12, 2012 9:41 am    Naslov sporočila: Odgovori s citatom

Sedaj imam narejeno takole

If Pind.4 = 1 Then
Portd.7 = 0
End If

Samo da tukaj ni Wait ukaza,
pa vse, celoten program normalno deluje, ko pa vpišem ukaz Wait 2 pa ne deluje.

LP,

_________________
Kdor visoko leta, daleč vidi.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
stursc
Profesionalec


Pridružen/-a: Pet Feb 2005 14:50
Prispevkov: 109
Kraj: Ravne

PrispevekObjavljeno: Čet Sep 13, 2012 8:42 am    Naslov sporočila: Odgovori s citatom

marko11 je napisal/a:
Sedaj imam narejeno takole

If Pind.4 = 1 Then
Portd.7 = 0
End If

Samo da tukaj ni Wait ukaza,
pa vse, celoten program normalno deluje, ko pa vpišem ukaz Wait 2 pa ne deluje.

LP,


Program deluje točno tako kot je napisan ! (Testiran na testni plošči)
Če ne deluje tako kot želiš, potem ga tako napiši ali pa vsaj pojasni kaj in kako naj deluje. Praviš, da Wait 2 ne deluje.
Če so pogoji kot so zapisani v programu deluje točno tako, vsakih 2250ms ti rele ugasne za 250ms, tako imaš napisan program. Tudi števec in cikel štejeta v tem intervalu, če je d4 na (H) visokem nivoju, če je pa d4 na na (L) nizkem nivoju potem števec in cikel štejeta vsaki 250ms. Pojasni torej kaj ne dela tako kot bi rad.


LP, stursc
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
BojanR
Začetnik


Pridružen/-a: Pon Maj 2006 13:31
Prispevkov: 12

PrispevekObjavljeno: Sob Sep 15, 2012 7:08 am    Naslov sporočila: Odgovori s citatom

Pa si siguren, da imaš kristal 1MHz in ne 10MHz, definirano imaš namreč 1000000. Dodaj še eno ničlo, pa bo delalo.
Ali pa imaš vklopljeno $sim?

_________________
BojanR
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
marko11
Profesionalec


Pridružen/-a: Ned Jan 2004 18:00
Prispevkov: 112
Kraj: Ponikve

PrispevekObjavljeno: Sob Sep 15, 2012 4:10 pm    Naslov sporočila: Odgovori s citatom

Citiram:

Če ne deluje tako kot želiš, potem ga tako napiši ali pa vsaj pojasni kaj in kako naj deluje.


To se dogaja na exscentrični "štanci". Reže se različno dolga pločevina.

Program naj bi delal takole:

PinD.2 je stikalo start
PinD.3 je induktivni senzor, ki šteje hod štance
PinD.4 je induktivni senzor, ki zazna kdaj se odreže pločevina
PortD.7 je vklop izklop Releja.

Ko vklopim Stikalo PinD.2 = 0
Preveri če je PinD.4 = 1, na senzorju ni pločevine
Vklopi Rele PortD.7= 0

Sedaj se vklopi štanca ter odreže pločevino,
PinD.3 = 0 je števec obrata in začne šteti (1.obrat)
PinD.4 = 0 pločevina je odrezana,

To se ponavlja do 5.obrata. Ko je spremenljivka Stevec = 5 se izklopi Rele PortD.7 = 1.
Sedaj se štanca ustavi in čaka da poberem 5 komadov pločevine.

Ko vzamem pločevino je senzor PinD.4 = 1
TUKAJ PA POTREBUJEM 2 sekundi časa, da štanca stoji.
potem se zopet vklopi rele PortD.7 = 0
Potem pa se naj zopet vse ponovi.

Tako naj bi deloval program.

LP,
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika Časovni pas GMT + 1 ura, srednjeevropski - zimski čas
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
Pojdi na:  
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
You cannot attach files in this forum
You cannot download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group