Jel tko radi ovdje sa PICevima? Ja sam nedavno poceo pa hocu malo zakomplicirati stvari. Radi se o PIC16F84A. Htio bih mu na jedan ulaz staviti potenciometar a na preostale izlaze svugdje po jednu LEDicu, kako se potenciometar okrece tako bi LEDice trebale brze kruziti (PAUSE vrijednost bi bila promjenjiva simetricno sa potenciometrom). Pa kako to izvesti, koje komande koristit za ocitanje vrijednosti sa potenciometra?
po jednu LEDicu, kako se potenciometar okrece tako
simetricno sa potenciometrom).
potenciometra?
Ba¹ ti i nije neki kontroler, nema A/D ili bar komparator ulaze, ali mo¾e se izmajmunisati tako da postavlja¹ npr. port kao izlazni i digne¹ ga na 1 i onda ga prebaci¹ kao ulaz i prati¹ vrijeme kada dosegne 0. Na taj port kaèi¹ RC prema masi, potenciometar paralelno C-u i raèunaj. Kako izvesti ? Ima¹ 33 instrukcije, datasheet i deri :-)
Mislim da ti je puno jednostavnije rije¹iti sa RC sklopom, vi¹e æe¹ nauèiti kako pomoæu jednostavnih trikova rije¹iti nedostatke kontrolera i dobiti funkcije koje na prvi mah izgledaju da se ne mogu ostvariti sa njim, ujedno dobit æe minimalizirani dizajn bez nepotrebnih dodatnih sklopova. Buduæi da nisi ni¹ta napisao kakva iskustva ima¹ u programiranju i elektronici, da li hoæe¹ nauèiti asembler ili bi to pisao u C-u, ako je ovo drugo onda ti ne mogu ba¹ pomoæi, radio sam dosta sa gotovo svim 8-bitnim PIC-ekima, ali sve sa asemblerom. Ne bavim se profesionalno sa kontrolerima ali na poslu tu i tamo èesto treba ne¹to rije¹iti, èesto sam sa njima radio i zahtjevnije stvari gdje bi bolje legao nekakav 16-bit kontroler ali jednostavno nisam na¹ao vremena da se posvetim C-u koji mi je ispario iz glave tako da sam na kraju sve rije¹io sa asemblerom na 8-bit.
Jedna stvar, bilo da ¾eli¹ poèeti u asembleru ili u C-u, mora¹ dobro prouèiti kontroler, njegov datasheet je u biti sve ¹to ti treba. Dok ne prouèi¹ kontroler ne mo¾e¹ ni¹ta zapoèeti. Osobno bi ti preporuèio asembler koji je zahtjevniji ali i bli¾i samom hardware-u, tj. sa njim æe¹ bolje upoznati kontroler. Buduæi da nema¹ iskustva sa tim kontrolerom nisam siguran kamo da te sad uputim. Najradije bi ti savjetovao da uzme¹ nekakav gotov jednostavniji projekat sa neta i da ga secira¹ dio po dio uz datasheet pri ruci, npr ne¹to od ovih
formatting link
Ne bi bilo lo¹e i da naruèi¹ onu knjigu o PIC-evima sa
formatting link
, mislim da je mo¾e¹ nabaviti u Electronic Centru kod nas. Tako æe¹ bar nauèiti nekakve osnove.
Ako si zainteresiran, mogu ti pomoæi oko tvog projekta, ali onda se prebacimo na mail. Ako preferira¹ C, onda tra¾i dalje :-)
umjesto 16F84 uzmi 16F876 koji ima vise memorije, portova i ADC a jeftiniji je i to izvedi s njim. Program bi izgledao nekako ovako (posto je ADC 10 bitni a na koristi se 16 pinova/ledica za korak sam uzeo 64):
-init procesor (portovi i ADC) petlja: procitaj ADC i spremi u varijablu potenciometar if (potenciometar==potenciometar_old) goto petlja potenciometar_old=potenciometar portB=0 portC=0 if (potenciometar==0) BSF portB,0 if (potenciometar==64) BSF portB,1 if (potenciometar==128) BSF portB,2 . . if (potenciometar==448) BSF portB,7 if (potenciometar==512) BSF portC,0 . . if (potenciometar==1024) BSF portC,7 goto petlja
Za¹to dodavati jo¹ èipova, kada se najveæi dio mo¾e rije¹iti iz software-a?
Ako si novi u svemu ovome, uzmi BASIC i poèni raditi s njim. Za PIC-eve bez A/D konvertera u raznoraznim BASIC-ima obièno postoji POT komanda, koja mjeri otpor preko RC èlana (ono ¹to tebi treba).
formatting link
To je knjiga Mikroelektronike, mo¾e¹ ju nabaviti na srpskom jeziku od njih
formatting link
ili provjeri ima li u Electronic centru, Chipoteci i sliènim mjestima (mislim da se mo¾e i naruèiti ako nema na lageru).
Ako nisi imao iskustva, tako æe¹ najbr¾e shvatiti o èemu se otprilike radi. A ima¹ i hr.sci.elektronika.mikrokontroleri grupu :)
Ima dosta ljudi tu na grupi koji rade sa mikrokontrolerima i vrlo cemo ti rado pomoci savjetom.
Najbolje sto mozes napraviti jest da si nabavis drugi mikrokontroler.
16F84 je jednostavno debelo zastario. Ako si mozes nabaviti 16f876 , kao sto ti je spomenuo Megamusic, ustediti ces si puno nepotrebne muke.
Inace, ovo sto ti hoces napraviti je otprilike dvadeset linija koda u PicBasic-u. ASM je za ovakve namjene uglavnom nepotrebno kompliciranje (jer si pocetnik).
I nemoj odustajati ako ne proradi ni iz desete, svi smo to prosli :)
Ma da, radim u BASICu i za mene, kao pocetniku je to i vise nego dovoljno. Dakle usprkos svim prijedlogima neka nabavim PIC16F876? To radim iz hobija, tako da cu na BASICU vjerovatno i ostati, posto ne planiram neke "velike" projekte, vec onako, za razonodu.
Napravis petlju koja ce vrtiti svjetlo, ako je dosta 8 dioda onda samo rotiras byte kojeg saljes na port (prvo ga napunis s 2^n, n=0..7, tako da je setiran samo jedan bit).
Petlja vrijednost za pauzu uzima s neke memorijske lokacije koju izracunavas s obzirom na polozaj potenciometra. Potenciometar mozes ocitavati i unutar interrupt rutine (pazi da A/D konverteru das dovoljno vremena izmedju ocitavanja vrijednosti).
Ocitanu vrijednost s potenciometra u intervale najlakse pretvoris s cjelobrojnim dijeljenjem, npr. za 10 bit A/D i 16 brzina:
parametar = ocitana_vrijednost\64
S '' sam oznacio cjelobrojno dijeljenje. 128 je jer je 2^10 (bitova A/D pretvaraca) = 1024 a 1024/16 (brzina) = 64. Sad u variabli parametar imas vrijednosti 0..15 i preko njega izracunas pauzu (o matematickoj funkciji i vrsti potenciometra ce ovisiti karakteristika, ako je potenciometar linearan a ti hoces logaritamsku karakteristiku onda ces isprogramirati odgovarajucu funkciju za izracun pauze),
Ako hoces vecu rezoluciju mijenjanja brzina (16 nivoa se moze registrirati s golim okom) radis s drugim vrijednostima, za 64 brzine stavis:
parametar = ocitana_vrijednost\16 (za 32 brzine 32)
pa dobijes parametar 0..63 (ili 0..31) ali s povecanjem broja brzina se povecava i mogucnost da kod brzog okretanja potenciometra preskocis jedan ili vise intervala (to naravno ovisi i o frekvenciji sample-iranja potenciometra --> frekvenciji interrupt-a (ako radis s interruptom)).
Svi prijedlozi upravo kazu da nabavis ovaj 16F876, jer je puno noviji. To sto po netu nalazis hrpu clanaka sa 16F84 to je zato sto je to nekad davno bio popularan mcu, vec ga je odavno pregazilo vrijeme.
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.