A Microcontroller Discussion Board
September 03, 2010, 05:20:23 PM *
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
News: If this is your first visit, be sure to check out the Help by clicking the link below.
 
   Home   Help Search Login Register  
Pages: [1]
  Print  
Author Topic: PIC16F684 output to LCD  (Read 861 times)
0 Members and 1 Guest are viewing this topic.
goowiz
Newbie
*
Posts: 1



View Profile Email
« on: June 30, 2009, 09:32:32 AM »

Hi, I am trying to output numbers to a samsung UC-20102-GNARS one line 20 character lcd display from a PIC16f684 microcontroller.
I'm having some trouble... I have things wired as follows according to pin #:

PIC ------------ LCD
14 ------------- GND
13
12
11
10 (C0) -------- D4
9 (C1) --------- D5
8 (C2) --------- D6
7 (C3) --------- D7
6
5
4
3 (A4) --------- RS
2 (A5) --------- Enable
1 --------------- +5v

Here's my code:

Code:
#include <Temp Sensor.h>
#include <math.h>

#define ENABLE PIN_A5
#define RS PIN_A4
#define LCD_TYPE 1

// Function/Global Variable Delcaration
void Initialize(void);
void InitLCD(void);
void lcd_send_nibble(char c);
void lcd_send_data(char c);
void lcd_send_command(char command);
int i;

void main()
{
   SET_TRIS_A(0x01);
   
   setup_adc_ports(sAN0|VSS_VDD);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   setup_oscillator(OSC_INTRC);
     
   InitLCD();


}


void InitLCD(void)
{
   
   
   // Initialize LCD
   output_low(ENABLE);         // Disable LCD
   delay_ms(50);            // Delay for 50ms
   
   SET_TRIS_C(0x00);         // All C ports set to output
   delay_ms(15);            // Delay for 15ms
     
   for(i = 1; i <= 3 ; ++i)
   {
      output_low(RS);         // Set LCD for instruction set
      output_c(3);         //
      output_high(ENABLE);           // Enable LCD
      delay_us(5);         // Delay 5us
      output_low(ENABLE);      // Disable LCD
      delay_ms(5);         // Delay 5ms
   }
   
   lcd_send_nibble(3);         //
   
   lcd_send_command(0x20);      // Function Set:
                     // 4bit data length
                     // 1 Line
                     // 5 x 7 Dot Format
                       
   lcd_send_command(0x0F);      // Display ON/OFF Control:
                     // Display ON
                     // Cursor ON
                     // Blink ON
   
   lcd_send_command(0x01);      // Display Clear
   
   lcd_send_command(0x05);      // Entry Mode Set:
                     // Decrement one
                     // Yes Shift
   
   lcd_send_data(0x52);      // "R"
   lcd_send_data(0x45);      // "E"
   lcd_send_data(0x41);      // "A"
   lcd_send_data(0x44);      // "D"
   lcd_send_data(0x59);      // "Y"
}

void lcd_send_nibble( char c )
{
   output_c(c);         // Output character to LCD
   output_high(ENABLE);      // Enable LCD
   delay_us(5);         // Delay 5us
   output_low(ENABLE);      // Disable LCD
}
   
void lcd_send_command(char command)
{
   delay_ms(5);                  // Delay 5ms
   output_low(RS);                  // Set LCD for instruction set
   lcd_send_nibble(command >> 4);      // Send high bits
   lcd_send_nibble(command & 0x0F);           // Send low bits
}

void lcd_send_data( char c)
{
   delay_ms(5);               // Delay 5ms
   output_high(RS);            // Set LCD for data set
   lcd_send_nibble(c >> 4);         // Send high bits
   lcd_send_nibble(c & 0x0F);         // Send low bits
}

As of now, the LCD will power up, but the whole line just shows black boxes.
If anyone can help I'd greatly appreciate it. Thanks.
Logged
A Microcontroller Discussion Board
« on: June 30, 2009, 09:32:32 AM »

 Logged
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2009, Simple Machines LLC | Sitemap Valid XHTML 1.0! Valid CSS!