Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
marko11 Profesionalec
Pridružen/-a: Ned Jan 2004 18:00 Prispevkov: 112 Kraj: Ponikve
|
Objavljeno: Ned Sep 09, 2012 2:44 pm Naslov sporočila: Bascom AVR in wait? |
|
|
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 |
|
|
Vlado Profesionalec
Pridružen/-a: Ned Jan 2004 16:11 Prispevkov: 556 Kraj: Ljubljana
|
Objavljeno: Ned Sep 09, 2012 7:49 pm Naslov sporočila: |
|
|
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 |
|
|
Jure Urednik
Pridružen/-a: Pon Jan 2004 12:51 Prispevkov: 2132 Kraj: Ljubljana
|
Objavljeno: Pon Sep 10, 2012 7:58 am Naslov sporočila: |
|
|
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 |
|
|
Vlado Profesionalec
Pridružen/-a: Ned Jan 2004 16:11 Prispevkov: 556 Kraj: Ljubljana
|
Objavljeno: Pon Sep 10, 2012 9:13 am Naslov sporočila: |
|
|
Potem pa vzame privzeto vrednost iz zavihka OPTIONS -> CHIP
LP |
|
Nazaj na vrh |
|
|
marko11 Profesionalec
Pridružen/-a: Ned Jan 2004 18:00 Prispevkov: 112 Kraj: Ponikve
|
Objavljeno: Pon Sep 10, 2012 5:31 pm Naslov sporočila: |
|
|
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 |
|
|
Vlado Profesionalec
Pridružen/-a: Ned Jan 2004 16:11 Prispevkov: 556 Kraj: Ljubljana
|
Objavljeno: Pon Sep 10, 2012 6:32 pm Naslov sporočila: |
|
|
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 |
|
|
Jure Urednik
Pridružen/-a: Pon Jan 2004 12:51 Prispevkov: 2132 Kraj: Ljubljana
|
Objavljeno: Pon Sep 10, 2012 7:56 pm Naslov sporočila: |
|
|
Marko,
po moje je Pind.2 ves čas = 1,zato ti preskoči direktno v drugi del programa.
Lp
Jure |
|
Nazaj na vrh |
|
|
Vlado Profesionalec
Pridružen/-a: Ned Jan 2004 16:11 Prispevkov: 556 Kraj: Ljubljana
|
Objavljeno: Pon Sep 10, 2012 8:12 pm Naslov sporočila: |
|
|
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 |
|
|
Jure Urednik
Pridružen/-a: Pon Jan 2004 12:51 Prispevkov: 2132 Kraj: Ljubljana
|
Objavljeno: Tor Sep 11, 2012 7:19 am Naslov sporočila: |
|
|
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 |
|
|
protoncek Profesionalec
Pridružen/-a: Sob Maj 2007 9:25 Prispevkov: 303 Kraj: Mengeš
|
Objavljeno: Tor Sep 11, 2012 8:16 am Naslov sporočila: |
|
|
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 |
|
|
stursc Profesionalec
Pridružen/-a: Pet Feb 2005 14:50 Prispevkov: 109 Kraj: Ravne
|
Objavljeno: Sre Sep 12, 2012 7:18 am Naslov sporočila: |
|
|
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 |
|
|
marko11 Profesionalec
Pridružen/-a: Ned Jan 2004 18:00 Prispevkov: 112 Kraj: Ponikve
|
Objavljeno: Sre Sep 12, 2012 9:41 am Naslov sporočila: |
|
|
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 |
|
|
stursc Profesionalec
Pridružen/-a: Pet Feb 2005 14:50 Prispevkov: 109 Kraj: Ravne
|
Objavljeno: Čet Sep 13, 2012 8:42 am Naslov sporočila: |
|
|
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 |
|
|
BojanR Začetnik
Pridružen/-a: Pon Maj 2006 13:31 Prispevkov: 12
|
Objavljeno: Sob Sep 15, 2012 7:08 am Naslov sporočila: |
|
|
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 |
|
|
marko11 Profesionalec
Pridružen/-a: Ned Jan 2004 18:00 Prispevkov: 112 Kraj: Ponikve
|
Objavljeno: Sob Sep 15, 2012 4:10 pm Naslov sporočila: |
|
|
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 |
|
|
|