|
Svet elektronike Revija za prave elektronike
|
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
jurcman90 Mojster
Pridružen/-a: Pet Dec 2012 16:34 Prispevkov: 27 Kraj: Stahovica
|
Objavljeno: Pon Jan 21, 2013 1:31 pm Naslov sporočila: SIMULATOR MENJALNIKA |
|
|
Pozdravljeni,
Sm šele začetnik v programeranju zato bi vas prosil za nasvet.
Namrec rad bi izdelal program za zaznavanje polozaja menjalnika 5prestav +vzvratno in ler. Sepravi 7tipk ki bi dajale signal tipkovnici visja prestava na tipko up pa nizja na tipko down. Zacelo naj bi z lerom izvn prestave nato prva itd... Glavni problem je sprogramirat da vedno cip ve v keri prestavi je in ce dam iz prve recimo v peto cip posle signal na tipko up 5x ce pa nato v rikverc pa 5x na tipko down.
lp.Pavlic _________________ LP.Pavlic |
|
Nazaj na vrh |
|
|
Jure Urednik
Pridružen/-a: Pon Jan 2004 12:51 Prispevkov: 2132 Kraj: Ljubljana
|
Objavljeno: Pon Jan 21, 2013 2:46 pm Naslov sporočila: |
|
|
Pavlic,
lažje boš naredil tako, da boš pri vsaki "prestavi" imel mikrostikalo in vsako mikrostikalo naj ima svoje "ime" - 1. prestava naj ima ime 1, druga 2 itd. in peta 5. Ko boš iz 1. dal v 5., bo mikrokontroler samo prebral ime prestave, ne bo mu potrebno nič prištevati ali odštevati - če veš, kaj mislim.
Če bi naredil tudi tako, kot si si zamislil, da bi vsakič, ko daš v višjo prestavo, prištel 1, ko daš v nižjo prestavo, pa odšteješ 1, se zakomplicira ravno v primeru, ki si ga navedel, ko daš iz 1. v 5. prestavo...
Mimogrede - poizkusi naslednjič pisati v kolikor toliko lepi slovenščini, ki med drugim pozna vejice, presledke, čžš-je itd.
Lp
Jure |
|
Nazaj na vrh |
|
|
jurcman90 Mojster
Pridružen/-a: Pet Dec 2012 16:34 Prispevkov: 27 Kraj: Stahovica
|
Objavljeno: Tor Jan 22, 2013 8:35 pm Naslov sporočila: |
|
|
Hvala za odgovor!
Probal sem vse mogoče kar sem našel na internetu. Ampak mi nikakor ne uspe čipu dopovedat če prestavlam v višje prestave daje signal na PD1 po stikalih prvo (PB0), drugo(PB1), tretje(PB2), četrto(PB3) lepo po vrsti in nato prestavim v nižjo prestavo naprimer tretja(PB2) da čip ne daje signal na PD1 ampak na PD2.
Če ima kdo ali ve kakšen primer, bi prosil zanjega. _________________ LP.Pavlic |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Tor Jan 22, 2013 9:20 pm Naslov sporočila: |
|
|
Ni mi jasno, kaj pravzaprav hočeš?
Dobro, čip naj bi spremljal dogajanje in stalno beležil, v kateri prestavi je naprava. A od kod naj bi čip dobival informacije?
Imaš stikala na Citiram: | po stikalih prvo (PB0), drugo(PB1), tretje(PB2), četrto(PB3) lepo | Ali to pomeni, da imaš za vsako prestavo svoje stikalo vezano na pine PB0 in dalje? Potem ni čipu potrebno nič računati. Čip samo pogleda na svoje pine in ve v kateri prestavi je. |
|
Nazaj na vrh |
|
|
jurcman90 Mojster
Pridružen/-a: Pet Dec 2012 16:34 Prispevkov: 27 Kraj: Stahovica
|
Objavljeno: Sre Jan 23, 2013 12:33 am Naslov sporočila: |
|
|
Se opravičujem za nejasnosti!
Hočem izdelati program, ki vedno ve v kateri prestavi je menjalnik s pomočjo šestih mikro stikal. Stikala bodo postavljena na koncu hoda menjalnika. Vsaka prestava ima omejen hod in določeno postavitev in na koncu mikro stikalo. Vsako stikalo je vezano na svoj port ki je defineran kot vhod na čipu.
Čip bi bil vezan na staro usb tipkovnico. Na dve tipki, ki bi jih zvezal na dva izhoda na čipu. Njegovo delo naj bi bilo, da bi preko stikal prepoznal položaj menjalnika in dajal pravilno signal na izhodu. (Kot sinhronski menjalnik. Prestavno ročico povlečeš k sebi in prestavi v višjo prestavo, če ga odrineš pa prestavi v nižjo prestavo.)
Problem je kako čipu povedat da za vsako višjo prestavo naj pošlje signal za polovico sekunde na port D1 oziroma na določeno tipko na tipkovnici za nižjo prestavo pa na port D2 oziroma na drugo določeno tipko. _________________ LP.Pavlic |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Sre Jan 23, 2013 9:24 am Naslov sporočila: |
|
|
Naj povzamem, da preverim, da se razumeva:
Vsaka prestava je na svojem stikalu, ki javlja mikroprocesorju, v kateri prestavi je.
In če prestaviš iz četrte v drugo, hočeš, da pošlje mikro dva polsekundna impulza na D2, če pa prestaviš navzgor, tedaj hočeš odgovarjajoče število polsekundnih impulzov na D1.
Naloga se mi zdi precej sama sebi namen, ali pa šola programiranja.
Začnimo tako:
V programu definirajmo dve spremenljivki:
stanje menjalnika in
staro stanje menjalnika pred ciklom
ciklučno beremo stanje vhodnih portov in damo vsebino v spremenljivko stanje menjalnika, pred tem pa porinemo stanjemenjalnika v novo stanje.
če sta obe stani enaki, tedaj ni reakcije
če sta stanji različni, generiramo odgovarjajče število impulzov
in nazaj v ciklični nadzor stikal.
To sem na hitro scuzal iz prstov. verjetno se da šebolj elegantno narediti nalogo. |
|
Nazaj na vrh |
|
|
jurcman90 Mojster
Pridružen/-a: Pet Dec 2012 16:34 Prispevkov: 27 Kraj: Stahovica
|
Objavljeno: Sob Jan 26, 2013 5:58 pm Naslov sporočila: |
|
|
Program sm nekako spackal skupaj. Ampak to ni to če gredo prestave po vrsti deluje drugače pa ne. Kako naj napišem da lahko poljubno skačem med prestavami in da cip pravilno odreagira???
$regfile = "m32def.dat"
Config Pinb.0 = Input 'R
Portb.0 = 1
Config Pinb.1 = Input 'N
Portb.1 = 1
Config Pinb.2 = Input '1
Portb.2 = 1
Config Pinb.3 = Input '2
Portb.3 = 1
Config Pinb.4 = Input '3
Portb.4 = 1
Config Pinb.5 = Input '4
Portb.5 = 1
Config Pinb.6 = Input '5
Portb.5 = 1
Config Pinb.7 = Input '6
Portb.5 = 1
Config Portc.0 = Output
Portc.0 = 1
Config Portc.1 = Output
Portc.1 = 1
'zacetek
Do
Loop Until Pinb.1 = 0 'N
Rotate Portc , Right
Portc.1 = 0
Waitms 100
Portc.1 = 1
Do
Loop Until Pinb.2 = 0 '1
Rotate Portc , Left
Portc.1 = 0
Waitms 100
Portc.1 = 1
Do
Loop Until Pinb.3 = 0 '2
Rotate Portc , Right
Portc.1 = 0
Waitms 100
Portc.1 = 1
Do
Loop Until Pinb.4 = 0 '3
Rotate Portc , Left
Portc.1 = 0
Waitms 100
Portc.1 = 1
Do
Loop Until Pinb.5 = 0 '4
Rotate Portc , Right
Portc.1 = 0
Waitms 100
Portc.1 = 1
Do
Loop Until Pinb.6 = 0 '5
Rotate Portc , Left
Portc.1 = 0
Waitms 100
Portc.1 = 1
Do
Loop Until Pinb.7 = 0 '6
Rotate Portc , Right
Portc.1 = 0
Waitms 100
Portc.1 = 1
Do
Loop Until Pinb.6 = 0 '5
Rotate Portc , Left
Portc.0 = 0
Waitms 100
Portc.0 = 1
Do
Loop Until Pinb.5 = 0 '4
Rotate Portc , Right
Portc.0 = 0
Waitms 100
Portc.0 = 1
Do
Loop Until Pinb.4 = 0 '3
Rotate Portc , Left
Portc.0 = 0
Waitms 100
Portc.0 = 1
Do
Loop Until Pinb.3 = 0 '2
Rotate Portc , Right
Portc.0 = 0
Waitms 100
Portc.0 = 1
Do
Loop Until Pinb.2 = 0 '1
Rotate Portc , Left
Portc.0 = 0
Waitms 100
Portc.0 = 1
Do
Loop Until Pinb.1 = 0 'N
Rotate Portc , Right
Portc.0 = 0
Waitms 100
Portc.0 = 1
Do
Loop Until Pinb.0 = 0 'R
Rotate Portc , Left
Portc.0 = 0
Waitms 100
Portc.0 = 1
Return 'program gre na zacetek
Do
Loop _________________ LP.Pavlic |
|
Nazaj na vrh |
|
|
Vlado Profesionalec
Pridružen/-a: Ned Jan 2004 16:11 Prispevkov: 556 Kraj: Ljubljana
|
Objavljeno: Ned Jan 27, 2013 4:57 pm Naslov sporočila: |
|
|
Bom poskusil malo pomagat.
Če cel portb imaš kot vhod in istočasno gleaš samo eno stikalo je enostavno:
config Portb=input 'postaviš vse pine portb kot vhode
portb=255 'vklopiš pull up upore
config portc=output
portc=255
do
menjalnik =pinb
select case menjalnik
case 254:portc=254'vklopi želeno LED vrednost pinb ko je sklenjeno stikalo na pinb.0 je &B11111110 če priklopiš ledice med + in portc bo svetila led na PC.0
case 253 :portc=253' vklopi želeno LED &B11111101
. . .
itn
End Select
Loop
Napiši kateri procesor uporabljaš.
LP |
|
Nazaj na vrh |
|
|
jurcman90 Mojster
Pridružen/-a: Pet Dec 2012 16:34 Prispevkov: 27 Kraj: Stahovica
|
Objavljeno: Ned Jan 27, 2013 6:33 pm Naslov sporočila: |
|
|
Uporabljam Atmega32 _________________ LP.Pavlic |
|
Nazaj na vrh |
|
|
marc Profesionalec
Pridružen/-a: Ned Maj 2009 10:08 Prispevkov: 243 Kraj: Polzela
|
Objavljeno: Ned Jan 27, 2013 10:35 pm Naslov sporočila: |
|
|
Pozdravljeni,
predvidevam da imaš namen vse to zmontirati v avtomobil.
Vrjetno ne boš imel 7. LED-diod v vrsti da bi vedel katera prestava je. Uparabi kakšen 7. segmentni LED displej ali pa kakšen http://trgovina.svet-el.si/productdetail.php?prodid=15300 2X8 LED zaslonček, kjer ti lahko tudi izpisuje prestava 1, prestava 2,.....
Jaz bi vgradil 6. mikro stikal. Vsak mikro stikalo ima svojo prestavo. Vedno bo samo eno stikalo sklenjeno. Torej daš 6. stikal kot vhode, za ler ne rabiš. Če ni nobeno stikalo sklenjeno ti zazna kot "ler" prosti tek. Na izhod daš lahko LED-diode, 7. segmentni displej ali pa LCD.
Program lahko bolj enostavno narediš, kot si ga opisal.
Osnovo ti je že povedal Jure.
To bom na pamet pisal, torej v programu ne bo delovalo.
Primer če bi imel na izhodu 6 LED-diod.
Config porta=input
config portb=output
do
if pina.0=1 then
portb.0=1
else
portb.0=0
end if
...... še za ostale prestave
loop
To je na grobo napisano. Približno tako bi lahko šlo.
Aja, za stikala uporabli Debounce ukaz.
Upam da sem ti kaj pomagal. Drugače imaš že kar nekaj napisano na forumu. Malo pobrskaj. Imaš tudi veliko literature na Svet elektronike, kar ti lahko pride zelo prav kot začetniku.
LP |
|
Nazaj na vrh |
|
|
jurcman90 Mojster
Pridružen/-a: Pet Dec 2012 16:34 Prispevkov: 27 Kraj: Stahovica
|
Objavljeno: Pon Jan 28, 2013 9:37 pm Naslov sporočila: |
|
|
V dirkalnik bom zvezal kasneje prvo ga treba poštimat nato pa bom z 7segmentnim led displayom prikazoval prestave obeh mašin! Prvo bi pa rad za bratca naredil pc simulator!
Hvala vsem za pomoč in upam da mi bo uspelo. Cene se pa ponovno javim na forumu. _________________ LP.Pavlic |
|
Nazaj na vrh |
|
|
marc Profesionalec
Pridružen/-a: Ned Maj 2009 10:08 Prispevkov: 243 Kraj: Polzela
|
Objavljeno: Pon Jan 28, 2013 10:42 pm Naslov sporočila: |
|
|
Saj zato smo, več glav več ve
Kaj pomenijo klicaji na koncu tvojih stavkov?
LP |
|
Nazaj na vrh |
|
|
marc Profesionalec
Pridružen/-a: Ned Maj 2009 10:08 Prispevkov: 243 Kraj: Polzela
|
Objavljeno: Sre Jan 30, 2013 9:40 pm Naslov sporočila: |
|
|
Pozdravljeni,
Ni mi dalo miru, zato sem se lotil zadeve. Vse je lepo potekalo dokler nisem dodal 2,3,4, in 5 tipko.
Koda za eno tipko, ki deluje lepo. Vidi se na posnetku, ki je priložen.
Koda: | $regfile = "m32def.dat"
$crystal = 8000000
Config Portc = Input
Dim Pind.0 As Bit
Dim Pind.1 As Bit
Dim Pind.2 As Bit
Dim Pind.3 As Bit
Dim Pind.4 As Bit
Portc = 255
Config Lcd = 20 * 4
Config Lcdbus = 4
Config Lcdpin = Pin , Db7 = Portd.7 , Db6 = Portd.6 , Db5 = Portd.5 , Db4 = Portd.4 , E = Portd.2 , Rs = Portd.1
Config Debounce = 25
Cursor Off Noblink
Cls
Do
Debounce Pinc.0 , 0 , Ukaz , Sub
Debounce Pinc.0 , 1 , Ukaz1 , Sub
'Debounce Pinc.1 , 0 , Ukaz2 , Sub
'Debounce Pinc.1 , 1 , Ukaz3 , Sub
'Debounce Pinc.2 , 0 , Ukaz4 , Sub
'Debounce Pinc.2 , 1 , Ukaz5 , Sub
'Debounce Pinc.3 , 0 , Ukaz6 , Sub
'Debounce Pinc.3 , 1 , Ukaz7 , Sub
'Debounce Pinc.4 , 0 , Ukaz8 , Sub
'Debounce Pinc.4 , 1 , Ukaz9 , Sub
Loop
End
Ukaz:
Cls
Locate 2 , 1
Lcd "1. prestava"
Return
Ukaz1:
Cls
Locate 1 , 1
Lcd "N-ler"
Return
'Ukaz2:
Cls
Locate 2 , 1
Lcd "2. prestava"
Return
'Ukaz3:
Cls
Locate 1 , 1
Lcd "N-ler"
Return
'Ukaz4:
Cls
Locate 2 , 1
Lcd "3. prestava"
Return
'Ukaz5:
Cls
Locate 1 , 1
Lcd "N-ler"
Return
'Ukaz6:
Cls
Locate 2 , 1
Lcd "4. prestava"
Return
'Ukaz7:
Cls
Locate 1 , 1
Lcd "N.ler"
Return
'Ukaz8:
Cls
Locate 2 , 1
Lcd "5. prestava"
Return
'Ukaz9:
Cls
Locate 1 , 1
Lcd "N-ler"
Return |
Potem sem dodal program za dve tipki. Vse se vidi na posnetku.
To je koda za vseh pet tipk.
Koda: | $regfile = "m32def.dat"
$crystal = 8000000
Config Portc = Input
Dim Pind.0 As Bit
Dim Pind.1 As Bit
Dim Pind.2 As Bit
Dim Pind.3 As Bit
Dim Pind.4 As Bit
Portc = 255
Config Lcd = 20 * 4
Config Lcdbus = 4
Config Lcdpin = Pin , Db7 = Portd.7 , Db6 = Portd.6 , Db5 = Portd.5 , Db4 = Portd.4 , E = Portd.2 , Rs = Portd.1
Config Debounce = 25
Cursor Off Noblink
Cls
Do
Debounce Pinc.0 , 0 , Ukaz , Sub
Debounce Pinc.0 , 1 , Ukaz1 , Sub
Debounce Pinc.1 , 0 , Ukaz2 , Sub
Debounce Pinc.1 , 1 , Ukaz3 , Sub
Debounce Pinc.2 , 0 , Ukaz4 , Sub
Debounce Pinc.2 , 1 , Ukaz5 , Sub
Debounce Pinc.3 , 0 , Ukaz6 , Sub
Debounce Pinc.3 , 1 , Ukaz7 , Sub
Debounce Pinc.4 , 0 , Ukaz8 , Sub
Debounce Pinc.4 , 1 , Ukaz9 , Sub
Loop
End
Ukaz:
Cls
Locate 2 , 1
Lcd "1. prestava"
Return
Ukaz1:
Cls
Locate 1 , 1
Lcd "N-ler"
Return
Ukaz2:
Cls
Locate 2 , 1
Lcd "2. prestava"
Return
Ukaz3:
Cls
Locate 1 , 1
Lcd "N-ler"
Return
Ukaz4:
Cls
Locate 2 , 1
Lcd "3. prestava"
Return
Ukaz5:
Cls
Locate 1 , 1
Lcd "N-ler"
Return
Ukaz6:
Cls
Locate 2 , 1
Lcd "4. prestava"
Return
Ukaz7:
Cls
Locate 1 , 1
Lcd "N-ler"
Return
Ukaz8:
Cls
Locate 2 , 1
Lcd "5. prestava"
Return
Ukaz9:
Cls
Locate 1 , 1
Lcd "N-ler"
Return |
Vem da je problem v programu, ampak ne najdem napake. Probal sem dodati waitms v določene delov programa in ni pomagalo. Sprobal sem vse kar poznam. mogoče je ukaz debounce namenjen samo za eno tipko?
Tukaj je povezava do posnetka.
http://www.youtube.com/watch?v=ZxezzSKRKaA&feature=youtu.be
Hvala za pomoč in nasvete.
LP |
|
Nazaj na vrh |
|
|
stursc Profesionalec
Pridružen/-a: Pet Feb 2005 14:50 Prispevkov: 109 Kraj: Ravne
|
Objavljeno: Čet Jan 31, 2013 7:00 am Naslov sporočila: |
|
|
Marc, tako ne more delovati !
Poskusi to.
Citiram: |
[code]$regfile = "m32def.dat"
$crystal = 8000000
Config Portc = Input
Tipka1 alias pinc.0
Tipka2 alias pinc.1
Tipka3 alias pinc.2
Tipka4 alias pinc.3
Tipka5 alias pinc.4
Config Lcd = 20 * 4
Config Lcdbus = 4
Config Lcdpin = Pin , Db7 = Portd.7 , Db6 = Portd.6 , Db5 = Portd.5 , Db4 = Portd.4 , E = Portd.2 , Rs = Portd.1
Cursor Off Noblink
Cls
Do
locate 1,1
If tipka1=0 then
lcd "Prestava 1 "
elseif tipka2=0 then
lcd "Prestava 2 "
elseif tipka3=0 then
lcd "Prestava 3 "
elseif tipka4=0 then
lcd "Prestava 4 "
elseif tipka5=0 then
lcd "Prestava 5 "
else
lcd " N - ler "
end if
Loop
End
|
LP, stursc |
|
Nazaj na vrh |
|
|
marc Profesionalec
Pridružen/-a: Ned Maj 2009 10:08 Prispevkov: 243 Kraj: Polzela
|
Objavljeno: Čet Jan 31, 2013 4:33 pm Naslov sporočila: |
|
|
Pozdravljen,
hvala za pomoč. Ampak ne deluje. Namestp L kaže prestava 3. Prestava, 1 in 2 prestava delujeta, (3,4,5 pa ne) . Ker ni cls ukazov ostajajo črke od prejšne prestave.
Če dodam cls ukaze mi začne zaslon preveč utropati....
Hm, kaj bi še lahko naredil. Še bom določene dele programa probal spremeniti.
LP |
|
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 You cannot attach files in this forum You cannot download files in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|