Start Elkretssimulator


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

I2C -interfacet nås via pinnarna 18 och 19 dvs SDA, SCL.