INHOUDSOPGAWE:

Begin met Bascom AVR: 5 stappe
Begin met Bascom AVR: 5 stappe

Video: Begin met Bascom AVR: 5 stappe

Video: Begin met Bascom AVR: 5 stappe
Video: Первая программа на avr gcc 2024, Desember
Anonim
Begin met Bascom AVR
Begin met Bascom AVR

Dit is die begin van 'n reeks om u te leer om u AVR -mikrobeheerder met Bascom AVR te programmeer.

Hoekom doen ek dit.

Die meeste programmonsters in hierdie reeks kan u met Arduino maak.

Sommige makliker en ander moeiliker, maar aan die einde werk albei op dieselfde beheerder.

Maar die manier van programmering is anders in elke ontwikkelingsomgewing. Arduino benodig 'n biblioteek vir alles behalwe die basiese funksies. Bascom werk ook met biblioteke, maar ek hoef selde een op te neem. Met Arduino word alle hardeware-spesifieke instellings via die biblioteke gemaak. jy het baie min invloed op die werklike krag van die mikrobeheerder. Begin met die tydtellers wat die beheerder het. met arduino het u weer 'n biblioteek nodig. as u die timer het totdat dit werk, kan dit wees dat 'n ander biblioteek met u instellings bots. By bascom het u gratis toegang tot die volledige hardeware, insluitend die stewelsektor wat deur arduino beset word. Sommige biblioteke by bascom vra u byvoorbeeld watter timer u wil gebruik. aan die ander kant, aangesien arduino dit baie maklik maak om self 'n biblioteek te skep, maak dit dit natuurlik 'n platform waar nuwe hardeware en sensors gewoonlik direk 'n biblioteek het. wat dikwels verband hou met baie navorsing by bascom en die funksies wat 'n biblioteek normaalweg sou onderneem, moet noukeurig in die programkode opgeneem word. maar goeie nuus, die bascom -gemeenskap is ook baie groot, daarom is daar 'n oplossing vir elke idee.

Dit hang dus deels af van die projek wat vir 'n ontwikkelingsomgewing gebruik word, en deels van die kennis van die programmeerder.

maar hoekom doen ek hierdie reeks? aan die een kant spaar dit baie geld. Ek hoef nie 'n arduino -bord vir elke projek te koop nie. Byvoorbeeld: 'n noname Arduino uno kos ongeveer 12 €, die kontroleerder wat daarop is, kos slegs 2,5 € met die minimum stroombaan wat nodig is vir 'n stabiele funksie, dit kos ongeveer 4 €. aan die ander kant het u die volledige keuse van ondersteunde avr -skyfies. atmegas 8 tot 256 en attiny 8 tot 2313 en baie xmega -tipes waaroor ek geen ervaring het nie. As u net 'n servo en 'n ultrasoniese sensor wil gebruik wat byvoorbeeld 'n hand kan herken en dan 'n deksel van 'n asblik kan oopmaak, kan u die kleinste skyfie gebruik. Daar is dus baie redes om 'n tweede taal aan te leer.

So laat ons begin

Voorrade

Dit is 'n lys van die minimum vereiste onderdele vir die stabiele werking van die chip en programmering.

Broodbord om te toets

Atmega 8-16PU (beter as u 2 of 3 koop as u hulle per ongeluk doodmaak)

7805 5V spanningsreguleerder

10Kohm weerstand

100nF filmkapasitor

10µF elektrolitiese kondensator

100µF elektrolitiese kondensator

'n paar drade vir broodbord

Windows PC 7/8/8.1/10

ISP -programmeerder (ek sal die USBasp hier gebruik, u kan dit vir min geld by Amazon koop)

Bascom AVR (u kan hier 'n DEMO aflaai. Alle funksies is ontsluit, maar u kan slegs kode skryf tot 4Kb -grootte wat genoeg is vir baie kode).

Opsionele onderdele:

LED's met weerstande

druk skakelaars

projekspesifieke dele

Stap 1: Installering van Bascom en opstelling

Installering van Bascom en Setup
Installering van Bascom en Setup
Installering van Bascom en Setup
Installering van Bascom en Setup
Installering van Bascom en Setup
Installering van Bascom en Setup

Laai die lêer af en installeer Bascom AVR. Installeer alle dele daarvan, insluitend die laaste boks na die installering.

Herlaai u rekenaar daarna, anders begin die baskom nie.

Na die herlaai begin bascom.

Gaan na Opsies -> Programmeerder en kies USBasp uit die lys, stoor die instellings en sluit Bascom.

Gebruik hierdie program om usbasp te installeer. Herlaai u rekenaar daarna weer. Koppel nou die USB -asp met u rekenaar en begin die apparaatbestuurder. USBasp moet op die libusb -toestelle verskyn.

Stat Bascom weer en skep 'n nuwe lêer. Stoor dit op u rekenaar en druk op die F7 -knoppie op u sleutelbord.

Die samesteller begin en stel die leë program saam. Nou kan u die funksionaliteit van die programmeerder toets.

Druk die F4 -knoppie op u sleutelbord om die programmeerdervenster te begin. Gaan nou na chip -> identifiseer om 'n interaksie te begin. Die LED's van die USBasp moet nou kort knip. U moet 'n boodskap kry, soos chip ID FFFFFF kon nie die toestel lees nie. Dit is 'n goeie teken dat die programmeerder werk, maar hy het geen chip gevind nie.

Nou kan ons die eerste kring begin bou.

Stap 2: Kom ons kyk noukeuriger na die chip

Kom ons kyk na die skyfie van naderby
Kom ons kyk na die skyfie van naderby

As u na die pinout van die chip kyk, lyk dit asof die chip geen ooreenkoms het met die arduino -bord nie. Natuurlik gebruik ons 'n Atmega8 en op die Arduino uno is 'n Atmega328. Maar die Pinout is byna dieselfde, maar die chip van die Arduino Uno -bord het meer funksies. Hier is die name van die penne. VCC en GND is die penne vir kragtoevoer.

AREF en AVCC is penne vir die verwysingspanning en kragtoevoer vir die analoog na digitale omskakelaar.

PB 0-7 PC 0-6 PD 0-7 is insette-uitsetpenne vir algemene doeleindes met meer as een persoon.

reset pin is wat die naam sê. Om die chip weer te begin. Die reël bokant die reset naam beteken ontkenning. Dit beteken dat u die chip moet terugstel na 0V om die chip terug te stel.

Vir die volgende penne kom daar binnekort aparte instruksies.

RXD TXD is hardeware penne vir seriële kommunikasie UART.

INT0 INT1 is Hardware Interrupt -penne

XCK /T0 UART Klokbron /Timer /Teller0 Klokbron

XTAL /TOSC -penne is vir 'n eksterne kristal tot 16MHz (verskillende modelle tot 20MHz) /Crystal -penne vir 'n interne RTC

T1 is soortgelyk aan T0

AIN -penne is vir die analoog vergelyker

ICP1 is soortgelyk aan T0/T1

OC1A is die hardeware -uitvoerpen vir pwm timer1 kanaal A

SS / OC2 -chip -kiespen vir SPI / soos OC1B, maar kanaal B

MOSI MISO SCK / OC2 is die SPI -penne van die hardeware en die penne vir programmering / PWM -uitgangstimer2

ADC0 tot ADC5 is die analoog insette

SDA SCL is die penne vir hardeware I2C

Die normale chip kan werk van 4, 5V tot 5, 5V, die Atmega 8L kan met baie laer spanning werk.

U sien dat selfs hierdie chip meer kan doen as wat 'n Arduino Uno blykbaar nie kan doen nie. Maar die Arduino kan dit ook doen; u hoef dit net te programmeer.

Stap 3: Die eerste stroombaan

Die eerste kringloop
Die eerste kringloop
Die eerste kringloop
Die eerste kringloop

Dit is nou tyd om u eerste baan te bou.

Wat is tipies die eerste kring? Reg! Kom ons knip 'n LED.

Die LED is verbind met PB0. Die weerstand langs die skyfie het 10k ohm.

Die weerstand langs die LED het 470 Ohm.

Nou kan u die USB -aspek verbind met die Atmega soos op die foto getoon.

Maar laat ons die program skryf voordat u die krag aanskakel.

Stap 4: Skryf die eerste program

Skryf die eerste program
Skryf die eerste program

Skep 'n nuwe lêer in Bascom en tik die volgende teks in.

$ regfile "m8def.dat"

$ crystal = 1000000 config portb.0 = uitvoer doen portb.0 = 1 wag 1 portb.0 = 0 wag 1 lus

stel dit dan saam deur op F7 op u sleutelbord te druk.

Nou kan ons die chip programmeer deur op F4 te druk. Die programmeerder venster verskyn. Nou is dit tyd om die krag van die broodbord aan te skakel. U moet iets tussen 6 en 12 volt toepas.

Gaan nou na chip -> outoprogram. As die programmeerdervenster outomaties sluit, was die programmering suksesvol.

Die LED moet binne een sekonde frekwensie flikker.

Kyk nou na die program om die sintaksis te verstaan.

$ regfile "m8def.dat"

$ kristal = 1000000

met $ regfile vertel ons die samesteller die tipe gebruikte chip, die naam van die Arduino -chip sou "m328pdef.dat" wees

met $ crystal vertel ons hom die cpu -snelheid van ongeveer 1MHz.

config portb.0 = Uitset

dit beteken dat PB0 as uitset moet optree.

Terloops, die afkorting PB0 beteken poort B bit 0. Die chip is verdeel in verskeie poorte. Elke poort kry 'n brief vir duidelike identifikasie. en elke portpin 'n bietjie van 0 tot 7. Ek kan byvoorbeeld 'n volledige byte in die poortuitvoerregister skryf, wat via die individuele poortpenne uitgevoer sal word.

doen

lus

Dit is wat in Arduino die leemte -lusstelling beteken. Tussen hierdie twee bevele sal vir ewig herhaal word. (met enkele uitsonderings, maar later meer daaroor)

Portb.0 = 1

wag 1 portb.0 = 0 wag 1

Hier kry ons die knipper van die led.

Portb.0 = 1 vertel die chip om die uitset PB0 na 5V oor te skakel

die wag 1 -opdrag laat die chip 'n sekonde wag. As u die LED vinniger wil verander, moet u die wagopdrag met waitms vervang, nou kan u 'n geruime tyd in millisekondes ingaan, bv. waitms 500. (waitus beteken wag in nanosekondes)

Portb.0 = 0 vertel die chip om die uitset PB0 na 0V oor te skakel.

Stap 5: Voeg 'n knoppie by om insette te gebruik

Voeg 'n knoppie by om insette te gebruik
Voeg 'n knoppie by om insette te gebruik

Nou voeg ons 'n knoppie by om die LED te verlig as die knoppie ingedruk word.

Plaas die knoppie soos in die prentjie aangedui.

tik nou die volgprogram in.

$ regfile "m8def.dat"

$ crystal = 1000000 config portb.0 = output config portd.7 = input Portd.7 = 1 doen as pind.7 = 0 dan portb.0 = 1 anders portb.0 = 0 lus

As u die program na die chip laai, brand die LED slegs as u op die knoppie druk. Maar hoekom?

die program begin identies soos die vorige een

config portd.7 = invoer. Dit beteken dat die pen PD7 wat met die knoppie verbind is, as 'n invoer dien.

Portd.7 = 1 skakel die pen nie na hoog nie, maar dit aktiveer die interne optrekweerstand van die Atmega.

Die as statemend lyk 'n bietjie vreemd as jy gewoond is aan arduino.

as u die if -verklaring gebruik, moet u die "dan" -verklaring gebruik. In hierdie voorbeeld word die if -verklaring gebruik vir enkele opdragbewerkings. As u meer opdragte wil gebruik, moet u dit so skryf.

as pind.7 = 0 dan

portb.0 = 1 'n kode, 'n kode, 'n kode, 'n kode, 'n ander kode, portb.0 = 0 eindig as

Vir hierdie gebruik van die if -verklaring, moet u die "end if" -verklaring aan die einde gebruik.

wat nog steeds belangrik is. Miskien het jy dit al gesien. die insette word nie uitgevra met portx.x nie, maar met pinx.x. Dit kan u maklik onthou. Uitsette het die "o" (poort) in die woord en insette het die "i" (pen).

Nou is dit jou beurt om bietjie rond te speel.

My volgende instruksies kom binnekort (standaard stellings soos while, select case, for en variables.)

As u van my instruksies hou en meer wil hê, vertel dit dan in die kommentaar.

Aanbeveel: