User Tools

Site Tools


kurs:mppk

MicroProcessorProgrammeringsKursen (MPPK)

Beskrivning

I denna kursen så kommer ni att få gå igenom ett (av tusentals) sätt att programmera en microprocessor. Vi kommer att använda oss av egen version av Arduino IDEn (alt. den version du har installerat på din dator), en AVRISP mkII programmerare, ett kretskort med processorn på samt säkerligen en del koffein för att klara av våran uppgift.

Kursinnehåll

Vi kommer att gå igenom:

  • En grundläggande genomgång om man går tillväga att programmera en microprocessor.
  • Olika koncept såsom register, bit shifting och bitmasking.
  • En enklare genomgång av C kommer även att göras där vi går igenom vad som kommer att vara användbart under dagen.
  • Serieprotokoll såsom ICSP, JTAG, SPI, UART och I2C

När detta är klart kommer vi att hålla i en livedemo över hur våran toolchain (,sättet vi använder för att programmera våran microprocessor) går till och efter det kommer vi förklara vad ni ska utföra i laborationsdelen av kursen.

Kursdelmoment med ökande svårighetsgrad:

Se nedan för exempelkod och användbara resurser.

  1. Blinka LED (Register, shifta, timer)
  2. PWM-dimmra LEDs
  3. Styra LED via LDR (Light Dependent Resistor)
  4. Styr LED-intensitet via PWM baserat på LDR input
  5. Konfigurera UART och kommunicera med omvärlden (Extramaterial)
  6. Styr LED som ovan, fast med en PID-kontroller ( Ph.D level of excellence and supreme knowledge ;) )

Efter dagens slut så bör ni ha fått ett grundläggande begrepp över hur man programmerar microprocessorer.

Bra att tänka på

Även om kursen i sig inte har några förkunskapaskrav så kommer vi att använda C som programmeringsspråk och det kan vara bra att se en film eller läsa en bok för att komma igång med det. Learning to Program in C

Material

Det material som ni ska ha med er är:

  • Vilja att lära
  • Gott humör
  • (Optional) Egen dator
  • (Optional) Kunskap av att programmera i C

Ni bör av handledarna ha fått:

  • Ett kretskort med microprocessorn (ATmega168)
  • En programmerare (AVRISP mkII)
  • USB-kablar för att koppla ovan nämda till en dator
  • Nedladdningslänk till ett .zip arkiv innehållande Arduino IDEn, datablad samt ett “pinout” dokument

Arduino

Installation

Ladda hem .zip filen windows-custom-arduino-java.zip och extrahera .zip filen direkt i Nedladdnings-mappen och forstätt sedan med att installera Board Managern nedan.

Detta är en specialversion som behövs för att fungera med egen board-manager på LTUs labbdatorer. Arduinoklienten är modifierad för att spara allting i Mina Dokument istället för %APPDATA%.

OBS På egen datar behövs ej denna specialversion, ladda ned direkt från arduino

Boards Manager

För att installera den board manager som vi vill så

  1. Startar Arduino IDEn som ni just har tankat hem.
  2. Går till FilInställningar alt. FileSettings/Preferences
  3. I fältet Additional Boards Manager URLsfyller ni i https://raw.githubusercontent.com/carlosefr/atmega/master/package_carlosefr_atmega_index.json
  4. Trycker på OK
  5. Går till VerktygKort:XXXXXXXXXBoards Manager...
  6. Väntar ett tag tills den blå “baren” i nedkanten på fönstret försvunnit
  7. I fönstret som kom upp skrollar ni längs ner och trycker på elementet med namn Barebones ATmega Chips (no bootloader) by Carlos Rodrigues
  8. Det bör då har kommit fram en drop-down meny och en knapp med namn Installera
  9. Se till att i drop-down menyn välja 1.3.0och sedan trycka på Installera
  10. Du har nu installerat en egen board manager, Grattis!
Inställningar för vilket kort vi använder

Grönt XP-el MPPK-kort: Processor = ATmega168

Blått XP-el MPPK-kort: Processor = ATmega168p

I menyn Verktyg så ställer ni in så att det ser ut som följande om ni har ett grönt kort:

Kursdelmoment med ökande svårighetsgrad:

Se nedan för exempelkod och användbara resurser.

Blinka LED (Register, shifta, timer)

Testkod
#include <avr/io.h>
#include <util/delay.h>
#include <math.h>

int main(void)              // Main execution function
{
   DDRD = 0b11111111;       // Setting the Data DiRection of port register D to OUTPUTS
   
   while(1)                 // An infinite loop
   {
      PORTD = 0b01000000;   // Sets the 7:th bit in register D to 1
                            // Sets the first LED to turn on (and the second to turn off)
                            
      _delay_ms(1000);      // Waits one second
      
      PORTD = 0x00;         // Clears PORTD i.e sets all bits in the register to 0, but in hex ;)
      PORTD |= 1 << 6;      // Shifts in a 1 into the 7:th bit (6 steps in from position 1) of the PORTD register
      
      _delay_ms(1000);      // Waits one second
    }                       
}                          
PWM-dimmra LEDs
Sätt PWM duty cycle
Styra LED via LDR (Light Dependent Resistor)
Styr LED-intensitet via PWM baserat på LDR input
Konfigurera UART och kommunicera med omvärlden (Extramaterial)
Styr LED som ovan, fast med en PID-kontroller ( Ph.D level of excellence and supreme knowledge ;) )

Hårdvara

Datablad för ATmega168
Microprocessor modul

Anslutning till programmeraren

kurs/mppk.txt · Last modified: 2017/11/12 23:45 by afoht