Udvidet hardware-software
Contents
2130 Udvidet hardware/software projekt
Materialer/Links
Arduino på mars Arduino
Opgaver
Mandag
Hent og installer Arduino IDE, se vejledning på Arduino
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 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 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
Tirsdag
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 der er indført en seriel 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å Arduinos hjemmeside findes eksemplet SPIDigitalPot 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.
På dette eksempel arduino_spi_slave kan du se 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.
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.
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.
Prøv til sidst at lave kode så det er boardet med lysføleren som er slave og returnerer værdier til masteren når der sendes en given kommando.