okretomjer za motor

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

Moderators: pedja089, stojke369, [eDo], trax

ZlacX
Pocetnik na forumu
Pocetnik na forumu
Posts: 38
Joined: 03-01-2009, 16:17

okretomjer za motor

Post by ZlacX »

Evo ljudi ja sam nov tu na forumu, inace vas citam već neko vrijeme pa sam se odlučil učlaniti zbog jednog projekta.

uglavnom hoću napraviti okretmjer/termometar i ti podaci bi se prikazivali na lcd 2x16
pa vas molim za pomoć kod pisanja programa jer nemogu skužiti te tempereturne senzore
evo shema .
i ako vidite neku grešku u programu ili shemi slobodno recite pa da ispravim
crtano u proteusu
Image
u shemu sam jos zaboravil staviti jedan taster koji će mijenjati izmedu vanjske i temp, motora
picbasic:

evo i program

Code: Select all

DEFINE OSC 20

DEFINE LCD_DREG PORTA   'definiranje porteva lcd-a
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTB 
DEFINE LCD_EBIT 0
DEFINE LCD_BITS 4         
DEFINE LCD_LINES 2        
DEFINE LCD_COMMANDUS 2000 
DEFINE LCD_DATUS 50       

input PORTA.6
INPUT PORTB.5

SYMBOL PICKUP=PORTA.6
SYMBOL MOTOR=PORTB.6
SYMBOL VANJSKA=PORTB.7
SYMBOL TIPKA=PORTB.5

BROJ VAR WORD
OKRETAJI VAR WORD
BROJ1 VAR byte 
BROJ2 VAR byte
BROJ3 VAR byte
BROJ4 VAR byte
BROJ5 VAR BYTE


PAUSE 300                 'POCETNA PORUKA
LCDOUT $FE, 1 , "GENERIC TRIGGER"
LCDOUT $FE, $C0+4 , "BY ZLAC"
PAUSE 2000
LCDOUT $FE, 1



POCETAK:                'MJERENJE OKRETAJA
COUNT Pickup,200,BROJ 
OKRETAJI=BROJ*300
broj1=okretaji dig 4
broj2=okretaji dig 3
broj3=okretaji dig 2
broj4=okretaji dig 1
BROJ5=OKRETAJI DIG 0
lcdout $FE, $80, "RPM=",dec broj1,dec broj2,dec broj3,dec broj4,DEC BROJ5   
GOTO POCETAK

;MJERENJE TEMPERATURE

 


end
Last edited by ZlacX on 05-01-2009, 15:20, edited 1 time in total.
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7876
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: okretomjer za motor

Post by pedja089 »

uopste ne moras rastavljati broj na cifre. dovoljno je samo #broj napisati u lcdout. i ako meris samo 200ms onada treba da pomnozis broj obrtaja sa 5 da bi dobio broj obrtaja u sekundi.
a ti za temperaturu nisi nista pisao takoda moras reci sta ne razumes...
ZlacX
Pocetnik na forumu
Pocetnik na forumu
Posts: 38
Joined: 03-01-2009, 16:17

Re: okretomjer za motor

Post by ZlacX »

prvo sto moram reći da sam ja tek početnik u programiranju i ovo svo moje programiranje je proizaslo sa
one teme skraćeni kurs picbasica ....... i dosta pročitane literature sa weba
pedja ja sam htio dobiti okretaje u min a ne u sec
i okretomjer radi
ja trebam pomoć u programiranju i čitanju temp senzora zato ni nemam nista napisano
help
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7876
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: okretomjer za motor

Post by pedja089 »

evo ti primer koda radi sigurno

Code: Select all

 OWOut DQ, 1, [$CC, $44]      ' Start merenja temperature
Cekaj:	
   OWIn DQ, 4, [count_remain]	 ' Provera da li jos traje
   If count_remain = 0 Then Cekaj
   OWOut DQ, 1, [$CC, $BE] 	 ' Procitaj izmerenu temperaturu
   OWIn DQ, 0, [temperatura.LOWBYTE, temperatura.HIGHBYTE, Skip 4, count_remain, count_per_c]
eto ti za merenje u datasheetu imas opisano kako se racuna temperatura.
a mozes sacekati da ti neko uploaduje ceo primer, mislim da dati ima njemu sam zadnjem slao to...
ZlacX
Pocetnik na forumu
Pocetnik na forumu
Posts: 38
Joined: 03-01-2009, 16:17

Re: okretomjer za motor

Post by ZlacX »

hvala ali ovo bas i ne kuzim to su nove naredbe za mene
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7876
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: okretomjer za motor

Post by pedja089 »

owin i owout su naredbe za komunikaciju one wire protokolom.
mislim da je i ovde lepo objasnjeno http://milan.milanovic.org/skola/mikkon/picbas-00.htm" onclick="window.open(this.href);return false;
ukoliko imas jos pitanja, rado cu odgovoriti ako budem umeo...
ZlacX
Pocetnik na forumu
Pocetnik na forumu
Posts: 38
Joined: 03-01-2009, 16:17

Re: okretomjer za motor

Post by ZlacX »

meni nije jasna ta komunikacija i citanje sa ds18s20
nemogu skužiti one tajminge za čitanje s čipa i kamo se točno ti podaci prenose na pic
i kako ih prikazati na lcd
http://datasheets.maxim-ic.com/en/ds/DS18S20.pdf" onclick="window.open(this.href);return false;
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7876
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: okretomjer za motor

Post by pedja089 »

pa to ti je u onome gore kodu.
znaci prvo kazes pocni merenje, sa ovom naredbom OWOut DQ, 1, [$CC, $44]
pa posle toga treba uzeti temperaturu ako je merenje gotovo. znaci negde treba ispitati da li je merenje gotovo, a to se radi ovim delom koda
Cekaj:
OWIn DQ, 4, [count_remain] '
If count_remain = 0 Then Cekaj
zatim kada je merenje zavrseno cita se temperatura
OWOut DQ, 1, [$CC, $BE] ' Procitaj izmerenu temperaturu
OWIn DQ, 0, [temperatura.LOWBYTE, temperatura.HIGHBYTE, Skip 4, count_remain, count_per_c]
i sada ti samo ostaje iskoristiti onu formulu iz datasheeta.
User avatar
DaTi
Odlično uznapredovao
Odlično uznapredovao
Posts: 730
Joined: 10-06-2007, 13:24
Location: Novi Sad - Srbija
Contact:

Re: okretomjer za motor

Post by DaTi »

Evo kod z rad sa ds18b20 (proveren)

Code: Select all

                   
        symbol  DQ = PORTb.2             ' Dq linija je povez. na pin RE2
       
        temperatura  Var Word            ' Promen.za cuvanje izmer. temp.
            count_remain Var Byte            ' Ostatak
            count_per_c  Var Byte            ' Ostatak po stepenu C
            ADCON1 = 7                           ' PORTA i PORTE su digitalni
        Pause 100                        ' Pauza za start LCD-a
Pocetak:
            OWOut DQ, 1, [$CC, $44]      ' Start merenja temperature
Cekaj:  OWIn DQ, 4, [count_remain]       ' Provera da li jos traje
            If count_remain = 0 Then Cekaj
            OWOut DQ, 1, [$CC, $BE]      ' Procitaj izmerenu temperaturu
            OWIn DQ, 0, [temperatura.LOWBYTE, temperatura.HIGHBYTE, Skip 4, count_remain, count_per_c]
       
           ' Prikazi temperaturu u DEC obliku
       
           temperatura = (((temperatura >> 1) * 100) - 25) + (((count_per_c - count_remain) * 100) / count_per_c)
           Lcdout $fe, 1, "   TEMPERATURA"
           Lcdout $fe, $C0, "      ", DEC (temperatura / 100), ".", DEC2        temperatura, " C"
       Pause 5000                            ' Zadrzi pet sekundi
       
           GoTo Pocetak                      ' Ponovi sve
           End                           ' Kraj programa
ZlacX
Pocetnik na forumu
Pocetnik na forumu
Posts: 38
Joined: 03-01-2009, 16:17

Re: okretomjer za motor

Post by ZlacX »

e puno hvala za kod ali mi javlja grešku na adcon1=7

evo koda do sad
jos treba definirati jedan taster tako da se njime izmjenuju okretomjer i termometar
Last edited by ZlacX on 04-01-2009, 17:30, edited 1 time in total.
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7876
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: okretomjer za motor

Post by pedja089 »

to zavisi koji pic korstis. ako koristis f877 ili slican onda ti nece praviti gresku. ako koristis f84a onda jednostavno obrisi taj red
ZlacX
Pocetnik na forumu
Pocetnik na forumu
Posts: 38
Joined: 03-01-2009, 16:17

Re: okretomjer za motor

Post by ZlacX »

pic16f628a
User avatar
DaTi
Odlično uznapredovao
Odlično uznapredovao
Posts: 730
Joined: 10-06-2007, 13:24
Location: Novi Sad - Srbija
Contact:

Re: okretomjer za motor

Post by DaTi »

za njga neznam...posto sam do sada sve radio sa f84, izbrisi to adcon netreba ti.
ZlacX
Pocetnik na forumu
Pocetnik na forumu
Posts: 38
Joined: 03-01-2009, 16:17

Re: okretomjer za motor

Post by ZlacX »

Evo izbrisal sam onaj adcon ali sad svaki put kad pokrenem taj kod u proteusu
samo izbrise displej i onda se javi greska excessive cpu load

Code: Select all

DEFINE OSC 20

DEFINE LCD_DREG PORTA   'definiranje porteva lcd-a
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTB 
DEFINE LCD_EBIT 0
DEFINE LCD_BITS 4         
DEFINE LCD_LINES 2        
DEFINE LCD_COMMANDUS 2000 
DEFINE LCD_DATUS 50       

input PORTA.6
INPUT PORTB.5

SYMBOL PICKUP=PORTA.6
SYMBOL TIPKA=PORTB.5

BROJ VAR WORD
OKRETAJI VAR WORD
BROJ1 VAR word 
BROJ2 VAR WORD
BROJ3 VAR byte
BROJ4 VAR byte
BROJ5 VAR BYTE


PAUSE 300                 'POCETNA PORUKA
LCDOUT $FE, 1 , "GENERIC TRIGGER"
LCDOUT $FE, $C0+4 , "BY ZLAC"
PAUSE 2000
LCDOUT $FE, 1

PETLJA:
if tipka=1 then pocetak1
if tipka=0 then MJERENJE


'MJERENJE OKRETAJA
POCETAK1:                
COUNT Pickup,200,BROJ 
OKRETAJI=BROJ*300
broj1=okretaji dig 4
broj2=okretaji dig 3
broj3=okretaji dig 2
broj4=okretaji dig 1
BROJ5=OKRETAJI DIG 0
lcdout $FE, $80, "RPM=",dec broj1,dec broj2,dec broj3,dec broj4,DEC BROJ5   



;GRAFIČKI PRIKAZ OKRETAJA
IF BROJ2>0 THEN LCDOUT $FE, $C0 ,   "#"    
IF BROJ2>1 THEN LCDOUT $FE, $C0+1 , "#"    
IF BROJ2>2 THEN LCDOUT $FE, $C0+2 , "#"
IF BROJ2>3 THEN LCDOUT $FE, $C0+3 , "#"
IF BROJ2>4 THEN LCDOUT $FE, $C0+4 , "#"
IF BROJ2>5 THEN LCDOUT $FE, $C0+5 , "#"
IF BROJ2>6 THEN LCDOUT $FE, $C0+6 , "#"
IF BROJ2>7 THEN LCDOUT $FE, $C0+7 , "#"
IF BROJ2>8 THEN LCDOUT $FE, $C0+8 , "#"
if broj1>0 then LCDOUT $FE, $C0+9 , "#"
if broj1>0 and broj2>0 then lcdout $FE, $C0+10 ,"#"
if broj1>0 and broj2>1 then lcdout $FE, $C0+11 ,"#"
if broj1>0 and broj2>2 then lcdout $FE, $C0+12 ,"#"
if broj1>0 and broj2>3 then lcdout $FE, $C0+13 ,"#"

GOTO PETLJA


MJERENJE:
symbol  DQ = PORTb.6             ' Dq linija je povez. na pin Rb.6
       
temperatura  Var Word            ' Promen.za cuvanje izmer. temp.
count_remain Var Byte            ' Ostatak
count_per_c  Var Byte            ' Ostatak po stepenu C
OWOut DQ, 1, [$CC, $44]      ' Start merenja temperature
Cekaj:  OWIn DQ, 4, [count_remain]       ' Provera da li jos traje
If count_remain = 0 Then Cekaj
OWOut DQ, 1, [$CC, $BE]      ' Procitaj izmerenu temperaturu
OWIn DQ, 0, [temperatura.LOWBYTE, temperatura.HIGHBYTE, Skip 4, count_remain, count_per_c]
       
           ' Prikazi temperaturu u DEC obliku
       
temperatura = (((temperatura >> 1) * 100) - 25) + (((count_per_c - count_remain) * 100) / count_per_c)
Lcdout $fe, 1, "   TEMPERATURA"
Lcdout $fe, $C0, "      ", DEC (temperatura / 100), ".", DEC2        temperatura, " C"
Pause 5000                            ' Zadrzi pet sekundi
       
GoTo PETLJA                      ' Ponovi sve

End                           ' Kraj programa 
u djelu poslije MJERENJE
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7876
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: okretomjer za motor

Post by pedja089 »

a proteus mnoge stvari nece da odradi. meni se to x puta desavalo...
ZlacX
Pocetnik na forumu
Pocetnik na forumu
Posts: 38
Joined: 03-01-2009, 16:17

Re: okretomjer za motor

Post by ZlacX »

a da zaboravil sam jos par stvari i bude valjda gotovo

kako definirati taster da prebacuje izmedu podprograma1 i podprograma 2

Code: Select all

program:
if taster =o then goto  podprogram1
if taster =1 then goto podprogram2


podprogram1
-------
--------
--------
-------
goto program


podprogram2
-----------
------------
----------
-----------
----------
goto program


User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7876
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: okretomjer za motor

Post by pedja089 »

pa ako je taster stisnut onda goto onaj drugi, pa u tom drugom ako je taster stisnut goto onaj prvi.
ali nemoj zaboraviti da imas i onaj prvi deo programa za obrtomer.
z zasto ne stavis u donjem redu obe temperature, ima sasvim dovoljno mesta?
ZlacX
Pocetnik na forumu
Pocetnik na forumu
Posts: 38
Joined: 03-01-2009, 16:17

Re: okretomjer za motor

Post by ZlacX »

nemas brige jos moram malo doraditi program onda bude sve kako treba biti
to budem sutra sredil
ZlacX
Pocetnik na forumu
Pocetnik na forumu
Posts: 38
Joined: 03-01-2009, 16:17

Re: okretomjer za motor

Post by ZlacX »

Evo imam jos jedan problem
kako napraviti ovo



znači da se podprogram1 stalno vrti (na lcd-u prvi red)
a ovisno o pritisnutom tasteru mijenja izmedu podprograma2 i podprograma3(2 red lcd displeja)
Last edited by ZlacX on 06-01-2009, 22:10, edited 3 times in total.
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7876
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: okretomjer za motor

Post by pedja089 »

pa rekao sam ti.
u pod programu 1 stavis
if taster=0 then
gosub program2
else
gosub program3
end if
i na kraju pod programa treba da ti ide return.
Post Reply