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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.