Show Posts
Pages: [1]
1  Forum 2005-2010 (read only) / Interfacing / Re: analog in to 4 bit LCD driver on: January 01, 2010, 09:13:43 am
Thanks...Mem ...
my problem is Solved..smiley
2  Forum 2005-2010 (read only) / Interfacing / Re: analog in to 4 bit LCD driver on: December 22, 2009, 05:31:41 pm
hi glasspusher
thanks for providing this code



/* Analog in to LCD 4 bits
* ---------
* Adapted from the "analog_read_send" and "lcd_8bits" tutorials.
* This example uses 4 less pins on the Arduino than the 8 bit example.
* It will take a reading from a 'K' Type thermocouple ice point reference chip
* on Analog Input 2 and display the temperature in degrees Centigrade on the LCD.
* One can also set a target temperature for turning a relay off, say for a heater,
* at a given setpoint temperature. This is done on digital pin 4.
*
* These are the pins used on the LCD:
*
* - DI(register select), RW, DB4..DB7, Enable (7 in total)
*
* the pinout for LCD displays is standard and there is plenty
* of documentation to be found on the internet.
*
* 2006, Dave Sopchak  glasspusher at outofoptions dot net
*
*/

int DI = 12; // register select
int RW = 11;
int DB[] = {7, 8, 9, 10};
int Enable = 6;

int temperaturePin = 2;    // select the input pin for the temperature
int ledPin = 13;           // pin for the LED

void tickleEnable()
{
// send a pulse to enable
digitalWrite(Enable,HIGH);
delayMicroseconds(1);  // pause 1 ms according to datasheet
digitalWrite(Enable,LOW);
delayMicroseconds(1);  // pause 1 ms according to datasheet
}

void cmdWriteSet()
{
digitalWrite(Enable,LOW);
delayMicroseconds(1);  // pause 1 ms according to datasheet
 digitalWrite(DI,0);
 digitalWrite(RW,0);
}
void LcdCommandWrite(int value)
{
int i = 0;

 for (i=DB[3]; i >= DB[0]; i--) // high nybble first
 {
   digitalWrite(i, value & 128);
   value <<= 1;
 }
   cmdWriteSet();
   tickleEnable();

 for (i=DB[3]; i >= DB[0]; i--) // low nybble next
 {
   digitalWrite(i, value & 128);
   value <<= 1;
 }
   cmdWriteSet();
   tickleEnable();
}

void LcdDataWrite(int value)
{
int i = 0;

digitalWrite(DI, HIGH);
digitalWrite(RW, LOW);
 
 for (i=DB[3]; i >= DB[0]; i--) // high nybble first
 {
   digitalWrite(i, value & 128);
   value <<= 1;
 }
   tickleEnable();

 for (i=DB[3]; i >= DB[0]; i--) // low nybble next
 {
   digitalWrite(i, value & 128);
   value <<= 1;
 }
   tickleEnable();
}

void setup (void)
{
int i;
for (i=Enable; i <= DI; i++)
  pinMode(i,OUTPUT);

delay(100);
// initiatize lcd after a short pause
// needed by the LCDs controller
LcdCommandWrite(0x28);  // function set:
 delay(64);             // 4-bit interface, 2 display lines, 5x7 font
                        // other interaces:
                        // 0x20 = 4 bit, 1 display line

LcdCommandWrite(0x28);  // function set:
 delay(64);             // 4-bit interface, 2 display lines, 5x7 font

 LcdCommandWrite(0x06);  // entry mode set:
                        // increment automatically, no display shift
delay(20);                      
LcdCommandWrite(0x0E);  // display control:
                        // turn display on, cursor on, no blinking
delay(20);                      
LcdCommandWrite(0x01);  // clear display, set cursor position to zero  
delay(100);                      
LcdCommandWrite(0x80);  // display control:
                        // turn display on, cursor on, no blinking
delay(20);      
}

void loop (void)
{
 int i, val = 0;
 
 for(i = 0; i < 20; ++i)
 {
       val += analogRead(temperaturePin);    // read the value from the sensor
       delay(50);
 }
 
 val /= 4.06;      // conversion value to millivolts
 
 digitalWrite(ledPin, HIGH);  // turn the ledPin on
 delay(500);                  // stop the program for some time
 digitalWrite(ledPin, LOW);   // turn the ledPin off
 
 if(val > 175 * 10)   // temperature in deg C times 10, since we're measuring to tenths of a degree
     digitalWrite(4,LOW);
  else
    digitalWrite(4,HIGH);

   LcdCommandWrite(0x02);  // set cursor position to zero  
 delay(10);                    
 firstDisplay(val);
}

void firstDisplay(int value)
{
 int first,second, third, fourth;
 
 first = value / 1000;    //
 second = (value - 1000 * first)/ 100;
 third = (value - 1000 * first - 100 * second)/ 10;
 fourth = (value - 1000 * first - 100 * second - 10 * third);

     LcdDataWrite('T');
     LcdDataWrite('e');
     LcdDataWrite('m');
     LcdDataWrite('p');
     LcdDataWrite(' ');
     LcdDataWrite('=');
     LcdDataWrite(' ');

     LcdDataWrite(value > 999 ? first + 48 :  ' ');  // begin onscreen
     LcdDataWrite(value > 99 ? second + 48 : ' ');
     LcdDataWrite(third + 48);
     LcdDataWrite('.');
     LcdDataWrite(fourth + 48);

     LcdDataWrite(' ');
     LcdDataWrite('C');
     LcdDataWrite(' ');
     LcdDataWrite(' ');
}

...its really helping me alot...
it will be very kind of u, if u also provide the schematic diagram to allow driving an LCD display in 4 bit mode that can display temperature on it and to make this code workable
as i m taking the help frm this code in order to complete my obective that pretty much resemble with urs one....
THanks in Advance
Pages: [1]