Von Sparkfun gibt es 4-stellige 7-Segment Anzeigen, welche einen eigenen ATmega328 Controller besitzen und eine serielle Schnittstelle und SPI zur Ansteuerung bereitstellen.
Die Platine ist nicht breiter als die Anzeige, so das auch mehrere nebeneinander montiert werden können. Die Anschlüsse befinden sich oberhalb der 7-Segment Anzeige.
Auf der Rückseite befindet sich der Controller und die Beschriftung der Anschlüsse.
Die Anzeige gibt es in verschiedenen Farben und in Deutschland bei unter anderem bei Watterott. Im User’s Manual bei Sparkfun sind die Steuercodes dokumentiert.
Folgend ein Bespielprogramm das per SPI von 0 bis 9999 zählt und auf der 7-Segment Anzeige ausgibt. 5 Anschlüsse werden verwendet.
Arduino | 7-Segment Anzeige | |
---|---|---|
GND | GND | |
5V | VCC | |
PIN 13 | SCK | Clock |
PIN 11 | SI | Datenleitung |
PIN 10 | CSN | Slave Select |
/* ** Beispielprogramm fuer 4-stellige 7-Segment Anzeige ** von Sparkfun ( http://www.sparkfun.com/products/9767 ) ** per SPI. Basiert auf dem Code von Quazar & Busaboi ** ( http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1247533060 ), ** allerdings etwas gekürzt. Benutzung auf eigene Gefahr. */ #define DATAOUT 11 //SI #define SPICLOCK 13 // SCK #define SLAVESELECT 10 //CSN char spi_transfer(volatile char data) { SPDR = data; // Start the transmission while (!(SPSR & (1<<SPIF))) // Wait the end of the transmission { }; return SPDR; // return the received byte } void setup() { byte clr; pinMode(DATAOUT, OUTPUT); pinMode(SPICLOCK, OUTPUT); pinMode(SLAVESELECT, OUTPUT); digitalWrite(SLAVESELECT, HIGH); //disable device // SPCR = 01010010 //interrupt disabled,spi enabled,msb 1st,master,clk low when idle, //sample on leading edge of clk,system clock/64 SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1); clr=SPSR; clr=SPDR; delay(10); write_led_numbers(0x78,0x78,0x78,0x78); // Display loeschen } void write_led_numbers(int digit1, int digit2, int digit3, int digit4) { digitalWrite(SLAVESELECT, LOW); spi_transfer(digit1); // Thousands Digit spi_transfer(digit2); // Hundreds Digit spi_transfer(digit3); // Tens Digit spi_transfer(digit4); // Ones Digit digitalWrite(SLAVESELECT, HIGH); //release chip, signal end transfer } void write_led(unsigned short num) { unsigned short digit[4] = { 0, ' ', ' ', ' ' }; unsigned short place = 0; while ( (num ) && (place<4) ) { if ( (num>0) ) digit[place++] = num % 10; num /= 10; } write_led_numbers(digit[3], digit[2], digit[1], digit[0]); } void loop() { for (int i = 0; i < 9999; i++) { write_led (i); delay(10); } }
Download des Beispielprogramms: 7segment_spi.ino
Das Programm in Aktion.