Inhoudsopgave:

Aan de slag met Bascom AVR: 5 stappen
Aan de slag met Bascom AVR: 5 stappen

Video: Aan de slag met Bascom AVR: 5 stappen

Video: Aan de slag met Bascom AVR: 5 stappen
Video: Урок 8. Подключение кнопки к МК BASCOM-AVR 2024, Juli-
Anonim
Aan de slag met Bascom AVR
Aan de slag met Bascom AVR

Dit is het begin van een serie om u te leren uw AVR-microcontroller te programmeren met Bascom AVR.

Waarom ik dit doe.

De meeste programmavoorbeelden in deze serie kun je maken met Arduino.

Sommige gemakkelijker en sommige moeilijker, maar uiteindelijk zullen beide op dezelfde controller draaien.

Maar de manier van programmeren is in elke ontwikkelomgeving anders. Arduino heeft voor alles een bibliotheek nodig, behalve voor de basisfuncties. Bascom werkt ook met bibliotheken, maar ik hoef er zelden een op te nemen. Bij Arduino worden alle hardware-specifieke instellingen gemaakt via de bibliotheken. je hebt heel weinig invloed op het daadwerkelijke vermogen van de microcontroller. Te beginnen met de timers die de controller heeft. met arduino heb je weer een bibliotheek nodig. als je de timer hebt totdat deze werkt, kan het zijn dat een andere bibliotheek botst met je instellingen. Bij bascom heb je gratis toegang tot de complete hardware inclusief de bootsector die door arduino wordt ingenomen. sommige bibliotheken bij bascom vragen u bijvoorbeeld welke timer u wilt gebruiken. aan de andere kant, aangezien arduino het heel gemakkelijk maakt om zelf een bibliotheek te maken, maakt het het natuurlijk een platform waar nieuwe hardware en sensoren meestal direct een bibliotheek hebben. wat vaak gepaard gaat met veel onderzoek bij bascom en de functies die een bibliotheek normaal op zich zou nemen, moeten dan nauwgezet in de programmacode worden opgenomen. maar goed nieuws de bascom community is ook erg groot en daarom is er voor elk idee een oplossing.

Het hangt dus deels van het project af wat er voor een ontwikkelomgeving wordt gebruikt en deels van de knowhow van de programmeur.

maar waarom doe ik deze serie. aan de ene kant scheelt het veel geld. Ik hoef niet voor elk project een arduino-bord te kopen. Bijvoorbeeld: een noname Arduino uno kost ongeveer 12 € de controller die erop zit kost slechts 2,5 € met de minimale circuits die nodig zijn voor een stabiele functie, het kost ongeveer 4 €. aan de andere kant heb je de volledige selectie van ondersteunde avr-chips beschikbaar. atmegas 8 tot 256 en attiny 8 tot 2313 en vele xmega-types waar ik geen ervaring mee heb. Als je gewoon een servo en een ultrasone sensor wilt gebruiken die bijvoorbeeld een hand kan herkennen en vervolgens een deksel van een prullenbak wilt openen, kun je de kleinst mogelijke chip gebruiken. Er zijn dus veel redenen om een tweede taal te leren.

Dus laten we beginnen

Benodigdheden

Dit is een lijst met minimaal benodigde onderdelen voor een stabiele werking van de chip en programmering.

Breadboard om te testen

Atmega 8-16PU (beter 2 of 3 kopen als je ze per ongeluk doodt)

7805 5V spanningsregelaar

10Kohm weerstand

100nF filmcondensator

10 µF elektrolytische condensator

100 µF elektrolytische condensator

sommige draden voor breadboard

Windows-pc 7/8/8.1/10

ISP-programmeur (ik zal hier de USBasp gebruiken die je voor weinig geld bij amazon kunt kopen)

Bascom AVR (u kunt hier een DEMO downloaden. Alle functies zijn ontgrendeld, maar u kunt slechts code schrijven tot een grootte van 4Kb die voldoende is voor veel code).

Optionele onderdelen:

LED´s met weerstanden

drukschakelaars

projectspecifieke onderdelen

Stap 1: Installatie van Bascom en Setup

Installatie van Bascom en Setup
Installatie van Bascom en Setup
Installatie van Bascom en Setup
Installatie van Bascom en Setup
Installatie van Bascom en Setup
Installatie van Bascom en Setup

Download het bestand en installeer Bascom AVR. Installeer alle onderdelen ervan, inclusief het laatste selectievakje na de installatie.

Start daarna uw pc opnieuw op, anders start bascom niet.

Na de herstart start bascom.

Ga naar Opties -> Programmer en kies USBasp uit de lijst, sla de instellingen op en sluit Bascom.

Gebruik dit programma om usbasp te installeren. Start daarna uw pc opnieuw op. Verbind nu de USBasp met uw pc en start apparaatbeheer. USBasp zou moeten verschijnen bij de libusb-apparaten.

Stat Bascom opnieuw en maak een nieuw bestand aan. Sla het op je pc op en druk op de F7-knop op je toetsenbord.

De compiler start en compileert het lege programma. Nu kunt u de functionaliteit van de programmeur testen.

Druk op de F4-knop op uw toetsenbord om het programmeervenster te starten. Ga nu naar chip -> identificeren om een interactie te starten. De LED`s van de USBasp zouden nu kort moeten knipperen. U zou een bericht moeten krijgen als chip-ID FFFFFF kan het apparaat niet lezen. Dat is een goed teken dat de programmer werkt, maar hij heeft geen chip gevonden.

Nu kunnen we beginnen met het bouwen van het eerste circuit.

Stap 2: Laten we de chip eens nader bekijken

Laten we de chip eens nader bekijken
Laten we de chip eens nader bekijken

Als je naar de pin-out van de chip kijkt, lijkt het erop dat de chip geen gelijkenis heeft met het Arduino-bord. Natuurlijk gebruiken we een Atmega8 en op de Arduino uno zit een Atmega328. Maar de pinout is bijna hetzelfde, maar de chip van het Arduino Uno-bord heeft meer functies. Hier de namen van de pinnen. VCC en GND zijn de pinnen voor de voeding.

AREF en AVCC zijn pinnen voor de referentiespanning en voeding voor de analoog naar digitaal omzetter.

PB 0-7 PC 0-6 PD 0-7 zijn ingangs-uitgangspennen voor algemeen gebruik met meervoudige bezetting.

reset pin is wat de naam zegt. Om de chip opnieuw te starten. De regel boven de resetnaam betekent ontkenning. Dat betekent dat om de chip te resetten, je hem naar 0V moet trekken.

Voor de volgende pinnen komen binnenkort aparte instructables.

RXD TXD zijn hardware-pinnen voor seriële communicatie UART.

INT0 INT1 zijn Hardware Interrupt pinnen

XCK /T0 UART Klokbron / Timer/Counter0 Klokbron

XTAL /TOSC-pinnen zijn voor een extern kristal tot 16MHz (verschillende modellen tot 20MHz) /Crystal-pinnen voor een interne RTC

T1 is vergelijkbaar met T0

AIN-pinnen zijn voor de analoge comparator

ICP1 is vergelijkbaar met T0/T1

OC1A is de hardware-uitgangspin voor pwm timer1 kanaal A

SS/OC2 chip select pin voor SPI/zoals OC1B maar kanaal B

MOSI MISO SCK/OC2 zijn de hardware SPI pinnen en de pinnen voor programmering/PWM output timer2

ADC0 tot ADC5 zijn de analoge ingangen

SDA SCL zijn de pinnen voor hardware I2C

De normale chip kan werken van 4, 5V tot 5, 5V, de Atmega 8L kan werken met een veel lagere spanning.

Je ziet dat zelfs deze chip meer kan dan een Arduino Uno niet lijkt te kunnen. Maar de Arduino kan het ook, je hoeft hem alleen maar te programmeren.

Stap 3: Het eerste circuit

Het eerste circuit
Het eerste circuit
Het eerste circuit
Het eerste circuit

Nu is het tijd om je eerste circuit te bouwen.

Wat is typisch het eerste circuit? Rechts! Laten we een LED laten knipperen.

De LED is verbonden met PB0. De weerstand naast de chip heeft 10k Ohm.

De weerstand naast de LED heeft 470 Ohm.

Nu kun je de USBasp verbinden met de Atmega zoals op de afbeelding te zien is.

Maar laat ons het programma schrijven voordat u de stroom inschakelt.

Stap 4: Schrijf het eerste programma

Schrijf het eerste programma
Schrijf het eerste programma

Maak een nieuw bestand in Bascom en typ de volgende tekst in.

$regbestand "m8def.dat"

$crystal = 1000000 config portb.0 = output do portb.0 = 1 wacht 1 portb.0 = 0 wacht 1 lus

daarna compileer je het door op F7 op je toetsenbord te drukken.

Nu kunnen we de chip programmeren door op F4 te drukken. Het programmeervenster verschijnt. Nu is het tijd om de stroom van het breadboard in te schakelen. Je moet iets tussen de 6 en 12 Volt toepassen.

Ga nu naar chip -> autoprogrammeren. Als het programmeervenster automatisch sluit, is het programmeren gelukt.

De LED moet knipperen met een frequentie van één seconde.

Bekijk het programma nu eens van dichterbij om de syntaxis te begrijpen.

$regbestand "m8def.dat"

$kristal = 1000000

met $regfile vertellen we de compiler het type gebruikte chip, de naam van de Arduino-chip zou "m328pdef.dat" zijn

met $crystal vertellen we hem de cpu-snelheid ongeveer 1 MHz.

config portb.0 = Uitgang

dat betekent dat PB0 moet fungeren als uitvoer.

Overigens betekent de afkorting PB0 poort B bit 0. De chip is opgedeeld in meerdere poorten. Elke poort krijgt een letter voor duidelijke identificatie. en elke poortpin een bit van 0 tot 7. Ik kan bijvoorbeeld een volledige byte in het poortuitvoerregister schrijven, die wordt uitgevoerd via de afzonderlijke poortpinnen.

doen

lus

Dit is wat in Arduino de void loop-instructie betekent. Alles tussen die twee commando's zal voor altijd worden herhaald. (op enkele uitzonderingen na maar daarover later meer)

Poortb.0 = 1

wacht 1 poortb.0 = 0 wacht 1

Hier genereren we het knipperen van de led.

Portb.0 = 1 vertelt de chip om de uitgang PB0 te schakelen naar 5V

het wait 1 commando laat de chip een seconde wachten. Als je de led sneller wilt schakelen, moet je het wait-commando vervangen door waitms. Nu kun je wat tijd invoeren in milliseconden, b.v. waitms 500. (waitus betekent wachten in nanoseconden)

Portb.0 = 0 vertelt de chip om de uitgang PB0 naar 0V te schakelen.

Stap 5: Voeg een knop toe om ingangen te gebruiken

Een knop toevoegen om ingangen te gebruiken
Een knop toevoegen om ingangen te gebruiken

Nu voegen we een knop toe om de led te laten oplichten als de knop wordt ingedrukt.

Plaats de knop zoals weergegeven in de afbeelding.

typ nu het volgprogramma in.

$regbestand "m8def.dat"

$crystal = 1000000 config portb.0 = output config portd.7 = input Portd.7 = 1 doen als pind.7 = 0 dan portb.0 = 1 else portb.0 = 0 loop

Als je dat programma uploadt naar de chip, gaat de led alleen branden als de knop wordt ingedrukt. Maar waarom?

het programma start op dezelfde manier als de vorige tot

config poort.7 = invoer. Dat betekent dat de pin PD7 die met de knop is verbonden, als invoer fungeert.

Portd.7 = 1 schakelt de pin niet naar high, maar activeert de interne pull-up weerstand van de Atmega.

De if-statement ziet er een beetje raar uit als je gewend bent aan Arduino.

als je het if-statement gebruikt, moet je het "then"-statement gebruiken. In dit voorbeeld wordt de if-instructie gebruikt voor bewerkingen met één opdracht. Als je meer commando's wilt gebruiken, moet je het zo schrijven.

als pind.7=0 dan

portb.0=1 wat code wat code wat code anders portb.0 = 0 end if

voor dit gebruik van het if-statement moet je het "end if"-statement aan het einde gebruiken.

wat nog belangrijk is. Misschien heb je het al gezien. de ingangen worden niet opgevraagd met portx.x, maar met pinx.x. Dat kun je gemakkelijk onthouden. Uitgangen hebben de "o" (poort) in het woord en ingangen hebben de "i" (pin).

Nu is het jouw beurt om een beetje te spelen.

Mijn volgende instructable komt binnenkort (standaardstatements zoals while, select case, for en variabelen.)

Als je mijn instructable leuk vindt en meer wilt, vertel het me dan in de comments.

Aanbevolen: