Use CFA635TMLKU33 with ATX functionality without ATX

Technaton

New member
Dear forum members,

last July I bought a CFA 635 with ATX functionality enabled (KCFA635TMLKU33). Due to various… er, f***ups in the design, the ATX connector could not be used. So I figured I could simply supply +5V from an external source to the VSB of the display, so the ATX connector of the LCD is nothing more than a stable voltage supply, connecting VSB and GND.

But that only works halfway. The display is recognized by the host's USB subsystem (Linux). LCDproc also starts, but the display does not display anything. Pressing the green check mark button displays "POWER ON," after which the display briefly shows a software/demo screen (too short to read), and then turns dark again. My guess is that it expects the host to power up (POWER), but that wire is not connect (only VSB and GND are).

Is there any way I can "dummy" the ATX part? I'd actually like to keep the option open to actually use it… I just don't have the time right now to disassemble my case *again*. :)

Thanks a lot in advance for any hints.

Best,
Eric
Looking for additional LCD resources? Check out our LCD blog for the latest developments in LCD technology.
 
USB LCD Displays - Graphic and Character LCDs with a Keypad

Technaton

New member
Hey, thanks for the quick response! That was indeed it. In case somebody else has the same problem, here's the code I used (a quick adoption of the Linux example code—thanks for its existence!):

C:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include "typedefs.h"
#include "serial.h"
#include "cf_packet.h"
#include "show_packet.h"


//automatically detects polarity for reset and power (default)
#define AUTO_POLARITY 0x01
//reset pin drives high instead of low (ignored if auto polarity is set)
#define RESET_INVERT 0x02
//power pin drives high instead of low (ignored if auto polarity is set)
#define POWER_INVERT 0x04
//lcd will be blanked, and LCD/keypad backlights turned off if
//power sense is low (host is off)
#define LCD_OFF_IF_HOST_IS_OFF 0x10
//enabled keypad reset function
#define KEYPAD_RESET 0x20
//enable keypad power on function
#define KEYPAD_POWER_ON 0x40
//enable keypad power off function
#define KEYPAD_POWER_OFF 0x80


//============================================================================
int main(int argc, char* argv[])
  {
  printf("CFA 635: Disable LCD_OFF_IF_HOST_IS_OFF\n");
  printf("Crystalfontz America, Inc. http://www.crystalfontz.com\n\n");
  printf("Usage:\n");
  printf("%s PORT BAUD\n",argv[0]);
  printf("PORT is something like \"/dev/ttyS0\" or \"/dev/usb/ttyUSB0\"\n");
  printf("BAUD is 19200 or 115200\n");


  //If only 0 or 1 parameter is entered, prompt for the missing parameter(s)
  if(argc < 3)
    {
      printf("\nMISSING A PARAMETER. Enter both PORT and BAUD.\n\n");
      return(0);
    }

  int baud;

  //default the baud to 115200
  if(strcmp(argv[2],"19200"))
    baud=115200;
  else
    baud=19200;

  if(Serial_Init(argv[1],baud))
    {
    printf("Could not open port \"%s\" at \"%d\" baud.\n",argv[1],baud);
    return(1);
    }
  else
    printf("\"%s\" opened at \"%d\" baud.\n\n",argv[1],baud);

  //For some reason, Linux seems to buffer up data from the LCD, and they are sometimes
  //dumped at the start of the program. Clear the serial buffer.
  while(BytesAvail()) {
      GetByte();
  }

    // Configure ATX using command 28 (0x1C):
    outgoing_response.command = 28;
    outgoing_response.data[0] = AUTO_POLARITY;
    outgoing_response.data[1] = 2;
    outgoing_response.data[2] = 1;
    outgoing_response.data_length = 2;  //the col & row position + the 20 char data length
    send_packet();

        //CFA-635 communications protocol only allows
        //one outstanding packet at a time. Wait for the response
        //packet from the CFA-635 before sending another
        //packet.
        int
        k;
        int
        timed_out;
        timed_out = 1; //default timed_out is true
        for(k=0;k<=10000;k++)
        if(check_for_packet())
            {
            ShowReceivedPacket();
            timed_out = 0; //set timed_out to false
            break;
            }
        if(timed_out)
        printf("Timed out waiting for a response.\n");
//**********************************************

  printf("Done.\n\n");
  Uninit_Serial();
  return 0;
  }
//==================================
 
Top