Gast
#1115371
Hi zusammen,
habe ein Problem mit meinem LC-Display 162C mit KS0070B-Controller.
Die Initialisierung funktioniert leider nicht. Das Display wird im
4-Bit-Modus betrieben.
Ich verwende einen PIC16f819.
Hier mein Init-Code, könnt Ihr vielleicht einen Fehler entdecken??
#include "main.h"
//Pin_Setup
#define DB4 PIN_B1
#define DB5 PIN_B2
#define DB6 PIN_B4
#define DB7 PIN_B5
#define RS PIN_A7
#define RW PIN_B0
#define EN PIN_A6
//Display_Befehle
#define LCD_Set 0b00110000
#define LCD_CLEAR 0b00000001 //Löschen des Display, Cursor auf
Home
#define LCD_FUNCTION 0b00101000 //4-Bitmodus
#define LCD_CONTROL 0b00001111 //Display ON, Cursor ON, Blinken
ON
#define LCD_DISPLAY_OFF 0b00001000
#define LCD_ENTRY_INC 0b00000110
#define LCD_DISPLAY_ON 0b00001111
void display_enable (void);
void display_send(unsigned char send_byte)
{
unsigned char high_nib;
unsigned char low_nib;
low_nib = send_byte&0b00001111;
send_byte>>4;
high_nib = send_byte&0b00001111;
output_low(RS);
output_low(RW);
output_low (DB4);
output_low (DB5);
output_low (DB6);
output_low (DB7);
//High_Nibble senden
if (high_nib & 0b0001) output_high(DB4);
if (high_nib & 0b0010) output_high(DB5);
if (high_nib & 0b0100) output_high(DB6);
if (high_nib & 0b1000) output_high(DB7);
display_enable();
delay_us(100);
output_low (DB4);
output_low (DB5);
output_low (DB6);
output_low (DB7);
//Low_Nibble senden
if ( low_nib & 0b0001) output_high(DB4);
if ( low_nib & 0b0010) output_high(DB5);
if ( low_nib & 0b0100) output_high(DB6);
if ( low_nib & 0b1000) output_high(DB7);
display_enable();
delay_us(100);
}
void display_enable(void)
{
output_low(EN);
output_high(EN);
delay_us(100);
output_low(EN);
}
void display_command(unsigned char command)
{
output_low(RS);
display_send(command);
delay_us(2000);
}
void display_init(void)
{
delay_ms(2000);
output_low(DB4);
output_low(DB5);
output_low(DB6);
output_low(DB7);
output_low(RW);
output_low(RS);
output_low(EN);
//Set1
output_high(DB4);
output_high(DB5);
output_low(DB6);
output_low(DB7);
display_enable();
delay_ms(5);
//Set2
output_low(DB4);
output_low(DB5);
output_low(DB6);
output_low(DB7);
output_low(DB4);
output_high(DB5);
display_enable();
delay_us(120);
//Set3
output_low(DB4);
output_low(DB5);
output_low(DB6);
output_low(DB7);
output_high(DB7);
output_high(DB6);
display_enable();
delay_us(1000);
//4Bit Mode
output_low(DB4);
output_low(DB5);
output_low(DB6);
output_low(DB7);
output_high(DB5);
display_enable();
delay_us(50);
//Ab hier mit Funktion "display_command" arbeiten
//teilt Byte in Hnib und Lnib
//LCD Clear
display_command(LCD_SET);
display_command(LCD_CLEAR);
display_command(LCD_FUNCTION);
display_command(LCD_DISPLAY_OFF);
display_command(LCD_ENTRY_INC);
display_command(LCD_DISPLAY_ON);
display_command(LCD_CLEAR);
}
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_oscillator(OSC_8MHZ);
display_init();
while (1)
{
output_high(PIN_A2);
}
}
Danke schon mal im Voraus.
Grüsse
Oliver