Inhoudsopgave:
- Benodigdheden
- Stap 1: Installatie van Bascom en Setup
- Stap 2: Laten we de chip eens nader bekijken
- Stap 3: Het eerste circuit
- Stap 4: Schrijf het eerste programma
- Stap 5: Voeg een knop toe om ingangen te gebruiken
Video: Aan de slag met Bascom AVR: 5 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:14
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
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
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
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
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
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:
Aan de slag met draadloze temperatuur- en trillingssensoren met groot bereik: 7 stappen
Aan de slag met draadloze temperatuur- en trillingssensoren met groot bereik: Soms zijn trillingen de oorzaak van ernstige problemen in veel toepassingen. Van machineassen en lagers tot de prestaties van de harde schijf, trillingen veroorzaken schade aan de machine, vroegtijdige vervanging, lage prestaties en veroorzaken een grote aanslag op de nauwkeurigheid. Toezicht houden
Aan de slag met Ham Radio: 5 stappen (met afbeeldingen)
Aan de slag met Ham Radio: Als een onlangs geslagen ham-licentiehouder, wil ik het proces doorgeven dat ik heb gevolgd om in hamradio te komen. Ik werd verleid door het zelfredzaamheidsaspect van de hobby, mensen een manier geven om te communiceren wanneer andere methoden worden verstoord. Maar het is ook de moeite waard om
Aan de slag met I2C-sensorinterface?? - Interface uw MMA8451 met ESP32's: 8 stappen
Aan de slag met I2C-sensorinterface?? - Interface uw MMA8451 met behulp van ESP32's: in deze tutorial leert u alles over het starten, aansluiten en laten werken van een I2C-apparaat (versnellingsmeter) met een controller (Arduino, ESP32, ESP8266, ESP12 NodeMCU)
Aan de slag met FRDM-KL46Z (en Mbed Online IDE) met Windows 10: 6 stappen
Aan de slag met FRDM-KL46Z (en Mbed Online IDE) Windows 10 gebruiken: De Freedom (FRDM)-ontwikkelborden zijn kleine, energiezuinige, kosteneffectieve evaluatie- en ontwikkelingsplatforms die perfect zijn voor het snel prototypen van applicaties. Deze evaluatieborden bieden een gebruiksvriendelijke flash-programmer voor massaopslagapparaatmodus, een virt
Aan de slag met de goedkope RPLIDAR met Jetson Nano: 5 stappen
Aan de slag met de goedkope RPLIDAR Jetson Nano gebruiken: kort overzicht Lichtdetectie en -bereik (LiDAR) werkt op dezelfde manier als ultrasone afstandsmeters met laserpuls in plaats van geluidsgolven. Yandex, Uber, Waymo en etc. investeren fors in LiDAR-technologie voor hun autonome autopr