2024. május 4., szombat

Gyorskeresés

PIC avagy MCU alapok

Írta: |

[ ÚJ BEJEGYZÉS ]

Kedves olvasó!

Szeretném bemutatni nektek a Microchip PIC sorozatát amik kis programozható mikróvezérlők.
Ez sok színes és izgalmas feladat elvégzésére alkalmasak, és sok programnyelvet támogat(Assembly , ubasic, uc) a fordító amit a Microchip ad hozzá(MPLAB IDE régebbi változat / MPLAB X IDE az újabb kiadás).
Ez a cikk elő sorban hobby barkácsolóknak készül és nem profiknak, így kérlek ne dobáljatok meg ha esetleg hibát találtok benne.
Nem kívánok belemenni részletesebben a pic részleteibe sem a működési elvébe csak olyan mértékben ,hogy megértsétek mi miért van(csak konyhanyelven :DDD ).
Azéert nem árt tudni, hogy a Pic-ek kell szinte bármit meg lehet valósítani(számológéptől a kaputelefonos és automata kapun átt egész az ipar akár a robotika vagy a RC vlilágban).
Főként az assembly nyelvel fogunk foglalkozni.(lévén ez az a nyel amiben a legjobban lehet optimalizáli a programunkat.)

Sajnos a PIC programozásnak vagy egy feltétele egy "égető" ezt meg kell venni.

PIC felépitése

Az alábbi ábrán láthatok egy pic16f877a nekem ez áll rendelkezésemre így ezen fogom nektek bemutatni a pic lenyűgöző kis világát.

Így néz ki egy MCU

Térjünk kicsit rá magára az eszközre.
Az i/o kivezetése és azok elnevezései láthatóak a következő ábrán.

Ez egyenlőre kicsit erős de mindjárt rátérünk hogy mi mi.
Vannak olyan kivezetések amik programozhatok és vannak fix kivezetése.
Fix kivezetések pl.:
vdd, vdd2 : ezek a + tápellátást lábai
vss, vss2 : ezek a - tápellátási lábak
osc1,osc2: a külső ütemjel csatlakozási pontjai:
- RC oszcilátor
- Kvarc oszcilátor
Viszont található az újjab pic sorozatokban egy állítható belső oszcillátor is ez RC típusú(a6f877a még nincs ilyen).
MCLR : ez egy reset láb amivel újra lehet indítani az MCU-t
Inentől jönnek a programozható lábak:
- ra0-ra5 : 5 olyan láb ami lehet analog bemenet (0-5v tartományú jel)
vagy digitális bemenet / kimenet(0 vagy 5 v nincs köztes érték)
- rb0-rb7 : 8 olyan láb ami digitális bemenet / kimenet
- rc0-rc7 : 8 olyan láb ami digitális bemenet / kimenet
- rd0-rd7 : 8 olyan láb ami digitális bemenet / kimenet
- re0-re2 : 3 olyan láb ami lehet analog bemenet (0-5v tartományú jel)
3 olyan láb ami digitális bemenet / kimenet

Gondolom feltűnt hogy nem határoztam meg mi bemenet és mi kimenet. Ez azért van mert ezt a programunkon belül tudjuk beállítani.
A pic-ben találhatok előre definiált utasítások és vezérlőbitek, ezekről most nem akarok még szót ejteni(Később majd úgyis kell beszélnünk róla).

Na de jöjjön amire mindenki várt

Az első feladat egy led kigyujtása lesz. Ehez meg kell épitenünk az első teszt áramkörünket.
Ami így fog kinézni:

(Ha esetleg valaki nem igazán ért a villamosság és az elektronika varázslataihoz nem kell kétségbe esni ha lesz igény írok arrol is egy kis cikket. Később)

Ha kész a hardware akkor jöhet a software.

Néhány szó az MPLAB x-ről

Ez egy fejlesztő környezet amiben meg lehet alkotni a PIC vezérlő programokat(több nyelven is tudsz programozni bennük.)

most lépésről lépeésre végigmegyünk egy új feladat létrehozásán("new project" :DDD tudom nem helyes a forditás).

Első lépés:
Kattints a new project feliratra vagy a "File->New Project..."

Második lépés:
Project típusának megadása.Mi nagyrészt "Standalone Projectet" fogjuk használni.

Harmadik lépés:
A MCU tipusának kiválasztása(Nálam pic16f877a)

Negyedik lépés:
A teszt eszköz kiválasztása(Ez az égetőnk típusa ha nincs égetünk).

Ötödik lépés:
A Programnyel kiválsztása.(MPASM azaz assembly)

Hatodik lépés:
1. A project nevének megadása
2. a project helyének megadása

Megvallom mikor nekiálltam a PIC világot megismerni itt egy kicsit elakadtam mert nem tudtam néhány apró trükkről ami fontos hogy fojtatni tudd a fejlesztést lássuk ezeket sorban.
1. *.inc (ez egy olyan fájl amiben megvannak az indirekt címzések listája tehát a STATUS regiszterren nem ugy hivatkozunkk, hogy "03h" hanem "STATUS") Ezt a fájlt megtalálod az MPLAB X alapkönyvtárban (c:\Program Files\Microchip\MPLABX\v3.00.02-beta\mpasmx\p16f877a.inc az én pic-emé).
Ezt a fájlt a "Header Files" be kell bemásolni("Header Files" jobb klikk és ott az "Add exists item").
2. ha ezekel megvagy akkor adj a "Source File" egy *.asm ez lesz maga a programunk.(Jobb klikk és a new alatt ott van ,hogy "New->AssemblyFile.asm").

Na innentől jön a kicsit izgibb rész a valódi programozás.

Programozás:
Ehhez találtok részletes leírásokat a
t-es-t

Assembly utasítás készlete:
utasitások

Mint látjátok nem használunk túl sok utasítást viszont ez mindenre elég amire csak kellhet.

Assembly alapok:

Néhány fontos dolog amivel nem árt ha tisztában vagy:
a pic fő részei:
Program memoryai: itt van eltárolva maga a program amit írsz és ez fut le.
File regiszter: ezek a memory területeid (itt van pl a STATUS, ADCON és hasonló regiszterek és az általad definiált saját regiszterek is ezek minden újraindításkor elvesznek)
EEPROM: Ez egy olyan tároló terület ami nem veszik el újratáskásodik(hátránya hogy nem lehet végtelenszer újraírni sajnos egy idő után már nem írható elhasználódik. )

Ezt a három részt mindig kezeld külön a fejedben.
A Program és file regiszterek 2 vagy 4 részre vannak bontva.
A File Regiszter esdetén ezeket bankoknak hívjuk(bank0, bank1, bank2, bank3)
Bankváltásra van több megoldás pl.:
"Banksel TRISB" utasitás ilyenkor megkeresi hogy melyik bankban van TRISB és abba a bankba vált.
vagy a
STATUS,RP0..1 bitekkel

Miért van erre szükségünk?
Mert a TRISB regiszterben állítod azt, hogy a láb kimenet vagy bemenet .
Még a PORTB regiszterben található az állapota(aktív vagy nem).

16f877a Így néznek ki a File Regiszterek felolsztása.

W regiszter: ő egy ideiglenes tároló az assembly kód mindig egy utasítás egy egy változót tartalmaz.
PL.:
MOVLW b'00000000'
utasitás :MOVLW (beletölt egy statikus értéket w-be)
váltózó :b'00000000'

MOVWF PORTB
utasitás : MOVWF(W értéket betölti PORTB-be)
Váltózó : PORTB

PCLATH:A programod miközben fut ez a regiszter számolja, hogy épp hol tart.(Rá még majd később visszatérünk egy külön fejezetben).

Ez lesz életünk első assembly codja:

List p=16f877a ; az MCU tipusa
Include "p16f877a.inc" ; az MCU .INC file elérési utja
__CONFIG _OSC_HS & _WDTE_OFF & _PWRTE_OFF & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF ; MCU Konfiguration bits azaz beálitóbitek

org 0x0000 ; Reset vektro
goto init ; ugrás initre
nop ; üres sor
org 0x0004 ; Interupt
retfie
init ;init
call bank1 ; meghívjuk a bank1
movlw b'00000000' ;W-be töltjük 0-át
movwf PORTB ;W értékét bemásoljuk PORTB-be ezzel kimeneté alakijuk PORTB
call bank0 ;meghívjuk a bank0
clrf PORTB ;PORTB letisztitása az összes kimenet értéke 0
main
bsf PORTB,0 ;PORTB 0 bitjének 1-re álitása (ettől nyulad majd ki a led)
goto main ; ugrás main-re (Végtelenített ciklus)
;banksel helyett én inkább ezt szoktam használni
bank0
bcf STATUS,RP0
bcf STATUS,RP1
return
bank1
bsf STATUS,RP0
bcf STATUS,RP1
return
bank2
bcf STATUS,RP0
bsf STATUS,RP1
return
bank3
bsf STATUS,RP0
bsf STATUS,RP1
return

end

Nem kell megijedni nem olyan bonyolult mint látszik. Ugye?
RESET VEKTOR: ha a program elindul újraindul akkor innen indul el.
Ineterupt / Megszakitások: (Külső vagy belső) minden esetben ez indul el(mik ezek pl.: TIMER0 ami egy időzítő és a lejárt az idő meghívja interuptot,de ez majd egy külön csikk lesz).
Configuration Bits / Beállitó bitek :Néhány olyan dolgot lehet beállítani velük ami hasznos lehet pl.:
WHACT DOG TIMER: ez jó eszköz arra hogy végtelen ciklus vagy program beragadást keresünk vele .
Ezekről is inkább egy másik cikkben írnék.(a "Window->PIC->PIC memory View->Config Bits" alatt találtok segítséget ennek beállításához ugyan is nem minden pic ugyan azokat a lehetőségeket tartalmazza).

Köszönöm szépen e figyelmet remélem hasznát veszitek ennek a kis cikknek.

Hozzászólások

(#1) JasL


JasL
senior tag

Mikor lesz folytatás? Ez nagyon hasznos cikk!

(#2) CounterBoci


CounterBoci
senior tag

Mindig is érdekelt ez a téma, végig fogom olvasni, de elsőre nem ment a rengeteg helyesírási hibától :U

(#3) s.anya válasza CounterBoci (#2) üzenetére


s.anya
csendes tag

Ha tényleg érdekel a téma, akkor örülj, hogy valaki veszi a fáradságot, és megosztja a tudását (idiótákkal is!). Szerintem neked Dr. Grétsy László írásait kellene olvasni, ha nyelvész vénád van. :(

További hozzászólások megtekintése...
Copyright © 2000-2024 PROHARDVER Informatikai Kft.