[ visatix @ 05.06.2005. 15:58 ] @
Pokusavam da koristim 12F675 za ocitavanje potenciometra koji bi za odgovarajuci polozaj potenciometra palio na odgovarajuci nacin LE diode. Program je pisan u Basic-u i na zalost ne radi - ukljucenjem sklopa pale se sve LED i ne reaguju na pomeranje potenciometra. Koristio sam potenciometar od 10K i kondenzator od 100nF (jedan kraj kondenzatora na masu, drugi kraj za nozicu potenciometra i sve to na
pin 2 (GP5), drugi kraj potenciometra za +5V). U nastavku dajem izgled programa. Moze li mi neko reci gde gresim?
ansel=0
adcon0=0
cmcon=7

output gpio.0 'izlazi za LED
output gpio.1
output gpio.2
output gpio.4

symbol l1=gpio.0 'l1,l2,l3,l4 - LE diode
symbol l2=gpio.1
symbol l3=gpio.2
symbol l4=gpio.4
symbol potenciometar=gpio.5

A var byte 'promenljiva za naredbu POT

l1=0:l2=0:l3=0:l4=0
main:
A=0
pot potenciometar,255,A
if A<50 then l1=1:l2=0:l3=0:l4=0
if A<100 then l1=1:l2=1:l3=0:l4=0
if A<150 then l1=1:l2=1:l3=1:l4=0
if A<200 then l1=1:l2=1:l3=1:l4=1
pause 50
goto main
end

[ ddanijel @ 05.06.2005. 16:15 ] @
Na prvom mestu gresis sa time sto si uopste vezivao bilo koji kraj potenciometra na +5v. Za koriscenje naredbe POT u PicBasicu trebas da imas rednu vezu kond-potenciometar izmedju mase i Pin-a na pic-u. Nikakvo vezivanje na + i slicno !!
Drugo, vrednost za "scale" ne mora da bude 255 kao u tvom primeru, nego se utvrdjuje experimentom ili automatskom kalibracijom na pocetku programa. U svakom slucaju, da ne ulazim detaljnije, prvo povezi to kako treba (imas lepo nacrtano u pdf manualu za pbp, samo treba neko da pogleda).

Pozdrav
[ visatix @ 05.06.2005. 18:33 ] @
DDanijele, moram da te citiram "(imas lepo nacrtano u pdf manualu za pbp, samo treba neko da pogleda)" - nisam koristio "pdf manual" nego sam nabavio knjigu "programski jezik Basic za PIC mikrokontrolere" u kojoj se vidi povezivanje drugog kraja potenciometra (odnosno reostata) za +5V (nasao sam to u knjizi na dva mesta-mozda ih ima i vise) i sve to koristi u programu naredbu "POT" (ako ne verujes mogu da skeniram stranicu sa semom i programom)! Ali, da se ne preterujemo, uradio sam onako kako si mi rekao i opet isto! Cak i za nulti otpor i za beskonacan otpor opet gore sve LED! Usput, u knjizi se spominje i ta kalibracija ali je ne razumem!
[ rsinisa @ 05.06.2005. 19:08 ] @
visatix wrote:

> DDanijele, moram da te citiram "(imas lepo nacrtano u pdf manualu za
> pbp, samo treba neko da pogleda)" - nisam koristio "pdf manual" nego sam
> nabavio knjigu "programski jezik Basic za PIC mikrokontrolere" u kojoj
> se vidi povezivanje drugog kraja potenciometra (odnosno reostata) za +5V

Danijel je u pravu, a sto se tice knjige, ako je od
"Mikroelektronike", to je stamparska greska.

> onako kako si mi rekao i opet isto! Cak i za nulti otpor i za beskonacan
> otpor opet gore sve LED! Usput, u knjizi se spominje i ta kalibracija
> ali je ne razumem!

Kao i uvek, i ovoga puta je najsigurnije koristiti original
dokumentaciju; znaci pogledaj original uputstvo za PBP. Ako se ne
snalazis sa engleskim, imas na mom sajtu preveden deo uputstva za PBP.

Pozdrav.
Sinisha
[ rsinisa @ 05.06.2005. 19:43 ] @
Nisam odmah obratio paznju na program, imas gresaka. Nemoj da se
ljutis, ali zaista bi trebalo da procitas dokumentaciju pre nego sto
nesto radis, ustedeces sebi vreme i nerviranje.
Recimo da je a bilo koji broj ispod 200; upalice ti se sve LED, jer
ce da se izvrsi sigurno poslednja instrukcija. A i nisam siguran kako ce
program da se ponasa u IF sa vise instrukcija odvojenih dvotackom jer
ako imas samo IF, onda se ono posle uslova smatra labelom na koju
program treba da skoci. Ako posle IF hoces da izvrsavas instrukcije,
moras da stavis ENDIF na kraju. Predlazem ovo:

if a >= 0 then
gpio=0
endif
if a > 50 then
gpio=%0001
endif
if a > 100 then
gpio=%00011
endif
if a > 150 then
gpio=%00111
endif
if a > 200 then
gpio=%10111
endif

Medjutim, ovo nije bash dobro resenje jer ce program u nekim situacijama
da izvrsi vise naredbi, mada ce kranji rezultat da bude ono sto hoces.
Recimo da je a0. Posto je 160 vece od nule, izvrsice se prvi IF i
ugasiti sve LED, zatim ce da se izvrsi i drugi jer je a > 50 i upalice
prvu LED i tako sve do cetvrtog IF koji ce da upali LED 1, 2 i 3.
Poslednji IF nece da se izvrsi. Ovo je resenje dobro jer daje kraci kod
od onog pravog resenja koje bi trebalo da se koristi, ali nije bash
ispravno sa logicke strane. Pravo resenje bi bilo ovo:

if a >=0 and a <= 50 then
gpio=0
endif
if a >= 51 and a <= 100 then
gpio=%0001
endif
if a >= 101 and a <= 150 then
gpio=%00011
endif
if a >= 151 and a <= 200 then
gpio=%00111
endif
if a > 200 then
gpio=%10111
endif

Kao sto rekoh, ovo daje mnogo duzi kod, ali je ispravnije, a moguce je
izvrsiti optimizaciju koda koji ce da da isti rezultat.

Pozdrav.
Sinisha
[ visatix @ 05.06.2005. 20:55 ] @
Hvala Sinisa na odgovoru! Uspelo je! Samo je greska bila sto nisam stavljao naredbu ENDIF nakon IF i naravno, povezivanje potenciometra!
[ Goran Goran @ 12.06.2005. 09:42 ] @
Jel bi mogao staviti shemu spoja?
[ ddanijel @ 16.06.2005. 12:06 ] @
Shemica je prosta. Najbolje je da pogledas u PBP manualu ima objasnjeno i nacrtano. Ako neces da se lomis sa engleskim imas prevedeno na http://www.geocities.com/sinelyu/pbp/PBP_naredbe.htm
Pogledaj naredbu POT za ovo sto si pitao.
[ rojunacko @ 03.07.2005. 15:42 ] @
ej,mozes mi reci gdje u Hrvatskoj da nabvim taj pic 12f675 ili 12f629,.,slicni su,?? hvala!"
pozdrav