Përmbajtje:
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-13 06:58
Ky është fillimi i një serie për t'ju mësuar të programoni mikrokontrolluesin tuaj AVR me Bascom AVR.
Pse po e bej kete.
Shumica e mostrave të programit në këtë seri mund t'i bëni me Arduino.
Disa më të lehta dhe disa më të vështira, por në fund të dy do të punojnë në të njëjtin kontrollues.
Por mënyra e programimit është e ndryshme në çdo mjedis zhvillimi. Arduino ka nevojë për një bibliotekë për gjithçka, përveç funksioneve themelore. Bascom gjithashtu punon me biblioteka, por rrallë më duhet të përfshijë një të tillë. Me Arduino, të gjitha cilësimet specifike të harduerit bëhen përmes bibliotekave. keni shumë pak ndikim në fuqinë aktuale të mikrokontrolluesit. Duke filluar me kohëmatësit që ka kontrolluesi. me arduino keni nevojë për një bibliotekë përsëri. nëse keni kohëmatësin derisa të funksionojë, mund të jetë një bibliotekë tjetër që përplaset me cilësimet tuaja. Në bascom ju keni qasje falas në harduerin e plotë duke përfshirë sektorin e nisjes që është i zënë nga arduino. për shembull, disa biblioteka në bascom ju pyesin se cilin kohëmatës dëshironi të përdorni. nga ana tjetër, meqenëse arduino e bën shumë të lehtë krijimin e një biblioteke, natyrisht e bën atë një platformë ku pajisjet e reja dhe sensorët zakonisht kanë një bibliotekë drejtpërdrejt. ajo që shpesh shoqërohet me shumë kërkime në bascom dhe funksionet që një bibliotekë normalisht do të merrte përsipër, atëherë duhet të përfshihen me kujdes në kodin e programit. por lajm i mirë komuniteti bascom është gjithashtu shumë i madh, prandaj ekziston një zgjidhje për çdo ide.
Pra, varet pjesërisht nga projekti se çfarë përdoret për një mjedis zhvillimi dhe pjesërisht nga njohuritë e personit programues.
por pse po e bëj këtë seri. nga njëra anë kursen shumë para. Nuk kam pse të blej një bord arduino për çdo projekt. Për shembull: Një Arduino uno noname kushton rreth 12 € kontrolluesi që është në të kushton vetëm 2.5 € me qarkun minimal të kërkuar për një funksion të qëndrueshëm, kushton rreth 4 €. nga ana tjetër ju keni përzgjedhjen e plotë të çipave avr që mbështeten në dispozicion. atmegas 8 deri në 256 dhe veshje 8 në 2313 dhe shumë lloje xmega për të cilat nuk kam përvojë. Nëse thjesht dëshironi të përdorni një servo dhe një sensor tejzanor që mund të njohë një dorë, për shembull, dhe pastaj të hapni një kapak të një koshi plehrash, mund të përdorni çipin më të vogël të mundshëm. Pra, ka shumë arsye për të mësuar një gjuhë të dytë.
Pra, le të fillojmë
Furnizimet
Kjo është një listë e pjesëve minimale të kërkuara për funksionimin e qëndrueshëm të çipit dhe programimit.
Breadboard për testim
Atmega 8-16PU (më mirë blini 2 ose 3 nëse i vrisni gabimisht)
7805 rregullator i tensionit 5V
Rezistencë 10 Kohm
Kondensator filmi 100nF
Kondensator elektrolitik 10µF
Kondensator elektrolitik 100μF
disa tela për dërrasën e bukës
Windows PC 7/8/8.1/10
Programues ISP (unë do të përdor këtu USBsp që mund ta blini në amazon për pak para)
Bascom AVR (mund të shkarkoni këtu një DEMO. Të gjitha funksionet janë të hapura, por mund të shkruani kod vetëm deri në madhësinë 4Kb që është e mjaftueshme për shumë kode).
Pjesët opsionale:
LED me rezistorë
çelsin e shtytjes
pjesë specifike të projektit
Hapi 1: Instalimi i Bascom dhe Konfigurimi
Shkarkoni skedarin dhe instaloni Bascom AVR. Instaloni të gjitha pjesët e tij duke përfshirë kutinë e fundit të zgjedhjes pas instalimit.
Pas kësaj rindizni kompjuterin tuaj përndryshe bascom nuk do të fillojë.
Pas rindezjes filloni bascom.
Shkoni te Opsionet -> Programues dhe zgjidhni USBasp nga lista, ruani cilësimet dhe mbyllni Bascom.
Përdoreni këtë Program për të instaluar usbasp. Pas kësaj, rindizni përsëri kompjuterin tuaj. Tani lidhni USBasp me kompjuterin tuaj dhe filloni menaxherin e pajisjes. USBasp duhet të shfaqet në pajisjet libusb.
Stat Bascom përsëri dhe krijoni një skedar të ri. Ruani atë në kompjuterin tuaj dhe shtypni butonin F7 në tastierën tuaj.
Përpiluesi fillon dhe përpilon programin bosh. Tani mund të provoni funksionalitetin e programuesit.
Shtypni butonin F4 në tastierën tuaj për të filluar dritaren e programuesit. Tani shkoni te chip -> identifiko për të filluar një ndërveprim. LED -të nga USBasp tani duhet të pulsojnë shkurt. Ju duhet të merrni një mesazh si çipi Id FFFFFF nuk mund ta lexojë pajisjen. Kjo është një shenjë e mirë që Programuesi po punon, por nuk gjeti asnjë çip.
Tani mund të fillojmë të ndërtojmë qarkun e parë.
Hapi 2: Le të hedhim një vështrim më të afërt në çip
Nëse shikoni pinout -in e çipit duket se çipi nuk ka ngjashmëri me tabelën arduino. Sigurisht, ne përdorim një Atmega8 dhe në Arduino uno është një Atmega328. Por Pinout është pothuajse i njëjtë, por çipi i bordit Arduino Uno ka më shumë funksione. Këtu emrat e kunjave. VCC dhe GND janë kunjat për furnizimin me energji.
AREF dhe AVCC janë kunja për tensionin referent dhe furnizimin me energji për konvertorin analog në dixhital.
PB 0-7 PC 0-6 PD 0-7 janë kunja dalëse me qëllim të përgjithshëm me përdorim të shumëfishtë.
reset pin është ajo që thotë emri. Për të rifilluar çipin. Linja mbi emrin e rivendosur do të thotë mohim. Kjo do të thotë, për të rivendosur çipin ju duhet ta tërhiqni atë në 0V.
Për kunjat e mëposhtëm udhëzime të veçanta vijnë së shpejti.
RXD TXD janë kunja harduerike për komunikimin serik UART.
INT0 INT1 janë kunjat e ndërprerjes së harduerit
XCK /T0 UART Burimi i orës /Kohëmatësi /Counter0 Burimi i orës
Kunjat XTAL /TOSC janë për një kristal të jashtëm deri në 16MHz (modele të ndryshme deri në 20MHz) /Kunja kristal për një RTC të brendshëm
T1 është i ngjashëm me T0
Kunjat AIN janë për krahasuesin analog
ICP1 është i ngjashëm me T0/T1
OC1A është kunja e daljes së harduerit për pwm timer1 channel A
Kodi SS / OC2 i zgjedhur për SPI / si OC1B por kanali B
MOSI MISO SCK / OC2 janë kunjat e harduerit SPI dhe kunjat për programimin / kohëmatësin e daljes PWM2
ADC0 në ADC5 janë hyrjet analoge
SDA SCL janë kunjat për harduerin I2C
Çipi normal mund të funksionojë nga 4, 5V në 5, 5V, Atmega 8L mund të punojë me Tension shumë më të ulët.
E shihni që edhe ky çip mund të bëjë më shumë sesa një Arduino Uno që duket se nuk mund të bëjë. Por Arduino gjithashtu mund ta bëjë këtë, ju vetëm duhet ta programoni atë.
Hapi 3: Qarku i Parë
Tani është koha për të ndërtuar qarkun tuaj të parë.
Cili është zakonisht qarku i parë? E drejtë! Le të mbyllim një LED.
LED është i lidhur me PB0. Rezistenca pranë çipit ka 10k Ohms.
Rezistenca pranë LED ka 470 Ohms.
Tani mund ta lidhni USBasp me Atmega siç tregohet në figurë.
Por, para se të ndizni energjinë, na shkruani programin.
Hapi 4: Shkruani Programin e Parë
Krijoni një skedar të ri në Bascom dhe shkruani tekstin e mëposhtëm.
$ regfile "m8def.dat"
kristal $ = 1000000 config portb.0 = dalje do portb.0 = 1 pritje 1 portb.0 = 0 pritje 1 lak
pas kësaj përpilojeni atë duke shtypur F7 në tastierën tuaj.
Tani mund ta programojmë çipin duke shtypur F4. Shfaqet dritarja e programuesit. Tani është koha për të ndezur energjinë nga tryeza e bukës. Ju duhet të aplikoni diçka midis 6 dhe 12 volt.
Tani shkoni te chip -> autoprogram. Nëse dritarja e programuesit mbyllet automatikisht programimi ishte i suksesshëm.
LED duhet të ndizet në një frekuencë të dytë.
Tani hidhini një vështrim më të afërt programit për të kuptuar sintaksën.
$ regfile "m8def.dat"
kristal $ = 1000000
me $ regfile i themi përpiluesit llojin e çipit të përdorur emri i çipit Arduino do të ishte "m328pdef.dat"
me kristal $ i themi shpejtësinë e CPU -së rreth 1MHz.
config portb.0 = Dalje
kjo do të thotë që PB0 duhet të veprojë si dalje.
Nga rruga, shkurtesa PB0 do të thotë porti B bit 0. Çipi është i ndarë në disa porte. Secilit port i jepet një letër për identifikim të qartë. dhe secila portpin pak nga 0 në 7. Për shembull, unë mund të shkruaj një bajt të plotë në regjistrin e daljes së portit, i cili do të dalë përmes kunjave të portit individual.
bëj
lak
Kjo është ajo që në Arduino do të thotë deklarata e lakut void. Të gjitha këto dy komanda do të përsëriten përgjithmonë. (me disa përjashtime, por më vonë më shumë për këtë)
Portb.0 = 1
prisni 1 portb.0 = 0 prisni 1
Këtu ne fshijmë ndezjen e led.
Portb.0 = 1 i thotë çipit të kalojë daljen PB0 në 5V
komanda prit 1 lini çipin të presë për një sekondë. Nëse doni të ndërroni led më shpejt ju duhet të zëvendësoni komandën e pritjes me pritje tani mund të futni ca kohë tani në milisekonda p.sh. pret 500. (waitus do të thotë të presësh në nanosekonda)
Portb.0 = 0 i thotë çipit të kalojë daljen PB0 në 0V.
Hapi 5: Shtoni një buton për të përdorur hyrjet
Tani shtojmë një buton për të ndriçuar led -in nëse shtypet butoni.
Vendosni butonin siç tregohet në figurë.
tani shkruani programin vijues.
$ regfile "m8def.dat"
$ kristal = 1000000 konfigurim portb.0 = konfigurim dalës portd.7 = hyrje Portd.7 = 1 bëni nëse pind.7 = 0 pastaj portb.0 = 1 tjetër portb.0 = 0 lak
Nëse e ngarkoni atë program në çip, led ndizet vetëm kur shtypet butoni. Por pse?
programi fillon njësoj si ai i fundit deri në
config portd.7 = input. Kjo do të thotë, pin PD7 i cili u lidh me butonin vepron si një hyrje.
Portd.7 = 1 nuk e kalon kunjin në lartësi, por aktivizon rezistencën e brendshme tërheqëse të Atmega -s.
Statemendi if duket pak i çuditshëm nëse jeni mësuar me arduino.
nëse përdorni pohimin if duhet të përdorni pohimin "atëherë". Në këtë mostër pohimi if përdoret për operacione të vetme komanduese. Nëse doni të përdorni më shumë komanda, duhet ta shkruani kështu.
nëse pind.7 = 0 atëherë
portb.0 = 1 një kod disa kod disa kod tjetër portb.0 = 0 fund nëse
për këtë përdorim të deklaratës if duhet të përdorni pohimin "fund nëse" në fund.
ajo që është akoma e rëndësishme. Ndoshta e keni parë tashmë. hyrjet nuk pyeten me portx.x, por me pinx.x. Ju lehtë mund ta mbani mend atë. Daljet kanë "o" (port) në fjalë dhe hyrjet kanë "i" (pin).
Tani është radha juaj të luani pak përreth.
Udhëzimi im i ardhshëm do të vijë së shpejti (deklarata standarde si while, case i zgjedhur, for dhe variablat.)
Nëse ju pëlqen udhëzimi im dhe doni më shumë më tregoni në komente.