Commander un LCD avec un LPC

Electronique numérique / Circuits logiques programmables EPLD, CPLD, FPGA d'Altera ou de Xilinx VHDL, Verilog ou SystemC

Modérateur : Modérateur

Melodie_Nelson

Commander un LCD avec un LPC

Message 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
Invité

Message 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.
JP
Administrateur
Administrateur
Messages : 2328
Inscription : 23 sept. 2003 19:14
Localisation : Strasbourg
Contact :

Message 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
Ca clignote !!!!
Melodie Nelson
NOUVEAU
NOUVEAU
Messages : 2
Inscription : 17 mai 2006 9:53

Message 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
Avatar de l’utilisateur
vincevg
ACCRO
ACCRO
Messages : 803
Inscription : 05 mars 2005 16:58
Localisation : SMalville
Contact :

Message 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.
Vince
http://anyedit.free.fr/
http://electropol.free.fr/

Les amis, ça va, ça vient, mais les ennemis, ça s’accumule.
Melodie Nelson
NOUVEAU
NOUVEAU
Messages : 2
Inscription : 17 mai 2006 9:53

Message 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à
Répondre