Voici la doc de ta carte easypic4, tu y trouveras tout ce qu'il te faut sur les dipswitchs et les cavaliers pour configurer ta carte selon ton programme.
Chez eux "cartes de développement" prend tout son sens...
@+
easypic4_manual.pdf
PS: je poste le pdf, ainsi il est hébergé par le forum et dans 5 ans cette doc y sera encore et probablement plus sur le site du fabricant.
Pour commencer merci, j'ai bien tout réinstaller comme il le faut.
Mais les ennuis ne sont pas terminés, une fois tout installé, au moment de tester les exemples, je compile et là après recherche cela proviendrait du port USB en lui meme qui ne délivre que 3.3V au lieu des 5 requis comment régler cet ultime problème ?
C'est pas plutôt ton PIC qui serait trop récent par rapport au firmware de la carte ?
Encore moi .....
Quand ta carte est branchée à ton PC et sous tension tu ouvres "MikroProg Suite" et tu regardes si ton PIC est dans la liste.
C'est quoi la référence de ton µcontroleur ?
t'as bien installé le bon driver qui correspond a ta carte ?
Sur le CD dont je dispose j'ai pris le driver qui se nomme : USB18PRG-Vista-x64, donc compatible a priori avec Windows7 64 bits que j'ai.
A priori c'est le bon driver https://www.mikroe.com/forum/viewtopic.php?f=12&t=26146
Es tu certain que les exemples que tu as essayés sont compatibles avec le 16f877 ?
J'espérais que oui mais en feuilletant les forums : notamment celui du fabriquant, je me suis aperçu que je me trompais, mais sur le site suivant des exemples plutôt sympas sont donnés, encore une fois, je télécharge, et voulant tester, je m'aperçois que les fichiers ne sont pas compatibles avec MikroC. Que faire?
C'est normal ils sont écrits en MikroPascal a toi de les retranscrire en C.
Sinon tu injectes directement le .hex dans ton PIC je crois que tu peux les télécharger sur le site
ou tu les demandes a l'auteur.
Alors oui, enfin quelque chose qui marche, j'ai téléchargé electronique_led_clignotante_1 6f877_001.zip décompressé puis directement implanté le fichier hex dans le pic à l'aide de mikroProg et ça marche, j'ai une ligne de leds qui clignotent
de même avec le 7 segments ça a l'air de fonctionner, enfin au moins je peux agir sur le fonctionnement de la carte.
Ma question est la suivante, étant donné que j'arrive uniquement à programmer via le fichier .hex et que mikroC ne propose pas de sauvegarde sous l'extension .hex, comment donc implanter mes futurs programmes dans ma carte? Finalement comment les convertir en .hex?
Lorsqu'on developpe un projet, il faut creer un projet, ca parait evident et pourtant...
Tu ouvres ton IDE (Interface De Developpement), l'environnement de programmation en somme, puis tu fais "new project", un fichier mcppi va etre creer, l'IDE te demande alors quel micro tu comptes utilise, quel valeur de quartz, le dossier de destination, bref tout ce qu'il faut pour creer un dossier ou tes fichiers vont etre stockes, y compris ton hex lorsqu'un compilation realisee avec succes sera executee.
Il faut commencer par un petit projet, genre je fais clignoter une led, et a chaque fois que tu changes de projet tu recrees un nouveau dossier projet, ainsi tu peux rappeler chacun de tes projets, l'IDE s'ouvrira la ou tu t'etais arrete precedemment.
A chaque compilation reussie, ton hex est sauvegarde dans ce dossier automatiquement, c'est pour ca qu'il ne te demande rien, c'est la que tous les fichiers que tu vas creer (c, h) doivent etre stockes, ils le sont automatiquement si tu les crees depuis ton projet.
Si tu veux recuperer un fichier C cree ailleurs, tu fais un copier-coller et bien sur tu le colles dans le dossier projet, il apparaitra dans l'IDE en faisant file -> open puis tu va chercher le fichier que tu veux ouvrir.
Si tu souhaites inclure le fichier dans ta compilation il faut utiliser les onglets lateraux a droite et prendre l'onglet "project manager" puis "add files".
Commence par un petit projet et familiarise toi avec l'IDE en faisant des essais, tu ne risque rien d'essayer.
@+
Youpi ! ça marche ! Ahlala le manque de rigueur, mon péché. Merci beaucoup en tout cas
J'ai maintenant ma petite led qui clignote,je passe à la commande du lcd (soyons fou)
Mais il me semble que mon initialisation n'est pas complète car j'ai le message d'erreur suivant :Code:void main() { TRISB=0; Lcd_Init(); Lcd_Cmd(_Lcd_CLEAR); Lcd_Cmd(_Lcd_CURSOR_OFF); Lcd_Out(1,1,"salut"); }
De plus dans mes cours de 1ère, pour initialiser le lcd, on se contenter de mettre "Lcd_Initi(&PORTB);" commande qui ne fonctionne visiblement plus. Qu'est-ce que j'ai mal fait?
Tu n'as pas declare la configuration des ports gerant ton LCD...
Code:sbit LCD_RS at LATB4_bit; sbit LCD_EN at LATB5_bit; sbit LCD_D4 at LATB0_bit; sbit LCD_D5 at LATB1_bit; sbit LCD_D6 at LATB2_bit; sbit LCD_D7 at LATB3_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; void main(){ TRISB = 0; Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); Lcd_Out(1,1,"salut"); }
Alors j'ai adapté ce que tu m'a donné, j'ai donc :Du coup plus d'erreur de compilation, mais lorsque j'implante, rien ne change.Code:sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB0_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; void main(){ TRISB = 0; Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); Lcd_Out(1,1,"salut"); }
Surement un cavalier mal place sur ta carte
Ou le contraste au minimum.
Apres verification sur l'EASYPIC4 la configuration du LCD se fait avec le portD, donc il faut modifier le code en prenant:
D4---D7 du LCD sur PortD4----D7 du PIC puis prendre D2 du PIC pour RS de l'afficheur et D3 du PIC pour E de l'afficheur.
Tout devrait rentrer dans l'ordre.
Tout est a la page 23 de la doc que je t'ai poste....
Oups j'ai rien dit.....
Dernière modification par flyingrock ; 30/12/2012 à 12h46.
D'une part je tenais à remercier Hulk et flyingrock pour leur incroyable patience, gabuzo aussi. Je poste le code qui marche comme ça les prochains dans mon cas auront un exemple de ce qui a marché chez moi :Mais mon ambition est encore un peu plus élevée, il s'agit de lier Conversion analogique numérique et Lcd, je voudrais en fait afficher la valeur de la conversion sur le Lcd.Code:sbit LCD_RS at RD2_bit; sbit LCD_EN at RD3_bit; sbit LCD_D4 at RD4_bit; sbit LCD_D5 at RD5_bit; sbit LCD_D6 at RD6_bit; sbit LCD_D7 at RD7_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; void main(){ TRISD = 0; Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); Lcd_Out(1,1,"salut"); while(1); }
du coup j'ai bien fait un programme combinant les deux :Mais comme Hulk l'a déjà noté ici mon programme s'avère trop naïf, bien qu'il n'y ait pas d'erreur de compilation, il ne répond pas à ce que j'espérais. Je pense que le souci se situe au niveau de la variable temp_res qui n'est pas un texte à proprement parler. J'ai essayé avec Lcd8_Out mais la fonction n'a plus l'air d'être en usage.Code:sbit LCD_RS at RD2_bit; sbit LCD_EN at RD3_bit; sbit LCD_D4 at RD4_bit; sbit LCD_D5 at RD5_bit; sbit LCD_D6 at RD6_bit; sbit LCD_D7 at RD7_bit; //le lcd est sur le portD sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; unsigned int temp_res; void main() { ADCON1=0X80; TRISA=0xFF; //on met le portA en entrée car les deux potentiomètres sont situés sur le PortA TRISD=0; //LCD en sortie do{ temp_res=Adc_Read(3);//on lit la valeur du potentiomètre relié à l'entrée A3 Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); Lcd_Chr(1,1,"temp_res"); } while(1); }
Merci d'avance pour le déblocage.
Oui c'est normal que ca ne fonctionne pas
La valeur que tu lis est une valeur numerique et toi tu veux afficher un texte, il faut donc que tu convertisses celle-ci pour pouvoir envoyer ta chaine sur le LCD.
Voici comment faire:
cela t'affichera la valeur de la conversion analogique donc une valeur entre 0 et 1023.Code:char txt[5]; // on declare un tableau de type char ......... Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); do{ temp_res=Adc_Read(3);//on lit la valeur du potentiomètre relié à l'entrée A3 WordToStr(temp_res, txt); // conversion d'un entier non signe en chaine de caracteres Lcd_Out(1,1,txt); Delay_ms(100); } while(1);
Il suffira d'ecrire une formule intermediaire pour avoir la valeur en Volt.
Je te laisse chercher.
Il est souvent utile de moyenner quand tu fais une mesure analogique pour avoir une valeur plus stable.
Dans ce cas tu peux ecrire un truc du genre:
Code:unsigned int result=0, moyenne; char moy_ADCmesure[5]; for (n=0; n<10; n++) { temp_res=Adc_Read(3);//on lit la valeur du potentiomètre relié à l'entrée A3 result= result + temp_res; } moyenne=(int)result/n; WordToString(moyenne, moy_ADCmesure); LCD_Out(1,1, moy_ADCmesure);
Merci beaucoup cela fonctionne très bien, j'ai tenté de convertir en tension par une multiplication par 5/1024, il m'affiche uniquement le chiffre des unités. j'ai donc tenté 5000*1024 et là l'affichage se fait sur deux cases mais est aléatoire, maintenant en faisant la multiplication avec 5/1024*1000, j'obtiens respectivement 0, 1000, 2000,..., 4000. (j'ai pas risqué de forcé pour atteindre 5000). Donc il apparait donc que la variable n'est pas assez grande pour contenir la valeur à laquelle je veux l'affecter j'ai donc poser une variable intermédiaire que j'ai appellé "tension" et j'ai vu les choses en grand car j'ai posé: "signed long int tension; " mais là encore j'ai uniquement un affichage sur deux cases du lcd.Code:char txt[5]; // on declare un tableau de type char ......... Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); do{ temp_res=Adc_Read(3);//on lit la valeur du potentiomètre relié à l'entrée A3 WordToStr(temp_res, txt); // conversion d'un entier non signe en chaine de caracteres Lcd_Out(1,1,txt); Delay_ms(100); } while(1);
C'est juste qu'il faut changer de variable et prendre "float" car ton resultat n'est plus un entier
Puis faire une conversion avec FloatToStr.
Ca donne ca en code:
Code:char txt[15]; // on declare un tableau de type char contenant 15 caracteres float result; // result est une variable decimale de type float. ......... Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); do{ temp_res=Adc_Read(3);//on lit la valeur du potentiomètre relié à l'entrée A3 result=temp_res*5/1024; FloatToStr(result, txt); // conversion d'un entier non signe en chaine de caracteres Lcd_Out(1,1,txt); Delay_ms(100); } while(1);
Mille merciS, c'est vraiment gentil de ta part. Chez moi il a pas aimé le *5/1024 du coup je l'ai remplacé par la valeur approchée c'est à dire 0,0048828125 et là ça marche, juste un décallage de puissance de dix que je n'arrive pas à éviter mais l'essentiel est là :J'ai supprimé l'intermédiaire temp-res car il est inutile et le temp_résséCode:sbit LCD_RS at RD2_bit; sbit LCD_EN at RD3_bit; sbit LCD_D4 at RD4_bit; sbit LCD_D5 at RD5_bit; sbit LCD_D6 at RD6_bit; sbit LCD_D7 at RD7_bit; //le lcd est sur le portD sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; char txt[15]; // on déclare un tableau du type char unsigned int temp_res; float tension; // result est une variable decimale de type float. void main() { ADCON1=0X80; TRISA=0xFF; //on met le portA en entrée car les deux potentiomètres sont situés sur le PortA TRISD=0; //LCD en sortie Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); do{ //on lit la valeur du potentiomètre relié à l'entrée A3 tension=Adc_Read(3)*(0.0048828125); FloatToStr(tension, txt); // conversion d'un entier non signe en chaine de caracteres Lcd_Out(1,1,txt); Delay_ms(100); } while(1); }
Bonjour et bonne année à tous, c'est encore moi, une toute dernière question, est-il technologiquement faisable de relier des câbles à la carte EasypiC4, j'entends faire arriver un câble en cuivre pour récupérer la tension et la convertir en numérique? Je ne vois absolument de connectique pour ce type d'usage sur la carte, d'où ma question.
Merci d'avance pour vos très bonnes réponses.
Cordialement, Arthur.
Tu veux dire quoi par "câble" ? Tu as accès à tous les PORT de ton PIC sur les "header" à la droite de l'EasyPIC.
Soit tu soudes dessus, soit (plus propre) tu mets un connecteur femelle avec une nappe par exemple ou des clips dans un connecteur femelle qui iront sur les "headers" comme l'a explique eSb.