Udvidet hardware-software
2130 Udvidet hardware/software projekt
Materialer/Links
Arduino på mars Arduino
Opgaver
Mandag
Arduino IDE
Hent og installer Arduino IDE, se vejledning på Arduino
UART kommunikation
Kig i eksemplet SerialCallResponceASCII og lav din egen udgave med en LDR (Lys føler) og en trykknap som kan tænde og slukke for LEDen på port 13.
Afprøv med PUTTY eller tilsvarende[1] at dit program virker så du kan læse værdien fra lysføleren og status på trykknappen. Vær opmærksom på at det er samme port du anvender til at programmerer og til at kommunikerer med boardet så der kan opstå konflikter.
Lav også en rutine så du kan tænde og slukke LEDen via seriel interfacet.
Atmel processoren har en indbygget UART (Universal Asynchronous Receiver Transmitter) som kan anvendes til seriel kommunikation med andre enheder. Du finder portene til UARTen på Port 0 og 1 på Arduino boardet.
Tag nu et board mere og lav en seriel mellem UARTen på de to boards forbindelse med 2 ledninger mellem de to boards.
- RX (Port 0) til TX (Port 1)
- TX (Port 1) til RX (Port 0)
Lav kode til board 2 så du kan tænde LEDen på boardet vha den trykknap du satte på board 1 ved at sende seriel kommandoer mellem de to boards. Bemærk at du ikke kan programmerer de to boards via USB uden først at fjeren ledningerne fra RX og TX.
Lav til sidst en udvidelse så du med en eller to ekstra ledninger mellem de to boards kan lave handshake og sende en interrupt til board 2 som starter serial read. Du kan læse mere om handshake her RS-232 and RS-422. Vær dog opmærksom på at der ikke er tale om egentlig RS-232 med de spændings niveauer vi arbejder med her, det kræver en tranceiver.
Der er mere om Arduino og interrupts her Arduino Interrupt eksempel
Meget mere om seriel kommunikation her serial communication
Tirsdag
SPI
SPI er en meget anvendt kommunikationsform mellem forskellige komponenter i et uProcessor system. Det kan f.eks. være at processoren skal programmer en GPS enhed, læse fra et flash card eller blot programmere nogle udgange. SPI betyder Serial Peripheral Interface Bus og adskiller sig fra opgaven i går ved at være synkron og har derfor indført en clock. SPI kan du læse mere om her SPI på Wikipedia
uControlleren i Arduino har også en SPI bus som befinder sig på port 10-13
Port 13 - SCLK (Serial clock) Port 12 - MISO (Master In Slave Out) Port 11 - MOSI (Master Out Slave IN) Port 10 - SS (Slave Select)
Slave Select gør det muligt at lade den samme master styrer flere forskellige slave enheder på et board. De forbindes alle parallelt, men med hver sin Slave select.
På software siden er her par løsninger at kigge på
- SPIDigitalPot På Arduinos hjemmeside som anvendes til at programmer nogle Digitale potentiometre, dem skal vi ikke bruge, men du skal lave koden om så den i stedet kan sende kommandoer fra det ene til det andet board. En kommando består i dette tilfælde af en adresse og en værdi.
- arduino_spi_slave Hvordan du sætter dit andet board op som SPI slave. Koden læser hvad der kommer ind på SPI og sender det vidre til seril porten.
- making two arduinos talk over spi Fin løsning med både master og slave.
- Arduino SPI Master Slave Demo En noget mere avanceret løsning med både master og slave
Tag dine to boards og forbind via SPI. I modsætning til UART skal der ikke krydses når forbindelsen laves. Det vil sige MISO forbindes til MISO og MOSI til MOSI.
Sæt nu masteren til konstant at sende værdier fra lysføleren til slaven, forbind slaven til computeren via putty, og se hvordan værdierne fra masteren printes ud. Bemærk dog at programmet i slaven venter på et linebreak "\n" som aldrig kommer, det skal du fjerne for at det virker, eller indfører det i din master kode.
Lav derefter koden så det er boardet med lysføleren som er slave og returnerer værdier til masteren når der sendes en given kommando.
Oscilloscope
Når du har det til at virke så prøv at tilslutte et oscilloscope så du kan se hvordan signalerne løber mellem de to boards. Sæt først scopet til at trigge på SS. Fortæl derefter scopet at bussen er en SPI og bed scopet om at dekode signalerne.
I2C
I2C er en anden seriel kommunikations standard. I2C er synkron på samme måde som SPI men anveder samme forbindelse til RX og TX og kan derfor nøjes med 2 ledninger. Kig på I2C between Arduinos og lav en I2C forbindelse i mellem dine boards.
Onsdag
Timing
Timing diagrammer er et vigtigt værktøj når vi skal beskrive seriel kommunikation. Lav en beskrivelse af din SPI kommunikation fra sidste øvelse, og sæt de rigtige signaler og tider på.
AVR Studio
Indtil nu har vi anvendt Arduinos eget IDE sketch og de indbyggede biblioteker, men så gode biblioteker kan du ikke altid regne med at have, og de har også deres begrænsninger.
Derfor er det tid at installerer et "rigtigt" udviklingsværktøj. På Arduino finder du en guide til at installerer AVR studio og anvende dette sammen med Arduino.
På samme side finder du også diagrammer og datablade for den ATMega som sidder på Arduino boardet.
Installer AVR Studio og gentag UART øvelsen, men uden at anvende Arduino bibliotekerne. Du kan også hjælp til UART kommunikation her Using the usart of avr microcontrollers reading and writing data
I Atmel databladet finder du registeret UBRRn som bestemmer baudrate. Find den værdi som skal skrives for at ændre baudrate til 9600. Find også UCSR registrene den bestemmer konfigurationen af UART og lav om til Even parity.
Kig evt med oscilloscopet hvordan dit parity bit virker.
Lav til sidst en funktion der kan opsætte alle parameter på seriel kommunikation. Baudrate, parity flowkontrol og stopbit.
Torsdag
CAN BUS
CAN BUS er en seriel bus som er meget anvendt i industriel sammenhæng, og den som sidder i de fleste nyere bilen. Til forskel fra SPI og I2C som du tidligere har arbejdet med kører CAN bus et balanceret signal og anvender en transiver. Det betyder at signalerne er mere hårdføre over for støj og kan anvendes over langt større afstande. Monter CAN BUS Shield på dine 2 arduino boards og forbind de to boards. Hent et CAN bus library på Arduino og ret din software så kommunikationen foregår via denne bus. Sæt oscilloscopet på bussen og beskriv de målte spændinger og signaler.
KEIL
Keil boardet har også en indbygget CAN transiver. Prøv om du kan få Keil boardet til at hente data fra dit arduino board.
Fredag
Oprydning og evaluering