Forum: Analoge Elektronik und Schaltungstechnik HT16K33 schnelltest LED Blink :P


von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Hi,

es ist 5 vor 12 ;) und ich bin scheinbar noch nicht ganz wach ODER ich 
habe einen defekten HT16K33 geliefert bekommen.

Könnt ihr mir Tipps, geben um zweiteres auszuschließen?

    #define LCD_I2C_DEVICE    0x7E
    #define SEG7_I2C_DEVICE    0x70

    ...
    while(1)
    {
      ioinit();
      i2c_init();
      lcd_init();
      HT16K33_Init();
      wait_10ms(1);//der ganze block nur zur Sicherheit, um das Device 
abziehen zu können.

      lcd_printlc_P(1, 1, PSTR("TEST AN"));
      lcd_light(true);
      lcd_printlc_P(2, 1, PSTR("TEST   "));

      HT16K33_ClearDisplay(0);
      HT16K33_ClearDisplay(1);
      HT16K33_ClearDisplay(2);
      HT16K33_ClearDisplay(3);
      HT16K33_ClearDisplay(4);

      wait_10ms(500);

      lcd_printlc_P(1, 1, PSTR("TEST    "));
      lcd_light(false);
      lcd_printlc_P(2, 1, PSTR("TEST AUS"));

      HT16K33_FillDisplay(0);
      HT16K33_FillDisplay(1);
      HT16K33_FillDisplay(2);
      HT16K33_FillDisplay(3);
      HT16K33_FillDisplay(4);

      wait_10ms(500);
    }


Die lib habe ich mir von
#include "HT16K33.h"
/* alle Rechte by achim seeger unter GPL
   myroboter@web.de, wünsche viel Spass damit */

Geborgt.

An dem HT16K33 auf dem Adafruit Breakoutborad habe ich stumpf 8 
mini-LEDs direkt mit den kleinen Beinchen an C0-C7 und mit den langen 
(Annode) an A0-A7 verlötet.

Die im Code angedeutete Schrift vom 2x16 LCD sehe ich!
Irgendein Blinken oder Flackern an den LEDs am HT16K33 jedoch nicht.

Verwende 1:1 das gleiche Kabel für Beide Devices.

Irgendwer eine schlaue Testmethodik für mich?
Codeschnipsel?

Grüße Oekel

: Bearbeitet durch User
von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Bis auf
#define HT16K33 0x70

habe ich nun mal 1:1 folgenden Code verwendet:
http://w8bh.net/avr/AvrDS1307.pdf

Und natürlich nicht den DS1307 abgefragt, sondern fix mit x07F und x0FF 
getestet.

Es bleibt trotzdem alles dunkel.

Ist es denn ein Irrglaube, das eine LED verbunden mit COM0 & ROW0 
leuchten muss, sofern ich die komplette Matrix auf "ON" setze?

Nur zur Sicherheit: Wie lautet die Schleife, die das komplette 
Ausgangs-Mapping der LED-Matrix EINschaltet?

(Ich iteriere da gerade stumpf beim I2C_WriteRegister(uint8_t busAddr, 
uint8_t deviceRegister, uint8_t data)

über alle deviceRegister aus dem Datenblatt und für data von 0 bis x0FF.

Habt ihr noch Tipps für mich? (Zweites Testboard mit verlöteter Anzeige 
ist bereits unterwegs, ich denke es liegt aber eher an der 
Ansteuerung==Denkfehler)

Danke

Oekel

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Hab mir nun zum Testen diesen hier noch besorgt:
https://learn.adafruit.com/adafruit-7-segment-led-featherwings/pinouts

Laut Datenblat vertragt der HT16K33 5V. Im Shop steht aber etwas von 
3.3V
Brate ich mir dann die LEDs?

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Danke für die diesmal ungewöhnlich niedrige Hilfestellung :P

Auf den richtigen Pfad hat mich dann folgender Beitrag von Frank 
gebracht:
Beitrag "Re: adafruit led backpack ht16k33"

Basierend darauf habe ich folgende Anleitung geschrieben:
http://www.mikrocontroller.net/articles/HT16K33_Schnelleinstieg

Falls gewünscht kann DIESER ganze Thread gelöscht werden, da die Lösung 
ja nun im Wiki zu finden ist ;)

Grüße Oekel

von Klaus R. (klaus2)


Lesenswert?

...ich glaube, ich bin auch nicht ganz da - habe eine CC 7 SEG Anzeige 
mit K an C0...4 und A an A0...8 angeschlossen - leider bleibt das 
Drecksding dunkel, COM klappt aber. Ich sehe auch die ~106 Hz Anzeige 
takt an den Pins, aber A wird nicht auf VDD gesetzt.

-> Jmd eine Idee?
1
#define LED    0xE0
2
3
void LED_init () {
4
5
  i2c_start_wait(LED+I2C_WRITE);
6
  i2c_write(0x21);
7
  i2c_write(0x81);
8
  i2c_write(0xA0);
9
  i2c_stop();
10
11
  }
12
13
void LED_setbrt (char brt) {
14
15
  i2c_start_wait(LED+I2C_WRITE);
16
  i2c_write(0xE0 | brt);
17
  i2c_stop();
18
19
  }
20
21
void LED_test () {
22
23
  char i;
24
25
  i2c_start_wait(LED+I2C_WRITE);
26
  i2c_write(0x00);
27
  
28
  for(i=0; i<16; i++) {
29
30
    i2c_write(0xAA);
31
32
    }
33
34
  i2c_stop();
35
36
  }

(Die Fkt werden der Reihe nach in Main aufgerufen)

Danke, Klaus.

von Klaus R. (klaus2)


Lesenswert?

...rästelhaft, es sieht so aus als wenn A0...15 nicht auf HIGH gehen, 
wenn man es erwartet. Ich sehe mit dem Oszi ansonsten alles so wie im 
DaBla angegeben, nur gehen die A nicht auf High (die C gehen auf low und 
dann auch High-Z). Auch die Keyscan Phase sieht man gut.

EDIT: Modul mal gewechselt und nur eine LED dran - auch nix, selbes 
Problem. Gut...ich rästel mal weiter - bin mir sicher, dass das Problem 
vor dem Rechner sitzt.

Klaus.

: Bearbeitet durch User
von Klaus R. (klaus2)


Lesenswert?

SOLVED: Alter, man muss das Display nach dem (erstmaligen?) Übertragen 
von Daten nochmal neu EINSCHALTEN? Ja super...also reicht es nicht, das 
via "0x81" im INIT zu tun.

Klaus.

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.