> Ali ne znam kako da napisem(u asm naravno) da mi na portb ne prikaze
> vrednost brojaca u binarnom zapisu vec da led sija odredjenom jacinom,u
> zavisnosti od stanja brojaca.
Ovde se očigledno teško mešaju pojmovi. Najpre da razjasnim kako LED moze
sijati promenljivom jačinom, što je moguće jednostavnije.
Pretpostavimo da ste povredili levu nogu. Možda ste stali na ekser, možda na
razbijeno staklo, nije bitno. Bitno je da i dalje možete hodati.
Pretpostavimo sada da trebate preći par metara. Možete to učiniti na više
(npr. 256) načina, ali ovde ću se ograničiti na svega 5.
Možete to učiniti skakućući na desnoj nozi. Na taj način uopšte ne osećate bol
(LED uopšte 0% ne svetli).
Možete samo pomalo koristiti levu nogu. Osećaćete mali bol, ali ništa strašno
(LED samo pomalo svetli, recimo 25%).
Možete koristiti obe noge ravnopravno, kao da Vam leva nije ranjena (ovde LED
svetli sa 50% snage).
Možete više koristiti povređenu levu nogu, a manje desnu (LED svetli sa 75%
snage)
Možete odskakutati na povređenoj nozi (LED je neprestano 100% uključena).
Očigledno da ce odnos zdrave/povređene noge uticati na količinu bola koju
pretrpite krećući se tih par metara. Kada dođete do cilja, nećete više
osećati seckajući bol, vec stalan, a ukoliko bi ga trebali oceniti
procentualno, najverovatnije biste dobili približno iste rezultate kao što su
gore navedeni u zavisnosti od načina kretanja.
Predstavite sada desnu (zdravu) nogu isključenom LED, a levu (povređenu)
uključenom. Upravo tako se reguliše količina svetlosti.
Pretpostavite sada da tih par metara trebate preći određenom brzinom. Recimo
da Vam zvoni fiksni telefon. Brzina ne sme biti previše mala, inače
rizikujete da ne stignete na vreme. Veća brzina, naravno ne može škoditi, ali
imajte u vidu da ste povređeni. Ukoliko nije neophodno, ne morate se
forsirati previše.
Ipak, krećući se previše malom brzinom (npr. 3 sekunde stojite na levoj nozi
pa 3 sekunde na desnoj u 50% varijanti) sigurno nećete stići do telefona na
vreme.
Sa LED je isto. Ukoliko je brzina previše mala, moći ćete umesto menjanja
intenziteta svetla (neprekidnog kretanja) primetiti treperenje diode
(zastajkivanje).
> Jeli to moguce odraditi za ceo port ili samo za jednu led i kako?
Moguce je to uraditi i za jednu LED i za ceo port.
Za jednu LED, npr. na RA2 pinu povezanu od pina prema masi:
Ukljuci LED
Pauza1
Iskljuci LED
Pauza2
Vrati se na pocetak
Code:
Start
bsf PORTA,2
call Pauza1
bcf PORTA,2
call Pauza2
goto Start
Za ceo port, npr sa 8 LED povezanim na PORTB od pinova prema masi:
Ukljuci sve pinove porta
Pauza1
Iskljuci sve pinove porta
Pauza2
Vrati se na pocetak
Code:
Start
movlw b'11111111'
movwf PORTB
call Pauza1
movlw b'00000000'
movwf PORTB
call Pauza2
goto Start
Najpre je, naravno potrebno podesiti sve pinove kao izlazne.
Ovakvim načinom regulacije nećete moći da dobijete pravih 0% i 100%, jer će
jedan mali deo vremena LED sigurno biti uključena odnosno isključena. Recimo
da je ovo regulacija od 1 do 99%.
U jednoj od ranijih tema dati su programi za automatsko računanje pauza koje
možete koristiti za automatsko generisanje Pauza1 i Pauza2 potprograma.
http://www.elitesecurity.org/p2768449
Imajte u vidu da ljudsko oko ne može primetiti treperenje LED iznad oko 30Hz,
ali sve ispod toga već postaje vidljivo. To znači da zbirna vremena
Pauza1+Pauza2 ne smeju preći 0,03sekunde (ja obično stavljam 0,02).
Takođe, imajte u vidu da je za ljudsko oko prilično teško utvrditi kolikim
intenzitetom svetli LED. Najverovatnije nećete uspeti da uočite razliku
između 100% i 25%. Bolje usmerite svetlost LED na npr. prazan list papira, i
posmatrajte svetlost kroz kameru mobilnog telefona ili digitalnog foto
aparata.
Ovaj primer dat je samo u demonstracione svrhe, i u praksi se sigurno ne bi
koristila ovakva regulacija jer ne ostavlja mesta mikrokontroleru za ikakve
druge poslove. LED bi se u pravim programima uključivale i isključivale iz
interapt rutine, oslobađajući mikrokontroler za druge poslove.