Jump to content
43oh

LaunchPad HD44780 LCD USB PC interface


Recommended Posts

  • Replies 33
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

Your post looks too spamy for a new user. I can't post.   The above restrictions only apply to new users. We are constantly tweaking the definition of a new user to stop spam while not annoying re

Software is crap .It is just proof of concept. So if you like my project , improve it. Lcdsmartie plugin could receive COM port in DISPLAYDLL_Init (now is hard coded at COM13) Plugin could wait

Taking this posts inspiration, I have cleaned up the code a bit and submit the code as suggestion   changes:   - made the lcd functions more "library" based with lower level helper functions - mo

Posted Images

Is it possible to display custom chars with LCD smartie?

 

Yes.. see here.

Further I made it posible to change the custom characters. this works by using $CustomChar(1,31,31,31,31,31,31,31,31)

in this example we change customchar 1 (first number). there are 8 custom chars, so you can use 1 to 8.

Link to post
Share on other sites
  • 3 weeks later...
  • 3 weeks later...

Hello All. I'm having a little trouble getting my lcd to work. It flashed on as i scrambled through the example, but i lost it. Can somebody explain the sequence please. I wired it up, compiled and flashed the c code. I have the nice "hello" but i cannot seem to interface with the software. Following the smartie directions it needs port95nt.dll. Is this what I should be doing?

 

Thanks. KB

Link to post
Share on other sites

Hi bluehash. No, I am using Vista32. I have heard about these problems. I think I am missing something mundane, as I mentioned I saw the smartie data broadcast for a brief moment.... Please advise the steps you guys took.

 

Thanks. KB

Link to post
Share on other sites

I will try it on my laptop if i cant get it to work after one more try.

 

What is confusing me is the lack of direction in the post. Using the smartie directions, it calls for the http://lcdsmartie.sourceforge.net/port95nt.exe driver. In the setup, i set the correct LCD, but dont know which driver to choose on the list, or which settings to use. 9600,n,1 is what i understand the LP likes. I understand the code utilizes the USB port, and I am assuming the LP should be in run mode, so it is waiting for data from the USB connection. Does this sound logical?

Link to post
Share on other sites
What is confusing me is the lack of direction in the post.

They Guy who made it provided it as proof of concept with no guarantee. He mentions it. :)

 

In the setup, i set the correct LCD, but dont know which driver to choose on the list,

Did you compile the VS2005 project? Once you build it, it will give you a plugin.dll file. Put that in your LCDSmartie /displays directory. See attachment(rename to .dll).

In the LCDSmartie Screen tab, browse down to the plugin.dll

 

or which settings to use. 9600,n,1

This is correct according to the code in LCDS_Plugin.cpp

plugin.zip

Link to post
Share on other sites

Your post looks too spamy for a new user.

I can't post. :(

 

The above restrictions only apply to new users. We are constantly tweaking the definition of a new user to stop spam while not annoying real people. These restrictions currently apply to users who:

*Have less than 1 post - now I have 3 post.

*Registered in the last 24 hours - I'm not registered in the last 24 hours.

The restrictions are automatically removed once an account meets these criteria.

 

And I'm not spam bot.

Now I'm happy. I can post again ;)

 

 

I want to apologize for leaving project unfinished. And I want to tank bluehash for its support on this project.

 

This LaunchPad HD44780 LCD USB PC interface is composed of 4 parts. Hardware, MSP430 firmware, LCDSmartie software and driver for software.

 

Hardware. I've struggle to find software that is intuitive to use, to make schemes. So I'll use ASCII.

 

LaunchPad                                    LCD


TP 1  Outputs 5V from USB -   Pin 2 and Pin15 5V Vcc

Vcc- nc
P1.0 - 				           Pin 4 RS
P1.1 - PC UART interface
P1.2 - PC UART interface
P1.3 - 				           Pin 6 Enable
P1.4 - 				           Pin 11 DB4 
P1.5 - 				           Pin 12 DB5
P1.6 - 				           Pin 13 DB6
P1.7 - 				           Pin 14 DB7
GND -				             Pin 5 R/W, Pin 1 and Pin 16 GND
			                  Pin 3 Resistor* 1800 ohm to GND 

 

In my LCD display there is 100 ohm resistor in series with white LED, so I can safety connect Pin 15 to

5V VCC and Pin 14 to GND.

*On Pin 3 should be potentiometer 100k ohm to GND, but the exact value needed for my display is 1800 ohm (It's value depends of supply voltage, ambient temperature and manufacture ot LCD).

 

MSP430 firmware

There is a lot of room for improvment here ;)

Use TI Code Composer Studio v4 Core Edition to compile.

 

 

LCDSmartie software can be downloaded for free from here: http://lcdsmartie.sourceforge.net/

 

Driver.

There is a lot of room for improvment here also.

Use M$ Microsoft Visual Studio 2005 to compile.

 

Steps to make LaunchPad HD44780 LCD USB PC interface work.

1. Assemble hardware. Use inferior MCU MSP430G2211 that comes with LaunchPad

2. Compile msp430g2211.c with TI Code Composer Studio v4 - at this point you should see "Hello" on LCD display

3. Download and unzip LCDSmartie.

4. Compile LCDS_Plugin.cpp and LCDS_Plugin.H with Use M$ Microsoft Visual Studio 2005, save

plugin.dll to \lcd_smartie_v5.4\displays\ directory.

5. Connect LaunchPad with PC and go to: Computer Management->System Tools->Device Manager->

Ports(COM & LPT)->MSP430 Aplication UART (COMx) and note COM port. It shoud be like COM5 or COM13.

6. Setup LCDSmartie.

Screens-> Display settings->Screen->LCD size 2x16

Screens-> Display settings->Plugin->Display Plugin: plugin.dll

Screens-> Display settings->Plugin->Startup Parameters: \\.\COM5

or if your MSP430 Aplication UART is at COM13

Screens-> Display settings->Plugin->Startup Parameters: \\.\COM13

Screens->Screens settings

On first line: http://www.43oh.com RSS

On second line: $Rss(http://feeds.feedburner.com/Four-three-oh?format=xml,b)

 

Here is new version of driver LCDS_Plugin.cpp, it now accept different COM port setings.

One again sorry for my lack of coding experience. I do it in my spare time as a hoby. And I really hate to write long posts.

This is open source project so feel free to improve it and make it beter.

If you have questions don't hesitate to ask, I'm sure that bluehash will be happy ot answer it ;)

 

 

#include "msp430g2211.h"
#include "stdint.h"

//------------------------------------------------------------------------------
// Hardware-related definitions
//------------------------------------------------------------------------------
#define UART_TXD   0x02                     // TXD on P1.1 (Timer0_A.OUT0)
#define UART_RXD   0x04                     // RXD on P1.2 (Timer0_A.CCI1A)

//------------------------------------------------------------------------------
// Conditions for 9600 Baud SW UART, SMCLK = 1MHz
//------------------------------------------------------------------------------
#define UART_TBIT_DIV_2     (1000000 / (9600 * 2))
#define UART_TBIT           (1000000 / 9600)

//------------------------------------------------------------------------------
// Global variables used for full-duplex UART communication
//------------------------------------------------------------------------------
unsigned int txData;                        // UART internal variable for TX
unsigned char rxBuffer;                     // Received UART character
uint16_t CommandFlag;
#define MAGIC 0x0f


//------------------------------------------------------------------------------
//LCD
//------------------------------------------------------------------------------
#define LCD_MODE_BIT 0x01	//BIT0
#define LCD_ENABLE_BIT 0x08	//BIT3

#define LCD_CMD_MASK 0x09
#define LCD_DATA_MASK 0xf0
#define LCD_PORT_OUT P1OUT
#define LCD_PORT_DIR P1DIR



int putchar( uint16_t in )
{
LCD_PORT_OUT= ( in & 0xf0 ) | LCD_MODE_BIT;
LCD_PORT_OUT|= LCD_ENABLE_BIT;
__no_operation();
LCD_PORT_OUT&= ~LCD_ENABLE_BIT;
//
LCD_PORT_OUT= ( ( in << 4 ) & 0xf0 ) | LCD_MODE_BIT;
LCD_PORT_OUT|= LCD_ENABLE_BIT;
__no_operation();
LCD_PORT_OUT&= ~LCD_ENABLE_BIT;
__no_operation();
//LCD_PORT_OUT= 0;
__delay_cycles( 200 );
return (0);
}

void lcd_command( uint16_t cmd )
{
LCD_PORT_OUT= ( cmd & 0xf0 );
LCD_PORT_OUT|= LCD_ENABLE_BIT;
__no_operation();
LCD_PORT_OUT&= ~LCD_ENABLE_BIT;
//
LCD_PORT_OUT= ( ( cmd << 4 ) & 0xf0 );
LCD_PORT_OUT|= LCD_ENABLE_BIT;
__no_operation();
LCD_PORT_OUT&= ~LCD_ENABLE_BIT;
__no_operation();
//LCD_PORT_OUT= 0;
__delay_cycles( 3000 );
}



//------------------------------------------------------------------------------
// Function prototypes
//------------------------------------------------------------------------------
void TimerA_UART_init(void);
void TimerA_UART_tx(unsigned char byte);
void TimerA_UART_print(char *string);

//------------------------------------------------------------------------------
// main()
//------------------------------------------------------------------------------
void main(void)
{
   WDTCTL = WDTPW + WDTHOLD;               // Stop watchdog timer

   DCOCTL = 0x00;                          // Set DCOCLK to 1MHz
   BCSCTL1 = CALBC1_1MHZ;
   DCOCTL = CALDCO_1MHZ;

   //P1OUT = 0x00;                           // Initialize all GPIO
   P1SEL = UART_TXD + UART_RXD;            // Timer function for TXD/RXD pins
   P1DIR = 0xFF & ~UART_RXD;               // Set all pins but RXD to output
   //P2OUT = 0x00;
   //P2SEL = 0x00;
   //P2DIR = 0xFF;

//lcd
//LCD_PORT_OUT= 0;
LCD_PORT_DIR|= LCD_DATA_MASK | LCD_CMD_MASK;

//don't assume VCC+ > 20ms away
__delay_cycles(1000000);
//first init
LCD_PORT_OUT= 0x30;
LCD_PORT_OUT|= LCD_ENABLE_BIT;
__no_operation();
LCD_PORT_OUT&= ~LCD_ENABLE_BIT;
//pause should be set by mclk div, > 4.1ms
__delay_cycles( 15000 );

//second init
LCD_PORT_OUT|= LCD_ENABLE_BIT;
__no_operation();
LCD_PORT_OUT&= ~LCD_ENABLE_BIT;
//pause should be set by mclk div, > 100us
__delay_cycles( 500 );

//four bit mode
LCD_PORT_OUT= 0x20;
LCD_PORT_OUT|= LCD_ENABLE_BIT;
__no_operation();
LCD_PORT_OUT&= ~LCD_ENABLE_BIT;
__delay_cycles( 1000 );

//from here 'lcd_command can be used
//operational mode 5x8 1/16 duty( two lines )
lcd_command( 0x28 );
__delay_cycles( 1000 );

//display off
lcd_command( 0x08 );
__delay_cycles( 1000 );

//display on, no cursor, no blink...
lcd_command( 0x0c );
__delay_cycles( 1000 );
//LCD_PORT_OUT= 0;

 putchar ('H');
 putchar ('e');
 putchar ('l');
 putchar ('l');
 putchar ('o');

   __enable_interrupt();

   TimerA_UART_init();                     // Start Timer_A UART
   TimerA_UART_print("G2xx1 TimerA UART\r\n");
   TimerA_UART_print("READY.\r\n");
   //for (;;)TimerA_UART_print("12345678901234567890123456789012345678901234567890123456789012345678901234567890");

   for (;
   {
       // Wait for incoming character
       __bis_SR_register(LPM0_bits);

       if(rxBuffer!=MAGIC){
       	if(CommandFlag!=1){putchar(rxBuffer);}
       	else{CommandFlag=0;lcd_command(rxBuffer);}
       	}
       else{
       	CommandFlag=1;}

       // Update board outputs according to received byte
//        if (rxBuffer & 0x01) P1OUT |= 0x01; else P1OUT &= ~0x01;    // P1.0
//        if (rxBuffer & 0x02) P1OUT |= 0x08; else P1OUT &= ~0x08;    // P1.3
//        if (rxBuffer & 0x04) P1OUT |= 0x10; else P1OUT &= ~0x10;    // P1.4
//        if (rxBuffer & 0x08) P1OUT |= 0x20; else P1OUT &= ~0x20;    // P1.5
//        if (rxBuffer & 0x10) P1OUT |= 0x40; else P1OUT &= ~0x40;    // P1.6
//        if (rxBuffer & 0x20) P1OUT |= 0x80; else P1OUT &= ~0x80;    // P1.7
//        if (rxBuffer & 0x40) P2OUT |= 0x40; else P2OUT &= ~0x40;    // P2.6
//        if (rxBuffer & 0x80) P2OUT |= 0x80; else P2OUT &= ~0x80;    // P2.7

       // Echo received character
       //TimerA_UART_tx(rxBuffer);
   }
}
//------------------------------------------------------------------------------
// Function configures Timer_A for full-duplex UART operation
//------------------------------------------------------------------------------
void TimerA_UART_init(void)
{
   TACCTL0 = OUT;                          // Set TXD Idle as Mark = '1'
   TACCTL1 = SCS + CM1 + CAP + CCIE;       // Sync, Neg Edge, Capture, Int
   TACTL = TASSEL_2 + MC_2;                // SMCLK, start in continuous mode
}
//------------------------------------------------------------------------------
// Outputs one byte using the Timer_A UART
//------------------------------------------------------------------------------
void TimerA_UART_tx(unsigned char byte)
{
   while (TACCTL0 & CCIE);                 // Ensure last char got TX'd
   TACCR0 = TAR;                           // Current state of TA counter
   TACCR0 += UART_TBIT;                    // One bit time till first bit
   TACCTL0 = OUTMOD0 + CCIE;               // Set TXD on EQU0, Int
   txData = byte;                          // Load global variable
   txData |= 0x100;                        // Add mark stop bit to TXData
   txData <<= 1;                           // Add space start bit
}

//------------------------------------------------------------------------------
// Prints a string over using the Timer_A UART
//------------------------------------------------------------------------------
void TimerA_UART_print(char *string)
{
   while (*string) {
       TimerA_UART_tx(*string++);
   }
}
//------------------------------------------------------------------------------
// Timer_A UART - Transmit Interrupt Handler
//------------------------------------------------------------------------------
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A0_ISR(void)
{
   static unsigned char txBitCnt = 10;

   TACCR0 += UART_TBIT;                    // Add Offset to CCRx
   if (txBitCnt == 0) {                    // All bits TXed?
       TACCTL0 &= ~CCIE;                   // All bits TXed, disable interrupt
       txBitCnt = 10;                      // Re-load bit counter
   }
   else {
       if (txData & 0x01) {
         TACCTL0 &= ~OUTMOD2;              // TX Mark '1'
       }
       else {
         TACCTL0 |= OUTMOD2;               // TX Space '0'
       }
       txData >>= 1;
       txBitCnt--;
   }
}      
//------------------------------------------------------------------------------
// Timer_A UART - Receive Interrupt Handler
//------------------------------------------------------------------------------
#pragma vector = TIMERA1_VECTOR
__interrupt void Timer_A1_ISR(void)
{
   static unsigned char rxBitCnt = 8;
   static unsigned char rxData = 0;

   switch (__even_in_range(TAIV, TAIV_TAIFG)) { // Use calculated branching
       case TAIV_TACCR1:                        // TACCR1 CCIFG - UART RX
           TACCR1 += UART_TBIT;                 // Add Offset to CCRx
           if (TACCTL1 & CAP) {                 // Capture mode = start bit edge
               TACCTL1 &= ~CAP;                 // Switch capture to compare mode
               TACCR1 += UART_TBIT_DIV_2;       // Point CCRx to middle of D0
           }
           else {
               rxData >>= 1;
               if (TACCTL1 & SCCI) {            // Get bit waiting in receive latch
                   rxData |= 0x80;
               }
               rxBitCnt--;
               if (rxBitCnt == 0) {             // All bits RXed?
                   rxBuffer = rxData;           // Store in global variable
                   rxBitCnt = 8;                // Re-load bit counter
                   TACCTL1 |= CAP;              // Switch compare to capture mode
                   __bic_SR_register_on_exit(LPM0_bits);  // Clear LPM0 bits from 0(SR)
               }
           }
           break;
   }
}
//------------------------------------------------------------------------------

#include 
#include "LCDS_Plugin.H"
#define WIN32_LEAN_AND_MEAN
#include "windows.h"
#include "stdio.h"
//#include "init.h"

#define MAGIC 0xF
//#define ComPort "\\\\.\\COM13"
HANDLE hSerial;





int		error_handler(char* reason, char* file, int line){
	printf("\n%s\nIn %s at line:%d\n",reason,file,line);
	return -1;
}
void	init(void){}


//int	init_serial_port(void){
//hSerial = CreateFile(ComPort, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
//	if (hSerial==INVALID_HANDLE_VALUE){ return error_handler("CreateFile INVALID_HANDLE_VALUE",__FILE__,__LINE__);}
//	//Comm settings
//	DCB serialInfo = {0};
//	if (!GetCommState(hSerial,&serialInfo)){ return error_handler("GetCommState",__FILE__,__LINE__);} 
//	serialInfo.DCBlength=sizeof(serialInfo);
//	serialInfo.BaudRate=CBR_9600;
//	//serialInfo.fBinary=TRUE;
//	serialInfo.Parity=NOPARITY;
//	//serialInfo.fOutxCtsFlow=FALSE;
//	//serialInfo.fOutxDsrFlow=FALSE;
//	//serialInfo.fDtrControl=DTR_CONTROL_DISABLE;
//	//serialInfo.fDsrSensitivity=FALSE;
//	//serialInfo.fOutX=FALSE;
//	//serialInfo.fInX=FALSE;
//	//serialInfo.fRtsControl=RTS_CONTROL_DISABLE;
//	//serialInfo.fAbortonerror=TRUE;
//	serialInfo.ByteSize=8;
//	serialInfo.StopBits=ONESTOPBIT;
//	SetCommState(hSerial, &serialInfo);
//	return 1;
//}

int		sendLCD(char* ch){
DWORD byteSent = 0;
while(byteSent != 1)  //did we send every thing to the serial port?
       {
           //send to the serial port
           WriteFile(hSerial,ch,1,&byteSent,NULL);
		printf(".");
       }

//Pause until break
Sleep(5);
return 1;
}

















// +-----------------+
// ! DISPLAYDLL_Init !
// +-----------------+
//! Initializes the plugin.
//! All initialization stuff goes there: opening and configuring IO ports, device detection and probing...
//! Sets ok to 1 if initialization is successful, 0 otherwise.
//! Returns an error message in case of failure, NULL otherwise.
DLL_EXPORT(char *) DISPLAYDLL_Init(LCDS_BYTE size_x,LCDS_BYTE size_y,char *startup_parameters,LCDS_BOOL *ok) {
init();
//if (init_serial_port()!=1){*ok=0; error_handler("init_serial_port error",__FILE__,__LINE__);} ;


hSerial = CreateFile(startup_parameters, GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_WRITE_THROUGH, 0);
if (hSerial==INVALID_HANDLE_VALUE)
{ 
	*ok=0;return NULL;
}
//Comm settings
DCB serialInfo = {0};
if (!GetCommState(hSerial,&serialInfo)){ *ok=0;return NULL;} 
serialInfo.DCBlength=sizeof(serialInfo);
serialInfo.BaudRate=CBR_9600;
//serialInfo.fBinary=TRUE;
serialInfo.Parity=NOPARITY;
//serialInfo.fOutxCtsFlow=FALSE;
//serialInfo.fOutxDsrFlow=FALSE;
//serialInfo.fDtrControl=DTR_CONTROL_DISABLE;
//serialInfo.fDsrSensitivity=FALSE;
//serialInfo.fOutX=FALSE;
//serialInfo.fInX=FALSE;
//serialInfo.fRtsControl=RTS_CONTROL_DISABLE;
//serialInfo.fAbortonerror=TRUE;
serialInfo.ByteSize=8;
serialInfo.StopBits=ONESTOPBIT;
SetCommState(hSerial, &serialInfo);


//ininLCD();
//	char i;
char ch;
//	while(true)
//	{	
//	sendLCD(&i);
//	i++;
//printf("LOOP");
//	}

//ch=15;
//sendLCD(&ch);
//ch=1;
//sendLCD(&ch);


ch=15;
sendLCD(&ch);
ch=(unsigned char)1;
sendLCD(&ch);
//i=0;
//while(i<16)
//{
//	ch=0+i;
//	sendLCD(&ch);
//	i++;
//}
 *ok=1;
 return NULL;
}

// +-----------------------+
// ! DISPLAYDLL_DriverName !
// +-----------------------+
//! Returns the driver name.
//! The driver name is used by the driver selection GUI to identify the driver.
//! It's good practice to return a proper name and version for the driver so that
//! it can be clearly identified (or else we would have to rely on the plugin name
//! which is subject to modifications).
DLL_EXPORT(char *) DISPLAYDLL_DriverName(void) {
 static char plugin_name[]="my_plugin";
 return plugin_name;
}

// +------------------+
// ! DISPLAYDLL_Usage !
// +------------------+
//! Returns plugin usage hints.
//! The usage text describes the main plugin parameters and how they are assembled
//! in the parameter string (syntax indications).
DLL_EXPORT(char *) DISPLAYDLL_Usage(void) {
 static char plugin_usage[]="my_plugin usage";
 return plugin_usage;
}

// +------------------------------+
// ! DISPLAYDLL_DefaultParameters !
// +------------------------------+
//! Returns the plugin default parameters.
//! The default parameters string is used as parameter string after the driver
//! has been initialized.
DLL_EXPORT(char *) DISPLAYDLL_DefaultParameters(void) {
 static char plugin_default_parameters[]="default";
 return plugin_default_parameters;
}

// +------------------------+
// ! DISPLAYDLL_SetPosition !
// +------------------------+
//! Moves the display cursor at a given position.
DLL_EXPORT(void) DISPLAYDLL_SetPosition(LCDS_BYTE x,LCDS_BYTE y) {
char ch;
ch=15;
sendLCD(&ch);
if (y==1){
	ch=(unsigned char)127;}
else{ch=(unsigned char)191;}
ch+=x;
sendLCD(&ch);
}

// +------------------+
// ! DISPLAYDLL_Write !
// +------------------+
//! Writes the given string on the display.
//! The string is displayed at the current cursor position (see DISPLAYDLL_SetPosition).
//! It is assumed that the cursor position has been set so that the string can fit.
DLL_EXPORT(void) DISPLAYDLL_Write(char *str) {
unsigned int i=0;
while (str[i]!=0){
sendLCD(&str[i]);
i++;
}

}

// +--------------------------+
// ! DISPLAYDLL_SetBrightness !
// +--------------------------+
DLL_EXPORT(void) DISPLAYDLL_SetBrightness(LCDS_BYTE brightness) {
}

// +-----------------------+
// ! DISPLAYDLL_CustomChar !
// +-----------------------+
DLL_EXPORT(void) DISPLAYDLL_CustomChar(LCDS_BYTE chr,LCDS_BYTE *data) {
}

// +----------------------------+
// ! DISPLAYDLL_CustomCharIndex !
// +----------------------------+
DLL_EXPORT(LCDS_BYTE) DISPLAYDLL_CustomCharIndex(LCDS_BYTE index) {
 --index;
 if (0==index) index=8;
 return index;
}

// +-----------------+
// ! DISPLAYDLL_Done !
// +-----------------+
DLL_EXPORT(void) DISPLAYDLL_Done(void) {
}

// +--------------------+
// ! DISPLAYDLL_ReadKey !
// +--------------------+
DLL_EXPORT(LCDS_WORD) DISPLAYDLL_ReadKey(void) {
 return 0;
}

// +-------------------------+
// ! DISPLAYDLL_SetBacklight !
// +-------------------------+
DLL_EXPORT(void) DISPLAYDLL_SetBacklight(LCDS_BOOL light_on) {
}

// +------------------------+
// ! DISPLAYDLL_SetContrast !
// +------------------------+
DLL_EXPORT(void) DISPLAYDLL_SetContrast(LCDS_BYTE contrast) {
}

// +------------------------+
// ! DISPLAYDLL_PowerResume !
// +------------------------+
DLL_EXPORT(void) DISPLAYDLL_PowerResume(void) {
}

// +-------------------+
// ! DISPLAYDLL_SetGPO !
// +-------------------+
DLL_EXPORT(void) DISPLAYDLL_SetGPO(LCDS_BYTE gpo,LCDS_BOOL gpo_on) {
}

// +-------------------+
// ! DISPLAYDLL_SetFan !
// +-------------------+
DLL_EXPORT(void) DISPLAYDLL_SetFan(LCDS_BYTE t1,LCDS_BYTE t2) {
}

#ifndef LCDS_PLUGIN_H
#define LCDS_PLUGIN_H

#ifndef DLL_EXPORT
#define DLL_EXPORT(type) extern "C" __declspec(dllexport) type __stdcall
#endif

typedef unsigned char  LCDS_BYTE;
typedef unsigned short LCDS_WORD;
typedef unsigned char  LCDS_BOOL;

#endif

software.rar

post-1702-135135503669_thumb.jpg

Link to post
Share on other sites

Hi ike,

Thanks for replying. I'm sorry about the spam check. Looks like the spam checker is not yet tuned correctly. I really appreciate your time putting everything in a text file.

 

Edit: The reason why the error came up is because you have a link(lcdsmartie) in your post. A new user needs five posts to put links into their post. This was done to turn down spammers.

Link to post
Share on other sites

Thank you both for listening and caring. I was afraid this was beyond my comprehension, but the last post ties everything together nicely :D

 

These forums have been the best resource I can find, and has pushed me to learn things I never thought I could understand.

 

KB

Link to post
Share on other sites

It is working for me. Had to learn about VS, and that wasn't so bad after CCS :lol:

 

Neat project. Hopefully this will help make a nice remote monitor for a LP solar energy project.

 

Much thanks for the tutorial post. Hope I can add something later!

Link to post
Share on other sites

I dug thoroughly into your post.txt today with the intention of helping you out with a simple schematic. I obtained sparc's version and way immediately surprised that it was identical to other proprietary versions i have tried. Immediately I found that common chips are not available in the library, and that even simple jumpers pose some difficulty. I was willing to label them. I found a TI 14 pin msp chip which resembled your design, but could not obtain a simple 16pin header to wire the connections. I found one I thought would work and then it would not let me route connections. what a letdown. It seems as though they are all designed to make footprint PCB's for estimating the cost of production. If someone knows of a reversible package, ie. make a PCB and "easily" convert to a schematic, I am sure all will be ecstatic.

 

On a positive note, I had another serious improvement looking at post.txt. using the TP1 header on the launchpad as an alternate voltage source made my $4 LCD come to life, meaning I could read it without an acute angle of view. I supposed that my issue with contrast was purely a result of my bargain basement shopping, when really it was my disbelief in your success, and clear instructional photos...

 

thanks again for your support of your post.

 

KB

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...