Page 1 sur 1

Commander un LCD avec un LPC

Publié : 17 mai 2006 10:17
par Melodie_Nelson
Bonjour,
Je dois donc commander un LCD( dont voici la doc : http://www.spezial.de/doc/cctech/cmc216-01.pdf )

Et j'arrive enfin à afficher quelquechose, cependant je ne comprends pas comment !!

En effet le bit RS est utilisé pour choisir d'envoyer une donnée ou bien une instruction. Et je me suis rendu compte mais même lorsque je ne le gere pas, j'arrive à afficher quelquechose. Donc c'est assez incroyable.

Voici mon prgramme :

Code : Tout sélectionner


while(1)
	{ 
	init_aff();
				
	delay(20000000);
				
	lcd_write("pfou");
								delay(2000000);
					
	lcd_write("marre");
				
	}


void  init_aff(void)  /*faire l'init de l'afficheur*/
{			
	int i=0 ;
		
	delay(20000);		//delay de 15 ms
			
	for(i=0;i<3;i++)
	{
	lcd_data(0x38);   // 8 bits, 2 lignes, 5*8 font
	delay(20000);	//delay de 15ms
	}
			
	lcd_data(0x0C) ; // display on et cursor off
	delay(5000);	//delay de 43us
			
	lcd_data(0x06) ; // set mode to increment 
	delay(5000);
			
	lcd_data(0x01) ; // clear screen
	delay(5000);
			
	lcd_data(0x02) ; // return cursor to home position
	delay(20000);
			
}


void  lcd_instru(char infodata) /*transformer une valeur hexa en 8 bits pour DO à D7	*/				
 {			
	IO0CLR = LCD_RS;
	IO0CLR = LCD_RW;
				
	IO0DIR = 0xFEFFB705;	//  D0 à D7 en sortie
				
	LOCAL_BUS = infodata ;              //port D0 à D7 = infodata
	enable(6000);  // 1 ns = 0.012   donc 250 ns = 3
				
} 


void  lcd_write (char *word) 
{
	char car ;
	unsigned char n=0 ;
	unsigned char i=0;
		
				 			 
	while(word[n]!=0)
	{
	n++;		//nombre de caractères de word
	}
		 
	 for(i=0;i<n;i++)// boucle qui dure autant de cycle ke de caractère 
	{
	car = word[i]    ;  // sélectionne le caractère numéro i de word
			
	lcd_data(car) ;
	delay(50);		
	 }
			 
}


void  lcd_data(char infodata) /*transformer une valeur hexa en 8 bits pour DO à D7	*/
{								IO0SET = LCD_RS;
	IO0CLR = LCD_RW;
				
	IO0DIR = 0xFEFFB705;	//  D0 à D7 en sortie
		
	LOCAL_BUS = infodata ;
	enable(6000);		// 1 ns = 0.012   donc 250 ns = 3
		
}	

Voilà.
Et donc j'ai remarqué que même en supprimant les lignes qui gèrent RS et RW j'arrivais quand même à envoyer des instructions et à afficher.
C'est donc assez bizarre.

De plus il y'a certaines commandes qui ne marchent pas.
Bref, kkn aurait-il une idée ?
Merci

Publié : 17 mai 2006 10:23
par Invité
Je me suis trompé, à l'origine dans la procédure d'int_affich, les commandes se font avec lcd_instru et non pas lcd_data.

Mais donc avec ce problème bizarre, ça ne change rien du coup.

Publié : 17 mai 2006 15:37
par JP
Hello,

Je n'ai rien de mieux, un exemple :
http://www.olimex.com/dev/lpc-mt.html
Faut encore voir si le contrôleur LCD est le même.

Bon courage,

a+
JP

Publié : 18 mai 2006 9:56
par Melodie Nelson
Merci, mais j'avais déjà été voir ce site.
Et toute façon il ne me faut pas un exemple, il me faudrait plutôt une explication du problème.
Bref

Publié : 20 mai 2006 12:06
par vincevg
Bon, j'ai fais un peu de recherche sur ton composant. Il semble que ce soit le même que le ks0066 avec une longueur de 80 caractères au lieu de 40. Dans ce cas il doit se gérer de la même façon que le hd44780 et tu trouveras une librairie sur mon site qui devrais t'aider.

Publié : 22 mai 2006 10:43
par Melodie Nelson
Merci merci, mais c'est bon, j'ai enfin réparé mon problème qui venait directement de la définition de mon port LCD.
En effet j'assignais mal les valeurs à envoyer au LCD, et j'envoyai des données sur d'autres variables ce qui expliquaient un fonctionnement très bizarre.
Voilà