En avancerad metod för Arduino & AVR programmering (2 / 7 steg)
Steg 2: Vad är skillnaden mellan core AVR & Arduino
Detta är den första grundläggande frågan för dem som är relativt ny på Arduino/AVR grejer...
AVR:
Tja, är AVR en familj av mikrokontrollers från "Atmel halvledare"
Som en familj innehåller många medlemmar, innehåller AVR familjen även annan typ av mikrokontroller. De alla följer Havard arkitektur. De är 8-bitars mikrokontroller. (Det finns 32 bit AVR chips också).
AVRs kan huvudsakligen delas i tre grupper
1) tinyAVR. (lägre pincount med lägre programmering utrymme)
2) megaAVR. (med medellång programmering mellanslag)
3) xmegaAVR. (högre programmering utrymme med några utökade funktioner som "DMA").
Det finns så många marker under dessa 3 grupper.
Som för Ex-.
ATMEGA8/Atmega16/Atmega32/Atmega328 är alla olika mega familj med några lite annorlunda egenskaper från varandra.
För säga Atmega328p har 32 k flash / 1k EEPROM / 2k SRAM Atmega8 har 8 k flash/512 byte EEPROM / 1K SRAM även om båda har samma nr av pincount(28).
Å andra sidan Atmega32 har också 32k flash som Atmega328p men med högre pincount(40).
ATTINY45 är en populär mikrokontroller från tinyAVR familj med endast 8 stift och med 4 k flash/512 byte EEPROM & SRAM.
Så har du att välja Microcontroller enligt din krets behöver. Som om du vill att blinka en enda LED, sedan ATTINY45 är perfekt men om du vill köra en komplex LCD som 128 x 64 eller 20 x 4 måste du välja mega8/328/32.
Denna mikrokontroller är tomma chips med bara programmeras i deras flash/bootloader. Vad fan är nu bootloader? Jag kommer att diskutera det senare.
Du har att utforma en ordentlig strömkrets att mata den, lämna de klocka för att köra den. Du behöver också någon form av programmerare att bränna program in i dem.
De kan programmeras på många olika sätt, får vi se i kommande steg hur det går. Du behöver också någon sorts IDE där du kan skriva ditt program. WinAVR är en IDE. Atmel studio är också en annan IDE för att skriva program för Atmel mikrokontroller.
Vi kommer att välja WinAVR programmera våra core microcontrollers.
ARDUINO:
Vi kan säga att Arduino är plattform (inklusive maskinvara och programvara) som främst används för prototyptillverkning. Den stora fördelen med arduino är att detta är ett "open source".
Jag antar att jag måste fokusera mer ljus på detta... för här kommer den största skillnaden mellan AVR och Arduino
Arduino UNO rev3 är exempelvis en styrelse som innehåller en AVR Microcontroller och alla nödvändiga tillbehör för att få det att fungera som som sagt innan, strömförsörjningen, klocka krets etc. Mikrokontroller används här är en Atmega328p.
Det finns också en ombord "arrangemang" programmera mega328p utan en programmerare. Nu vad är arrangemanget???
Det finns en enkel USB till seriell omvandlare ombord som du kan programmera mega328p. Men hur??? Det är där, "bootloader" kommer in.
"bootloader" är ett litet program i ett visst område av den microcontroller flash. När chipet är restarted/påslagen, chip först träder i området bootloader (denna verksamhet måste också programmeras via säkring bitar) och exekverar koden skrivs in i den. Men hur koden är kunna programmera chip själv???
Säga att koden är skriven på ett sådant sätt, att det väntar programmering byte att anlända från USB till seriell omvandlare. När programmering byte som tagits emot, lagras byten i det programmet flash och när alla byte fick, den startar om sig själv och kör den kod som är nyskrivna till programmet flash.
Men en fråga nu uppstår som efter programmering, om mega328p är uppstart från programmet flash (undvika bootloader), sedan hur det kan programmeras i nästa cykel??
Svaret är ganska enkelt, mega328p hoppar aldrig till start var programmet flash först. Det alltid hoppar till avsnittet bootloader först och vänta det lite tid för ankomsten av databytes via seriell port. Om data anländer inom ämne, sedan börjar det programmera själv som sagt tidigare, om data inte kommer fram inom viss tid, då det lämnar avsnittet bootloader och börjar koden körs från programmet flash.
Den byte skickar sekvens är känd av både bootloader och ArduinoIDE.This är hur arduino programmering fungerar utan hjälp av en programmerare.
Men...
För att bränna bootloader till AVR: s flash, måste någon form av programmerare (antingen parallell/ISP) användas för första gången. Det är där kommer nödvändigheten av de fristående programmerarna.
Nu om IDE av arduino.
I Arduino IDE finns det många typer av styrelser att välja mellan. Varje bräda använder olika typ av mikrokontroller. Som UNO använder rev3 styrelsen Atmega328p.The mega2560 använder Atmega2560 etc etc.
Då kommer det en annan spännande del av Arduino." Biblioteket". Biblioteken är massa program att köra olika moduler av mikrokontroller (som TWI, SPI, PORT etc) eller att köra en annan extern hårdvara som LCD, Stepper motor, olika typer av sensorer och många många andra. För att göra mikrokontroller fungerar, måste du skriva några nominella koder med funktioner från det befintliga biblioteket. Också är det språk som används i Arduino IDE C/C++. Men du behöver inte att direkt interagera med hårdvaran i atmega. Dessa tas om hand i bakgrunden. Kommandona är mycket enklare än att använda core "C". Jag kommer att programmera atmega chip i två olika IDEs senare.
Å andra sidan, om du har för att programmera en kärna AVR med Winavr eller sådana andra C baserad IDE, då du måste veta rätt arkitektur, hårdvara, moduler av mikrokontroller och sedan bara du kan programmera den. Men varför skulle man gå i sådan en coplexity??? Detta är en miljoner dollar fråga...
Har du någonsin känt, att du endast använder andras skriftliga kod/funktioner och du kan inte ändra det per dina behov eller inte kan se hur den totala programmet fungerar i bakgrunden eller har du någonsin känt behov av kodkörning rad för rad???
Om du någonsin känt någon av de ovan nämnda, då det är dags för dig att skriva core ' C'code du AVR.
Även om du vill frigöra kraften i den låga nivå core AVR programmeringen med din egen skriven bibliotek/kod och vill ändra koder per dina behov och parallelly vill ha en bättre förståelse av hela koden... måste du spela med core AVR programmering.
Hoppas jag har rensat dina tvivel om Arduino och AVR grejer. Nu dags för lite bryta innan de träder i nästa avsnitt...