Juney
28.10.2010, 13:15
Hallo,
ich versuche nun schon seid etlichen Stunden ein Display zu initialisieren, nur leider bekomme ich nur Schneegestöber im wahrsten Sinne des Wortes. Ich hoffe hier ist jemand der sich das Datenblatt mal ansehen würde und mir vllt sagen kann was ich vergessen, falsch gemacht habe.
Kann leider nur die Initroutine hochladen da das gesamte blatt zu groß ist aber ich stell gern bei Anmerkungen weitere seiten einzeln rein =)
Danke schoneinmal im vorraus
void lcd_init(void)
{
// Pins für die Displaysteuerung als Ausgänge deklarieren
/*DDR_MFA_A0 |= (PIN_MFA_A0);
DDR_MFA_D0 |= (PIN_MFA_D0);
DDR_MFA_XRES |= (PIN_MFA_XRES);
DDR_MFA_XCS |= (PIN_MFA_XCS);
DDR_MFA_XWR |= (PIN_MFA_XWR);
DDR_MFA_C86 |= (PIN_MFA_C86);
DDR_MFA_PS |= (PIN_MFA_PS);*/
LPC_GPIO1 -> FIODIR |= A0; //A0
LPC_GPIO1 -> FIODIR |= D0; //D0
LPC_GPIO1 -> FIODIR |= XWR; //XWR
LPC_GPIO1 -> FIODIR |= XRES; //XRES
LPC_GPIO1 -> FIOCLR |= XRES;
LPC_GPIO1 -> FIODIR |= XCS; //XCS
LPC_GPIO1 -> FIODIR |= C86; //C86
LPC_GPIO1 -> FIODIR |= PS; //PS
// Verzögerung für stabile Spannungsversorgung
delayMs(100);
// Taktleitung
LPC_GPIO1 -> FIOPIN |= XWR; // L H x x clk ser
// Chip Select
LPC_GPIO1 -> FIOPIN |= XCS; // L H L x clk ser
// Auf seriellen Übertragungsmodus schalten
LPC_GPIO1 -> FIOPIN |= C86; // x H x x x x
LPC_GPIO1 -> FIOPIN &= ~PS; // L H x x x x
// Taktleitung
LPC_GPIO1 -> FIOPIN &= ~XCS; // L H L x x x
// Chip Select
LPC_GPIO1 -> FIOPIN &= ~XWR; // L H L x clk ser
// PARA+CMD
LPC_GPIO1 -> FIOPIN &= ~A0; // L H L L clk ser
// Reset aufheben
LPC_GPIO1 -> FIOPIN |= XRES;
// Verzögerung nach Reset-Release
delayMs(250);
// Display aus dem Sleep Mode holen
lcd_send_byte(CMD, 0x11); // L H L L clk ser
delayMs(50);
// Column Adress Region setzen
lcd_send_byte(CMD, 0x2A); // L H L L clk ser
lcd_send_byte(PARA, 0x00); // L H L H clk ser
lcd_send_byte(PARA, 0x06); // L H L H clk ser
lcd_send_byte(PARA, 0x00); // L H L H clk ser
lcd_send_byte(PARA, 0x7D); // L H L H clk ser
// Page Adress Region setzen
lcd_send_byte(CMD, 0x2B); // L H L L clk ser
lcd_send_byte(PARA, 0x00); // L H L H clk ser
lcd_send_byte(PARA, 0x00); // L H L H clk ser
lcd_send_byte(PARA, 0x00); // L H L H clk ser
lcd_send_byte(PARA, 0xAF); // L H L H clk ser
// Displayart setzen Monochrom
lcd_send_byte(CMD, 0x3A); // L H L L clk ser
lcd_send_byte(PARA, 0x02); // L H L H clk ser
delayMs(10);
// RGB Color set
lcd_send_byte(CMD, 0x2D); // L H L L clk ser
lcd_send_byte(PARA, 0x00); //1 L H L H clk ser
lcd_send_byte(PARA, 0x00); //2 L H L H clk ser
lcd_send_byte(PARA, 0x00); //3 L H L H clk ser
lcd_send_byte(PARA, 0x00); //4 L H L H clk ser
lcd_send_byte(PARA, 0x00); //5 L H L H clk ser
lcd_send_byte(PARA, 0x00); //6 L H L H clk ser
lcd_send_byte(PARA, 0x00); //7 L H L H clk ser
lcd_send_byte(PARA, 0xFF); // L H L H clk ser
lcd_send_byte(PARA, 0x00); //1 L H L H clk ser
lcd_send_byte(PARA, 0x00); //2 L H L H clk ser
lcd_send_byte(PARA, 0x00); //3 L H L H clk ser
lcd_send_byte(PARA, 0x00); //4 L H L H clk ser
lcd_send_byte(PARA, 0x00); //5 L H L H clk ser
lcd_send_byte(PARA, 0x00); //6 L H L H clk ser
lcd_send_byte(PARA, 0x00); //7 L H L H clk ser
lcd_send_byte(PARA, 0x00); //8 L H L H clk ser
lcd_send_byte(PARA, 0x00); //9 L H L H clk ser
lcd_send_byte(PARA, 0x00); //10 L H L H clk ser
lcd_send_byte(PARA, 0x00); //11 L H L H clk ser
lcd_send_byte(PARA, 0x00); //12 L H L H clk ser
lcd_send_byte(PARA, 0x00); //13 L H L H clk ser
lcd_send_byte(PARA, 0x00); //14 L H L H clk ser
lcd_send_byte(PARA, 0x00); //15 L H L H clk ser
lcd_send_byte(PARA, 0xFF); // L H L H clk ser
lcd_send_byte(PARA, 0x00); //1 L H L H clk ser
lcd_send_byte(PARA, 0x00); //2 L H L H clk ser
lcd_send_byte(PARA, 0x00); //3 L H L H clk ser
lcd_send_byte(PARA, 0x00); //4 L H L H clk ser
lcd_send_byte(PARA, 0x00); //5 L H L H clk ser
lcd_send_byte(PARA, 0x00); //6 L H L H clk ser
lcd_send_byte(PARA, 0x00); //7 L H L H clk ser
lcd_send_byte(PARA, 0x00); //8 L H L H clk ser
lcd_send_byte(PARA, 0x00); //9 L H L H clk ser
lcd_send_byte(PARA, 0x00); //10 L H L H clk ser
lcd_send_byte(PARA, 0x00); //11 L H L H clk ser
lcd_send_byte(PARA, 0xFF); // L H L H clk ser
lcd_send_byte(PARA, 0x00); //1 L H L H clk ser
lcd_send_byte(PARA, 0x00); //2 L H L H clk ser
lcd_send_byte(PARA, 0x00); //3 L H L H clk ser
lcd_send_byte(PARA, 0x00); //4 L H L H clk ser
lcd_send_byte(PARA, 0x00); //5 L H L H clk ser
lcd_send_byte(PARA, 0x00); //6 L H L H clk ser
lcd_send_byte(PARA, 0x00); //7 L H L H clk ser
lcd_send_byte(PARA, 0x00); //8 L H L H clk ser
lcd_send_byte(PARA, 0x00); //9 L H L H clk ser
lcd_send_byte(PARA, 0x00); //10 L H L H clk ser
lcd_send_byte(PARA, 0x00); //11 L H L H clk ser
lcd_send_byte(PARA, 0x00); //12 L H L H clk ser
lcd_send_byte(CMD, 0x2C); // L H L L clk ser
delayMs(10);
//Taktleitung
LPC_GPIO1 -> FIOPIN |= XWR;// L H L L H L
// Chip Select
LPC_GPIO1 -> FIOPIN |= XCS;// L H H L H L
//Datenleitung
LPC_GPIO1 -> FIOPIN &= ~D0;
// Auf parallele Übertragungsmodus schalten
LPC_GPIO1 -> FIOPIN &= ~C86;// L L H L H L
LPC_GPIO1 -> FIOPIN |= PS;// H L H L H L
// Chip Select
LPC_GPIO1 -> FIOPIN &= ~XCS; // H L L L H L
//Datenleitung
LPC_GPIO1 -> FIOPIN |= D0;
// Taktleitung
LPC_GPIO1 -> FIOPIN &= ~XWR; // H L L L clk par
// CMD+PARA Leitung
LPC_GPIO1 -> FIOPIN |= A0;// H L L H clk par
//Sende dots one bit
for (uint16_t y = 0; y <= 330 ; y++)
{
lcd_send_pixel(0x00);// H L L H clk par
lcd_send_pixel(0x00);// H L L H clk par
}
//lcd_clear_display();
// Taktleitung
LPC_GPIO1 -> FIOPIN |= XWR; // H L L H H L
// Chip Select
LPC_GPIO1 -> FIOPIN |= XCS;// H L H H H L
//Datenleitung
LPC_GPIO1 -> FIOPIN &= ~D0;
// Auf seriellen Übertragungsmodus schalten
LPC_GPIO1 -> FIOPIN |= C86;// H H H H H L
LPC_GPIO1 -> FIOPIN &= ~PS;// L H H H H L
//Datenleitung
LPC_GPIO1 -> FIOPIN |= D0;
// Chip Select
LPC_GPIO1 -> FIOPIN &= ~XCS;// L H L H H L
//Taktleitung
LPC_GPIO1 -> FIOPIN &= ~XWR;// L H L H clk ser
// Display on
lcd_send_byte(CMD, 0x29);// L H L L clk ser
}
void lcd_send_byte(uint8_t u8_Type, uint8_t u8_Byte)
{
if (u8_Type == CMD)
{
LCD_COMMAND_MODE();
}
else
{
LCD_PARAMETER_MODE();
}
// -> Serielle Übertragung des Bytes
for (uint8_t x = 0; x <= 7 ; x++)
{
LPC_GPIO1 -> FIOPIN &= ~XWR;
if (u8_Byte & (1<<(7 - x)))
{
LPC_GPIO1 -> FIOPIN |= D0;
}
else
{
LPC_GPIO1 -> FIOPIN &= ~D0;
}
LPC_GPIO1 -> FIOPIN |= XWR;
}
}
void lcd_send_pixel(uint32_t u32_Block)
{
LPC_GPIO1 -> FIOPIN &= ~XWR;
for (uint32_t x = 0; x <= 31 ; x++)
{
if (u32_Block & (1<<(31 - x)))
{
LPC_GPIO1 -> FIOPIN |= D0;
}
else
{
LPC_GPIO1 -> FIOPIN &= ~D0;
}
}
LPC_GPIO1 -> FIOPIN |= XWR;
}
ich versuche nun schon seid etlichen Stunden ein Display zu initialisieren, nur leider bekomme ich nur Schneegestöber im wahrsten Sinne des Wortes. Ich hoffe hier ist jemand der sich das Datenblatt mal ansehen würde und mir vllt sagen kann was ich vergessen, falsch gemacht habe.
Kann leider nur die Initroutine hochladen da das gesamte blatt zu groß ist aber ich stell gern bei Anmerkungen weitere seiten einzeln rein =)
Danke schoneinmal im vorraus
void lcd_init(void)
{
// Pins für die Displaysteuerung als Ausgänge deklarieren
/*DDR_MFA_A0 |= (PIN_MFA_A0);
DDR_MFA_D0 |= (PIN_MFA_D0);
DDR_MFA_XRES |= (PIN_MFA_XRES);
DDR_MFA_XCS |= (PIN_MFA_XCS);
DDR_MFA_XWR |= (PIN_MFA_XWR);
DDR_MFA_C86 |= (PIN_MFA_C86);
DDR_MFA_PS |= (PIN_MFA_PS);*/
LPC_GPIO1 -> FIODIR |= A0; //A0
LPC_GPIO1 -> FIODIR |= D0; //D0
LPC_GPIO1 -> FIODIR |= XWR; //XWR
LPC_GPIO1 -> FIODIR |= XRES; //XRES
LPC_GPIO1 -> FIOCLR |= XRES;
LPC_GPIO1 -> FIODIR |= XCS; //XCS
LPC_GPIO1 -> FIODIR |= C86; //C86
LPC_GPIO1 -> FIODIR |= PS; //PS
// Verzögerung für stabile Spannungsversorgung
delayMs(100);
// Taktleitung
LPC_GPIO1 -> FIOPIN |= XWR; // L H x x clk ser
// Chip Select
LPC_GPIO1 -> FIOPIN |= XCS; // L H L x clk ser
// Auf seriellen Übertragungsmodus schalten
LPC_GPIO1 -> FIOPIN |= C86; // x H x x x x
LPC_GPIO1 -> FIOPIN &= ~PS; // L H x x x x
// Taktleitung
LPC_GPIO1 -> FIOPIN &= ~XCS; // L H L x x x
// Chip Select
LPC_GPIO1 -> FIOPIN &= ~XWR; // L H L x clk ser
// PARA+CMD
LPC_GPIO1 -> FIOPIN &= ~A0; // L H L L clk ser
// Reset aufheben
LPC_GPIO1 -> FIOPIN |= XRES;
// Verzögerung nach Reset-Release
delayMs(250);
// Display aus dem Sleep Mode holen
lcd_send_byte(CMD, 0x11); // L H L L clk ser
delayMs(50);
// Column Adress Region setzen
lcd_send_byte(CMD, 0x2A); // L H L L clk ser
lcd_send_byte(PARA, 0x00); // L H L H clk ser
lcd_send_byte(PARA, 0x06); // L H L H clk ser
lcd_send_byte(PARA, 0x00); // L H L H clk ser
lcd_send_byte(PARA, 0x7D); // L H L H clk ser
// Page Adress Region setzen
lcd_send_byte(CMD, 0x2B); // L H L L clk ser
lcd_send_byte(PARA, 0x00); // L H L H clk ser
lcd_send_byte(PARA, 0x00); // L H L H clk ser
lcd_send_byte(PARA, 0x00); // L H L H clk ser
lcd_send_byte(PARA, 0xAF); // L H L H clk ser
// Displayart setzen Monochrom
lcd_send_byte(CMD, 0x3A); // L H L L clk ser
lcd_send_byte(PARA, 0x02); // L H L H clk ser
delayMs(10);
// RGB Color set
lcd_send_byte(CMD, 0x2D); // L H L L clk ser
lcd_send_byte(PARA, 0x00); //1 L H L H clk ser
lcd_send_byte(PARA, 0x00); //2 L H L H clk ser
lcd_send_byte(PARA, 0x00); //3 L H L H clk ser
lcd_send_byte(PARA, 0x00); //4 L H L H clk ser
lcd_send_byte(PARA, 0x00); //5 L H L H clk ser
lcd_send_byte(PARA, 0x00); //6 L H L H clk ser
lcd_send_byte(PARA, 0x00); //7 L H L H clk ser
lcd_send_byte(PARA, 0xFF); // L H L H clk ser
lcd_send_byte(PARA, 0x00); //1 L H L H clk ser
lcd_send_byte(PARA, 0x00); //2 L H L H clk ser
lcd_send_byte(PARA, 0x00); //3 L H L H clk ser
lcd_send_byte(PARA, 0x00); //4 L H L H clk ser
lcd_send_byte(PARA, 0x00); //5 L H L H clk ser
lcd_send_byte(PARA, 0x00); //6 L H L H clk ser
lcd_send_byte(PARA, 0x00); //7 L H L H clk ser
lcd_send_byte(PARA, 0x00); //8 L H L H clk ser
lcd_send_byte(PARA, 0x00); //9 L H L H clk ser
lcd_send_byte(PARA, 0x00); //10 L H L H clk ser
lcd_send_byte(PARA, 0x00); //11 L H L H clk ser
lcd_send_byte(PARA, 0x00); //12 L H L H clk ser
lcd_send_byte(PARA, 0x00); //13 L H L H clk ser
lcd_send_byte(PARA, 0x00); //14 L H L H clk ser
lcd_send_byte(PARA, 0x00); //15 L H L H clk ser
lcd_send_byte(PARA, 0xFF); // L H L H clk ser
lcd_send_byte(PARA, 0x00); //1 L H L H clk ser
lcd_send_byte(PARA, 0x00); //2 L H L H clk ser
lcd_send_byte(PARA, 0x00); //3 L H L H clk ser
lcd_send_byte(PARA, 0x00); //4 L H L H clk ser
lcd_send_byte(PARA, 0x00); //5 L H L H clk ser
lcd_send_byte(PARA, 0x00); //6 L H L H clk ser
lcd_send_byte(PARA, 0x00); //7 L H L H clk ser
lcd_send_byte(PARA, 0x00); //8 L H L H clk ser
lcd_send_byte(PARA, 0x00); //9 L H L H clk ser
lcd_send_byte(PARA, 0x00); //10 L H L H clk ser
lcd_send_byte(PARA, 0x00); //11 L H L H clk ser
lcd_send_byte(PARA, 0xFF); // L H L H clk ser
lcd_send_byte(PARA, 0x00); //1 L H L H clk ser
lcd_send_byte(PARA, 0x00); //2 L H L H clk ser
lcd_send_byte(PARA, 0x00); //3 L H L H clk ser
lcd_send_byte(PARA, 0x00); //4 L H L H clk ser
lcd_send_byte(PARA, 0x00); //5 L H L H clk ser
lcd_send_byte(PARA, 0x00); //6 L H L H clk ser
lcd_send_byte(PARA, 0x00); //7 L H L H clk ser
lcd_send_byte(PARA, 0x00); //8 L H L H clk ser
lcd_send_byte(PARA, 0x00); //9 L H L H clk ser
lcd_send_byte(PARA, 0x00); //10 L H L H clk ser
lcd_send_byte(PARA, 0x00); //11 L H L H clk ser
lcd_send_byte(PARA, 0x00); //12 L H L H clk ser
lcd_send_byte(CMD, 0x2C); // L H L L clk ser
delayMs(10);
//Taktleitung
LPC_GPIO1 -> FIOPIN |= XWR;// L H L L H L
// Chip Select
LPC_GPIO1 -> FIOPIN |= XCS;// L H H L H L
//Datenleitung
LPC_GPIO1 -> FIOPIN &= ~D0;
// Auf parallele Übertragungsmodus schalten
LPC_GPIO1 -> FIOPIN &= ~C86;// L L H L H L
LPC_GPIO1 -> FIOPIN |= PS;// H L H L H L
// Chip Select
LPC_GPIO1 -> FIOPIN &= ~XCS; // H L L L H L
//Datenleitung
LPC_GPIO1 -> FIOPIN |= D0;
// Taktleitung
LPC_GPIO1 -> FIOPIN &= ~XWR; // H L L L clk par
// CMD+PARA Leitung
LPC_GPIO1 -> FIOPIN |= A0;// H L L H clk par
//Sende dots one bit
for (uint16_t y = 0; y <= 330 ; y++)
{
lcd_send_pixel(0x00);// H L L H clk par
lcd_send_pixel(0x00);// H L L H clk par
}
//lcd_clear_display();
// Taktleitung
LPC_GPIO1 -> FIOPIN |= XWR; // H L L H H L
// Chip Select
LPC_GPIO1 -> FIOPIN |= XCS;// H L H H H L
//Datenleitung
LPC_GPIO1 -> FIOPIN &= ~D0;
// Auf seriellen Übertragungsmodus schalten
LPC_GPIO1 -> FIOPIN |= C86;// H H H H H L
LPC_GPIO1 -> FIOPIN &= ~PS;// L H H H H L
//Datenleitung
LPC_GPIO1 -> FIOPIN |= D0;
// Chip Select
LPC_GPIO1 -> FIOPIN &= ~XCS;// L H L H H L
//Taktleitung
LPC_GPIO1 -> FIOPIN &= ~XWR;// L H L H clk ser
// Display on
lcd_send_byte(CMD, 0x29);// L H L L clk ser
}
void lcd_send_byte(uint8_t u8_Type, uint8_t u8_Byte)
{
if (u8_Type == CMD)
{
LCD_COMMAND_MODE();
}
else
{
LCD_PARAMETER_MODE();
}
// -> Serielle Übertragung des Bytes
for (uint8_t x = 0; x <= 7 ; x++)
{
LPC_GPIO1 -> FIOPIN &= ~XWR;
if (u8_Byte & (1<<(7 - x)))
{
LPC_GPIO1 -> FIOPIN |= D0;
}
else
{
LPC_GPIO1 -> FIOPIN &= ~D0;
}
LPC_GPIO1 -> FIOPIN |= XWR;
}
}
void lcd_send_pixel(uint32_t u32_Block)
{
LPC_GPIO1 -> FIOPIN &= ~XWR;
for (uint32_t x = 0; x <= 31 ; x++)
{
if (u32_Block & (1<<(31 - x)))
{
LPC_GPIO1 -> FIOPIN |= D0;
}
else
{
LPC_GPIO1 -> FIOPIN &= ~D0;
}
}
LPC_GPIO1 -> FIOPIN |= XWR;
}