skraceni kurs ucenja picbasica

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

Moderators: stojke369, pedja089, [eDo], trax

Post Reply
User avatar
electron
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 225
Joined: 28-02-2009, 19:20
Location: Serbia

Re: skraceni kurs ucenja picbasica

Post by electron »

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
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1625
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: skraceni kurs ucenja picbasica

Post by WhiteHead »

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
Ako kaniš pobijediti, ne smiješ izgubiti
User avatar
Black
Odlično uznapredovao
Odlično uznapredovao
Posts: 981
Joined: 17-12-2008, 15:44

Re: skraceni kurs ucenja picbasica

Post by Black »

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
AZROCAT
Posts: 20
Joined: 01-09-2009, 15:58

Re: skraceni kurs ucenja picbasica

Post by AZROCAT »

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
dobro radi osim što kad pritisnem tipku - ispiše na lcd 65535 i ako opet idem s tipkom + neće da se osvježi lcd tj. ispiše 05535 (ostanu ove 4 znamenke od prije) . kako to riješiti?
AZROCAT
Posts: 20
Joined: 01-09-2009, 15:58

Re: skraceni kurs ucenja picbasica

Post by AZROCAT »

ma krivo san pisa za lcdout.
sad je ok
AZROCAT
Posts: 20
Joined: 01-09-2009, 15:58

lcd for next

Post by AZROCAT »

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 ......????????????' :azdaja:
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: skraceni kurs ucenja picbasica

Post by pedja089 »

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.
AZROCAT
Posts: 20
Joined: 01-09-2009, 15:58

Re: skraceni kurs ucenja picbasica

Post by AZROCAT »

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.

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

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???
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: skraceni kurs ucenja picbasica

Post by pedja089 »

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...
zeljkogelic
Pocetnik na forumu
Pocetnik na forumu
Posts: 46
Joined: 29-01-2013, 00:44

Re: skraceni kurs ucenja picbasica

Post by zeljkogelic »

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.
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: skraceni kurs ucenja picbasica

Post by pedja089 »

Fuse bitove moras setovati.
Moze biti i neispravan displej.
KReni prvo od programa da blinka led na nekom pinu.
AZROCAT
Posts: 20
Joined: 01-09-2009, 15:58

Re: skraceni kurs ucenja picbasica

Post by AZROCAT »

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?
AZROCAT
Posts: 20
Joined: 01-09-2009, 15:58

Re: skraceni kurs ucenja picbasica

Post by AZROCAT »

pedja089 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.
evo za ovo neki primjer koda da mi interrupt više uđe u glavu
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: skraceni kurs ucenja picbasica

Post by pedja089 »

Ja nemam. Ali nije preterano tesko za uraditi.
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1625
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: skraceni kurs ucenja picbasica

Post by WhiteHead »

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
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: skraceni kurs ucenja picbasica

Post by pedja089 »

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.
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1625
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: skraceni kurs ucenja picbasica

Post by WhiteHead »

Ma nesto u ovom smislu:

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
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.
Ako kaniš pobijediti, ne smiješ izgubiti
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: skraceni kurs ucenja picbasica

Post by pedja089 »

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.
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1625
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: skraceni kurs ucenja picbasica

Post by WhiteHead »

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.
Ako kaniš pobijediti, ne smiješ izgubiti
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7871
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: skraceni kurs ucenja picbasica

Post by pedja089 »

Ako program radi ovako kako si napisao, i nema interapta, to je to. NEma sta drugo da utice.
Post Reply