Forum: Mikrocontroller und Digitale Elektronik Powertip PC1604A


von Patrick S. (patrick_s)


Lesenswert?

Ich bastle gerade an einem LCD Display und wollte mal fragen ob man ohne 
Kontrasteinstellung d.h. wenn PIN offen gelassen wird auch was sehen 
oder muss stets mit einem Trimmer der Kontrast eingestellt werden?

von holger (Gast)


Lesenswert?

>oder muss stets mit einem Trimmer der Kontrast eingestellt werden?

Ja.

von Spess53 (Gast)


Lesenswert?

Hi

Aus dem, man langläufig Kontrastspannung nennt werden verschiedene 
Spannungen zur Ansteuerung des Displays gewonnen.

Beantwortet das deine Frage?

MfG Spess

von Patrick S. (patrick_s)


Lesenswert?

Danke funzt auch ein 100k ohm Poti zwischen Betriebsspannung und masse?

von Patrick S. (patrick_s)


Lesenswert?

Habe folgenden Code geschrieben für PIC18F4550 in C

...Konfigurationen für PIC(alle schon einmal getestet!)

#include "p18f4550.h"
#include "delays.h"

#define LCD_RS   LATBbits.LATB2
#define LCD_EN   LATBbits.LATB3
#define LCD_D4   LATBbits.LATB4
#define LCD_D5   LATBbits.LATB5
#define LCD_D6   LATBbits.LATB6
#define LCD_D7   LATBbits.LATB7

#define LCD_RS_Dir  TRISBbits.TRISB2
#define LCD_EN_Dir  TRISBbits.TRISB3
#define LCD_D4_Dir  TRISBbits.TRISB4
#define LCD_D5_Dir  TRISBbits.TRISB5
#define LCD_D6_Dir  TRISBbits.TRISB6
#define LCD_D7_Dir  TRISBbits.TRISB7

#define Enable Delay10TCYx(1); LCD_EN=1; Delay10TCYx(1); LCD_EN=0; 
Delay10TCYx(1);

void LCD_Init(void);
void LCD_Send(unsigned char chr);
void LCD_DDRAM_Addr(unsigned char addr);
void LCD_CGRAM_Addr(unsigned char addr);
void LCD_Char(unsigned char row, unsigned char column, unsigned char 
text);
void LCD_Text(unsigned char row, unsigned char column, unsigned char 
*text);
void LCD_Gen_Char(unsigned char number, unsigned char *code);


void OSC_Init(void)
{
  OSCCONbits.IRCF2 = 1;
  OSCCONbits.IRCF1 = 1;
  OSCCONbits.IRCF0 = 0;
}

void Ports_Init(void)
{
  LATB = 0x00;
  TRISB = 0x00;        // Alles Ausgänge


}

unsigned char txt[]="Hallo Welt";
unsigned char smilie[] = {0,10,0,4,4,17,14,0};
unsigned char i;

void main (void)
{ int i;

  OSC_Init();
  Ports_Init();
  LCD_Init();

  LCD_Text(1,1,txt);
  LCD_Text(2,1,txt);
  LCD_Text(3,1,txt);
  LCD_Text(4,1,txt);


  LCD_Gen_Char(0, smilie);
  LCD_Char(1,13,0x00);

  while(1);
}

void LCD_Init(void)
{
  LCD_RS_Dir=0;    //Set Pins to Outpur
  LCD_EN_Dir=0;
  LCD_D4_Dir=0;
  LCD_D5_Dir=0;
  LCD_D6_Dir=0;
  LCD_D7_Dir=0;

  Delay10KTCYx(20);  //Delay 40ms

  LCD_RS=0;

  LCD_D7=0;      //Function Set 8-bit
  LCD_D6=0;
  LCD_D5=1;
  LCD_D4=1;
  Enable
  Delay10KTCYx(21);  //Delay ca. 4.2ms

  LCD_D7=0;      //Function Set 8-bit
  LCD_D6=0;
  LCD_D5=1;
  LCD_D4=1;
  Enable
  Delay10TCYx(50);  //Delay ca. 100us

  LCD_D7=0;       //Function Set 8-bit
  LCD_D6=0;
  LCD_D5=1;
  LCD_D4=1;
  Enable
  Delay10TCYx(19);  //Delay ca. 38us

  LCD_D7=0;       //Function Set 4-bit
  LCD_D6=0;
  LCD_D5=1;
  LCD_D4=0;
  Enable
  Delay10TCYx(19);  //Delay ca. 38us

  LCD_D7=0;       //Function Set
  LCD_D6=0;
  LCD_D5=1;
  LCD_D4=0;      //DL=0
  Enable
  LCD_D7=1;       //N = 1
  LCD_D6=0;      //F = 0
  LCD_D5=0;      //x
  LCD_D4=0;      //x
  Enable
  Delay10TCYx(19);  //Delay ca. 38us

  LCD_D7=0;       //Display ON/OFF
  LCD_D6=0;
  LCD_D5=0;
  LCD_D4=0;
  Enable
  LCD_D7=1;
  LCD_D6=1;      //D=1  (D=1:Display ON)
  LCD_D5=0;      //C=0  (C=1:Under-line cursor ON)
  LCD_D4=0;      //B=0  (B=1:Block cursor ON)
  Enable
  Delay10TCYx(19);  //Delay ca. 38us

  LCD_D7=0;       //Clear Display
  LCD_D6=0;
  LCD_D5=0;
  LCD_D4=0;
  Enable
  LCD_D7=0;
  LCD_D6=0;
  LCD_D5=0;
  LCD_D4=1;
  Enable
  Delay100TCYx(80);  //Delay ca. 1.6ms

  LCD_D7=0;       //Entry Mode
  LCD_D6=0;
  LCD_D5=0;
  LCD_D4=0;
  Enable
  LCD_D7=0;
  LCD_D6=1;
  LCD_D5=1;      //ID = 1
  LCD_D4=0;      //S = 0
  Enable
  Delay100TCYx(19);  //Delay ca. 38us

  LCD_DDRAM_Addr(0x00);

}

void LCD_Send(unsigned char chr)
{
  LCD_D7=(chr&0b10000000) ? 1:0;
  LCD_D6=(chr&0b01000000) ? 1:0;
  LCD_D5=(chr&0b00100000) ? 1:0;
  LCD_D4=(chr&0b00010000) ? 1:0;
  Enable
  LCD_D7=(chr&0b00001000) ? 1:0;
  LCD_D6=(chr&0b00000100) ? 1:0;
  LCD_D5=(chr&0b00000010) ? 1:0;
  LCD_D4=chr&0x01;
  Enable
  Delay10TCYx(20);  //Delay ca. 38us
}

void LCD_DDRAM_Addr(unsigned char addr)
{
  LCD_RS=0;
  LCD_Send(addr|0x80);
}

void LCD_CGRAM_Addr(unsigned char addr)
{
  LCD_RS=0;
  LCD_Send((addr&0x3F)|0x40);
}

void LCD_Char(unsigned char row, unsigned char column, unsigned char 
text)
{
  column--;
  if(row==2)
  {
    column=column+0x40;
  }
  if(row==3)
  {
    column=column+0x14;
  }
  if(row==4)
  {
    column=column+0x54;
  }

  LCD_DDRAM_Addr(column);
  LCD_RS=1;
    LCD_Send(text);
}

void LCD_Text(unsigned char row, unsigned char column, unsigned char * 
text)
{
  unsigned char counter;
  LCD_Char(row, column, text[0]);

    for(counter=1; text[counter]; counter++)
  {
      LCD_Send(text[counter]);
    }
}

void LCD_Gen_Char(unsigned char number, unsigned char *code)
{
  unsigned char i;
  LCD_RS=0;
  number=number<<3;
  LCD_CGRAM_Addr(number);
  LCD_RS=1;
  for(i=0;i<8;i++)
  {
    LCD_Send(code[i]);
  }
}


funzt aber nicht habe alle Verbindungen richtig angeschlossen mit 
Spannungsversorgung

Für Kontrastspannung habe ich ein 100k ohm Poti zwischen Plus und Masse 
genommen habe daran rumgedereht aber funzt trotzdem nicht!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.