Mer om Arduino
ATMega 328 = MCU
MCU är en förkortning av det engelska ordet MicroController Unit, dvs
mikrokontroller på svenska. Man kan säga att;
MCU = CPU + RAM + I/O
Denna mikrokontroller är sedan monterad på ett kretskort som gör labbandet enkelt.
Ström
När du programmerar arduinon får kretskortet ström från USB -sladden, 5 volt. Ingen övrig ström är nödvändig att plugga in. Men när du kör ditt arduino -kort bortkopplad från datorn, då behöver kortet få sin ström från annat håll. Du kan plugga in en spänning från ca 7 volt upp till 12 volt. Det finns nämligen en regulator på själva kortet som sedan justerar denna spänning så att den blir vad elektroniken på kortet önskar.
"USB -kretsen"
När du pluggar in kortet till datorns USB kommunicerar datorn med mikrokontrollern via en liten interface -krets, numera en ATmega16U2 eller ATmega8U2. Denna krets sköter alltså USB -kommunikationen med datorn. Denna "USB-krets" kommunicerar sedan i sin tur med ATmega328 (MCUn). Citationstecken finns där därför att ATmega16U2 är i sig själv en liten mikrokontroller men den har programmerats arbeta som en USB -krets. ATmega8U2 resp. ATmega16U2 har 8 resp. 16 KB flashminne , en hel del in/ut -pinnar, UART, SPI och lite allt möjligt.
Andra billigare kopior/kort använder t.ex. kretsen CH340 och detta är däremot en dedikerad USB -krets. Tidigare innan arduino gick över till atmega -kretsar så använde de en FT232RL från FTDI och detta är också en dedikerad USB -krets. Nyare kontruktioner från arduino har ingen separat USB -krets överhuvudtaget, utan detta är integrerat i själva mikrokontrollern som används. Detta är egentligen bara intressant grotta i om du tillverkar någonting kommersiellt och senare vill exploatera denna produkt. Skall du sälja något så måste du troligtvis äga eller ha tillåtelse använda all kod i produkten du säljer och då kan detta spela viss roll. Men har du kommit så långt att du konstruerat någon fantastiskt så tar du lämpligtvis sista lilla steget och kompilerar mjukvaran i en kompilator som gör det möjligt programmera kretsen utan att använda arduinos lab -miljö. Nog om detta!
Mikrokontrollern ATmega328
ATMega 328 är en 8-bits processor med 32 KByte flashminne. Eftersom det är ett flashminne så ligger alltså programmet kvar även efter det att strömmen kopplas bort. Varje gång du kopplar på strömmen, så körs detta dataprogram i flashminnet (som du skrivit). Vidare har MCUn 2 Kbyte RAM -minne. Detta används under körning av programmet, till programstack, globala varaibler och lite annat. Data i ram försvinner naturligtvis när strömmen kopplas bort. Processorn innehåller även 1 KByte EEPROM att användas till långtidsförvaring av data som inte skall försvinna när strömmen kopplas bort, alltså ett inifrån programmerbart permanent minne. Detta EEPROM fungerar alltså som en pytteliten hårddisk på vilken du kan spara t.ex. high-score för ett spel, som du vill ska ligga kvar även om du stänger ner spelet. Skillnaden mellan flashminnet, som också ligger kvar när strömmen kopplas bort, är alltså att programmet som körs i MCUn kan själv skriva och läsa till EEPROMet, som en pyttepytteliten hårddisk, medans flashminnet är något som programmeras utifrån av dig när du skriver själva programmet.
Processor: ATmega328
Klockhastighet: 16MHz
Drivspänning för kortet: 6-20V (rek. 7-12V)
Digitala In/ut -pinnar: 14 st varav 6 st kan köra PWM
Max. ström per IO pinne: 40mA **
Max. ström för 3.3V pinne: 50mA **
Analoga input -pinnar: 6 st
Flash Program Memory: 32KB (av vilket 0.5KB används för bootloader)
SRAM: 2KB
EEPROM Data Memory: 1KB
Om vi tittar närmare på Atmega328 -kretsens pin-out ser den ut såhär.
Dessa pinnar har sedan gjorts tillgängliga på kretskortet enligt följande.
Digitala IN/UT
MCUn har 3 portar: PORTC (PC0 - PC5) kan användas som digital port samt PORTB (PB0 - PB5) och PORTD (PD0 - PD7). Du konfigurerar enkelt en pinne i arduinos IDE som in eller ut -signal. Exempelvis:
pinMode(13, OUTPUT);
pinMode(12, INPUT);
pinMode(10, OUTPUT);
pinMode(11, INPUT_PULLUP);
INPUT_PULLUP innebär att mikrokontrollern sätter dit en intern pull-up-resistor på mellan 20 och 50 KΩ beroende på processor.
För att läsa eller skriva till dessa digitala in eller ut -gångar så gär du såhär i koden.
int varde = 0;
int varde2 = 0;
digitalWrite(13, HIGH);
digitalWrite(10, LOW);
varde = digitalRead(12);
varde2 = digitalRead(11);
Några exempel som använder digitala utpinnar för att tända 7segmentdisplayer.
Analoga IN
PORTC (PC0 - PC5) kan användas som analog, de kan sampla signalen med 10 bitars upplöstning, dvs cirka 0.1% noggranhet. För att läsa av värdet på en analog ingång, t.ex. pinne 3, ser det ut som nedan i koden.
int val = 0;
val = analogRead(3);
Exempel på hur analoga ingångar kan användas för att läsa av knappar/switchar.
Analoga UT (eller snarare PWM ut)
Vissa pinnar är markera med ett ~ på kretskortet, dvs pinnarna 3 (PD3), 5 (PD5), 6 (PD6)), 9 (PB1), 10 (PB2), 11 (PB3) och dessa kan programmeras ge en pulsbreddsmoduleras utsignal (PWM). Denna PWM-signal kan med några få komponenter konverteras till en analog utsignal.
Vi får alltså ingen analog utsignal hur konstigt det än låter utan en pulsbreddsmodulerad signal. Vi måste sedan lägga till en extern resistor och en kapacitans för att få en analog signal.
Mer om detta under
analog ut.
int pwmPin = 3;
int analogInputPin = 3;
int val = 0;
void setup()
{
pinMode(pwmPin, OUTPUT);
}
void loop()
{
// vi läser det analoga värdet från potentimetern
// kopplad som spänningsdelare. Får ett värde mellan
// 0 och 1023.
val = analogRead(analogInputPin);
// Vi skriver detta värde dividerat med 4 på pwmPin
// eftersom pwmPin tar ett värde från 0 till 255
analogWrite(pwmPin, val / 4);
}
UART
USB -kontakten är som nämnt ovan anlutet till en USB -krets vars uppgift är att konvertera USB -protokollet till en seriell ström av data. Denna ström av data finns tillgänglig på pinnarna TX och RX. Vi kan ansluta en kabel mellan RESET och GND på Uno-kortet så att inte Uno-kortet oavsiktligt programmeras och sedan läsa av RX och TX. Detta är användbart t.ex. om vi vill programmera
Pro Mini.
SPI
Arduinon har 1 SPI -interface.
11<->MOSI
12<->MISO
13<->SCK
TWI
I
2C -interfacet nås via pinnarna 18 och 19 dvs SDA, SCL.
Programmera arduino.
Annons
Egen domän, epost & webbsida
Från 120 + 140 = 260 kr per år + moms för Brons -konto med .com -domän.
Bästa sättet att lära sig något, är att 1) ha något att Meka med 2) Meka.
Detsamma gäller förstås internet och webbsidor.
Vill du lära dig göra roliga saker, t.ex. en fixa en egen hemsida på en egen domän eller installera en hemma-server på egen domän? Skaffa ett konto på ett billigt hjälpsamt webbhotell, där du kan ställa många dumma frågor till supporten. Välkommen!
Kontrollpanel (Direct Admin), där du kan lägga till epostadresser, installera wordpress för en företagssida eller privat blogg, lägga till subdomäner, tanka upp filer, ändra DNS -pekare och massor med annat. Behöver du hjälp fixa webbsida? Vi hjälper dig. Börjar ditt nuvarande webbhotell bli störande dyrt? Hör av dig, vi kan troligtvis hjälpa dig med flytten.
Karla Hosting AB • https://karlahosting.se