Chandler
09.06.2015, 12:22
Hallo,
ich habe ein dsPIC30F6011A und möchte damit ein LCD-Display www.reichelt.de/Background-green/LCD-162C-LED/3/index.html?&ACTION=3&LA=2&ARTICLE=31653&GROUPID=3005&artnr=LCD+162C+LED ansteuern. Allerdings scheitere ich schon an der Initialisierung. Ich möchte zunächst sehen, dass die Initialisierung geklappt hat und den Cursor an der ersten stelle des Displays blinken lassen.
#include <p30fxxxx.h>
#include <p30F6011A.h>
#include <xc.h>
#include <stdio.h>
#include "system.h"
#include <libpic30.h>
// Konfigurationbits
_FOSC(CSW_FSCM_OFF & ECIO_PLL8); //Run this project using an external crystal routed via the PLL in 8x multiplier mode
_FWDT(WDT_OFF); //Turn off the Watch-Dog Timer.
_FBORPOR(MCLR_EN & PWRT_OFF); //Enable MCLR reset pin and turn off the power-up timers.
_FGS(CODE_PROT_OFF); //Disable Code Protection
int main (void)
{
configure_pin();
__delay_ms(2000);
LATBbits.LATB12 = 0;
lcd_init();
while (1) {
__delay_ms(100);
LATBbits.LATB12 = !LATBbits.LATB12;
}
LATBbits.LATB13 = 0;
return 0;
}
void lcd_init( void )
{
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
// LCD Soft Reset
__delay_ms(15);
lcd_nibble(0x03);
__delay_ms(5);
lcd_nibble(0x03);
__delay_us(100);
lcd_nibble(0x03);
__delay_ms(5);
lcd_nibble(0x02);
// Display settings
lcd_cmd(0x28 ); //
lcd_cmd(0x08);
lcd_cmd(0x01);
lcd_cmd(0x06);
lcd_cmd(0x0F);
}
void lcd_cmd( unsigned int data )
{
LCD_RS = 0; // RS auf 0 setzen
lcd_nibble(data >> 4);
lcd_nibble(data & 0x0F);
__delay_us( 45 );
}
static void lcd_nibble(unsigned char nibble)
{
LATGbits.LATG6 = (nibble>>3)&1;
LATGbits.LATG7 = (nibble>>2)&1;
LATGbits.LATG8 = (nibble>>1)&1;
LATGbits.LATG9 = (nibble>>0)&1;
lcd_enable();
}
static void lcd_enable( void )
{
LCD_EN = 1;
__delay_us(50);
LCD_EN = 0;
}
Allerdings zeigt mir das Display nach dem Durchlauf immer noch nur die erste Zeile mit Balken an. Die Verbindungen vom Controller zum Display sind alle vorhanden (auch richtig). Hat das schon einmal jemand gemacht und kann mir da evtl. einen Tip geben, wass ich noch berücksichtigen muss?
ich habe ein dsPIC30F6011A und möchte damit ein LCD-Display www.reichelt.de/Background-green/LCD-162C-LED/3/index.html?&ACTION=3&LA=2&ARTICLE=31653&GROUPID=3005&artnr=LCD+162C+LED ansteuern. Allerdings scheitere ich schon an der Initialisierung. Ich möchte zunächst sehen, dass die Initialisierung geklappt hat und den Cursor an der ersten stelle des Displays blinken lassen.
#include <p30fxxxx.h>
#include <p30F6011A.h>
#include <xc.h>
#include <stdio.h>
#include "system.h"
#include <libpic30.h>
// Konfigurationbits
_FOSC(CSW_FSCM_OFF & ECIO_PLL8); //Run this project using an external crystal routed via the PLL in 8x multiplier mode
_FWDT(WDT_OFF); //Turn off the Watch-Dog Timer.
_FBORPOR(MCLR_EN & PWRT_OFF); //Enable MCLR reset pin and turn off the power-up timers.
_FGS(CODE_PROT_OFF); //Disable Code Protection
int main (void)
{
configure_pin();
__delay_ms(2000);
LATBbits.LATB12 = 0;
lcd_init();
while (1) {
__delay_ms(100);
LATBbits.LATB12 = !LATBbits.LATB12;
}
LATBbits.LATB13 = 0;
return 0;
}
void lcd_init( void )
{
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
// LCD Soft Reset
__delay_ms(15);
lcd_nibble(0x03);
__delay_ms(5);
lcd_nibble(0x03);
__delay_us(100);
lcd_nibble(0x03);
__delay_ms(5);
lcd_nibble(0x02);
// Display settings
lcd_cmd(0x28 ); //
lcd_cmd(0x08);
lcd_cmd(0x01);
lcd_cmd(0x06);
lcd_cmd(0x0F);
}
void lcd_cmd( unsigned int data )
{
LCD_RS = 0; // RS auf 0 setzen
lcd_nibble(data >> 4);
lcd_nibble(data & 0x0F);
__delay_us( 45 );
}
static void lcd_nibble(unsigned char nibble)
{
LATGbits.LATG6 = (nibble>>3)&1;
LATGbits.LATG7 = (nibble>>2)&1;
LATGbits.LATG8 = (nibble>>1)&1;
LATGbits.LATG9 = (nibble>>0)&1;
lcd_enable();
}
static void lcd_enable( void )
{
LCD_EN = 1;
__delay_us(50);
LCD_EN = 0;
}
Allerdings zeigt mir das Display nach dem Durchlauf immer noch nur die erste Zeile mit Balken an. Die Verbindungen vom Controller zum Display sind alle vorhanden (auch richtig). Hat das schon einmal jemand gemacht und kann mir da evtl. einen Tip geben, wass ich noch berücksichtigen muss?