Le salon de discussion : niwil et 7 utilisateurs inconnus

 Mot :   Pseudo :  
 
 Page :  1  2
Page Précédente 
Auteur Sujet :

[PIC] Contrôle d'un LCD

n°23
Dr Lous
I see old password
Posté le 29-11-2003 à 23:24:44  profilanswer
 

Kikoo all, vu a la nouvelle section...  (je vais me plaire ici :sol:)
 
Controle d'un LCD en mode 4Bits... par pic
 
 
lcdspi.h

Code :
  1. #define pins PORTC
  2. #define Lcd_E RC3=1;asm("nop" );asm("nop" );RC3=0;
  3. #define Lcd_RS RC2
  4. unsigned char cL;
  5. void Efface_LCD(void);
  6. void Ligne_LCD(char cLigne);
  7. void Efface_LigneLCD(char cEff);
  8. void wr_Lcd(unsigned char cVar,unsigned char cLcd_RS);
  9. void Ini_Lcd(void);
  10. void Tempo(char ti); // tempo
  11. void Ini_Lcd(void)
  12. {
  13.   // ****   initialisation LCD *****
  14.   PORTC=0;
  15.   Lcd_RS=0;
  16.   for(cL=0;cL<2;cL++) {TMR0=1; while(TMR0 != 0);} //32ms  afficheur
  17.  
  18.   pins=0x30;
  19.   Tempo(189); // 4,3ms E inclus
  20.   Tempo(254); // 150µs   
  21.   pins=0x20;
  22.   Tempo(254); // 150µs   
  23.   // **** initialisation paramètres LCD **********************************
  24.   wr_Lcd(0x28,0);  // Mode 4 bits 2 lignes
  25.   wr_Lcd(1,0);     // Efface l'affichage initialisation  DD-ram
  26.   wr_Lcd(0x0C,0);  // Affichage des caractères de gauche à droite et curseur se déplace
  27.   wr_Lcd(6,0);     // Déplacement vers la droite
  28. }
  29. void wr_Lcd(unsigned char cVar,unsigned char cLcd_RS)   
  30. {
  31. char b3;
  32. Lcd_RS=cLcd_RS;
  33. b3=cVar & 0xF0;   // envoi 4 bit poids fort
  34. pins=pins & 4;    // copie du bit lcd_E
  35. pins=pins | b3;
  36. Tempo(255);
  37.            
  38.     pins=pins & 4;   // envoi 4 bits poids faible
  39.     b3=(cVar<<4);
  40.     pins=pins | b3;
  41. Lcd_E;
  42.     if((cVar>2) && (Lcd_RS==0)) TMR0=255; // tempo 86µs
  43. else TMR0=228;                         // tempo 1,7ms   
  44.     while(TMR0 != 0);  
  45.    }
  46. void Tempo(char ti)
  47. {
  48. Lcd_E;
  49. TMR0=ti;
  50. while(TMR0 != 0);
  51. }
  52. void Ligne_LCD(char cLigne)
  53. {
  54. if(cLigne==1) wr_Lcd(0x80,0); // afficheur ligne 1
  55. else if (cLigne==2) wr_Lcd(0xC0,0); // afficheur ligne 2
  56. }
  57. void Efface_LigneLCD(char cEff)
  58. {
  59. if(cEff==1)
  60.  {
  61.  wr_Lcd(0x80,0);      // set DDRAM passe 1 ere ligne
  62.  for(cL=0;cL<=15;cL++)wr_Lcd(0x20,1);  // affiche des espaces
  63.  }
  64.    
  65. if(cEff==2)
  66.  {
  67.  wr_Lcd(0xC0,0);      // set DDRAM passe 2 eme ligne  
  68.  for(cL=0;cL<=15;cL++)wr_Lcd(0x20,1);  // affiche des espaces
  69.  }   
  70. }
  71. void Efface_LCD(void)
  72. {
  73.  wr_Lcd(1,0);
  74. }


 
code source C  

Code :
  1. #include<pic1687x.h> // fichier du pic16F876  
  2. #include "lcdspi.h"  // fichier du lcd HD 44780  
  3. void Message_Lcd(const char* texte); // fonction de transfert, d'un message vers lcd  
  4. /************* debut du main *************************/
  5. main()
  6. {
  7.    
  8. TRISC=0;   // portC pour lcd 44780   
  9. OPTION=0b10000101; // initialise TMR0 pas de 64µs
  10. Ini_Lcd();   // Initialisation lcd     
  11.    
  12. Efface_LCD();
  13. Ligne_LCD(1);
  14. Message_Lcd("You are a Geek" );
  15. Ligne_LCD(2);
  16. Message_Lcd("Yes ! You are a geek" );
  17. while(1);
  18. }
  19. /********** fin du main *******************************/
  20. void Message_Lcd(const char* texte)    // écriture d'une chaine de caractère
  21. {
  22. char cCount=0;
  23. while (texte[cCount] != 0 )   
  24. wr_Lcd(texte[cCount++],1);
  25. }


 
       1 PIC16F876/04p      
        Q  quartz 4Mhz
        C1 C2 condensateurs 100nF        
        C4 C5 condensateurs 22pf
        R1 résistance 2,7 2W
        R2 résistance 10K 1/4W        
        Aj résistance ajustable 10K
        T1 transistor 2N 2222
        Lcd 2*16 caractères chipset hd44780 (backlight)
 
http://alliancekirikou.free.fr/44780.gif
 
 

Code :
  1. Efface_LCD(); // efface le lcd
  2. Efface_LigneLCD(x); // efface la ligne 1 ou 2
  3. Ligne_LCD(x); // place l'affichage des caractères au début de la ligne 1 ou 2
  4. // Cette fonction utilise un pointeur et affiche "votre message" sur le lcd
  5. Message_Lcd("votre message" );
  6. Ini_Lcd(); // initialise le lcd
  7. wr_Lcd(x,y); // si  x est une instruction placer 0 pour y, y=1 pour un caractère


 
 
Enjoy ;)  
 
PS: le prochain sera en 80C51 mais faut faire plusieurs test puis g pas de microcontrolleur 80C51 ss la main... mais des pics si :D


Message édité par Dr Lous le 25-01-2006 à 16:08:04

---------------
Oseras-tu m'affronter ?
mood
Google
Posté le 29-11-2003 à 23:24:44  profilanswer
 

n°26
plut0nium
M3uH v2.0
Posté le 29-11-2003 à 23:51:13  profilanswer
 

t'as pas le même en 8bits et pour un AVR ? :D


Message édité par plut0nium le 29-11-2003 à 23:51:21

---------------
plut0nium.
Without evil there can be no good so it must be good to be evil sometimes
n°27
Dr Lous
I see old password
Posté le 29-11-2003 à 23:52:54  profilanswer
 

plut0nium a écrit :

t'as pas le même en 8bits et pour un AVR ? :D


 
et 8 bits c pas dur et pour le prochain je le sortirais pour 80C51
 
c surtout k'on peut mettre plus de LCD comme ca :D


Message édité par Dr Lous le 06-12-2003 à 02:29:01

---------------
Oseras-tu m'affronter ?
n°35
Deadog
Dain Bramaged
Posté le 30-11-2003 à 00:25:01  profilanswer
 

une tempo par nop [:matleflou] c moche ...
 
moi j'aurais fais plus compliqué :D

n°38
Dr Lous
I see old password
Posté le 30-11-2003 à 00:36:11  profilanswer
 

Deadog a écrit :

une tempo par nop [:matleflou] c moche ...
 
moi j'aurais fais plus compliqué :D


 
simple et efficace :P


---------------
Oseras-tu m'affronter ?
n°40
EXOCET_HF
Posté le 30-11-2003 à 00:37:37  profilanswer
 

j'ai pas compris du tout a quoi servais ton montage la tu peux m'éxpliquer comment tu afiche un texte ou quoi que ce soit??

n°41
Dr Lous
I see old password
Posté le 30-11-2003 à 00:38:10  profilanswer
 

Message_Lcd("votre message" );


---------------
Oseras-tu m'affronter ?
n°42
Dr Lous
I see old password
Posté le 30-11-2003 à 00:38:33  profilanswer
 

en gros tu fait un montage a base de pic tu met le lcd sur le pic et prog le pic et hop rulez


---------------
Oseras-tu m'affronter ?
n°43
EXOCET_HF
Posté le 30-11-2003 à 00:40:54  profilanswer
 

Dr lous a écrit :

en gros tu fait un montage a base de pic tu met le lcd sur le pic et prog le pic et hop rulez


 
merci ça j'ai compris qu'il fallait faire le montage et progr le pic mais tu écrit cimment sur le lcd?? c'est le pic qui écrit ce qu'il veut??

n°45
Dr Lous
I see old password
Posté le 30-11-2003 à 00:42:46  profilanswer
 

EXOCET_HF a écrit :


 
merci ça j'ai compris qu'il fallait faire le montage et progr le pic mais tu écrit cimment sur le lcd?? c'est le pic qui écrit ce qu'il veut??


oui ;) c juste une grosse fonction ;)
 
ta ka dev le reste autour... en gros si tu prog le pic comme ca ca va rien faire
 
a part afficher 2 lignes (You are a geek, et l'autre)
 
 
 
en passant ne soit pas agressif :)


Message édité par Dr Lous le 30-11-2003 à 00:46:33

---------------
Oseras-tu m'affronter ?
n°46
EXOCET_HF
Posté le 30-11-2003 à 00:46:38  profilanswer
 

Dr lous a écrit :


oui ;) c juste une grosse fonction ;)
 
ta ka dev le reste autour... en gros si tu prog le pic comme ca ca va rien faire
 
a part afficher 2 lignes (You are a geek, et l'autre)
 
 
 
en passant ne soit pas agressif :)


 
erf dsl ce n'était pas mon intension!! mais voila je t'éxplique plus mon idée quand j'ai vu ton topic c'est si il était possible en codant les entrées de ton pic de mettre un clavier comme ceux de nos pc pour écrire sur le lcd et que le méssage soit répéter tant que l'on a pas apuyé sur un reset autour ou qqchose...

n°47
Dr Lous
I see old password
Posté le 30-11-2003 à 00:50:43  profilanswer
 

oui mais un clavier entier... fo recup un clavier de pc assigner les scancode du clavier puis faire les fonctions + routine d'criture... possible mais chiant a coder ^^
 
EDIT: pas dur mais jsute chiant


Message édité par Dr Lous le 30-11-2003 à 00:50:55

---------------
Oseras-tu m'affronter ?
n°48
Deadog
Dain Bramaged
Posté le 30-11-2003 à 00:50:44  profilanswer
 

EXOCET_HF a écrit :


 
erf dsl ce n'était pas mon intension!! mais voila je t'éxplique plus mon idée quand j'ai vu ton topic c'est si il était possible en codant les entrées de ton pic de mettre un clavier comme ceux de nos pc pour écrire sur le lcd et que le méssage soit répéter tant que l'on a pas apuyé sur un reset autour ou qqchose...


 
 
ouhla, ça pousse loin ça :D
faudrait un coder le driver pour le clavier dans le pic :/

n°49
Dr Lous
I see old password
Posté le 30-11-2003 à 00:52:15  profilanswer
 

nan DDG juste les scancodes :o mais faire une tables d'assignement puis recoder pour certains caracteres et filtrer les autre...


---------------
Oseras-tu m'affronter ?
n°50
EXOCET_HF
Posté le 30-11-2003 à 01:02:50  profilanswer
 

:pt1cable:  ok ok  
 
j'ai pas trop compris je vais demander a mon prof d'éléctro ses cours sur les pics je vous comprendrez après...

n°51
Dr Lous
I see old password
Posté le 30-11-2003 à 01:06:00  profilanswer
 

ben si tu code un peu en µC tu devrais comprendre facilement...


---------------
Oseras-tu m'affronter ?
n°105
Deadog
Dain Bramaged
Posté le 30-11-2003 à 01:20:58  profilanswer
 

doc > tu vas pas filer en même temps un shéma ki permet de prog directement le pic sur son montage ? ça sera plus facil pour ceux ki veulent faire ça juste pour essayer sans avoir besoin d'avoir un programmateur de pic
d'autant ke c pas bien complexe la prog d'un pic :sleep:

n°109
Dr Lous
I see old password
Posté le 30-11-2003 à 01:31:27  profilanswer
 

bootloader.... pas difficile :D suffit de demander... je vais prepare le topic ...


---------------
Oseras-tu m'affronter ?
n°110
EXOCET_HF
Posté le 30-11-2003 à 01:34:18  profilanswer
 

Dr lous a écrit :

bootloader.... pas difficile :D suffit de demander... je vais prepare le topic ...  


 
a oui ça ça m'interesse un programateur!! et si vous aviez des cours  ou des adresses de bon cours faudrais en faire un topic car moi j'éssai d'aprendre ça en amateur en plus de mes cours d'éléctro du lycée et ben je trouve pas de bons trucs...

n°111
Dr Lous
I see old password
Posté le 30-11-2003 à 01:34:43  profilanswer
 

http://jmandon.free.fr/bootloader/bootloader.htm  
 
pas le courage de faire un topic donc je vous file un link c plsu rappide :D
 
http://www.microchipc.com/PIC16bootload/index.htm
 
officiel na :P


Message édité par Dr Lous le 30-11-2003 à 01:42:55

---------------
Oseras-tu m'affronter ?
n°114
Deadog
Dain Bramaged
Posté le 30-11-2003 à 01:40:12  profilanswer
 

nan mais je disais l'ajouter dans le shéma du début ;)

n°115
Dr Lous
I see old password
Posté le 30-11-2003 à 01:42:59  profilanswer
 

nan je ferais un topic apres tien ke pour ca mais bon faut ke je comprenne mieux le systeme avant de le faire :P  
 
PS: tain protec de flood a 2balles :o


---------------
Oseras-tu m'affronter ?
n°118
jimbofarra​r
ga bu zo meu
Posté le 30-11-2003 à 01:58:26  profilanswer
 

Le bootload n'est pas nécessaire pour faire de la programmation in-circuit de pics.
J'ai un poil la flemme de chercher ça à cette heure, mais le montage est simpliste.


---------------
Non, mais t'a déjà vu ça ? En pleine paix, il chante et puis crac, un bourre pif ! Il est complètement fou ce mec. Mais moi, les dingues, je les soigne. J'vais lui faire une ordonnance et une sévère ... J'vais lui montrer qui c'est Raoul. Aux quat' coins
n°119
Deadog
Dain Bramaged
Posté le 30-11-2003 à 02:02:23  profilanswer
 

Dr lous a écrit :

nan je ferais un topic apres tien ke pour ca mais bon faut ke je comprenne mieux le systeme avant de le faire :P  
 
PS: tain protec de flood a 2balles :o


 
 
fais pas trop de topic non plus ;) d'autant k'un bootloader c plus de la programmation mais de l'electro ;)

n°120
Dr Lous
I see old password
Posté le 30-11-2003 à 03:44:36  profilanswer
 

wee exact.... je m'enballe avec cete news section ki manquer pour faire mes topic :D


---------------
Oseras-tu m'affronter ?
n°127
bilbot
L'Isarien des Flandres
Posté le 30-11-2003 à 10:44:50  profilanswer
 

euh pc vs utilisez pas les pic 18?  
ya l'ide qui permet de coder en c (avec pas mal de lib) et notamment une lib special lcd...

n°152
Dr Lous
I see old password
Posté le 30-11-2003 à 16:37:31  profilanswer
 

ben surtout ke les 16x sont plus renpendu ... donc on trouve plus d'aide dessus


---------------
Oseras-tu m'affronter ?
n°2064
Genesis
modérateur tyranique ^_^
Posté le 29-02-2004 à 10:25:19  profilanswer
 

perso j ai préféré dériver la fonction "printf" de mon compilateur....en fait des qu on appelle "printf", le compil sort les octets par la fonction "putchar"
j ai renvoyé ces octets vers le LCD.....
avantages:
ben printf est tres puissant et reconnais les commande de format...c est pratique....

n°2086
vini59
Posté le 01-03-2004 à 14:08:31  profilanswer
 

bilbot a écrit :

euh pc vs utilisez pas les pic 18?  
ya l'ide qui permet de coder en c (avec pas mal de lib) et notamment une lib special lcd...


 
Les 16 sont plus repandus, et tu peux aussi les programmer en C  ;)

n°2218
ledinblue
Posté le 15-03-2004 à 19:06:31  profilanswer
 

Salut,
Comment est-il possible de faire un baragraphe en C (si possible un petit exemple) et si c'est pas trop demander en basic.
merci

n°2219
KnX
To be or not to code.
Posté le 15-03-2004 à 19:19:59  profilanswer
 

genesis a écrit :

perso j ai préféré dériver la fonction "printf" de mon compilateur....en fait des qu on appelle "printf", le compil sort les octets par la fonction "putchar"
j ai renvoyé ces octets vers le LCD.....
avantages:
ben printf est tres puissant et reconnais les commande de format...c est pratique....


 
mmm, tu pourrais en dire plus sur la manière que t'as utilisé pour dériver par hasard ?


---------------
/!\ KnX's bash NP : Norah Jones - Don't Miss You At All /!\
n°3616
Angeliz
Posté le 26-07-2004 à 00:05:08  profilanswer
 

Bonsoir
 
je suis l'auteur de ce code
voici mon site http://angeliz.free.fr
 
cordialement
 
 

n°3618
Dr Lous
I see old password
Posté le 26-07-2004 à 06:52:58  profilanswer
 

ha bah voila l'origine :D
 
kwel je te met dans les favoris :)

n°3620
Genesis
modérateur tyranique ^_^
Posté le 26-07-2004 à 09:16:19  profilanswer
 

KnX a écrit :

mmm, tu pourrais en dire plus sur la manière que t'as utilisé pour dériver par hasard ?


ben le compilateur, lorsque tu fais un printf te renvois les codes ascii sur le port com par défaut, j ai réorienté l envoi vers le port du lcd, c est tout :)


---------------
la vitesse de la lumière étant largement supérieure à celle du son, bien des gens ont l'air brillants jusqu'a ce qu'ils ouvrent leur bouche....
n°3622
Deadog
Dain Bramaged
Posté le 26-07-2004 à 12:45:31  profilanswer
 

où comment utiliser fprintf [:dslam]

n°3624
Genesis
modérateur tyranique ^_^
Posté le 26-07-2004 à 12:54:59  profilanswer
 

oui enfin y a un peu de manipulation, il faut faire un shift du code et générer les signaux de controle du lcd car par defaut c est sur le port com UART serie que ça pars.


---------------
la vitesse de la lumière étant largement supérieure à celle du son, bien des gens ont l'air brillants jusqu'a ce qu'ils ouvrent leur bouche....
n°3625
Deadog
Dain Bramaged
Posté le 26-07-2004 à 12:56:02  profilanswer
 

j'adore la différence entre la fonction servant à écrire une chaine de caractère proposé ici et celle de thacid :D :
 
ici :

Code :
  1. void Message_Lcd(const char* texte)    // écriture d'une chaine de caractère
  2.    {
  3.      char cCount=0;
  4.      while (texte[cCount] != 0 )   
  5.      wr_Lcd(texte[cCount++],1);
  6.    }


 
Thacid :

Code :
  1. Uint8 AN_HD44780_PrintString (str_AN_HD44780_com2 *com2, char *string) {
  2.   char *use=NULL, *diff_len=NULL, *local=NULL;
  3.   Uint8 len, calc, new_line;
  4.   str_AN_HD44780_position old_pos;
  5.  
  6.   if(com2 == NULL || string == NULL) {
  7.     #ifdef SHOW_ERROR
  8.     THD_SetError ("AN_HD44780_PrintString : wrong parameter\n" );
  9.     #endif // SHOW_ERROR
  10.     return 0;
  11.   }
  12.  
  13.   if((local = (char *) strdup(string)) == NULL) {
  14.     #ifdef SHOW_ERROR
  15.     THD_SetError ("AN_HD44780_PrintString : "__ALLOC_ERROR__"\n" );
  16.     return 0;
  17.     #endif // SHOW_ERROR
  18.   }
  19.   len = strlen(local);
  20.  
  21.   // Si la chaîne fait plus du nombre de caractère de LCD, la tronquer
  22.   calc = (com2->col * com2->row) - ((com2->last_pos.col - 1) + ((com2->last_pos.row - 1) * com2->col));
  23.   if(len > calc)
  24.     *(local + calc) = 0;
  25.  
  26.   // A cause de l'enchevaîtrement des lignes avec le HD44780, écrire une chaîne de caractère sur plusieurs lignes s'avère hasardeux
  27.   // On traite donc ligne par ligne, en confiant les autres lignes à la même procédure (PrintString) par récursivité
  28.   calc = com2->col - com2->last_pos.col + 1;
  29.   if(len > calc) {
  30.     // Pas de control d'erreur, on conscidère que si cela est nécessaire, il existe le SHOW_ERROR
  31.     old_pos = com2->last_pos;
  32.     if((new_line = com2->last_pos.row + 1) > com2->row) new_line = 1;
  33.     // On balance tout le reste de la string sauf la première ligne en récursif en modifiant la position du curseur sur le LCD
  34.     AN_HD44780_SetPos (com2, new_line, 1);
  35.     AN_HD44780_PrintString (com2, (local + calc)); // Recursif
  36.     // Et on retourne au traitement uniquement d'une seul ligne
  37.     *(local + calc) = 0;
  38.     AN_HD44780_SetPos (com2, old_pos.row, old_pos.col);
  39.   }
  40.  
  41.  
  42.   if(com2->id == THD_FALSE) {
  43.     use = diff_len = local + len - 1;
  44.     while(use >= local) {
  45.       AN_HD44780_WriteData (com2, *use);
  46.       use--;
  47.     }
  48.    
  49.     #ifdef SHOW_VERBOSE
  50.     if(VERBOSE_FILE != NULL) {
  51.       fprintf(VERBOSE_FILE, VERBOSE_ID"AN_HD44780_PrintString : (%d) %s\n", (int) (diff_len - use), local);
  52.       fflush(VERBOSE_FILE);
  53.     }
  54.     #endif // SHOW_VERBOSE
  55.    
  56.     free(local);
  57.     return (char) (diff_len - use);
  58.    }else{
  59.     use = local;
  60.     while(*use != 0) {
  61.       AN_HD44780_WriteData (com2, *use);
  62.       use++;
  63.     }
  64.    
  65.     #ifdef SHOW_VERBOSE
  66.     if(VERBOSE_FILE != NULL) {
  67.       fprintf(VERBOSE_FILE, VERBOSE_ID"AN_HD44780_PrintString : (%d) %s\n", (int) (use - local), local);
  68.       fflush(VERBOSE_FILE);
  69.     }
  70.     #endif // SHOW_VERBOSE
  71.    
  72.     free(local);
  73.     return (char) (use - local);
  74.   }
  75. }


 
 
 [:666 ]  [:matleflou]
 
 
edit :
je précise qu'elle est pas terminer
il faut que je retaille la partie "com2->id == THD_FALSE" (kan le lcd est en décrément)


Message édité par Deadog le 26-07-2004 à 12:58:53
n°3629
Genesis
modérateur tyranique ^_^
Posté le 26-07-2004 à 14:00:34  profilanswer
 

perso je gere pas ça, c est moi qui gere la partie changement de ligne etc
je gere pas le \n etc...


Message édité par Genesis le 26-07-2004 à 14:00:46

---------------
la vitesse de la lumière étant largement supérieure à celle du son, bien des gens ont l'air brillants jusqu'a ce qu'ils ouvrent leur bouche....
n°3633
Deadog
Dain Bramaged
Posté le 26-07-2004 à 19:38:04  profilanswer
 

Genesis a écrit :

perso je gere pas ça, c est moi qui gere la partie changement de ligne etc
je gere pas le \n etc...


 
 
oui mais moi je fais une librairie d'exploitation de LCD de haut niveau
donc tout doit être facilité pour l'utilisateur final de la lib (le programmeur qui utilisera la lib) ;)

n°3672
Angeliz
Posté le 02-08-2004 à 17:53:01  profilanswer
 

Bonjour a tous
 
les exemples C de mon site sont simples pour être compris plus facilement afin de faire évoluer le code en fonction de vos besoins.
 
simple aussi, car cela prend moin de place dans le PIC  
c'est important.
 
le code ci-dessous extrait d'un de mes tutorials
fonctionne avec le compilatur HI-TECH
 
si vous essayez de placer cette fonction sur CodeVisionAvr
elle ne fonctionne pas il faut modifier le code.
 

Citation :


void Message_Lcd(const char* texte) // écriture d'une chaine de       caractère  
   {  
     char cCount=0;  
     while (texte[cCount] != 0 )      
     wr_Lcd(texte[cCount++],1);  
   }
 


 
très cordialement
Angeliz

mood
Google
Posté le 02-08-2004 à 17:53:01  profilanswer
 

 Page :  1  2
Page Précédente 

Aller à :
Ajouter une réponse
 

Hit Parade