PIC 16F628A RAD NA BATERIJI

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

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
gagi011bg
Penjem se :)
Penjem se :)
Posts: 89
Joined: 18-03-2012, 02:04

PIC 16F628A RAD NA BATERIJI

Post by gagi011bg »

Pozdrav,svima :D

Interesuje me vaš savet,pomoć,zapravo,uradio sam serijsku komnukaciju sa dva pica-a 16f628a,u pic basic pro,pomocu
SERIN I SEROUT,komadi,testirao sam sa direktno sa žicom i preko 433Mhz,predajnikom i prijemnikom,i sve radi OK :D

Ali mi je sad potrebno da predajni deo na kome se nalazi pic16f628a,radi na bateriji, :shock: pa me brine potrošnja baterije,tj.vremenski preiod u kome bi radila.

Ostavio sam na test pločici,predajnika samo neophodne komponete,i merenjem mi se pokazalo, da kada je radnom režimu prenosa podataka, potrošnja uredjaja 10mA, u mirnom radu 3mA,predpostavljam da i tu regulator 78L05 vuče odredjeni deo struje,što mislim da je malo mnogo za potrošnju baterije :roll:

Tragao sam po netu,pa sam našao neke primere,interesujeme da li postoji mogućnost da se programnski dovede PIC u stanje minimalne potrošnje, komandama SLEP NAP, ili nekim drugim u picbasic-u, jer mi je u principu potrebno da samo kada se pritisne taster,izvši prenos podatka.

Code: Select all


@ DEVICE pic16F628a, INTRC_OSC_NOCLKOUT, pwrt_on, mclr_on, lvp_on,wdt_on,bod_on
include "modedefs.bas"
DEFINE OSC 4
CMCON=7

Define LOADER_USED 1
DEFINE CHAR_PACING 1000
DEFINE HSER_CLROERR 1
DEFINE HSER TXSTA 20h
DEFINE HSER_BAUD 1200

TMR1H = $60       
TMR1L = $01
PIR1.0 = 0        
PIE1.0 = 1        
INTCON.3 = 1      ' Enable TMR1 peripheral interrupt
OPTION_REG = $7f

TRISA=%00001			
TRISB=%00000001

PORTA=0
PORTB=0

PODACI VAR BYTE
PODACI=0
PAUSE 500


START:
IF PORTB.0=0 THEN
PODACI=10
GOSUB SLANJE_PODATAKA 
ENDIF

IF PORTB.0=1 THEN
PODACI=20
GOTO PAUZA 
ENDIF
GOTO START



SLANJE_PODATAKA:
serout  PORTA.0,T1200,["D",PODACI]
RETURN


PAUZA:
low PORTA.0

IF PORTB.0=0 THEN 
GOTO START
ENDIF

@ SLEEP
@ NOP
T1CON.0 = 0    ' Stop TMR1 on overflow wake-up
TMR1H = $60    ' Re-load TMR1 with $6001
TMR1L = $01
PIR1.0 = 0     ' Clear TMR1 over-flow int flag
T1CON.0 = 1    ' Re-start TMR1
GOTO PAUZA
Attachments
PREDAJNIK.jpg
PREDAJNIK.jpg (37.17 KiB) Viewed 6533 times
Dzenny_assembly
Napredujem
Napredujem
Posts: 118
Joined: 11-09-2014, 04:03

Re: PIC 16F628A RAD NA BATERIJI

Post by Dzenny_assembly »

Najveca usteda bi bila tako da kontroleri vecinu vremena provode u sleep modu a za to vrijeme RF moduli budu iskljuceni. Njihovo gasenje takodze regulises kontrolerom preko nekog tranzistora npr. BC547 s tim sto bi prijemni RF modul morao uvijek biti ukljucen a i prijemni kontroler bi trebao da koristi vec postojeci serijski modul koji ce ga interaptom buditi iz sleep moda. Port B podrzava spoljni izvor interapta, promijenom logickog nivoa, sto je za tvoj slucaj (budzenje tasterom) stvoreno.
gagi011bg
Penjem se :)
Penjem se :)
Posts: 89
Joined: 18-03-2012, 02:04

Re: PIC 16F628A RAD NA BATERIJI

Post by gagi011bg »

U principu meni je prijemni modul stalno uključen, a predajni modul preko programa sam doveo u petlju
PAUZA
,gde čeka pritisak tastera PORTB.0,i tek onda šalje podatke.

Testirao sa ja i bez RF modula na predajniku,sa ovim mojim programom,nema neke promene,u potrošnji,jer predajni pin Porta.0 u petlji PAUZA, je na low,i ne šalje podatke preko RF, čeka taster da bi slao podatke.

Ne znam šta bi sve u programu trebalo poisključivati od komparatora.... i tako redom,da smanjim potrošnju pica na minimum,jer sam čitao po forumima,da ovaj pic u sleep modu, može da ima potrošnju od 2 uA,što bi mini u principu bilo dobro,što manja potrošnja to bolja.
Dzenny_assembly
Napredujem
Napredujem
Posts: 118
Joined: 11-09-2014, 04:03

Re: PIC 16F628A RAD NA BATERIJI

Post by Dzenny_assembly »

Nemožeš koristiti instrukciju SERIN ako želiš da kontroler radi u sleep modu radi uštede potrošnje.
To su obične rutine koje kompajler generiše za svaki PIC kontroler bez obzira da li ima ili nema ugradžen modul za serijsku komunikaciju, i moguče ju je koristiti samo ako je kontroler stalno uključen. PIC16F628 ima ugradžen modul za serijsku komunikaciju kojeg moraš koristiti (na prijemnoj strani) ako želiš sleep mod rada jer ti je potrebno "budženje" kontrolera po potrebi. Kontroler iz sleep moda možeš vratiti jedino interaptom.
gagi011bg wrote:...predajni modul preko programa sam doveo u petlju
PAUZA
,gde čeka pritisak tastera PORTB.0,i tek onda šalje podatke.
U tvom slučaju petlja "PAUZA" ti uopšte netreba. Na pinu PORTB.0 imaš mogučnost generisanja interapta pri promijeni logičkog stanja iz 0 u 1 i obrnuto. Tebi treba samo jedna beskonačna petlja u kojoj če kontroler uvijek imati instrukciju SLEEP. Nakon što udžeš u interapt (prilikom pritiska tastera) kontroler pošalje podatke serijskim putem, izlazi iz interapta i nakon toga ulazi u SLEEP mod. Ta sekvenca se ponavlja svakim novim pritiskom tastera.
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: PIC 16F628A RAD NA BATERIJI

Post by pedja089 »

Dzenny_assembly, nesto si ti tu pogresno skapirao oko rada pica...
U sleep modu kod vecine 12F i 16F glavni oscilator je ugasen, i time napravljena najveca usteda u potrosnji jer tada ne radi ni procesor, niti jedna periferija koja ima clock sa glavnog oscilatora. Sto znaci da u principu mogu raditi tajmeri, sa klokom sa drugog internog oscilatora, ili spoljasnjim klokom i interapti. Sve ostalo ne radi...
Tako da iako koristi USART ili EUSART na picu, u sleep modu opet ne moze primiti niti poslati podatak. Jer se klok dobija sa glavnog oscilatora.
gagi011bg
Ako sam ja dobro razumeo predajnik je taj koji ce raditi na bateriji...
Ne znam sta tacno pic treba da radi, ali ako stvarno samo gleda na jedan taster, ja bi napravio da taj taster dovede napon na stabilizator. I paralelno sa tasterom dodao tranzistor da moze zadrzati napajanje pic iako se otpusti taster...
Ima tema za tako nesto slicno na picbasic.co.uk. Samo treba dobro prekopati forum.
gagi011bg
Penjem se :)
Penjem se :)
Posts: 89
Joined: 18-03-2012, 02:04

Re: PIC 16F628A RAD NA BATERIJI

Post by gagi011bg »

Hvala, Dzenny_assembly i Pedja 089 na odgovorima.

U principu mislio sam da koristim sleep,u programu,da sa njim,prebacim pic u stanje mirovanja,dok se nepritisne taster,da smanjim potrošnju baterije,najveća mi je poenta da sačuvam bateriju,dok taster nije pritisnut.

Potpuno bi mi odgovarala ova tvoja ideja Pedja089 da taster dovede napon na stabilizator,samo nisam znao kako to da tehnički izvedem.

Uredaj za koji sam mislio da ga koristim,jeste predjanik, radi na bateriji,radi kao okidač preko RF,Imaju dva tastera,jedan je na portb.0 a drugi na na portb.1.

Na drugoj strani kada primi signal,isto pic 16f628a,preko serin komande,pali led lampicu,koja je na releju, Kada je taster pritisnut pali led, kada je taster pušten gasi led,odnosno relej.

Probem mi je bila,potrošnja baterije,jer u predaji troši oko,10mA,i brzo bi istrošio bateriju,zato sam stavio taster,da kada je pritisnut,šalje signal,a kada je taster pušten,da odlazi u sleep da bi štedeo bateriju,tj ne šalje signal.

I ja sam mislio da povežem taster da,kada se pritisne da napon stabilizatoru,probelm su mi dva tastera,pa neznam kako to da izvedem, :( to bi odgovaralo.
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: PIC 16F628A RAD NA BATERIJI

Post by pedja089 »

Prekopaj picbasic forum, imas bas ono sta ti treba. Taj taster je koriscen i kao ulaz...
Evo ovako nekako mozes:
http://rayshobby.net/blog/wp-content/up ... ematic.jpg
Mozda nece reagovati na bas kratke pritiske tastera, ali sta da mu radis...
Ista takva situacija je i sa daljincem za TV... Ti jedno stavi 5V umesto 12V. Mozes staviti stabilizator da je stalno na bateriju prikopcan.
Druga opcija ti je da koristis duple tastere...
gagi011bg
Penjem se :)
Penjem se :)
Posts: 89
Joined: 18-03-2012, 02:04

Re: PIC 16F628A RAD NA BATERIJI

Post by gagi011bg »

Hvala pedja089,

Po ovoj šemi što si mi poslao,on u pricipu pritiskom na taster tek onda dobija,napon na pic-u,i šalje signal,zato kod tih PT2262 daljinaca i javlja kašnjenje,oni u stavi i nisu stalno pod naponom,odnosno nemaju stand by.

Kod mene kad sam merio,sam uredjaj ,bez pica,(regulator 78l05 i kondezator 100nF) troši 2mA,
a kada stavim pic,potrošnja je oko 3mA,bez pritiska na taster,tj predaje.

Nego jedino ću morati da prepravim i program,jer u mom slučaju predajnik šalje dva signala prijenmiku:

Code: Select all

IF PORTB.0=0 THEN
PODACI=10 SIGNAL ZA UPALJENO
GOSUB SLANJE_PODATAKA 
ENDIF

IF PORTB.0=1 THEN
PODACI=20 SIGNAL ZA UGAŠENO
GOTO PAUZA 
ENDIF

GOTO START
SLANJE_PODATAKA:
serout  PORTA.0,T1200,["D",PODACI]
RETURN

PAUZA:
serout  PORTA.0,T1200,["D",PODACI]
low PORTA.0

IF PORTB.0=0 THEN 
GOTO START
ENDIF
GOTO PAUZA
A na prijmniku je :

Code: Select all

serin PORTA.0,T1200,["D"],PODACI
IF PODACI=10 THEN
HIGH PORTB.4
ENDIF

IF PODACI=20 THEN
LOW PORTB.4
ENDIF
Problem mi je sad kad pustim,taster,on prekida napajnje,i ne pošalje mu podakte za gašenje,imaš li ideju kako to da rešim,da samo kad primi podatak za paljenje,pali portb.4,a ostalo vreme je ugašeno.

Nemogu nikako da nadjem način,kad prestane predajnik da šalje podatak za paljenje,da resetujem varijablu
PODACI
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: PIC 16F628A RAD NA BATERIJI

Post by pedja089 »

Probaj serin2 da koristis na prijemniku, i iskoristi skok na labelu posle isteka vremena da ugasi...
SERIN2 DataPin{\FlowPin},Mode,{ParityLabel,}{Timeout, Label,}[Item...]
Predajnik treba da konstantno salje kada je stisnut taster...
Prijemnik ce to konstantno da prima i to je to.. Kada prestane da primap posle isteka timeout vremena, skoci na labelu. Na toj labeli stavi da se ugasi port, i vrati na cekanje podataka.
gagi011bg
Penjem se :)
Penjem se :)
Posts: 89
Joined: 18-03-2012, 02:04

Re: PIC 16F628A RAD NA BATERIJI

Post by gagi011bg »

Probao sam pedja 089,
sa ovim kodom,Nema šanse da uparim predajnik i prijemnik :?

Code: Select all

START:
SERIN2 PORTA.0,T1200,10,GASENJE,["D"],PODACI

IF PODACI=10
HIGH PORTB.4
END IF

IF PODACI=20
HIGH PORTB.5
END IF
GOTO START

GASENJE:
LOW PORTB.4
LOW PORTB.5
GOTO START

E sad probao sam i sa:

Code: Select all

START:
SERIN PORTA.0,T1200,10,GASENJE,["D"],PODACI

IF PODACI=10
HIGH PORTB.4
END IF

IF PODACI=20
HIGH PORTB.5
END IF
GOTO START

GASENJE:
LOW PORTB.4
LOW PORTB.5
GOTO START
Uparim ih ok,
Jer sam video da i u SERIN postoji TIMEOUT:
SERIN Pin,Mode,{Timeout,Label,}{[Qual...],}{Item...}

Radi kada brzo stiskam taster,ali kad na primer pritisnem taster duže ili skinem bateriju sa predajnika, i držim u isto vreme taster,
led ostaje da svetli,nekada 5,6 sekudi.... kako kada pa se ugasi ... a nekad se i ne ugasi.

Verovatno ja neznam da podesim timeout na SERIN.
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: PIC 16F628A RAD NA BATERIJI

Post by pedja089 »

Nista tu nisi dobro napisao za serin2. Pogledaj u manualu, sintaksu, koji brojevi se koriste za mode itd...
Nije identicno serin i serin2.
Evo ti primer za serin2
SERIN2 PORTA.1,396,100,Main,[WAIT("D"),Podatak] '2400
SERIN2 PORTA.1,84,100,Main,[WAIT("D"),Podatak] '9600

Ono sta je problem sa serin i serin2, on dokle god prima podatke nece skociti na timeout label...
Znaci po iskljucenju predajnika tebi bi trebala da bude log1 sa prijemnika.
Ako tako ne moze da napravis da radi onda moras dodati po pnp tranzistor paralelno svakom tasteru, i te tranzistore kontrolisati sa PIC-em.
Sto se tice potrosnje stabilizatora, kopaj neki koji trosi manje, imas ih od TI koji trose po nekoliko uA.
A kako ces ih nabaviti to ne bi znao...
Dzenny_assembly
Napredujem
Napredujem
Posts: 118
Joined: 11-09-2014, 04:03

Re: PIC 16F628A RAD NA BATERIJI

Post by Dzenny_assembly »

pedja089 wrote:Dzenny_assembly, nesto si ti tu pogresno skapirao oko rada pica...
U sleep modu kod vecine 12F i 16F glavni oscilator je ugasen, i time napravljena najveca usteda u potrosnji jer tada ne radi ni procesor, niti jedna periferija koja ima clock sa glavnog oscilatora. Sto znaci da u principu mogu raditi tajmeri, sa klokom sa drugog internog oscilatora, ili spoljasnjim klokom i interapti. Sve ostalo ne radi...
Tako da iako koristi USART ili EUSART na picu, u sleep modu opet ne moze primiti niti poslati podatak. Jer se klok dobija sa glavnog oscilatora.
Tačno Pedža, kada se zaustavi taktni oscilator sve staje, zaustavlja se rad procesora i svi registri ostaju u zatečenom stanju. To i jeste bio problem na starijim serijama jer u takvom režimu večina interapta postaje beskorisna ili nije od nekog značaja. Zato je (na novijim 16F serijama) uveden bit WUE (Wake-up Enable bit) u registru BAUDCTL koji če kontroler buditi iz sleep moda kada se na pinu RX detektuje log. 0 tj. čim počne sam prijem podataka. Nažalost ovaj kontroler PIC16F628 pripada starijoj generaciji i nema tu mogučnost sad vidjeh u datashetu. Ali i to je moguče riješiti tako što se pin RB0/INT koristi umijesto RX-a. Jedino što bi programski kod bio malo komplikovaniji al je izvodljivo.

gagi011bg pošto vidim da si več krenuo sa dosta drugačijim riješenjem da te sad ne zbunjujem dodatnim mogučnostima koje su i onako dosta komplikovane. U svakom slučaju tu smo da pomognemo. Sretno sa izradom.
gagi011bg
Penjem se :)
Penjem se :)
Posts: 89
Joined: 18-03-2012, 02:04

Re: PIC 16F628A RAD NA BATERIJI

Post by gagi011bg »

Hvala,Dzenny_assembly i pedja089 na pomoći :)

U svakom slučaju, za sada mi sa SERIN I SEROUT,završajavu posao, kako sam bio prvobitno napisao program, jednom mi šalje podatak da se pritisne taster,da se upali led na prijemniku,a kada se otpusti taster šalje podatak da se ugasi.

Najveća poenta mi je bila da nekako rešim,predajnik oko uštede baterije, pa sam bio hteo da probam malo kombinacija programski, malo hardeverski.

Probaću ovo što mi je pedja089 predložio sam ulaznim tasterima.da palim predajnik i šaljem podatke,

U svakom slučaju ima rešenja, dodati ON /OFF prekidač,dok se šalje upaljeno kad završiš ugasiš :wink:

ako drugo rešenje nenadjem,

Slažem se Dzenny_assembly,da je mnogo komplikovano oko programa,bar za mene, da bi se sad baš toliko ulazilo u to .
Post Reply