HT16K33 Schnelleinstieg

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Ausgabe

Nachdem man ausführlich das Datenblatt gelesen hat, möchte man häufig relativ schnell feststellen, ob die angeschlossene Hardware funktioniert.

Dies wollen wir hier anhand des HT16K33 tun und einige Fallstricke auflösen.

Ich empfehle dafür zuallererst die fertigen Module von Adafruit, da diese auch die nötigen 4 Pins beschriftet haben. Nach dem hier beschriebenen Einstieg, kann zumindest sichergestellt werden, dass euer [AVR] als Master richtig programmiert wurde.

  • Lötkolben an und eine oder mehrere LEDs zwischen irgendeinen der A0-A15 (+ langes Bein) und irgendeinen C0-C7 Pinne befestigen.

Zuerst die TWI/I2C Adresse

 
#define HT16K33 0x70 //Datenblatt
#define HT16K33 0xE0 //Peter Fleury <i2cmaster.h> Adresse mit 8 Bit incl. R/_W Bit. x 2 = 0xE0.

und nun wollen wir die komplette 16*8 Matrix EIN-Schalten!

void I2C_WriteRegister(uint8_t busAddr, uint8_t deviceRegister, uint8_t data) {
	I2C_Start(busAddr); // send bus address
	I2C_Write(deviceRegister); // first byte = device register address
	I2C_Write(data); // second byte = data for device register
	I2C_Stop();
}

void 8888888888888888Test()
{
	//16 segments (ROW=active high when displaying) and 8 commons (COM=active low when displaying)
	//ROW/INT Set Register == ROW
	//1010XXX0=A0(10100000)
	//I2C_WriteByte(HT16K33, 0xA0);//== ROW (optional) only needed if used as INT before
	I2C_WriteRegister(HT16K33, 0, 0xFF);//COM0
	I2C_WriteRegister(HT16K33, 1, 0xFF);//COM0
	I2C_WriteRegister(HT16K33, 2, 0xFF);//COM1
	I2C_WriteRegister(HT16K33, 3, 0xFF);//COM1
	I2C_WriteRegister(HT16K33, 4, 0xFF);//COM2
	I2C_WriteRegister(HT16K33, 5, 0xFF);//COM2
	I2C_WriteRegister(HT16K33, 6, 0xFF);//COM3
	I2C_WriteRegister(HT16K33, 7, 0xFF);//COM3
	I2C_WriteRegister(HT16K33, 8, 0xFF);//COM4
	I2C_WriteRegister(HT16K33, 9, 0xFF);//COM4
	I2C_WriteRegister(HT16K33, 0xA, 0xFF);//COM5
	I2C_WriteRegister(HT16K33, 0xB, 0xFF);//COM5
	I2C_WriteRegister(HT16K33, 0xC, 0xFF);//COM6
	I2C_WriteRegister(HT16K33, 0xD, 0xFF);//COM6
	I2C_WriteRegister(HT16K33, 0xE, 0xFF);//COM7
	I2C_WriteRegister(HT16K33, 0xF, 0xFF);//COM7
}

Und falls wir dann etwas spielen wollen, können wir auch mal die anderen Funktionen des Chips antesten:

void pulsating () //...whatever is on the display
{
	for (uint8_t count = 0; count < 3; count++) {
		for (uint8_t j = 15; j > 0; j--) // dim the display
				{
			I2C_WriteByte(HT16K33, HT16K33_DIM + j);
			wait_10ms(10);
		}
		for (uint8_t j = 0; j < 16; j++) // brighten the display
				{
			I2C_WriteByte(HT16K33, HT16K33_DIM + j);
			wait_10ms(10);
		}
	}
}

Ab nun sollte es ein Kinderspiel sein und man kann anhand diverser Bibliotheken und Funktionen mit Chip spielen.

Eingaben abfangen

  • Der Holtek kann nicht nur einige LEDs antreiben, sondern auch eine ganze Matrix von Schaltern abfragen.

An folgender stelle möchten wir auch hier irgendeinen angeschlossenen Taster abfangen...

  • TODO