¿Dónde puedo encontrar una hoja de datos / información de / en esta pantalla LED de 35 segmentos de "parlantes de música" con 7 patas?

0

Compré algunas cosas de "oradores de música", algunas con bluetooth y otras sin. Son baratos, por supuesto, alrededor de 3 o 4 euros. Con algunos ajustes de condensador, parecen ser muy plausibles de usar (¿por qué la salida de estas cosas baratas es siempre pequeña y limitada?).

En estos dispositivos, utilizan una pantalla muy pequeña, bonita y brillante, con 7 patas, charlieplexed, supongo (menéelo para ver cualquier actualización de pantalla), 35 segmentos. No se puede leer el número en el chip usado (es de JL), es muy difícil de reconocer (incluso cuando se usa un microscopio) y la pantalla tampoco tiene ningún número de pieza, sin embargo, estos parecen ser idénticos, excepto la placa frontal en estos componentes

Las pantallas son muy interesantes, solo 7 pines para hacer el trabajo de pantalla, en un solo paquete. Quiero comprar estas cosas (no puedo encontrarlo, no sabe el nombre y tampoco puedo encontrar una hoja de datos).

Lo siguiente que quiero hacer es interactuar con estos dispositivos leyendo la pantalla (con una MCU, por ejemplo) para poder leer el estado del dispositivo y lo que está haciendo. Esta es una tarea difícil sin ninguna hoja de datos.

¿Alguien sabe el nombre de este componente, hay una hoja de datos disponible en alguna parte?

Galería de fotos de la pantalla:

Imagendelproducto:

    
pregunta Codebeat

1 respuesta

1

Lo siento por la respuesta tardía, pero no hay ninguna respuesta publicada.

Sí, seguro que está completamente oculto porque lo descubro colocando una unidad de pantalla en una placa de pruebas y pruebo todos los pines individuales uno por uno con una celda de botón. Anote los resultados en una tabla y pruebe la tabla con un Arduino Nano. ¡Excelente! Parece funcionar perfectamente.

Algunas fotos:

ParaprobarconectéD2..D8conelpin#1..pin#7,muysencillo,fácildehacer.Nosoldécabeceras,sinoquehicealgunospuentesporquequierousaresteNanoparaotroproyecto.Funcionagenial.

Elcódigoqueescribíparaprobarlo(paraquepuedaprobarloustedmismo):

#defineF_CPU16000000UL//Setcpuspeedtocalculaterightdelay#include<util/delay.h>//includes//#include"Timer.h"


/*

 35 segment display:
  ____________________________
 |                            |
 | |>  USB                 FM |
 |           8 8 : 8 8        |
 | ||  SD                 MP3 |
 |____________________________|
      |  |  |  |  |  |  |
      0  1  2  3  4  5  6
      1  2  3  4  5  6  7


     Bits:                 Hex:
        -- 0 --               -- 01 --
       |       |             |        |
       5       1            20        02
       |       |             |        |
        -- 6 --               -- 40 --
       |       |             |        |
       4       2            10        04
       |       |             |        |
        -- 3 --               -- 08 --   
*/

 #define PIN_PLUS  0x01
 #define PIN_MIN   0x00
 #define PIN_OFF   0xFF

 #define PIN_HIGH  HIGH
 #define PIN_LOW   LOW

 #define PIN_ONBOARDLED_OUT      13

 #define SCP_LEDS_OFF_DISABLED   255
 #define SCP_LEDS_RESET          -2
 #define SCP_LEDS_SHOW_ENABLED   -1

 #define CP_MAX_LED 35
 #define CP_CNT_LED 35
 #define CP_MAX_PIN 7
 #define CP_CNT_PIN 7

#define XTM_NOPROGMEM


#if defined(XTM_NOPROGMEM) || !defined(PROGMEM) || !defined(pgm_read_byte)
 #pragma message("Compiling file: PROGMEM off, data tables in memory")
 #ifndef XTM_NOPROGMEM
   #define XTM_NOPROGMEM
 #endif
 #define XTM_MEM_ALLOC_TYPE       static
 #define XTM_GET_DIGIT(x)         XTM_DIGITS[x]
 #define XTM_GET_LEDPIN(x)        CP_LED_PIN[x]
 #define XTM_GET_LEDPIN_CFG(x,y)  CP_LED_PINS_CFG[x,y]
#else
  #define XTM_MEM_ALLOC_TYPE      PROGMEM
  #define XTM_GET_DIGIT(x)        pgm_read_byte( &XTM_DIGITS[x] )
  #define XTM_GET_LEDPIN(x)       pgm_read_byte( &CP_LED_PIN[x] )
  #define XTM_GET_LEDPIN_CFG(x,y) pgm_read_byte( &CP_LED_PINS_CFG[x,y] )
#endif


XTM_MEM_ALLOC_TYPE const uint8_t CP_LED_PINS[CP_MAX_PIN] = { 2, 3, 4, 5, 6, 7, 8 }; /* Digital PWM PINS only */

static bool    bLedDirSwap = false; 
                             //true;
XTM_MEM_ALLOC_TYPE const uint8_t CP_LED_PINS_CFG[CP_MAX_LED][CP_MAX_PIN] = 
{
  /* LED name:       ->      1          2           3          4           5          6          7            
                             |          |           |          |           |          |          |    
                                 +                                                                       Base: 1000000 */  
  /* 01. FIRST_SEG_0    */ { PIN_PLUS , PIN_MIN  ,  PIN_OFF ,  PIN_OFF   , PIN_OFF  , PIN_OFF ,  PIN_OFF }, /* 1100000 */
  /* 02. FIRST_SEG_2    */ { PIN_PLUS , PIN_OFF  ,  PIN_MIN ,  PIN_OFF   , PIN_OFF  , PIN_OFF ,  PIN_OFF }, /* 1010000 */
  /* 03. FIRST_SEG_4    */ { PIN_PLUS , PIN_OFF  ,  PIN_OFF ,  PIN_MIN   , PIN_OFF  , PIN_OFF ,  PIN_OFF }, /* 1001000 */
  /* 04. SD             */ { PIN_PLUS , PIN_OFF  ,  PIN_OFF ,  PIN_OFF   , PIN_MIN  , PIN_OFF ,  PIN_OFF }, /* 1000100 */
  /* 05. PLAY           */ { PIN_PLUS , PIN_OFF  ,  PIN_OFF ,  PIN_OFF   , PIN_OFF  , PIN_MIN ,  PIN_OFF }, /* 1010010 */

                                      /*   +    */                                                    /* Base: 0100000 */ 
  /* 06. FIRST_SEG_5    */ { PIN_MIN  , PIN_PLUS ,  PIN_OFF ,  PIN_OFF  , PIN_OFF  , PIN_OFF  ,  PIN_OFF }, /* 1100000 */
  /* 07. SECOND_SEG_0   */ { PIN_OFF  , PIN_PLUS ,  PIN_MIN ,  PIN_OFF  , PIN_OFF  , PIN_OFF  ,  PIN_OFF }, /* 0110000 */
  /* 08. SECOND_SEG_2   */ { PIN_OFF  , PIN_PLUS ,  PIN_OFF ,  PIN_MIN  , PIN_OFF  , PIN_OFF  ,  PIN_OFF }, /* 0101000 */
  /* 09. SECOND_SEG_4   */ { PIN_OFF  , PIN_PLUS ,  PIN_OFF ,  PIN_OFF  , PIN_MIN  , PIN_OFF  ,  PIN_OFF }, /* 0100100 */
  /* 10. SECOND_SEG_3   */ { PIN_OFF  , PIN_PLUS ,  PIN_OFF ,  PIN_OFF  , PIN_OFF  , PIN_MIN  ,  PIN_OFF }, /* 0100010 */

                                                  /*   +    */                                        /* Base: 0010000 */     
  /* 11. FIRST_SEG_6    */ { PIN_MIN  , PIN_OFF  ,  PIN_PLUS,  PIN_OFF  , PIN_OFF  , PIN_OFF  ,  PIN_OFF }, /* 1010000 */
  /* 12. SECOND_SEG_5   */ { PIN_OFF  , PIN_MIN  ,  PIN_PLUS,  PIN_OFF  , PIN_OFF  , PIN_OFF  ,  PIN_OFF }, /* 0110000 */
  /* 13. COLON :        */ { PIN_OFF  , PIN_OFF  ,  PIN_PLUS,  PIN_MIN  , PIN_OFF  , PIN_OFF  ,  PIN_OFF }, /* 0011000 */
  /* 14. THIRD_SEG_1    */ { PIN_OFF  , PIN_OFF  ,  PIN_PLUS,  PIN_OFF  , PIN_MIN  , PIN_OFF  ,  PIN_OFF }, /* 0010100 */
  /* 15. PAUSE          */ { PIN_OFF  , PIN_OFF  ,  PIN_PLUS,  PIN_OFF  , PIN_OFF  , PIN_MIN  ,  PIN_OFF }, /* 0010010 */
  /* 16. MP3            */ { PIN_OFF  , PIN_OFF  ,  PIN_PLUS,  PIN_OFF  , PIN_OFF  , PIN_OFF  ,  PIN_MIN }, /* 0010001 */

                                                              /*   +    */                           /* Base: 0001000 */
  /* 17. FIRST_SEG_2    */ { PIN_MIN  , PIN_OFF  ,  PIN_OFF ,  PIN_PLUS , PIN_OFF  , PIN_OFF  ,  PIN_OFF }, /* 1001000 */
  /* 18. SECOND_SEG_6   */ { PIN_OFF  , PIN_MIN  ,  PIN_OFF ,  PIN_PLUS , PIN_OFF  , PIN_OFF  ,  PIN_OFF }, /* 0101000 */
  /* 19. THIRD_SEG_5    */ { PIN_OFF  , PIN_OFF  ,  PIN_MIN ,  PIN_PLUS , PIN_OFF  , PIN_OFF  ,  PIN_OFF }, /* 0011000 */
  /* 20. THRID_SEG_2    */ { PIN_OFF  , PIN_OFF  ,  PIN_OFF ,  PIN_PLUS , PIN_MIN  , PIN_OFF  ,  PIN_OFF }, /* 0001100 */
  /* 21. FIFTH_SEG_4    */ { PIN_OFF  , PIN_OFF  ,  PIN_OFF ,  PIN_PLUS , PIN_OFF  , PIN_MIN  ,  PIN_OFF }, /* 0001010 */

                                                                         /*   +    */                 /* Base: 0000100 */   
  /* 22. FIRST_SEG_3    */ { PIN_MIN  , PIN_OFF  ,  PIN_OFF ,  PIN_OFF  , PIN_PLUS , PIN_OFF  ,  PIN_OFF }, /* 1000100 */
  /* 23. SECOND_SEG_2   */ { PIN_OFF  , PIN_MIN  ,  PIN_OFF ,  PIN_OFF  , PIN_PLUS , PIN_OFF  ,  PIN_OFF }, /* 0100100 */
  /* 24. THIRD_SEG_6    */ { PIN_OFF  , PIN_OFF  ,  PIN_MIN ,  PIN_OFF  , PIN_PLUS , PIN_OFF  ,  PIN_OFF }, /* 0010100 */
  /* 25. THIRD_SEG_0    */ { PIN_OFF  , PIN_OFF  ,  PIN_OFF ,  PIN_MIN  , PIN_PLUS , PIN_OFF  ,  PIN_OFF }, /* 0001100 */
  /* 26. FIFTH_SEG_2    */ { PIN_OFF  , PIN_OFF  ,  PIN_OFF ,  PIN_OFF  , PIN_PLUS , PIN_MIN  ,  PIN_OFF }, /* 0000110 */
  /* 27. FIFTH_SEG_6    */ { PIN_OFF  , PIN_OFF  ,  PIN_OFF ,  PIN_OFF  , PIN_PLUS , PIN_OFF  ,  PIN_MIN }, /* 0000101 */

                                                                                   /*   +    */       /* Base: 0000010 */
  /* 28. THIRD_SEG_3    */ { PIN_MIN  , PIN_OFF  ,  PIN_OFF ,  PIN_OFF  , PIN_OFF  , PIN_PLUS ,  PIN_OFF }, /* 1000010 */
  /* 29. USB            */ { PIN_OFF  , PIN_MIN  ,  PIN_OFF ,  PIN_OFF  , PIN_OFF  , PIN_PLUS ,  PIN_OFF }, /* 0100010 */
  /* 30. THIRD_SEG_4    */ { PIN_OFF  , PIN_OFF  ,  PIN_MIN ,  PIN_OFF  , PIN_OFF  , PIN_PLUS ,  PIN_OFF }, /* 0010010 */
  /* 31. FIFTH_SEG_3    */ { PIN_OFF  , PIN_OFF  ,  PIN_OFF ,  PIN_MIN  , PIN_OFF  , PIN_PLUS ,  PIN_OFF }, /* 0001010 */
  /* 32. FIFTH_SEG_5    */ { PIN_OFF  , PIN_OFF  ,  PIN_OFF ,  PIN_OFF  , PIN_MIN  , PIN_PLUS ,  PIN_OFF }, /* 0000110 */
  /* 33. FIFTH_SEG_1    */ { PIN_OFF  , PIN_OFF  ,  PIN_OFF ,  PIN_OFF  , PIN_OFF  , PIN_PLUS ,  PIN_MIN }, /* 0000011 */

                                                                                               /*   +    Base: 0000001 */
  /* 34. FM             */ { PIN_OFF  , PIN_OFF  ,  PIN_MIN ,  PIN_OFF  , PIN_OFF  , PIN_OFF  ,  PIN_PLUS },/* 0010001 */
  /* 35. FIFTH_SEG_0    */ { PIN_OFF  , PIN_OFF  ,  PIN_OFF ,  PIN_OFF  , PIN_OFF  , PIN_MIN  ,  PIN_PLUS } /* 0000011 */
};

#define XTM_CHAR_ERR            0x49

 // Special characters
#define XTM_MINUS               0x40
#define XTM_PLUS                0x44
#define XTM_BLANK               0x00
#define XTM_DEGREES             0x63
#define XTM_UNDERSCORE          0x08
#define XTM_EQUALS              0x48
#define XTM_LEFT                0x70
#define XTM_RIGHT               0x46
#define XTM_BRACKET_LEFT        0x39
#define XTM_BRACKET_RIGHT       0x0F
#define XTM_GREATER_LEFT        0x46
#define XTM_GREATER_RIGHT       0x70
#define XTM_ACCOLADE_LEFT       XTM_GREATER_LEFT
#define XTM_ACCOLADE_RIGHT      XTM_GREATER_RIGHT
#define XTM_COLON               0x09
#define XTM_PARENTHESIS_LEFT    XTM_BRACKET_LEFT
#define XTM_PARENTHESIS_RIGHT   XTM_BRACKET_RIGHT
#define XTM_QUESTION_MARK       0x53+0x80

#define XTM_SPECIAL_CHAR_OFFSET 0x24


 // Font table:
XTM_MEM_ALLOC_TYPE const uint8_t XTM_DIGITS[] =
{
//  Numbers
//     0     1     2     3     4     5     6     7     8     9
    0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,            //(10)

//  Hex
//     A     B     C     D     E     F
    0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71,                                    //(06)

//  Letters ( * = same as H )
//     G     H     I     J    *K     L     M     n     O     P     Q     r
    0x3D, 0x76, 0x06, 0x1F, 0x76, 0x38, 0x15, 0x54, 0x3F, 0x73, 0x67, 0x50,//(12)

//     S     t     U      V    W    *X     Y     Z
    0x6D, 0x78, 0x1C,  0x3E, 0x2A, 0x76, 0x6E, 0x5B,                        //(08)

// Special chars, offset = 0x24 (36)
   (uint8_t)'-', XTM_MINUS,
   (uint8_t)'+', XTM_PLUS,
   (uint8_t)' ', XTM_BLANK,
   (uint8_t)'^', XTM_DEGREES,
   (uint8_t)'_', XTM_UNDERSCORE,
   (uint8_t)'=', XTM_EQUALS,
   (uint8_t)'[', XTM_BRACKET_LEFT,
   (uint8_t)']', XTM_BRACKET_RIGHT,
   (uint8_t)'<', XTM_GREATER_LEFT,
   (uint8_t)'>', XTM_GREATER_RIGHT,
   (uint8_t)'{', XTM_ACCOLADE_LEFT,
   (uint8_t)'}', XTM_ACCOLADE_RIGHT,
   (uint8_t)':', XTM_COLON,
   (uint8_t)'(', XTM_PARENTHESIS_LEFT,
   (uint8_t)')', XTM_PARENTHESIS_RIGHT,
   (uint8_t)'?', XTM_QUESTION_MARK,
   0x00
};



void __setCharlieLed( uint8_t iLed )
{
  bool bOffDisable = ( iLed == SCP_LEDS_OFF_DISABLED );
  if( !bOffDisable && iLed >= CP_CNT_LED )
   { return; }   

  uint8_t iPin = CP_CNT_PIN;
  while( iPin-- )
  {
     if( bOffDisable || CP_LED_PINS_CFG[iLed][iPin] == PIN_OFF )
      {  
         digitalWrite( CP_LED_PINS[iPin], PIN_LOW ); 
         //pinMode( CP_LED_PINS[iPin], INPUT_PULLUP );
         pinMode( CP_LED_PINS[iPin], INPUT );
         //analogWrite( CP_LED_PINS[iPin], HIGH ); 
      }
     else {
            pinMode( CP_LED_PINS[iPin], OUTPUT );
            digitalWrite( CP_LED_PINS[iPin], (CP_LED_PINS_CFG[iLed][iPin] == PIN_PLUS)?PIN_HIGH:PIN_LOW );
          }
  }
}

void setCharlieLed( uint8_t iLed, bool bDirSwap = false )
{
  if( bDirSwap )
   { bDirSwap=!bLedDirSwap; }
  else { bDirSwap = bLedDirSwap; }  
  __setCharlieLed( bDirSwap?CP_CNT_LED-1-iLed:iLed ); 
}

void setAllLedsOffDisabled()
{
  __setCharlieLed( SCP_LEDS_OFF_DISABLED ); 
}

void setAllLedsOnEnabled() // this might not be working with all kind of leds
{
  uint8_t iPin = CP_CNT_PIN;
  while( iPin-- )
   { __setCharlieLed( iPin ); } 
}

void setLedEnabled( int iLed = SCP_LEDS_SHOW_ENABLED, bool bEnable = true, bool bReverse = false ) // must be called in a loop sequence to be functional
{
   static bool    aleEnabledLeds[CP_CNT_LED]; 
   static bool    bleInitLedArray = true;
   static uint8_t ileCurrentLed   = 0; 
   static uint8_t ileEnabledLeds  = 0;

    // To be sure memory locations are init with false or init with false when reset requested (< -1)
   if( bleInitLedArray || iLed <= SCP_LEDS_RESET )
   {
     bleInitLedArray = false;
     uint8_t i = CP_CNT_LED;
     while( i-- )
      { aleEnabledLeds[i] = false; }

     ileEnabledLeds = 0;
   }

  if( iLed >= 0 && iLed < CP_CNT_LED && aleEnabledLeds[iLed] != bEnable )
  { 
     aleEnabledLeds[iLed] = bEnable; 
     ileEnabledLeds+=bEnable?1:-1;

     //if( bEnable )
     // { ileCurrentLed = iLed; }
  }

  if( ileEnabledLeds > 0 || bReverse )
  {
   if( (!bReverse && aleEnabledLeds[ileCurrentLed]) || (bReverse && !aleEnabledLeds[ileCurrentLed]) )
    { setCharlieLed( ileCurrentLed ); }

    ++ileCurrentLed;
    if( ileCurrentLed >= CP_CNT_LED )
     { ileCurrentLed = 0; }
  } 
  else { setAllLedsOffDisabled(); }
}

void showCharlieLedsEnabled( bool bReverse = false )
{ setLedEnabled( SCP_LEDS_SHOW_ENABLED, false, bReverse ); }

void resetCharlieLedsEnabled()
{ setLedEnabled( SCP_LEDS_RESET ); }


void set1MhzClockSpeed()
{
 noInterrupts();
 CLKPR = 1 << CLKPCE;
 CLKPR = 0b00000100; // prescaler 16
}

void setup() 
{
  //set1MhzClockSpeed();
}

void loop() 
{
   static uint8_t i = 0;
   //static TTimer  tprgTimer = TTimer( 1000, (bool)true, (bool)false );  
   //if( tprgTimer.isTime() )
   { 
     setLedEnabled( i );
     ++i; 
     if( i >= CP_CNT_LED )
      { 
        i = 0; 
        //setAllLedsOffDisabled();
      }
   }

}

Aviso:

  • El código anterior es solo un ejemplo rápido (necesita algo de trabajo), solo para descubrir cómo se muestra la pantalla. trabajos. La tabla sin embargo, explica cómo está organizada la pantalla pero No es la forma más eficiente de hacerlo, aunque aún se puede utilizar.
  • No entiendo la forma en que está organizado, es un poco desordenado cuando miras el orden o la ubicación de los "grupos".
  • Puede mostrar los LED al mismo tiempo cuando están en el mismo 'grupo', pero hace que su administración sea más compleja y requiere más energía. El módulo de sonido barato de China tampoco lo hace, muestra segmentos individuales uno por uno y funciona a una frecuencia de actualización más baja en comparación con el Nano (muévalo para ver la diferencia entre ambos).
  • En el ejemplo anterior hay una tabla de fuentes, una misión que quiero hacer, que no funciona en este ejemplo. PROGMEM también necesita algo de trabajo.
  • No utilicé resistencias porque está completamente carenado y solo un led a la vez está encendido en un ciclo. No esperes problemas con esto.

Lo siguiente que debe hacer / averiguar:

Como expliqué en la pregunta anterior, quiero comunicarme con el módulo leyendo la pantalla. Creo que es posible saber cómo funciona la pantalla. Quizás necesite más trabajo para lograrlo, pero no parece imposible.

Por ahora, califico esta publicación como una respuesta.

    
respondido por el Codebeat

Lea otras preguntas en las etiquetas