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?
Hi Aus dem, man langläufig Kontrastspannung nennt werden verschiedene Spannungen zur Ansteuerung des Displays gewonnen. Beantwortet das deine Frage? MfG Spess
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.