Arduino Display Shield

Fra Kommunikation-IT Holstebro HTX
Skift til: navigering, søgning

Display shieldet givet en god og simpel måde at komme i gang med display på Arduino, og man kan lave en lille begrænset opstilling hvor man har gang i display og enkelte knapper, uden at skulle sætte mere hardware op.

Fra dx.com

De display shields vi har hjemme (november 2013) er fra dx.com, og kan p.t. købes som Display Shield fra dx.com.

Denne dokumentation tager udgangspunkt i dette display

Kommentarer til diplay-shieldet fra dx.com

Der er en ulempe ved dette display, da benforbindelserne er anderledes, så det skal rettes til i softwaren.

Fordelen er at det er meget let at forbinde til Arduinoen, det klipses bare ned oven på som vist her:

Display Shield sat på en Arduino
Display Shield sat på en Arduino

Det kan være lidt svært at se, men Arduinoen sidder under display-shieldet.

I Arduino-programmet åbnes Fil - Eksempler - LiquidDisplay - HelloWorld[1].

Virkemåde

I funktionen setup() initialiseres LCD-displayet med lcd.begin(16, 2), hvor det angives at det er 16 karakterer på to linjer, og derefter skrives "Hello, World!".

Der skal dog ændres i softwaren, fordi benene sidder anderledes end det test-softwaren angiver (den kan være lavet efter et andet display-shield):

/*
  The circuit:
 * LCD RS pin to digital pin 8
 * LCD Enable pin to digital pin 9
 * LCD D4 pin to digital pin 4
 * LCD D5 pin to digital pin 5
 * LCD D6 pin to digital pin 6
 * LCD D7 pin to digital pin 7
 * LCD R/W pin to ground
*/

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

Altså angivet hvilke digitale ben der anvendes til displayet.

I funktionen loop() afvikles den samme kode i en uendelig løkke, hvor cursoren placeres samme sted hver gang (i starten af 2. linje) og der udskrives hvor mange sekunder der er gået siden reset.

Hardware

For at teste programmet fornuftigt skal Display Shieldet selvfølgelig sidde korrekt på Arduinoen.

Test

For at teste programmet laves opstillingen som vist, hvorefter man skal se at der skrives det ønskede i displayet, og at den tæller sekunder op.

Anvendelse af knapper

For at anvende knapperne skal man læse på A0, der angiver en analog værdi, alt efter hvilken knap der er trykket på:

Knap Værdi
Ingen 1023
SELECT 722
LEFT 482
DOWN 308
UP 132
RIGHT 0
RST Er speciel, den resetter Arduinoen

For at fange værdierne er det ikke en god ide at teste på selve den viste værdi, da det kan svinge lidt med komponenterne og måske også med temperatur. Derfor testes i stedet på nogle fornuftige grænser mellem værdierne, sp, det er illustreret i følgende kode:

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis()/1000);
  int key = analogRead(0);
  lcd.print(" ");
  lcd.print(key);
  lcd.print("  ");
  if (key < 50) {
    lcd.print("Right");
  } else if (key < 200) {
    lcd.print("Up");
  } else if (key < 420) {
    lcd.print("Down");
  } else if (key < 600) {
    lcd.print("Left");
  } else if (key < 800) {
    lcd.print("Select");
  } else {
    lcd.print("      ");
  }
  delay(100);
}

Tilslutning af yderliger hardware

Umiddelbart når man sætter et Display shield på, så lukker man af for alle stikforbindelser, og der er faktisk også en del af dem der bliver brugt. Der er dog stadig en række forbindelser det kan være interessant at få fat i, og det er der også etableret mulighed for på display-shiledet.

Display Shield forbindelser i den ene side
Display Shield forbindelser i den ene side

De 6 huller der sidder i 2x3 er som markeret ICSP-porten, og vel at mærke den til programmering af ATMega328'eren - det er det stik der normalt er placeret nede i enden af Arduino UNO. Her kan man montere 2x3 pin-række, så man har muligheden for ICSP-programmering.

De 7 huller på række er tilgængelige digitale ben.

Her kan man evt. montere stik eller lodde ledninger direkte i, hvis man ønske at forbinde noget til dem. Forbindelserne er markeret som vist på billedet og har følgende betydning:

Ben Funktion
0 Digital pin 0 - RX-ben - normalt blokeret af USB-seriel
1 Digital pin 1 - TX-ben - normalt blokeret af USB-seriel
2 Digital pin 2 - PWM-udgang - INT0
3 Digital pin 3 - PWM-udgang - INT1
11 Digital pin 11 - PWM-udgang - MOSI - en del af ICSP
12 Digital pin 12 - MOSO - en del af ICSP
13 Digital pin 13 - SCK - en del af ICSP

Umiddelbart er Digital pin 10 heller ikke anvendt til display-shildet, men det ser ikke ud til at benet er ført ud nogen steder. Jeg har ikke kunnet finde noget på hvad benet er anvendt til på Display-shieldet.

Display Shield forbindelser i den anden side
Display Shield forbindelser i den anden side

På den anden side af display-shieldet er der 6 huller med forsyninger og reset ført ud, samt 5 af de analoge indgange.

A0 bliver brugt af de 5 trykknapper på display-shieldet.

A4 og A5 har også funktion som I2C-bus, hvor signalerne et angivet som vist på billedet.

Referencer

  1. http://www.arduino.cc/en/Tutorial/LiquidCrystal LCD Display grundlæggende kode