Forum: Mikrocontroller und Digitale Elektronik HT16K33 - habe ein Problem damit


von Achim S. (achims)


Angehängte Dateien:

Lesenswert?

Hallo Gemeinde
habe mal das Datenblatt zu dem HT16K33 angehängt.
Die I2C Adresse wird mit

1 1 1 0 A2 A1 A0 R/W

angeben. Damit ergibt sich die Adresse von

0x60 bis 0x6e

Stimmt das so?
achim

von Faulpelz II (Gast)


Lesenswert?

Je nach IC-Gehäuse kann die zu sendende Schreibmodus I2C-Adresse im 
Bereich von 0xE0 bis 0xEE in Sprüngen von 2 liegen.

Z.B. 0xE0, 0xE2...EE.

Als Leseadresse erhöhen sich obige Werte jeweils um den Betrag des LSB:

Z.B. 0xE1, 0xE3...EF.

Die A2-A0 Bits werden an den Pins festgelegt und erlauben je nach 
Gehäuse bis zu acht verschiedene Slave-Adressen.

Studiere das Datenblatt (Seiten 25+) wo die I2C Ansteuerung sehr 
ausführlich beschrieben ist.

Dieser Aspekt des I2C-Protokoll ist bei allen ICs gleich und 
unterscheided sich nicht von den Typen die Dir schon von anderen 
Projekten bekannt sein sollten.

von Achim S. (achims)


Lesenswert?

Stimmt was sagst, habe eine Zahl unterschlagen
Danke

von Achim S. (achims)


Lesenswert?

Hallo
habe mit dem HT16K33 weiter gemacht. Habe die richtige Adresse 
eingestellt, Init geht und auf dem 8x8 LED Display leuchten auch 
LEDs,(warum, zufällg?) die Anzeige kann ich ausschalten, das Blinken 
schalten. Was ich nicht verstehe ist der RAM. Nach Datenblatt wird der 
RAM beschrieben, ab Seite 14. Leider weiss ich noch nicht wie.
Was macht der Oszi dabei? bzw. was stelle ich damit ein?
Vielleicht könnte mir jemand weiter helfen
achim

von Achim S. (achims)


Lesenswert?

Hallo Gemeinde
steh jetz so ziemlich auf dem Schlauch. Habe ein ganz Teil geschafft. 
Komme mit der Ausgabe aber nicht klar. Einige LED leuchte auf der 8x8 
Matrix. Leider mehr sporadisch.
Was ich bisher habe:
1
#define HT16K33_CMD_BLINK 0x81
2
#define HT16K33_BLINK_DISPLAYON 0x01 // 0-aus, 1-ein
3
#define HT16K33_BLINK_OFF 0  // 0-Blinken aus, 1-Blinken an
4
#define HT16K33_BLINK_2HZ  1
5
#define HT16K33_BLINK_1HZ  2
6
#define HT16K33_BLINK_HALFHZ  3
7
8
#define HT16K33_CMD_BRIGHTNESS 0xE0
9
#define HT16K33_CMD_OSCILLATOR 0x20
10
11
void HT16K33_Init(void)            // HT16K33 initieiren
12
  {  
13
  LEDDriver_SetOscillator(true);      // schaltet Oszillator ein 
14
  LEDmodule_Blinken(HT16K33_BLINK_OFF);  // SETZ 0-AUS ODER 1-EIN
15
  LEDDriver_SetBrightness(15);      // setzt Helligkeit max 15 (0..15)
16
  }
17
18
void LEDDriver_SetOscillator(bool osc_on)  // schaltet Oszi ein
19
  {
20
  i2c_start(HT16K33_modul1_addr<<1);
21
  if (osc_on)
22
  i2c_write(HT16K33_CMD_OSCILLATOR | 1);  // oscillator ein
23
  else
24
  i2c_write(HT16K33_CMD_OSCILLATOR);    // oscillator aus
25
  i2c_stop();                // Bus stop
26
  }
27
28
void LEDmodule_Blinken(uint8_t b)      // schaltet Blinken
29
  {
30
  i2c_start(HT16K33_modul1_addr<<1);
31
  if (b > 3) b = 0;            // Sicherheitsabfrage
32
  i2c_write(HT16K33_CMD_BLINK | HT16K33_BLINK_DISPLAYON | (b << 1));
33
  i2c_stop();                // Bus stop
34
  }
35
36
void LEDDriver_SetBrightness(uint8_t b)
37
  {
38
  if (b > 15) b = 15;            // Sicherheitsabfrage
39
  i2c_start(HT16K33_modul1_addr<<1);    // Bus start, Angabe Adresse
40
  i2c_write(HT16K33_CMD_BRIGHTNESS | b);  // schreibt Wert
41
  i2c_stop();                // Bus stop
42
}
43
44
void LEDDriver_DisplayClear(void)
45
  {
46
  for (uint8_t i=0; i<8; i++) 
47
    {
48
    displaybuffer[i] = 0;
49
    }
50
  }
51
52
void LEDDriver_DisplayFill(void)
53
  {
54
  for (uint8_t i=0; i<8; i++) 
55
    {
56
    displaybuffer[i] = 0xFF;
57
    }
58
  }
59
60
static const uint8_t numbertable[] PROGMEM = 
61
 { 
62
   0x00, /* 0 3f*/
63
  0x00, /* 1 06 */
64
  0x00, /* 2 5b*/
65
  0x4f, /* 3 4f*/
66
  0x00, /* 4 66*/
67
  0x00, /* 5 6d*/
68
  0x00, /* 6 7d*/
69
  0x00, /* 7 07*/
70
  0x00, /* 8 7f*/
71
  0x00, /* 9 6f*/
72
  0x00, /* a 77*/
73
  0x00, /* b 7c*/
74
  0x00, /* C 39*/
75
  0x00, /* d 5e*/
76
  0x00, /* E 79*/
77
  0x00, /* F 71*/
78
  0x00, /* clear */
79
};
80
81
HT16K33_modul1_addr = 0x70;
82
  HT16K33_Init();
83
  while(1)
Was fehlt ist ein Stück Code zur Darstellung von Zeichen oder Bits.
Könnte mir jemand weiterhelfen?$
Das ganze Programm habe ich in kleine Stücke zerlegt und rufe es 
entsprechend auf. Das meist ist in der .h oder .c drin. Der obere Code 
ist aus Teilen dieser Programme. Bitte nicht durcheinander bringen
achim

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.