Siemens tillverkar en mycket trevlig liten alfanumerisk, intelligent display. Den finns i både rött och grönt och även i en högintensiv variant. Den jag testar här är dock den ”normala” röda. Att den är intelligent betyder att den innehåller egen logik för att multiplexa tecknen, ett ram-minne att lagra tecknen i samt en färdig teckenkarta.

Även svenska tecken finns tillgängliga. Flera displayer kan kopplas ihop till det antal tecken man vill ha. Det finns även ingångar för att helt släcka displayen och för att styra en cursor. Se gärna databladet för mer information.

Programmet här visar ett ganska bökigt sätt att skriva till displayen, men för teständamål så duger det bra. Genom att göra på det här sättet så kan dock vilka pinnar som helst användas.

Om man tittar på displayen så ser man att den har 22 pinnar, men inte alla måste anslutas. För att kunna köra exemplet behövs bara 13 anlutningar. 7 för data, 2 för adress, 2 för spänningsmatning, en för skrivning, en för blanking. För att det ska se bra ut har jag lagt till en koppling till Arduinons reset. Tack vare detta så släcks displayen när Arduinon resettas.

Börja med att koppla +5V till pinne 6 och GND till pinne 12 på displayen. Sen kopplas utgång 2 – 8 till pinne 16 – 22 på displayen. Därefter är det dags för de två adresspinnarna, koppla Arduinons pinnar 10 & 11 till displayens pinne 7 & 8. Pinne 9 är lätt i och med att den ska kopplas till pinne 9. 🙂

Pinne 5 på displayen ansluts till reset på Arduinon och sist men inte minst ansluts pinne 14 på displayen till pinne 12 på Arduinon. Nu är alla kopplingar mellan Arduinon och displayen klara. Sen behöver man bara koppla pinne 3 & 4 på displayen till GND så ska allt fungera.

 

Den här beskrivningen kanske inte är så lätt att följa, använd isf tabellen nedan för att se hur det ska kopplas.

Om det inte fungerar så är det antagligen något som är felkopplat eller glappt. Jag hade lite problem med att vissa av kopplingssladdarna glappade lite i breadboardet, kan vara värt att kolla på om det mot förmodan skulle krångla.

/*
   kod för att styra en DLR3416-display från Siemens
*/

byte  a[2];      // Adresspinnar
byte  d[7];      // Datapinnar
byte  bl;        // Blankingpinne
byte  wr;        // Writepinne
byte  i;         // Temporär variabel

void setup()
{

  wr = 9;                //Write = pin 9 på Arduinon
  pinMode(wr, OUTPUT);
  digitalWrite(wr, 1);

  bl = 12;                // Blanking = Pin 12 på Arduinon
  pinMode(bl, OUTPUT);
  digitalWrite(bl, 1);

  a[0] = 10;              // Adresspinnarna, 10 och 11 på Arduinon
  a[1] = 11;
  pinMode(a[0], OUTPUT);
  pinMode(a[1], OUTPUT);

  d[0] = 2;                // Datapinnar från pin 2 - pin 8 på Arduinon
  d[1] = 3;
  d[2] = 4;
  d[3] = 5;
  d[4] = 6;
  d[5] = 7;
  d[6] = 8;

  for (i = 0; i & lt; 7; i++) {
    pinMode(d[i], OUTPUT);
  }
}

void loop()
{
  digitalWrite(a[0], 1);   //adress =0
  digitalWrite(a[1], 1);

  digitalWrite(d[0], 0); // T
  digitalWrite(d[1], 0);
  digitalWrite(d[2], 1);
  digitalWrite(d[3], 0);
  digitalWrite(d[4], 1);
  digitalWrite(d[5], 0);
  digitalWrite(d[6], 1);

  wrt();
  delay(500);

  digitalWrite(a[0], 0);
  digitalWrite(a[1], 1);

  digitalWrite(d[0], 1);    // e
  digitalWrite(d[1], 0);
  digitalWrite(d[2], 1);
  digitalWrite(d[3], 0);
  digitalWrite(d[4], 0);
  digitalWrite(d[5], 1);
  digitalWrite(d[6], 1);

  wrt();
  delay(500);

  digitalWrite(a[0], 1);
  digitalWrite(a[1], 0);

  digitalWrite(d[0], 1);   // s
  digitalWrite(d[1], 1);
  digitalWrite(d[2], 0);
  digitalWrite(d[3], 0);
  digitalWrite(d[4], 1);
  digitalWrite(d[5], 1);
  digitalWrite(d[6], 1);

  wrt();
  delay(500);

  digitalWrite(a[0], 0);
  digitalWrite(a[1], 0);

  digitalWrite(d[0], 0);   // t
  digitalWrite(d[1], 0);
  digitalWrite(d[2], 1);
  digitalWrite(d[3], 0);
  digitalWrite(d[4], 1);
  digitalWrite(d[5], 1);
  digitalWrite(d[6], 1);

  wrt();
  delay(500);

  for (i = 0; i & lt; 5; i++) {
    digitalWrite(bl, 0);
    delay(500);
    digitalWrite(bl, 1);
    delay(500);
  }

  digitalWrite(a[0], 1);
  digitalWrite(a[1], 1);

  digitalWrite(d[0], 0);   //' '
  digitalWrite(d[1], 0);
  digitalWrite(d[2], 0);
  digitalWrite(d[3], 0);
  digitalWrite(d[4], 0);
  digitalWrite(d[5], 1);
  digitalWrite(d[6], 0);

  wrt();
  delay(500);

  digitalWrite(a[0], 0);
  digitalWrite(a[1], 1);

  digitalWrite(d[0], 0); //' '
  digitalWrite(d[1], 0);
  digitalWrite(d[2], 0);
  digitalWrite(d[3], 0);
  digitalWrite(d[4], 0);
  digitalWrite(d[5], 1);
  digitalWrite(d[6], 0);

  wrt();
  delay(500);

  digitalWrite(a[0], 1);
  digitalWrite(a[1], 0);

  digitalWrite(d[0], 0);     // ' '
  digitalWrite(d[1], 0);
  digitalWrite(d[2], 0);
  digitalWrite(d[3], 0);
  digitalWrite(d[4], 0);
  digitalWrite(d[5], 1);
  digitalWrite(d[6], 0);

  wrt();
  delay(500);

  digitalWrite(a[0], 0);
  digitalWrite(a[1], 0);

  digitalWrite(d[0], 0);     // ' '
  digitalWrite(d[1], 0);
  digitalWrite(d[2], 0);
  digitalWrite(d[3], 0);
  digitalWrite(d[4], 0);
  digitalWrite(d[5], 1);
  digitalWrite(d[6], 0);

  wrt();
  delay(5000);

}

void wrt()
{
  digitalWrite(wr, 0);
  delay(5);
  digitalWrite(wr, 1);
}