[ mijatovic_86 @ 07.04.2012. 21:13 ] @
Pozdrav svima,
tema mog sledeceg learning projektića sa ovim 18f4520 PICom bi bila sledeće (nesto kao program za motalicu, al nije za nju)

Treba da zadam kontroleru neku vrednost, recimo 1000 (preko tastarure ili preko tastera za odgovarajucu cifru cu se tek odluciti:), verovatno ovo drugo),
na odredjeni pin bi doveo signal sa senzora (mikroprekidac ili induktivni, preporuka ?) da bude aktivan u jedinici (znaci na oko 5V), i na svaki signal sa senzora (svaki prolaz) bi inkrementirao odredjenu promenljivu, i kad ona dodje do recimo 980 trebao bi da generisem signal koji bi promenio brzinu motanja, tj usporio bi je i kad dodje na 1000 stane.
Takodje tu bi koristio i LCD, za prikaz podataka, i nekoliko dugmeta pride tipa SET, RESET, RUN, itd...
Takodje brojao bi i broj ciklusa brojanja, znaci odbrojim jednom 1000, pritisnem reset tog brojaca, i drugi brojac mi se inkrementira na 1 (ili jos bolje sa jednom if kad zavrsi brojanje inkrementiram i ciklus counter) i njega bi takodje ispisivao.

E sad da li da koristim klasicno bilo koji ulaz PICa kao digitalni, i da brojim impulse, ili da koristim TIMER/COUNTER module kontrolera (morao bi i to da učim)?
Pretpostavljam da i u modu digitalnog ulaza moze bez problema da detektuje do 10 prolaza u sekundi...

Ako imate neki savet ili preporuku kako ovo realizovati, bio bih zahvalan.

Pozdrav

p.s.
Ne trazim gotovo kod ili elektroniku i tako to, vec je ovo na neki nacin javni proces ucenja :) u kome je pomoc uvek dobro došla
[ rsinisa @ 07.04.2012. 21:51 ] @
Da li ćeš da koristiš (matričnu) tastaturu ili nekoliko običnih tastera zavisi od tebe i šta tačno želiš. Da ja treba ovo da uradim, stavio bih npr 3 tastera. Ulaz neka ti bude neki pin koji ima interni pull-up, a senzor neka da logičku 0 kao aktivno stanje. Senzor bi verovatno bilo najbolje da bude induktivni, a za brojanje ti ne treba nikakav interni tajmer već je dovoljno da nadzireš ulaz i uvećavaš odgovarajuće promenljive za broj komada, kao i za broj grupa. Za ubrzanje i usporenje motora koristiš PWM s tim da ti onda treba jednosmerni motor. Sve u svemu, prilično jednostavan zadatak.

Pozdrav.
Sinisha
[ goran_68 @ 08.04.2012. 06:29 ] @
Ulaz sa senzora (moj predlog induktivni) dovedi na pin koji moze da generise prekid (recimo RB0/INT0). U prekidnoj rutini uvecavac brojac pa ga dalje uporedjuj sa zadatom vrednoscu. Ja sam to radio bas za motalicu prijatelju a koristio sam 4-cifreni 7-segmentni LED displej. Mozes i kolektorski AC motor upravljan trijakom da iskoristis ali sam vise za varijantu sa DC i PWM. Uradi i promenu smera obrtanja motora.
[ mijatovic_86 @ 08.04.2012. 09:33 ] @
neka glupa pitanja :)

-mogu li da koristim define za dugmice koji mi trebaju, i da ih odma dodelim odredjenom portu, da lakse posle kucam :)
npr ovo
#define SET PORTC.F0
#define RESET1 PORTC.F1
#define RESET2 PORTC.F2

-ideja da koristim 0 kao aktivnu je svakako bolja, samo na koji ulaz bi to trebalo da dovedem, tj kojom komandom mogu da enablujem pull up na nekom ulazu ?
ili to mogu i na plocici ako je budem pravio da ide
220R
GND --- vvvvv-----TASTER--------PORTC.F1 ??? (samo ne znam sta ce da ocitava dok je "u vazduhu")

nova glupa pitanja slede cim dodjem do njih :)
[ goran_68 @ 08.04.2012. 10:00 ] @
#define moze. Za pull-up pogledaj datasheet. Za tastaturu imas gomilu Application Notes na microchip sajtu.
[ rsinisa @ 08.04.2012. 13:31 ] @
Citat:
goran_68: Ulaz sa senzora (moj predlog induktivni) dovedi na pin koji moze da generise prekid (recimo RB0/INT0). U prekidnoj rutini uvecavac brojac pa ga dalje uporedjuj sa zadatom vrednoscu.

Ne želim da insistiram, ali čisto da iznesem moje mišljenje da je ovde interapt poptpuno nepotreban jer je ulazna frekvenca toliko mala da je dovoljno nadzirati taj ulazni pin. Naravno, ovo je moje mišljenje koje glasi (po ko zna koji put ovo pominjem) da je interapt izuzetno moćno oružje i ne treba ga koristiti tamo gde nije neophodno. Ali opet, svako rešenje koje radi je dobro rešenje. Eto, nisam mogao da odolim :).

Pozdrav.
Sinisha
[ bogdan.kecman @ 09.04.2012. 08:08 ] @
bio interrapt "mocan" ili ne, zar nije lakse da u glavnom programu ne razmislja uopste o tome "koliki je brojac" vec kapira da ima "magicno" u nekoj varijabli uvek vrednost countera i kad mu treba on je procita ... pa kad "mota" samo u petlji cita vrednosti te varijable, kada se seta kroz menije "ignorise" je etc etc .. to mu daje mogucnost da se seta kroz menije i gleda statistiku, setuje nesto, dok masina "broji" a kad izadje iz menija i dalje vidi pravu brojku sta je i dokle namotao .. ja bi to radio sa interaptom zato sto je lakse (tj napravio sam jedno 200 razlicitih verzija tog projekta o kome se prica, na zalost svi su bili "za nekoga" pa nikad nisu postali open source :(, bas bi mogao da napravim jedan i postavim ga FOSS :D, samo da uvatim slobodnih 45min u komadu)

[ mijatovic_86 @ 09.04.2012. 08:29 ] @
Svidja mi se ovo kako bogdan prica, iako mi nije jos uvek poznato da radim sa interaptima na PICu, al dobro jedno popodne nije mnogo da se t0 nauci :)

Btw na koliko bi bilo dovoljno da se setuje da interapt radi, ako ce biti do 10 prolaza u senkundi, onda je dovoljno da interapt skenira laz do 30 puta u sekundi ?
[ goran_68 @ 09.04.2012. 08:39 ] @
Interapt ne skenira vec se stalno prati stanje na pinu. Pogledaj recimo INT0. Odaberes na koju ivicu ce se generisati prekid, omogucis ga preko INT0IE i postavis GIE bit. Taman ces nauciti nesto o prekidima. Imas primera sigurno na microchip sajtu.
[ ZAS011 @ 09.04.2012. 09:10 ] @
Kada bi interapt skenirao ulaze ne bi se nista razlikovao od neke tvoje rutine koja se konstantno vrti u krug i juri sopstveni rep

Interapt je vezan za internu hardversku skalamociju i uC. Da bi razumeo kako to radi, moraces da listas datasheet-ove svojih "protivnika" sa kojima hoces da se "boris", prelistas ponesto primera i, nadam se, shvatices kako to funkcionise.

Nije tesko, samo sto ne moze odjednom i sadodma'. mora malko i da se
[ mijatovic_86 @ 09.04.2012. 10:36 ] @
Znam ja kako funkcionise interapt uopsteno, al cu sad da prelistam da vidim kako je to konkretno odradjeno na 18f4520 i koje registre koristim za setovanje...

Znaci na INTCON trebam da setujem bit 7 (GIE global interupt enable) na 1, tj redom

INTCON bit 7 GIE na 1 global interupt enable
INTCON bit 4 INT0IE na 1 enables INT0 external interrupt
INTCON2 bit 6 INTEDG0 na 1 (external interupt 0 , interrupt on rising edge ako budem koristio aktivnu jedinicu, al onda moram i da iskljucim pull up, mada valjda su po defaltu iskljuceni)

E sad koliko ja vidim samo na portu B mogu da pratim stanja koja pokrecu interapt, ali izgleda da ne moze svaki bit posebno :S
I jel treba onda da pratim konkretno sa ovim INTCON bit 3 RBIE na 1 (enables RB port change interrupt), ili sam ovim gore vec setovao sve sto treba, i ovim INTEDG0 pravim RB0 ? Nisam kuci trenutno pa ne mogu odma da probam na easypicu, i zato pitam ovako ono sto moze i da se proveri metodom pokusaja :)


p.s.
i adcon1 da setujem sve ulaze kao digitalne
[ bogdan.kecman @ 09.04.2012. 11:04 ] @
INT0 / EXT ti je externi interapt i moze da bude na rastucu ili na padajucu ivicu

portB ima 4 pina koji su IOC iliti interrupt on change i okidaju na obe ivice, lako u interrupt rutini proveris koji je pin promenio stanje (zapamtis stara stanja :D )

IOC je mnogo sporiji od EXT
EXT reaguje trenutno sto znaci da ce preskociti iviciu samo ako dodje pre nego se zavrsi interrapt rutina koja je obradjivala proslu ivicu dok je IOC mnogo sporiji (obicno na 20 MHz kloku moze da uvati max 100 kHz promene)

E sad, za koji ce ti IOC za ovaj tvoj projekat? Tastere nema potrebe da citas u interaptu, eventualno mozes na IOC da stavis neki STOP taster i to je to, na EXT prikacis brojac ... tastaturu citas u petlji, mozes da radis software debouncing ...
[ goran_68 @ 09.04.2012. 14:55 ] @
Redosled je ovakav:

INTEDG =1; ili INTEDG0 =0; zavisi na koju ivicu hoces
INT0IF = 0;
INT0IE = 1;
GIE = 1;
[ rsinisa @ 09.04.2012. 22:17 ] @
Ovo sa interaptom će da radi kako treba, ali samo ako uredjaj radi na stolu u laboratorijskim uslovima. Ako će ikada da radi u realnim uslovima i nije sve odradjeno kako treba, velike su šanse da će brojač da laže, zato i predlažem nadziranje ulaza brojača kroz petlju (ili kako reče Šćepa "jurenje sopstvenog repa") jer je moguće odraditi tzv. softverski debaunsing, odn. eliminisanje lažnih impulsa koji su u realnim uslovima vrlo česti ako nije sve ispoštovano kako treba.

Pozdrav.
Sinisha