Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/04/2013, à 03:02

nexus66

Quelques problèmes lors du développement du code d'un PIC 16C74B

Bonsoir à tous.
Voilà, j'ai passé une semaine à comprendre le fonctionnement d'une carte d'acquisition (qui permet de de mesurer 4 entrées analogiques via une sortie RS232 qui on pourra l'utiliser via internet etc ..).
J'ai schématisé le circuit sur Isis et depuis 4 jours j'essaie de développer le code du Pic avec la langage C.
Voilà, je me bloque maintenant sur une question :
Comment faire pour envoyer les données collectés du Pic (Tensions etc ...) via le port RS232 ?
J'ai cherché sur google et j'ai trouvé des bibliothèques de ce port (en c et en c++) qui abritent plusieurs fonctions et procédures (exemple : Ouvrir le port ...) .
J'ai constaté que ces bibliothèques tournent sur le Kernel Linux ou bien sur le Dos Windows. J'ai trouvé aussi un code source d'une carte d'acquisition qui envoie les tension mesurées à partir d'un Pic 16Fxx via le port RS232 en utilisant l'hyper-terminal (Linux ou Windows) en écrivant : printf(...) .
Ce que j'ai pas compris, c'est : Devrais-je créer une bibliothèque pour mon programme pour que je puisse ouvrir le port RS232 ? Ou bien le compilateur fera ceci automatiquement ?

Voilà mon code source (incomplet) et la bibliothèque dont je parle :  ici sur mediafire


Merci pour l'aide.
Mes salutations.


Un jour on vivra dans un monde libre sans argent et sans banques.
Tout le monde s'adhérera à l'Open Source et le partage sera la devise de toute personne.

Hors ligne

#2 Le 15/04/2013, à 10:38

claudius01

Re : Quelques problèmes lors du développement du code d'un PIC 16C74B

Bonjour,

- Il y a ceci : C sample code for PIC micros and Hi-Tech C qui présente un certain nombre d'exemples en Langage C pour PIC 16.
- J'ai ouvert le projet mediafire et je crains que le code correspondant ne soit trop orienté GNU/Linux ;-).


Cordialement, A+
--
Claudius

Dernière modification par claudius01 (Le 15/04/2013, à 11:20)

Hors ligne

#3 Le 15/04/2013, à 17:29

nexus66

Re : Quelques problèmes lors du développement du code d'un PIC 16C74B

claudius01 a écrit :

J'ai ouvert le projet mediafire et je crains que le code correspondant ne soit trop orienté GNU/Linux ;-).Claudius

Salut.
Merci pour ta réponse.
Le code est à la fois une programmation d'un Pic Basic (création d'une carte d'acquisition) que je vais l'utiliser pour communiquer des machines (téléphones,ordinateurs,etc...) au réseau internet. Je vais utiliser Ubuntu comme OS standard lors du développement et lors des tests, cependant lors de la recherche des instructions qui permettent au Pic de reconnaître le port RS232, je n'ai trouvé que des instructions qui tournent soi sur le kernel Linux ou sur le Dos.
C'est pourquoi j'ai posé mon problème ici dans ce forum en espérant avoir une aide.
Je vais chercher sur tes liens et j'espère que je trouverai des réponses.
Merci encore une fois et bonne journée.

Dernière modification par nexus66 (Le 15/04/2013, à 17:34)


Un jour on vivra dans un monde libre sans argent et sans banques.
Tout le monde s'adhérera à l'Open Source et le partage sera la devise de toute personne.

Hors ligne

#4 Le 18/04/2013, à 14:16

nexus66

Re : Quelques problèmes lors du développement du code d'un PIC 16C74B

De retour.
Voilà, j'ai pu écrire un nouveau code C et j'ai trouvé comment envoyer des données sur le port RS232 via un Pic.
Et maintenant je me demande comment rectifier ce code pour qu'il puisse accepter 4 entrées analogiques et envoyer les données requis un par un via le port RS232.
Si vous aviez une idée ça sera super gentil de votre part.
Voilà le code en C et merci.


#include <16C74b.h>               //importer le fichier hex du Pic
#device adc=15                    // Il y a 15 pins dans le shéma du Pic
#use delay (clock=4190000)        // La valeur de l'horloge choisie 
#use rs232 (baud=9600,xmit=PIN_E0,rcv=PIN_E1)
unsigned int 16 tension;          // La valeur de tension est sur 16 bits
unsigned int 32 volts;              // La veleur de volts est sur 32 bits
#use rtos(timer=0,minor_cycle=100 ms)   //Cycle de RTOS
#task (rate=200 ms,max=1 ms)         // Répéter cette tâche chaque 1ms

//Déclarer la tâche diodes pour clignoter les LED sur les pins B1,B2,B3 et B4
void diodes()
{
int i=0;
if (i<4)
{
if (i=0) { output_toggle (PIN_B1)}  //Clignoter la diode sur le PIN B1
if (i=1) { output_toggle (PIN_B2)}
if (i=2) {output_toggle (PIN_B3)}
if (i=3) {output_toggle (PIN_B4)}
i=i+1;
}
else (i=0)
}

//Déclarer la tâche mesure_voltage prendra les mesures sur le pic chaque 10ms
#task (rate=2s,max=100 ms)
void mesure_voltage()
{
int tension;
tension=read_adc(); //Lecture des tensions A/D
volts=(unsigned int 32)tension*5000;   //On travail avec une tension de référence de 5V 
volts=volts/1024;                      //d'où les tensions seront convertis en mV en multipliant par 5000 et en divisant pas 1024
}

//Déclarer la tâche envoie_rs232 appellé chaque 100 ms
void envoie_rs232 ()
{
printf("La tension mesurée est =%LumV\n\r",volts);   //Envoyer la valeur mesuré au port RS232
}

//Dévut du programme principale main
void main ()
{
set_tris_b(0x00); //initialisation des pins A de la sortie
output_b(0);      //effacer les données sur le pins B
set_tris_d(0xff); //initialisation des pins D de l'entrée
setup_adc_port(ALL_ANALOG);  //A/D ports
setup_adc(ADC_CLOCK_DIV_32);
set_adc_channel(0); // Sélection d'où on va reçevoir les tensions
set_adc_channel(1);
set_adc_channel(2);
set_adc_channel(3);

delay_ms(10);
rtos_run();  // Activer le RTOS

}

Dernière modification par nexus66 (Le 18/04/2013, à 14:18)


Un jour on vivra dans un monde libre sans argent et sans banques.
Tout le monde s'adhérera à l'Open Source et le partage sera la devise de toute personne.

Hors ligne

#5 Le 18/04/2013, à 14:51

claudius01

Re : Quelques problèmes lors du développement du code d'un PIC 16C74B

Bonjour,

- Quel est le code source de la procédure 'read_adc()' et en particulier est-elle en charge de changer d'entrée analogique ?
- La tâche d'envoi RS232 (UART serait d'ailleurs plus juste car RS232 est une norme électrique ;-) étant cadencée toutes les 100 mS et que la tâche d'acquisition est cadencée toutes les 10 mS, il est déjà acquis qu'il faut passer par un tableau unsigned int 32 volts[4] ...

PS: Post qui ressemble à envoie multiple via rs232 avec le picc où l'on retrouve cette même procédure 'read_adc()'  ;-)


Cordialement, A+
--
Claude

Dernière modification par claudius01 (Le 18/04/2013, à 16:01)

Hors ligne

#6 Le 18/04/2013, à 15:32

nexus66

Re : Quelques problèmes lors du développement du code d'un PIC 16C74B

Vraiment merci claudius01 de t'intéresser à mon sujet.
Je vais voir ce que je pourrai faire et je te tiendrai au courant. (Je vais voir le code source de la procédure read_adc() et aussi voir unsigned int 32 volts[4] et ses résultats).
Merci encore une fois et bonne journée smile


Un jour on vivra dans un monde libre sans argent et sans banques.
Tout le monde s'adhérera à l'Open Source et le partage sera la devise de toute personne.

Hors ligne