pic basic

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

dzigi021
Penjem se :)
Penjem se :)
Posts: 71
Joined: 04-01-2012, 07:50

pic basic

Post by dzigi021 »

Pozdrav svima vec neko vreme citam o mikro kontrolerima i neide mi samo za pocetak bih hteo da naucim u basicu da napisem poogram koji ce paliti i gasiti led diode radio bi sa mikro kontrolerom 16f877 nasao sam na netu proton basic 1.0.4.6 i skinuo ga
e sada od mnogih pitanja koje bih vam povtavio na ovu temu evo prvog:
dali bi ako bi otkucao ovo i preveo u masinski kod i ubacio u kontroler dobio 5v na pinu:
PORTA0=1
PAUSE1000
PORTA0=0
END
dali bi na portu a pinu 0 dobio +5v za led diodu u trajanju od 1sec
to bi bilo moje prvo pocetnicko pitanje
User avatar
LIAM
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 379
Joined: 27-06-2008, 14:52
Location: Rijeka - Hrvatska

Re: pic basic

Post by LIAM »

dzigi021
Penjem se :)
Penjem se :)
Posts: 71
Joined: 04-01-2012, 07:50

Re: pic basic

Post by dzigi021 »

E ovo je super hvala ti za ovu adresu,ali imam jedan problem adresa koju je on naveo za skidanje microcode studio i njegovog kompailera nepostoji,dali mi neko moze dati adresu gde mogu skinuti pic basic i njegov compiler unapred hvala,i jos sednom hvala za onu adresu sve sam shvatio
dzigi021
Penjem se :)
Penjem se :)
Posts: 71
Joined: 04-01-2012, 07:50

Re: pic basic

Post by dzigi021 »

dzigi021 wrote:E ovo je super hvala ti za ovu adresu,ali imam jedan problem adresa koju je on naveo za skidanje pic basica i microcode studio i njegovog kompailera nepostoji,dali mi neko moze dati adresu gde mogu skinuti pic basic i microcode studio unapred hvala,i jos sednom hvala za onu adresu sve sam shvatio
User avatar
78L05
Pravo sam se raspisao :)
Pravo sam se raspisao :)
Posts: 1402
Joined: 28-05-2009, 13:22
Location: Hrvatska

Re: pic basic

Post by 78L05 »

Nema potrebe da dva puta ponavljas svoj post.
Tvoje pitanje nije jasno, u naslovu teme stoji pic basic, a onda u pitanju spominjes proton basic. :?
Na forumu mozes pronaci tutorijal u kojem ti sve lijepo stoji, ako ti je to tesko prelistati i prouciti, evo koda za paljenje/gasenje diode u rasponu od jedne sekunde:

Code: Select all

symbol led = porta.0
output led
program:
high led
pause 1000
low led
pause 1000
goto program
end
Ne vjeruj u čuda - računaj na njih!
dzigi021
Penjem se :)
Penjem se :)
Posts: 71
Joined: 04-01-2012, 07:50

Re: pic basic

Post by dzigi021 »

hvala na pomoci evo sad cu tacno definisati sta zelim:
pale mi se diode po portovima uz pauzu od jedne secunde isto kao sto si i ti napisao
pitanje je sledece kako definisao sam taster
sta da napisem
if tasretr=0 then pa komanda koju neznam
treba da zaustavi tu program da nepali dalje ledovke dok nestisnem opet taster
nadam se da sam sada jasnije
User avatar
78L05
Pravo sam se raspisao :)
Pravo sam se raspisao :)
Posts: 1402
Joined: 28-05-2009, 13:22
Location: Hrvatska

Re: pic basic

Post by 78L05 »

Evo recimo da imas tri LED-ice i jedan taster. LED-ice neka budu na PORTB.1, PORTB.2, PORTB.3, a taster na PORTA.4. U pocetku su ti sve tri LED-ice ugasene i cekaju na pritisak tastera, kada pritisnes taster onda se pali prva LED-ica, na iduci pritisak se pali druga, pa treca, i nakon trece gase se sve osim prve i tako unedogled.

Code: Select all

symbol taster = porta.4
symbol led1 = portb.0
symbol led2 = portb.1
symbol led3 = portb.2
stanje var byte
stanje = 0

input taster
output led1
output led2
output led3

low led1
low led2
low led3

program:
if taster = 0 then
pause 200
stanje = stanje + 1
if stanje = 3 then stanje = 1 : low led2 : low led3
endif

select case stanje
case 1
high led1
case 2
high led1
high led2
case 3
high led1
high led2
high led3
end select

goto program

end
Ne vjeruj u čuda - računaj na njih!
dzigi021
Penjem se :)
Penjem se :)
Posts: 71
Joined: 04-01-2012, 07:50

Re: pic basic

Post by dzigi021 »

E blizu smo jako da se razumemo
po ovom tvom bi se palili ledici kada stisnem taster blizu sam resenja izvini ako te mucim,ali stvarno mi je jako jako bito to sada cu napisati sta meni treba recima valjda ces me razumeti,hvala ti i izvini ako te mucim
zanci:
definisao sam koje je koji ilaz
definisao sam taster kao ulazni
e sada
pali se ledovka1
ako stisnem taster program staje ako nestisnem nastavlja dalje
ako sam stisao taster moram ga ponovo stisnuti da bi program krenuo dalje
pali se ledovka2
ako stisnem taster program staje ako nestisnem nastavlja dalje
ako sam stisao taster moram ga ponovo stisnuti da bi program krenuo dalje
pali se ledovka4
ako stisnem taster program staje ako nestisnem nastavlja dalje
ako sam stisao taster moram ga ponovo stisnuti da bi program krenuo dalje
pali se ledovka5
i tako dalje
mislim da sam objasnijo sada dobro
Pozdrav
User avatar
78L05
Pravo sam se raspisao :)
Pravo sam se raspisao :)
Posts: 1402
Joined: 28-05-2009, 13:22
Location: Hrvatska

Re: pic basic

Post by 78L05 »

Razumio sam, a u kojim se razmacima pale LED-ice ukoliko je uvjet ispunjen (taster nije stisnut)?
Ne vjeruj u čuda - računaj na njih!
dzigi021
Penjem se :)
Penjem se :)
Posts: 71
Joined: 04-01-2012, 07:50

Re: pic basic

Post by dzigi021 »

u razmaku od jedni sekunde
User avatar
78L05
Pravo sam se raspisao :)
Pravo sam se raspisao :)
Posts: 1402
Joined: 28-05-2009, 13:22
Location: Hrvatska

Re: pic basic

Post by 78L05 »

Evo, prouci ovo, napravio sam konkretan primjer sa 5 LED-ica.

Code: Select all

symbol led1 = portb.0
symbol led2 = portb.1
symbol led3 = portb.2
symbol led4 = portb.3
symbol led5 = portb.4
symbol taster = porta.4

output led1
output led2
output led3
output led4
output led5
input taster

ledica var byte
ledica = 0 'u pocetku gori jedna LED-ica

petlja var word
petlja = 0

stanje var bit
stanje = 1
'stanje = 0 -> program je zakocen
'stanje = 1 -> program odbrojava
low led1 : low led2 : low led3 : low led4 : low led5



rutina:
if stanje = 0 then goto cekaj


if stanje = 1 then
ledica = ledica + 1
if ledica = 6 then ledica = 0 

select case ledica
case 0
low led1 : low led2 : low led3 : low led4 : low led5
case 1
high led1
case 2
high led1 : high led2
case 3
high led1 : high led2 : high led3
case 4
high led1 : high led2 : high led3 : high led4
case 5
high led1 : high led2 : high led3 : high led4 : high led5
end select

for petlja = 0 to 1000
cekaj:
if taster = 0 then
pause 200
stanje = not stanje
goto rutina
endif
if stanje = 0 then goto cekaj
pause 1
petlja = petlja + 1
next

endif
goto rutina
Ne vjeruj u čuda - računaj na njih!
dzigi021
Penjem se :)
Penjem se :)
Posts: 71
Joined: 04-01-2012, 07:50

Re: pic basic

Post by dzigi021 »

hval[a ti drug ima nejasnoca sad cu probati da proucim sve ako uspem da rastumacim sper ako ne pisacu red po red i tumaciti ga po mom da vidis jel to to jel velik je program a necu da zeznem da moram kucat nanovo
User avatar
78L05
Pravo sam se raspisao :)
Pravo sam se raspisao :)
Posts: 1402
Joined: 28-05-2009, 13:22
Location: Hrvatska

Re: pic basic

Post by 78L05 »

Evo ti objašnjenje mog koda.

symbol led1 = portb.0
symbol led2 = portb.1
symbol led3 = portb.2
symbol led4 = portb.3
symbol led5 = portb.4
symbol taster = porta.4

Preimenujem portove koristeći SYMBOL naredbu

output led1
output led2
output led3
output led4
output led5
input taster

Proglasavam koji je pin ulazni, a koji izlazni (LED-ice su sve izlazne, a taster je dakako ulazan)

ledica var byte
ledica = 0 'u pocetku gori jedna LED-ica

petlja var word
petlja = 0

stanje var bit
stanje = 1
'stanje = 0 -> program je zakocen
'stanje = 1 -> program odbrojava

Definiram varijable, varijablu ledica kao BYTE (0-255), onda ce mi sluziti da program zna koliko LED-ica treba goriti u odredenom trenutku, u pocetku ju izjednacavam sa nulom, jer u pocetku ni ne treba goriti ijedna LED-ica
Varijablja petlja nema posebnu namjenu, ona sluzi za odbrojavanje unutar FOR-NEXT
Stanje sam zbog manjeg zauzeca definirao kao BIT (i da ga mogu negirati), u komentaru pise sto znaci kad je stanje = 0, a sto kada je stanje = 1


low led1 : low led2 : low led3 : low led4 : low led5

Prije nego program ude u "rutinu" treba postaviti logicke nule na sva stanja izlaza (pogasiti sve LED-ice).
Program bi mozda radio i bez ovoga, ali se moze dogoditi da se procesor "zablesa" pa bi neka od LED-ica gorila.


rutina:
if stanje = 0 then goto cekaj

Program ulazi u rutinu, automatski provjerava vrijednost varijable stanje, ako je to = 0 onda program automatski skace do labele cekaj (o kojoj ce kasnije biti govora).

if stanje = 1 then
ledica = ledica + 1
if ledica = 6 then ledica = 0

Ako stanje nije = 0, program preskace prvu liniju u labeli rutina (ne skace na dio "cekaj"), vec ide dalje i tada se uvjeri da je stanje = 1.
Kada se uvjeri da je stanje = 1 (program je odbrojen i treba odbrojavati) uveca vrijednost varijable stanje za 1 (ako je gorila jedna dioda, sad ce goriti dvije itd...).
Uzmimo da trenutno gori pet dioda i da program nije zakocen, odnosno odbrojava, nakon toga u ovom dijelu varijabla LED-ica bi dosla na vrijednost 6, a buduci da ovaj primjer radi sa 5 LED-ica nebi vise valjalo. Zato nakon uvecanja broja LED-ica koje su upaljene provjeri da nije slucajno taj broj dosao do 6, ako je dosao on ga vraca na nulu, odnosno tada vise ne gori nijedna LED-ica i program krece iz pocetka.

select case ledica
case 0
low led1 : low led2 : low led3 : low led4 : low led5
case 1
high led1
case 2
high led1 : high led2
case 3
high led1 : high led2 : high led3
case 4
high led1 : high led2 : high led3 : high led4
case 5
high led1 : high led2 : high led3 : high led4 : high led5
end select

Ovaj dio je jasan sam po sebi, dakle to je dio koji u ovisnosti o vrijednosti varijable ledica pali tocno odredei broj dioda, odnosno, ako je ledica = 3, gorit ce 3 diode, ako je 5 gorit ce 5 dioda.
Ovaj se dio mogao izvesti i pomocu vise IF-THEN funkcija, ali smatram da je ovako preglednije.

for petlja = 0 to 1000
cekaj:
if taster = 0 then
pause 200
stanje = not stanje
goto rutina
endif
if stanje = 0 then goto cekaj
pause 1
petlja = petlja + 1
next
endif

U ovom trenutku cemo predpostaviti da je program otkocen (stanje = 1).
Program je popalio sve LED-ice koje je trebao (ovisi o varijabli ledice) i sada ceka nebi li netko pritisnuo taster.
Dio u kojem se ceka da se pritisne taster izveden je pomocu FOR-NEXT petlje, zasto?
Zato sto kada bi napisao samo PAUSE 1000 (pauza od 1 sekunde) on bi zaista pauzirao jednu sekundu i ponovno skocio na provjeru stanja i upalio jednu LED-icu vise, medutim, vrlo je vjerojatno da ce taster biti stisnut BAS u toj jednoj sekundi, i zato program u toj jednoj sekundi 1000 puta provjeri stanje tastera.

Ukoliko se taster pritisne:


if taster = 0 then
pause 200
stanje = not stanje
goto rutina
endif

Prvo napravi pauzu od 200 milisekundi (vrijeme koje je potrebno da se opusti taster, po potrebi se moze povecati, ali mislim da je bespotrebno).
Negira se varijabla stanje, ako je vrijednost bila 0 sada je 1, ako je bilo 1 sada je 0.
Nakon sto je "kontrirao" vrijednost stanja vraca program na rutinu.
I sad uzmimo da smo zakocili program (stanje = 0), program kad se vrati u labelu rutina odmah napravi provjeru i vidi da je stanje zaista = 0, i odmah ga baca na dio "cekaj" i tu samo ceka nebi li netko stisnuo taster i ponovno negirao stanje tako da odbrojavanje zapocne.

Objasnio sam "prizemno" tako da bi trebalo biti jasno, ako ipak nije pitaj.
Ne vjeruj u čuda - računaj na njih!
dzigi021
Penjem se :)
Penjem se :)
Posts: 71
Joined: 04-01-2012, 07:50

Re: pic basic

Post by dzigi021 »

E sada ovo je bas bas jasno ali jos koje pitanjece i begam da tipkam program micro code imam jos 10 dana do isteka a imam da kucam i kucam
pitanja:
radicu pomocu mikro kontrolera 16f877
on ima dosta izlaza
meni ce nekad biti u redu upaljeno i po 12 ledovki dali u delu gde si ti napisao :
if ledica = 6 then ledica = 0
ja posto ce mi nekada biti upaljeno i po 12 ledovki treba da napisem
if ledica = 13 then ledica = 0
po meni casa mogu napisati kolko god hocu-redova
i jos nesto dali se sa prtelaska na saze 1 na case 2 gase ledovke ili moram pisati ovo?
case0
high led 1,high led 2,high led 3
pause 1000
low led 1,low led2,low led 3
case1
.........
dali bi se ovako upalile pa ugasile,ili nemoram pisati low samom komandom case se gase pa pale nanovo
puno al puno ti hvala
dzigi021
Penjem se :)
Penjem se :)
Posts: 71
Joined: 04-01-2012, 07:50

Re: pic basic

Post by dzigi021 »

Jos nesto sto sam video kada stisnem taster da pauziram proces,kada ga stisnem opet da krene dali ce se program vratiti na labelu rutina ili ce nastavitiu sa programom dalje odande gde je bijo zaakocen,meni treba da nastavi dalje a ne da skoci na labelu,
ako je komplikovano da nestavi program pisacu ispod svake promene paljena ledovki novu libelu i resio sam
dzigi021
Penjem se :)
Penjem se :)
Posts: 71
Joined: 04-01-2012, 07:50

Re: pic basic

Post by dzigi021 »

i ako bi ispot svake labele pravijo prtlju dali bi se on vrteo oko te labele uvek
znzaci:
upali led 1
pa petlja
upali led dva i tri
pa petlja
meni treba da kada stisnem dugme naprimer kad upali jednu diodu stisno sam dugme da tu diodu drzi upaljenu pa kad opet stisnem da upali drugu i tako
dzigi021
Penjem se :)
Penjem se :)
Posts: 71
Joined: 04-01-2012, 07:50

Re: pic basic

Post by dzigi021 »

Jao citam jedno sto pedeseti put ono sto si mi napisao i mislim da to nije to
meni treba ovo da radi:
upalio sam jednu diodu.
ako stisnem taster i pustim ta dioda ostaje da gori dok nestisnem opet taster.
kad stisnem opet taster upali se jos jedna.
a ne da se vrati na pocetak
znaci kada pauziram treba da gore diode koje su popaljene do tada a ne da se ugase i da program krene iz pocetka
naprimer aj sada cu ti dati bas al bas prost primer
kao na videu pauza e tako treba da mi radi gde je stao to da drzi upaljeno,kada pustim,ili kada pustm i opet stisnem taster da krene dalje ej poludecu nemas pojma kolko mi treba to Puno ti hvala sto mi pomazes jako sam ti zahvalan
User avatar
78L05
Pravo sam se raspisao :)
Pravo sam se raspisao :)
Posts: 1402
Joined: 28-05-2009, 13:22
Location: Hrvatska

Re: pic basic

Post by 78L05 »

Ja to onda ocito nisam shvatio, napravio sam tocno kako si napisao u objasnjenju u onom postu prije no sto sam napisao kod.
Probaj staviti video.
Ne vjeruj u čuda - računaj na njih!
dzigi021
Penjem se :)
Penjem se :)
Posts: 71
Joined: 04-01-2012, 07:50

Re: pic basic

Post by dzigi021 »

gledaj druze moj dobri ovo mi treba kao kaseta da ide:
upalise :led1,led2,led3
stisao sam taster
led1,led2.led3 gore
stisao sam opet taster
gase se led1,led2,led3
i pale le nove ledovke
naprimer
led4,led5,led6
stisao sam taster
led 4,led5,led6 gore
stisao sam taster opet
led4,led5,led6 se gase
i tako dalje
User avatar
78L05
Pravo sam se raspisao :)
Pravo sam se raspisao :)
Posts: 1402
Joined: 28-05-2009, 13:22
Location: Hrvatska

Re: pic basic

Post by 78L05 »

Ajde reci jos ovo, da ti napisem i taj program pa da zavrsis to, ima sve zajedno 12 dioda, i sta kad dode do tih 12?
Ne vjeruj u čuda - računaj na njih!
Post Reply