PIC12F629 light dimmer .hex projekt

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

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
IQ500
Penjem se :)
Penjem se :)
Posts: 75
Joined: 02-07-2008, 14:39
Location: Zagreb

PIC12F629 light dimmer .hex projekt

Post by IQ500 »

Eto i ja sam jedan od onih koji je napravio onaj light dimmer, i dosao do dijela kad je trebalo isprogramirat pic i kad ono vidim nema hexa za taj projekt :shock:
I nakon pola sata uzaludnog trazenja onako ljut odlucio sam napravit taj hex i podjelit ga s narodom, a ne trazit pare za takvu glupost.
Do sada nisam nikada programirao pic, ali zato ARM imam u malom prstu, koji je kudikamo slozeniji procesor. Procitao sam jednu knjigu o programiranju pica 16f84 i to je djecja igra u usporedbi s arm procesorima, jedino je malo zajebano sto pic koristi 14bitne rijeci pa ce vjerovatno trebat prosirivat s 8 na 16 bitova neke stvari al nebi smjelo bit problema. Dakle sintaksu sam naucio, logiku imam od prije 8) .
Evo kako planiram to srediti:
Glani program bi prisluskivao GP0 ulaz (znaci onaj di je tipkalo) i kada bi se pritisnula tipka ulazi u potprogram za memoriranje tipaka na daljinskom. Taj potprogram bi cekao prvi signal iz TSOP prijemnika i nakon toga svakih 26uS (jer ir daljinci salju signale u intervalima od 38kHz, pa ih ocito tako i TSOP proslijeduje na svoj izlaz) pregledavao stanje na GP4 ulazu i tako za 8 bitova (digitalni kod kojeg salje daljinac dugacak je 7 bitova, ali zasto ne iskoristiti svih 8 kad ih vec imamo na raspolaganju u jednom registru). Sada taj kod koji smo dobili spremamo na neku adresu u EEPROMU i cjeli postupak ponavljamo za jos jednu tipku i nju spremamo na lokaciju iza.
E sad onaj dio gdje treba prepoznati koja je tipka pritisnuta i ovisno o tome pojacati / smanjiti zarulju. Ovo bi stavio u prekidni potprogram koji bi se aktivirao kad pic iz TSOPa detektira promjenu signala, ponovo ucitavat bitove koje salje tsop i usporedit cijelu rijec s one dvije koje imamo u EEPROMu i ako su identicne onda pojacat/smanjit zarulju. Takoder nakon niza "praznih" signala treba se vratiti iz potprograma.
Ukoliko je prepoznat signal na pojacavanje/smanjivanje treba pozvati jedan od ta 2 potprograma.
Regulacija jacine svjetljenja bi se izvela tako da ako zelimo da nam zarulja svijetli na max, pustimo 1 na izlaz GP5, ako zelimo da je ugasena onda 0. A za razine izmedu moramo neprestano palit gasit zarulju i to bi se nama cinilo kao da zarulja slabije svijetli. Tu se samo treba malo poigrat oko tih omjera upaljeno/ugaseno i da se lijepa regulacija napravit.

Jos cu detaljno procesljat datasheetove od PIC12F629 i TSOP1138 da vidim sve detalje i bacam se na pisanje programa. Svi koji ste voljni pomoc javite se. Ovdje cu javit napredak i eventualne probleme oko pisanja programa.

I samo jedno pitanje: jel zna netko cemu mu sluzi ovaj povrat iz zarulje na GP2? http://www.ivica-novakovic.from.hr/Pict ... 12f629.gif
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7874
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Post by pedja089 »

nisi postavio semu, ali ako mislis na ovo http://www.ivica-novakovic.from.hr/Lightdimmer.htm
onda sluzi za detektovanje nule, tj pocetka periode. jer se ovde regulacija vrsi tako sto se pomera vreme okidanja triaka. sto kasnije okine to ce svetlo slabije svetliti.
Last edited by pedja089 on 04-07-2008, 15:38, edited 1 time in total.
IQ500
Penjem se :)
Penjem se :)
Posts: 75
Joined: 02-07-2008, 14:39
Location: Zagreb

Post by IQ500 »

postavio sam ju samo sto se slabo vidi jer je tamo na plavoj podlozi.

mozes li malo detaljnije objasniti to s regulacijom?
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7874
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Post by pedja089 »

mogu.
kao prvo da pojasnim triak najjednostavnije.
znaci pre dolaska impulsa na gejt triaka on ne vodi izmedju a1 i a2.
kada dodje impuls na gejt onda on vodi, tj ponasa se kao zatvoreni strujni krug sve dok napon izmedju a1 i a2 ne padne na nulu.
posto je mrezni napon sinusnog oblika on 2 puta prolazi kroz nulu, prvi put kad prelazi iz negative u pozitivnu vrednos i drugi put iz pozitivne u negativnu. to su kljucne tacke za regulaciju.
evo i grafika

http://www.elektronika.ba/forum/uploadz ... iagram.GIF
diagram je dat za sledecu semu

http://www.elektronika.ba/forum/uploadz ... 1_diag.GIF
na grafiku broj 1 je nacrtan sinusni napon a crvene tacke su nule, tj u tim tackama je napon 0V.
regulacija se vrsi tako sto se menja vreme dovodjenja impulsa na gate triaka. vreme dovodjenja impulsa je predstavljeno zelenom tackom.
znaci sto se ranije dovede impuls na gejt tiristora to ce sijalica jace svetleti.
a ako se dovede kasnije onda ce sijalica slabije svetleti.
a to se na grafiku vidi kao odnos toff i ton.
kao sto se vidi sa grafina impulsi na gejt se ne mogu dovesti bilo kada, nego se moraju sinhronizovati sa prestankom vodjenja triaka, tj sa trenutkom kada je mrezni napon u 0.
i kao sto se vidi na grafiku za jednu periodu moramo dovesti dva impulsa, prvi impuls za pozitivnu poluperiodu drugi za negativnu.
nadam se da sam bio jasan
Last edited by pedja089 on 04-07-2008, 16:16, edited 2 times in total.
IQ500
Penjem se :)
Penjem se :)
Posts: 75
Joined: 02-07-2008, 14:39
Location: Zagreb

Post by IQ500 »

e hvala sad mi je sve jasnije, i zadnju nepoznanicu sam rjesio, dakle ako okidam gate u trenutcima malo poslje nule, imat cu max osvjetljenje?

vidim da ovaj pic ima 4mHz interni oscilator pa me zanima jel se i on dijeli sa 4 kao pic16f84 ili ostaje radit na ta 4mHz?
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7874
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Post by pedja089 »

e tek sam sad zavrsio post.
a sto se tice oscilatora on je na 4mhz. za izvrsenje 1 instrukcije potrebna su 4 taktna signala.
tako da je brzina izvrsavanja instrukcija 1 000 000 instrukcija u sekundi
IQ500
Penjem se :)
Penjem se :)
Posts: 75
Joined: 02-07-2008, 14:39
Location: Zagreb

Post by IQ500 »

aha znaci on je ocito namjestio da GP2 generira prekid na falling edge, tako je jednostavnije to izvesti. cak je jednostavnije od ovog mog jer nisam bas znao kako tocno radi triac.

znaci triacu je dovoljno dati 1 impuls i tada on vodi do kad je napon 0? kolko mora minimalno trajati taj inpuls?
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7874
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Post by pedja089 »

hm nemam pojma koliko minumalno mora trajati. trebao bi da je 1ms vise nego dovoljno. a on na gp2 verovatno detektuje samo kada napon prelazi iz negativne u pozitivnu polu periodu, pa onda ceka neko x vreme pa da impuls, pa onda ceka da na tom pinu dodje nula pa opet ceka x vreme pa daje impuls za negativnu poluperiodu.
grafik napona na GP2(crvenom bojom)

http://www.elektronika.ba/forum/uploadz ... agram1.GIF
edit:
posto si manje vise razumeo regulaciju, sad se treba pozabaviti RC5 protokolom....
evo ovde kako izgleda signal na izlazu tsop-a
http://website.lineone.net/~dezellis/rc5.htm
e sad tu ima jos jedan problem jer prijem podataka traje oko 28ms, a regulacija zahteva impuls na svakih 10 ms, tako da to nije bas jednostavno uklopiti
evo mozda i ovo pomogne
http://islab.oregonstate.edu/koc/ece575 ... sld001.htm
IQ500
Penjem se :)
Penjem se :)
Posts: 75
Joined: 02-07-2008, 14:39
Location: Zagreb

Post by IQ500 »

ma sad neka bude tako, nema veze ako malo zmirne zarulja, u kasnijim verzijama ce se to sredit sa onim internim timerima

napisao sam jedan dio programa, jos tu fali dosta toga, danas me vise nema kod kuce pa cu sutra probat dovrsit i isprobat prvu verziju...

Code: Select all

	list p=12f629
	#include <p12f629.inc>
	__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC
	
	ADRESA equ 20h
	BROJAC equ 21h
	RIJEC equ 22h
	CEK1 equ 23h
	CEK2 equ 24h
	RAZINA equ 25h
	
	
	
	
	
	
	
	
	org 00h
	goto main
	
	org 04h
	btfsc INTCON, 1  ; provjeri je li prekid izazvao GP2
	goto daljinski  ; ako nije, onda je daljinski s GP4

	
	
	goto kraj
daljinski
	clrf RIJEC
	movlw 0Eh
	movwf BROJAC
	call primi  ; primi rijec iz daljinskog

kraj	
	retfie
	
main
	bcf STATUS,RP0  ; Bank0
	clrf GPIO  ; inicijalizacija GPIOa
	movlw 07h  ; namjesti pinove GP0, GP1, GP2
	movwf CMCON  ; kao digitalne I/O
	
	bsf STATUS, RP0  ; bank1
	movlw 11011000b  ; ukljuci GIE, PEIE, INTE, GPIE
	movwf INTCON
	bsf IOC, 2  ; ukljucujemo nemaskirajuci prekid na GP2 za detekciju nule	
	bsf IOC, 4  ; isto tako za GP4
	movlw 011111b  ; postavi GP5 kao izlazni a ostale kao ulazne
	movwf TRISIO
	
	
	
	
	
tipka	
	bcf STATUS,RP0  ; Bank0
	btfss GPIO, 0  ; provjeravamo je li tipka ptitisnuta
	goto tipka
					; ako je pritisnuta zapocni programiranje
	bsf STATUS, RP0  ; bank1
	bcf IOC, 4  ; onemoguci prekid sa GP4
	
	
	
	bsf STATUS, RP0  ; bank1
	bsf IOC, 4  ; ponovo omoguci prekid
	goto tipka  ; vrati se
	
ee_read  ; citanje EEPROMa sa adrese koju predajemo potprogramu preko W
	bsf STATUS,RP0 ; bank1,  MAKNUTI KASNIJE PO POTREBI!!!!			##########################
	movwf EEADR  ; stavljamo W u adresni registar eeproma
	bsf EECON1,RD  ; iniciramo citanje
	movf EEDATA,W  ; spremamo procitani podatak u W i tako ga vracamo nazad pozivatelju
	return ; PC=LR
	
ee_write  ; zapisujemo podatak koji predajemo potprogramu preko W registra na adresu koja se nalazi u registru ADRESA koji smo definirali na pocetku programa
	bsf STATUS,RP0 ; bank1,  MAKNUTI KASNIJE PO POTREBI!!!!			######################
	bsf EECON1,WREN ; omogucujemo pisanje
	bcf INTCON,GIE ; onemoguci prekide 
	movwf EEDATA  ; upisujemo podatak koji zelimo upisati a koji smo predali potprogramu preko registra W
	movf ADRESA, W  ; adresu u W...
	movwf EEADR  ; upisujemo adresu na koju cemo upisati podatak
	movlw 55h ; Otkljucavanje pisanja, obavezna procedura...
	movwf EECON2 ; Otkljucavanje pisanja, obavezna procedura...
	movlw AAh ; Otkljucavanje pisanja, obavezna procedura...
	movwf EECON2 ;  Otkljucavanje pisanja, obavezna procedura...
	bsf EECON1,WR ; Inicijalizacija pisanja
	bsf INTCON,GIE ; omoguci prekide
	return ; PC=LR
	
primi  ; potprogram koji prima rijec iz daljinskog i vraca je preko RIJEC
	btfss GPIO, 4	; procitaj bit
	movlw 00b  ; i spremi
	movlw 01b  ; ga u W
	iorwf RIJEC, F
	bcf STATUS, C  ; ocisti carry zastavicu
	rlf RIJEC, F  ; rotiraj lijevo
	movlw 08h
	movwf CEK2
;;;;;;;;;;;;;;; cekanje od 1,8ms		
cekaj1p8ms  	
	movlw 0E0h
	movwf CEK1
pet1
	decsz CEK1
	goto pet1
	decsz CEK2
	goto cekaj1p8ms		
;;;;;;;;;;;;;;;	
	decfsz BROJAC  ; smanji brojac za 1 i ako je on 0 vrati se iz potprograma
	goto primi
	return


	
	end  ; THE END :D
User avatar
ShOkRe
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 468
Joined: 10-01-2007, 20:55
Location: Pula

Post by ShOkRe »

jel to ide sa interuptima ili ovako na zivo ? mozda je lakse setirati timer na prolazu kroz nulu pa kad je ower da pukne triaka... a das mu vrijednost po potrebi jacine svjetla, tu vrijednost nije loše definirati po tabeli koju stavis negdje na kraj, jer ako ides linearno neces dobiti linearitet, moras složiti ili proračun krivulje ili ga kao sto sam rekao predefinirati u tabeli (sto je lakse ako ima flasha)...
ja sam se malo zezao sa dimerima sa npr 8Ch, tu je veci problem tajminga i osluškivanja serial porta, sve mora biti strogo interuptirano, jer bas i nema mjesta gubljenju vremena....

ovo je sve dosta dobro izvedivo u asm-u, ali kako sam ja odgojen u basicu, nije mi bas bilo lako to posložiti pa sam nasao neki source u c-u, malo ga doradio i to služi svrsi....

inace prolaz kroz nulu se moze ocitavati samo u jednom ili u oba smjera (+i-) gretzom... i treba paziti po netu je vecina sorceova postelana na 60hz sto kod nas bas i ne radi....

...da sad sam pogledao kod i vidio da koristis int....
IQ500
Penjem se :)
Penjem se :)
Posts: 75
Joined: 02-07-2008, 14:39
Location: Zagreb

Post by IQ500 »

e da sad mi to bas nije jasno, kad ce GP2 generirati prekid? onda kada je signal u nuli ili onda kad signal krene s maximuma padat??
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7874
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Post by pedja089 »

ja sam isto kao sorke odgojen na basicu, tako da u asm radim ono sto bas moram.
tebi trebaju 2 prekida prvi ja kada gp ide sa 0 na 1 pa u odnosu na taj prekid dajes impuls za pozitivnu poluperiodu, drugi prekid je kad ide iz 1 u nula pa u odnosu na taj prekid dajes impuls za neg poluperiodu. to sam ti vec objasnjavao....
IQ500
Penjem se :)
Penjem se :)
Posts: 75
Joined: 02-07-2008, 14:39
Location: Zagreb

Post by IQ500 »

nisi me razumio, mene zanima hoce li se prekid generirati ovdje: http://www.max-save.org/pix/kdwjx8s.jpg ili ovdje: http://www.max-save.org/pix/j55zr89.jpg
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7874
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Post by pedja089 »

odakle ti ideja da tu imas prekide?
pogledaj grafik
http://www.elektronika.ba/forum/uploadz ... agram1.GIF
tebi treba prekid da se generise na zadebljanim delovima crvene linije
IQ500
Penjem se :)
Penjem se :)
Posts: 75
Joined: 02-07-2008, 14:39
Location: Zagreb

Post by IQ500 »

ma samo me buni to s negativnim naponom, na koji nacin ga pic prepozna?
dakle, ako stavim da ganerira prekid na FALLING edge, gdje ce se generirati? na maximumu funkcije ili u nuli?
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7874
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Post by pedja089 »

negativni napon prepoznaje kao logicku nulu. pogledaj grafik, na grafiku se sve vidi....
crvenom linijom je predstavjen napon na gp2. to sto se ne vidi u negativnoj poluperiodi znaci da je 0V. a pogledaj u datasheetu od pica da na svakom ulazu imas zastitne diode prema vcc i vdd. sto znaci za pozitivnu polu periodu imas log 1 na picu za negativnu imas log 0.
nije mi jasno kako ne vidis sa grafika kada se stvara opadajuca ivica....
IQ500
Penjem se :)
Penjem se :)
Posts: 75
Joined: 02-07-2008, 14:39
Location: Zagreb

Post by IQ500 »

nisam gledao grafove a mislio sam se mozda prekid stvarno generira na pravom edgeu a ne bez donjeg dijela...

ok rjesena je i zadnja nepoznanica pa cemo vidit kako ce to ispast :D
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7874
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Post by pedja089 »

pa koji sam ja djavo crto tolike grafike :?:
kad od nekog trazis pomoc onda bar saslisaj i pogledaj :!:
Shenda

Post by Shenda »

Pedja, nema ljutiš :!:
Vidiš koliki IQ lik ima :!: :lol:
IQ500
Penjem se :)
Penjem se :)
Posts: 75
Joined: 02-07-2008, 14:39
Location: Zagreb

Post by IQ500 »

evo dovrsio sam program, sad treba vidjet kako ce radit, jos trebam malo pregledat kod da nisam negdje slucajno u krivom banku...

http://www.elektronika.ba/forum/uploadz ... DIMMER.rar
Post Reply