skraceni kurs ucenja picbasica
Moderators: pedja089, stojke369, [eDo], trax
Re: skraceni kurs ucenja picbasica
Siguran sam, kad tasterima izadjem iz greske i ponovo udjem u tu labelu program ide tamo gde treba... Desava se samo prilikom stavljanja PIC-a pod napon
Re: skraceni kurs ucenja picbasica
Nisam gledao kod, ali iz iskustva znam da prvo čitanje temperature traje.
Zato pošalji na čitanje pa onda prikaži neki uvodni natpis, malo pauze, itd
Zato pošalji na čitanje pa onda prikaži neki uvodni natpis, malo pauze, itd
Ako kaniš pobijediti, ne smiješ izgubiti
Re: skraceni kurs ucenja picbasica
Meni svaki put prvo čitanje na DS-u ne odradi kako treba... U većini slučajeva to mi i nije bitno, al sam pravio jedan uređaj gdje to prvo čitanje moralo bit točno.
Rješenje nisam kompliciro, jednostavno ako uđe u grešku, u programu je određeno da pročita ponovo. Ako i nakon drugog pokušaja ne uspije, tek onda ispiši grešku.
I sve radi bez problema
Rješenje nisam kompliciro, jednostavno ako uđe u grešku, u programu je određeno da pročita ponovo. Ako i nakon drugog pokušaja ne uspije, tek onda ispiši grešku.
I sve radi bez problema
Re: skraceni kurs ucenja picbasica
Code: Select all
STOJIM: 'NAMIŠTANJE VRIMENA PAUZE
IF PORTD.1 = 0 THEN 'AKO JE PUC + PRITISNUT
PAUZA=PAUZA+1
PAUSE 200
ENDIF
IF PORTD.2 = 0 THEN 'AKO JE PUC - PRITISNUT
PAUZA=PAUZA-1
PAUSE 200
ENDIF
IF PORTD.3 = 0 THEN 'AKO JE ENTER PRITISNUT
PAUSE 500
GOTO RADIM
ENDIF
PAUSE 50
lcdout $FE,1
lcdout $FE,$80, "VRIJEME PAUZE...."
LCDOUT $FE,$C0, "SEC = ", DEC PAUZA
GOTO STOJIM
Re: skraceni kurs ucenja picbasica
ma krivo san pisa za lcdout.
sad je ok
sad je ok
lcd for next
Code: Select all
M VAR BYTE
V VAR BYTE
START: 'NAMIŠTANJE VRIMENA PAUZE
IF PORTD.1 = 0 THEN 'AKO JE PUC + PRITISNUT
POKRET=POKRET+1
PAUSE 400
ENDIF
IF POKRET => 5 THEN RADIM
PAUSE 400
lcdout $FE,1, "PRITISNI START"
LCDOUT $FE,$C0, "5 SEKUNDI ", DEC POKRET
GOTO START
RADIM:
lcdout $FE,1, "POKRECEM"
LCDOUT $FE,$C0, "STARTNI SLJED"
PAUSE 2000
hiGH porta.0
FOR M=0 to 30
lcdout $FE,1, "PUMPAM GORIVO"
LCDOUT $FE,$C0, "MALA BRZINA", DEC M
M=M+1
pause 1000
next M
LOW PORTA.0
GOTO VELIKA
VELIKA:
HIGH PORTA.1
FOR V=0 to 30
lcdout $FE,1, "ZARNICA ON"
LCDOUT $FE,$C0, "VELIKA BRZINA", DEC V
V=V+1
pause 1000
next V
LOW PORTA.1
END
zašto mi FOR NEXT petlja broji po 2, znači na lcd mi ide 2, 4 , 6 ......????????????'
Re: skraceni kurs ucenja picbasica
Tako si napisao da radi...
For next sam uvecava promenljivu. A ti u svakom for imas m=m+1. Ako on sam uveca za 1 i ti uvecas za 1 dobijes po prolazu da se uveca za dva.
For next sam uvecava promenljivu. A ti u svakom for imas m=m+1. Ako on sam uveca za 1 i ti uvecas za 1 dobijes po prolazu da se uveca za dva.
Re: skraceni kurs ucenja picbasica
radin program za diesel webasto grijač. u orginalu je radio sa mehaničkom timer sklopkom.
ima 2-brzinski ventilator, žarnicu, te elektroventil diesela koji je serijski spojen sa 2 termoprekidača (jedan u gorivoj komori drugi na izlazu vrućeg zraka).
znači kad držin tipku start duže od 5 sec kreće startna rutina
pali se ventilator mala brzina te elektroventil nekih 40-ak sec. zatim žarnica, elektroventil i velika brzina od toga žarnica samo 30-ak sec. zatim nastavlja samo velika brzina dok ne želim izgasit.
gašenje bi trebalo izgasit elektroventil i nastaviti sa velikom brzinom cca 2 min.
sad san počeo pisat taj program.
izlazi i vrime nisu podešeni definitivno jer mi je lakše simulirat u proteusu.
PROBLEM:
Kako iz radne labele (URADU:) čitat stanje tipke stop i ukoliko je pritisnuta duže od 5 sek ide u stop labelu (TERM:) a ako ne nastavlja sa uradu labelom.
prova san sto načina ali neide
E, I ovi zadnji IF kad stavim endif poslije njih zašto mi microcode izbaci ENDIF WITHOUT IF THEN???
ima 2-brzinski ventilator, žarnicu, te elektroventil diesela koji je serijski spojen sa 2 termoprekidača (jedan u gorivoj komori drugi na izlazu vrućeg zraka).
znači kad držin tipku start duže od 5 sec kreće startna rutina
pali se ventilator mala brzina te elektroventil nekih 40-ak sec. zatim žarnica, elektroventil i velika brzina od toga žarnica samo 30-ak sec. zatim nastavlja samo velika brzina dok ne želim izgasit.
gašenje bi trebalo izgasit elektroventil i nastaviti sa velikom brzinom cca 2 min.
sad san počeo pisat taj program.
izlazi i vrime nisu podešeni definitivno jer mi je lakše simulirat u proteusu.
PROBLEM:
Kako iz radne labele (URADU:) čitat stanje tipke stop i ukoliko je pritisnuta duže od 5 sek ide u stop labelu (TERM:) a ako ne nastavlja sa uradu labelom.
Code: Select all
clear
M VAR WORD
V VAR WORD
RM VAR WORD
RS VAR WORD
pokret var byte
STO VAR BYTE
trisd=%11111111
'======================================================
START:
IF PORTD.1 = 0 THEN 'AKO JE PRITISNUTA START TIPKA
POKRET=POKRET+1
PAUSE 400
IF PORTD.1=1 THEN 'AKO JE OTPUŠTENA START TIPKA UNUTAR 5 SEK
pokret=0
ENDIF
endif
IF POKRET => 5 THEN RADIM ' AKO JE START TIPKA DRŽANA DULJE OD 5 SEK
PAUSE 400
lcdout $FE,1, "PRITISNI START"
LCDOUT $FE,$C0, "5 SEKUNDI ", DEC2 POKRET
GOTO START
RADIM: ' POKRETANJE STARTNOG SLJEDA 1
lcdout $FE,1, "POKRECEM"
LCDOUT $FE,$C0, "STARTNI SLJED"
PAUSE 2000
hiGH porta.0
FOR M=0 to 5 STEP 1
lcdout $FE,1, "PUMPAM GORIVO"
LCDOUT $FE,$C0, "MALA BRZINA ", DEC2 M
pause 1000
next M
LOW PORTA.0
GOTO VELIKA
VELIKA: ' STARTNI SLJED 2
HIGH PORTA.1
FOR V=0 to 5 STEP 1
lcdout $FE,1, "ZARNICA ON"
LCDOUT $FE,$C0, "VELIKA BRZINA ", DEC2 V
pause 1000
next V
LOW PORTA.1
goto URADU
URADU: ' OVDJE POČIMA RAD
HIGH PORTA.2
FOR RS=0 TO 60 STEP 1
lcdout $FE,1, "RADIM ....."
LCDOUT $FE,$C0, "VRIME RADA:",DEC2 RM, ":", DEC2 RS
PAUSE 1000
GOSUB TSTOP
NEXT RS
IF RS>=59 THEN
RS=0
RM=RM+1
ENDIF
GOTO URADU
TERM:
LOW PORTA.2
HIGH PORTA.3
PAUSE 10000
TSTOP:
IF PORTD.0 = 0 THEN SS
PAUSE 50 'AKO JE PRITISNUTA START TIPKA
RETURN
SS:
lcdout $FE,1, "PRITISNI STOP"
LCDOUT $FE,$C0, "5 SEKUNDI ", DEC2 STO
IF PORTD.0 = 0 THEN 'AKO JE PRITISNUTA STOP TIPKA
STO=STO+1
PAUSE 400
GOTO SS
ENDIF
IF STO => 5 THEN TERM
PAUSE 5000
IF STO <5 THEN URADU
PAUSE 400
GOTO SS
E, I ovi zadnji IF kad stavim endif poslije njih zašto mi microcode izbaci ENDIF WITHOUT IF THEN???
Re: skraceni kurs ucenja picbasica
U for petlju ubacis ispitivanje tastera samo.
Klasika if then bla bla...
Ako ti je sporo da proverava svake sekunde, ti onda stavi pauzu u petlju od 100ms, i for da ide do 600 umesto do 60.
A za detektovanje drzanja 5sec, stavis ako je taster pusten promenljiva je nula, ako je taster stisnut uvecas je za jedan.
Kada dodje do broja sekundi koliko ti treba ides gde oces...
Klasika if then bla bla...
Ako ti je sporo da proverava svake sekunde, ti onda stavi pauzu u petlju od 100ms, i for da ide do 600 umesto do 60.
A za detektovanje drzanja 5sec, stavis ako je taster pusten promenljiva je nula, ako je taster stisnut uvecas je za jedan.
Kada dodje do broja sekundi koliko ti treba ides gde oces...
-
- Pocetnik na forumu
- Posts: 46
- Joined: 29-01-2013, 00:44
Re: skraceni kurs ucenja picbasica
Ljudi da li je neko imao problem da unese kod u pic, i da ga ubaci u semu i da pic ne daje nikakve znake zivota, a pritom sam kod proverio u proteusu i sve radi kako treba ubacim ga u pic i on ne daje nikakve znake zivota treba da ispise neku vrednost na display... mucim se vec nedelju dana da otkrijem sta je i nisam uspeo displej ukljuci pozadinsko svetlo nekada izbaci kockice i reaguje na potenciometar smanjuje contrast i pojacava ali ne ispisuje nista sto mi je na picu... mislio sam da je do kristala ali sam stavljao razne kristale... medjutim nista se ne desava kada ubacim pic opet u programator(pickit2 clone) on iscita ceo kod kako je i zapisao... sad ne znam sta moze da kada sam deklarisao kristal deklarisao sam ga sa DEFINE OSC 4 sad ne znam da li je to samo dovoljno za eksterni oscilator ili jos nesto trebam pocetnik sam... UNAPRED HVALA.
Re: skraceni kurs ucenja picbasica
Fuse bitove moras setovati.
Moze biti i neispravan displej.
KReni prvo od programa da blinka led na nekom pinu.
Moze biti i neispravan displej.
KReni prvo od programa da blinka led na nekom pinu.
Re: skraceni kurs ucenja picbasica
ako pritisnem taster zbroji +1
ako držim taster zbraja svaku sekundu +1
ako držim taster duže od 5 sek zbraja +10
ima li netko primjer koda kako bi to izgledalo?
ako držim taster zbraja svaku sekundu +1
ako držim taster duže od 5 sek zbraja +10
ima li netko primjer koda kako bi to izgledalo?
Re: skraceni kurs ucenja picbasica
evo za ovo neki primjer koda da mi interrupt više uđe u glavupedja089 wrote:Ja koristim hardverski. A to sto si napisao sada svako implementira na neki svoj nacin.
Recimo generisi interapt svakih x ms, i u interaptu proveravaj stanje tastera, ako se nije promenilo zadnjih X puta promeni stanje neke promenljive, ako se zadrzalo jos y puta povecaj neku promenljivu koja ce da ubrza.
Re: skraceni kurs ucenja picbasica
Ja nemam. Ali nije preterano tesko za uraditi.
Re: skraceni kurs ucenja picbasica
Dali je puno za pic (16F648 sa 4 MHz internim osc) da ispravno broji 50-60 impulsa u sekundi u nekakvom uobičajenom PBP programu bez korištenja interupta?
Ako kaniš pobijediti, ne smiješ izgubiti
Re: skraceni kurs ucenja picbasica
Sve zavisi sta radi i kako i zasto broji.
Sa onom komandom count, nije puno koliko znam. I 10 puta vise prolazi. Ali ona broji odredjeni vremenski interval, to bi bilo ok za frekfenciometar neki.
Sto se tice nekog obicnog brojaca tipa brojilo struje, moze lagano i to.
Ali problem nastaje kad se doda neki displej itd...
Ti da proveris na svake 2-3mS stanje pina lagano mozes cak i ako imas 7seg displej sa multipleksom.
Pa onda izmedju svake cifre skocic u rutinu za brojanje.
Sa onom komandom count, nije puno koliko znam. I 10 puta vise prolazi. Ali ona broji odredjeni vremenski interval, to bi bilo ok za frekfenciometar neki.
Sto se tice nekog obicnog brojaca tipa brojilo struje, moze lagano i to.
Ali problem nastaje kad se doda neki displej itd...
Ti da proveris na svake 2-3mS stanje pina lagano mozes cak i ako imas 7seg displej sa multipleksom.
Pa onda izmedju svake cifre skocic u rutinu za brojanje.
Re: skraceni kurs ucenja picbasica
Ma nesto u ovom smislu:
Ova labela "Broji" se poziva nekim drugim uslovom
Nisam zadovoljan s radom uređaja a nisam siguran dali mi PIC laže u brojanju ili je nešto do hardwera
Sa interuptima nemam iskustva, pa me zanima dali ovo prolazi na 4 MHz i 50-60 impulsa u sekundi.
Program ima još dosta koda i s LCD ispisom, međutim kada uđe u ovu petlju za brojanje, ne izlazi iz nje dok ne odbroji zadati broj impulsa.
Code: Select all
Broji:
nStanje=Senz
if nStanje < sStanje then broj=broj+1
if broj => brojZadati then 'ako je izbrojao zadati broj impulsa
low Rele
goto ---> izlaz iz ove petlje
endif
sStanje=nStanje
goto Broji
Nisam zadovoljan s radom uređaja a nisam siguran dali mi PIC laže u brojanju ili je nešto do hardwera
Sa interuptima nemam iskustva, pa me zanima dali ovo prolazi na 4 MHz i 50-60 impulsa u sekundi.
Program ima još dosta koda i s LCD ispisom, međutim kada uđe u ovu petlju za brojanje, ne izlazi iz nje dok ne odbroji zadati broj impulsa.
Ako kaniš pobijediti, ne smiješ izgubiti
Re: skraceni kurs ucenja picbasica
Nisam siguran ali ovo treba da broji reda khz. Mozes staviti toggle portx.x i sa necim izmeriti frekf. Da vidis koliko se brzo vrti petlja. Podeli to sa 4(sa 2 je teoretski dosta) i dobices max f koju sigurno brojis.
Problem je iako je f signala 1hz ali ako su impulsi 1uS sirine. Nema sanse da to izbroji pic. Tako da i oblik signala igra ulogu ne samo frekfencija.
Problem je iako je f signala 1hz ali ako su impulsi 1uS sirine. Nema sanse da to izbroji pic. Tako da i oblik signala igra ulogu ne samo frekfencija.
Re: skraceni kurs ucenja picbasica
Ok,hvala. Probat ću ovo izmjeriti.
Nisam bio siguran dali ostali dio kod-a utiče na brzinu pic-a, mada on kada udje u petlju za brojanje ne izlazi iz nje dok ne odbroji zadati broj impulsa.
Morat ću malo bolje prekontrolisati hardver.
Hvala još jednom.
Nisam bio siguran dali ostali dio kod-a utiče na brzinu pic-a, mada on kada udje u petlju za brojanje ne izlazi iz nje dok ne odbroji zadati broj impulsa.
Morat ću malo bolje prekontrolisati hardver.
Hvala još jednom.
Ako kaniš pobijediti, ne smiješ izgubiti
Re: skraceni kurs ucenja picbasica
Ako program radi ovako kako si napisao, i nema interapta, to je to. NEma sta drugo da utice.