Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Idée, bugs, propositions .......
liaison serie (uart)-excel
francknvs
Débutant
Débutant
Messages : 82
Enregistré en : septembre 2017
Localisation : Paca-toulon

#1 Message par francknvs » sam. 17 févr. 2024 17:44

bonjour à tous,
je travaille actuellement sur un petit projet 18f4550 avec MplabX et son Compilo XC8..
c'est un tout petit projet qui recupere des valeurs de temparature analogique que je transfert via liaison serie sur un hyper terminal (ou une fenetre QTCreator)...jusqu'ici tout est ok

je souhaiterai à présent envoyer ces valeurs dans une colonne de feuille excel en tps reel...
quelqu'un aurait une idée ou meme une petite routine?
j'ai essayé "PLX-DAQ_R2.xlsm"--> sans succes

voici mon code

Code : Tout sélectionner

/*
 * File:   Ihm_Temp.c
 * Author: Acer_Franck
 *
 * Crée le 15 février 2021, 18:59
 */


#include <xc.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "config_intosc.h" //Inclusion du fichier d'en tete pour les Bits de Configuration du Pic

//Prototype des Fct ADC
void ADC_Init();
int ADC_Read(int);

//Prototype de Gestion du Temps
void MS_delay(unsigned int );

//Prototype des Fct USART
void USART_Init(long baud_rate);
void USART_TxChar(char);
void USART_SendString(const char *);


#define V_Ref 5.00               //Tension de Référence- 5Volts
#define F_CPU 8000000/64
#define Baud_value (((float)(F_CPU)/(float)baud_rate)-1)

void main() {
//--> Déclaration des variables
    int digital_Adc; //Variable de lecture directe 
    float voltage; //Variable de type Float pour la conversion  
    char data_Capt_An00[6];// Tableau de 06 Char
    char data_Capt_An01[6];// Tableau de 06 Char    
    char data_Capt_An02[6];// Tableau de 06 Char
    char data_Capt_An03[6];// Tableau de 06Char
    char data_Capt_An04[6];// Tableau de 06Char
    
//--> Initialisation des Options d'Oscillateur OSCCON
    OSCCON = 0x72; /*Oscillateur Interne sur 8 MHz*/

//--> Initialisation des Fct
    ADC_Init(); /*Initialisation du Convertisseur 10-bit ADC*/
    USART_Init(9600); /*Initialisation del'USART à 9600 baud rate*/

//------------------------------------------------------------------------------  
    // DEBUT DU PROGRAMME PRINCIPAL
    while (1) 
    
{
//--> 1ere Conversion A/D sur AN00
        digital_Adc = ADC_Read(0); // Appel de la Fct de Lecture du canal 0   
        voltage = digital_Adc * ((float) V_Ref / (float) 1023); //Calcul de la Conversion des valeurs Analogique en Numerique
        sprintf(data_Capt_An00, "AN00%.2f", voltage); //Conversion de la valeur Entiere en Chaine ASCII
        USART_SendString(data_Capt_An00);// Appel de la Fct USART de Transmission de la chaine ASCII 
        USART_TxChar(0x0D); // Appel de la Fct USART de Transmission du Caractere (\r), de retour chariot comme separateur
        MS_delay(10);
//--> 2me Conversion A/D sur AN01
        digital_Adc = ADC_Read(1); // Appel de la Fct de Lecture du canal 1         
        voltage = digital_Adc * ((float) V_Ref / (float) 1023); //Calcul de la Conversion des valeurs Analogique en Numerique
        sprintf(data_Capt_An01, "AN01%.2f", voltage); //Conversion de la valeur Entiere en Chaine ASCII
        USART_SendString(data_Capt_An01); // Appel de la Fct USART de Transmission de la chaine ASCII 
        USART_TxChar(0x0D); // Appel de la Fct USART de Transmission du Caractere (\r), de retour chariot comme separateur
        MS_delay(10);
//--> 3me Conversion A/D sur AN02
        digital_Adc = ADC_Read(2); // Appel de la Fct de Lecture du canal 0   
        voltage = digital_Adc * ((float) V_Ref / (float) 1023); //Calcul de la Conversion des valeurs Analogique en Numerique
        sprintf(data_Capt_An02, "AN02%.2f", voltage); //Conversion de la valeur Entiere en Chaine ASCII
        USART_SendString(data_Capt_An02);// Appel de la Fct USART de Transmission de la chaine ASCII 
        USART_TxChar(0x0D); // Appel de la Fct USART de Transmission du Caractere (\r), de retour chariot comme separateur
        MS_delay(10);
//--> 4me Conversion A/D sur AN03
        digital_Adc = ADC_Read(3); // Appel de la Fct de Lecture du canal 1         
        voltage = digital_Adc * ((float) V_Ref / (float) 1023); //Calcul de la Conversion des valeurs Analogique en Numerique
        sprintf(data_Capt_An03, "AN03%.2f", voltage); //Conversion de la valeur Entiere en Chaine ASCII
        USART_SendString(data_Capt_An03); // Appel de la Fct USART de Transmission de la chaine ASCII 
        USART_TxChar(0x0D); // Appel de la Fct USART de Transmission du Caractere (\r), de retour chariot comme separateur
        MS_delay(10);    
        
//--> 5me Conversion A/D sur AN04
        digital_Adc = ADC_Read(4); // Appel de la Fct de Lecture du canal 1         
        voltage = digital_Adc * ((float) V_Ref / (float) 1023); //Calcul de la Conversion des valeurs Analogique en Numerique
        sprintf(data_Capt_An04, "AN04%.2f", voltage); //Conversion de la valeur Entiere en Chaine ASCII
        USART_SendString(data_Capt_An04); // Appel de la Fct USART de Transmission de la chaine ASCII 
        USART_TxChar(0x0D); // Appel de la Fct USART de Transmission du Caractere (\r), de retour chariot comme separateur
        MS_delay(10);         
        
        
        
    
}
    // FIN DU PROGRAMME PRINCIPAL
//------------------------------------------------------------------------------
}

/*****************************Initialisation du Convertisseur A/D***********************/
void ADC_Init() {
    TRISA = 0xff; /*PortA en Entrée*/
    ADCON1 = 0x0E; // La reference de Tension est VDD -  Configuration des Pin en Mode Analogique
    ADCON2 = 0x92; // Justification du resultat à Droite, 4Tad and Fosc/32.
    ADRESH = 0; //Effacer le registre d'Adresse de poids Fort de sortie de l'ADC
    ADRESL = 0;//Effacer le registre d'Adresse de poids Faible de sortie de l'ADC
}

/*****************************Lecture du Convertisseur A/D***********************/
int ADC_Read(int channel) 
{
    int digital_Adc;
    ADCON0 = (ADCON0 & 0b11000011) | ((channel << 2) & 0b00111100); //Inibition de la conversion ( ADON=0) et Canal 'int channel'selectionné ex:(CHS3CHS2CHS1CHS0=0000)                                                        
    ADCON0 |= ((<< ADON) | (<< GO)); //Validation de ADC et debut de conversion
    while (ADCON0bits.GO_nDONE == 1); // Delai d'attente de Fin de Conversion: Go/done=0 Conversion Terminée
    digital_Adc = ((ADRESH * 256) | ADRESL); //Combinaison des 8-bit de poids faibles et des 2-bit de poids forts
    return (digital_Adc);
}

/*****************************USART Initialisation*******************************/
void USART_Init(long baud_rate) 
{
    float temp;
    TRISC6 = 0; //Pin RC6 en Sortie Tx 
    TRISC7 = 1; //Pin RC7 en Entrée Rx
    temp = Baud_value;
    SPBRG = (int) temp; //Baud rate=9600, SPBRG = (F_CPU /(64*9600))-1
    TXSTA = 0x20; //Registre de 8 Bit pour la validation de l'Emission(TX) enable
    RCSTA = 0x80; //Registre de 8 Bit pour la validation de la Reception(RX) enable
}

/******************Fonction d'EMMISION d'un Caractere sur HYPERTERMINAL*****************************************/
void USART_TxChar(char out) 
{
    while (TXIF == 0); //attente du drapeau d'interruption de transmission
    TXREG = out; //attendre que le drapeau d'interruption de transmission soit activé,indiquant que TXREG est prêt pour une autre transmission
}

/******************Fonction d'EMMISION de la DATA sur HYPERTERMINAL*****************************************/
void USART_SendString(const char *out) 
{
    while (*out != '\0') 
    
{
        USART_TxChar(*out);
        out++;
    }
}

/******************Fonction de Gestion du Temps*****************************************/
void MS_delay(unsigned int val)
{
     unsigned int i,j;
        for(i=0;i<=val;i++)
            for(j=0;j<81;j++);//Ce compteur assigne 1 ms pour une freq de 8MHz 
}


par avance,

merci

liaison serie (uart)-excel
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#2 Message par satinas » dim. 18 févr. 2024 06:47

Bonjour,

Je dispose de Libre Office 7.6.4 sur Windows. PLX-DAQ envoie des messages d'erreur au démarrage.

Il y a un autre outil, OpenDaqCalc, il fonctionne avec Libre Office. Je l'ai testé avec un pont entre 2 modules USB-serial, l'un côté tableur, l'autre permettant d'envoyer des données en les tapant au clavier dans un soft terminal.
Par contre la sortie de la macro est laborieuse, le tableur plante, on a quand même la possibilité d'afficher et de sauvegarder les données.

liaison serie (uart)-excel
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2600
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#3 Message par paulfjujo » dim. 18 févr. 2024 18:39

bonsoir,

il y a quelques annees j'avais testé ceci et aussi Là
usa ge d'une DLL pour lien UART <-> Excel
la DLL RScom de RapidQ basic devrait aussi faire l'affaire ...
il faut quand meme un peu de code VBA à développer coté Excel..


Code : Tout sélectionner

' rev PF 03-01-2019
'
 modif pour usage RSCOM.DLL
' modif pour extirper une zone à l'interieur de la trame

' modif PF juill 2005 test avec appli PIC12F
'
 re-test mai 2013 avec VBRAY
' utilise RSAPI.DLL


Option Explicit                         '
force explicit variable declaration
Declare Function OPENCOM Lib 
"C:\WINDOWS\RSCOM.dll" (ByVal OpenString$) As Integer   'ouvre le port
Declare Sub CLOSECOM Lib "C:\WINDOWS\RSCOM.dll" ()                                   '
fermer le port com
Declare Sub TXD Lib 
"C:\WINDOWS\RSCOM.dll" (ByVal b%)                  'broche 3 envoie, Emission de données
Declare Sub DTR Lib "C:\WINDOWS\RSCOM.dll" (ByVal b%)                  '
broche 4 envoie, Terminal prêt.
Declare Sub RTS Lib "C:\WINDOWS\RSCOM.dll" (ByVal b%)                  'broche 7 envoie, Demande d'emmission
Declare Function DCD Lib 
"C:\WINDOWS\RSCOM.dll" () As Integer          'broche 1 lecture, Dectection de porteuse
Declare Function DSR Lib "C:\WINDOWS\RSCOM.dll" () As Integer          '
broche 6 lecture, Emmission prête
Declare Function CTS Lib 
"C:\WINDOWS\RSCOM.dll" () As Integer          'broche 8 lecture, Prêt à emettre
Declare Function RI Lib "C:\WINDOWS\RSCOM.dll" () As Integer           '
broche 9 lecture, Indicateur de sonnerie
Declare Sub CLEARBUFFER Lib 
"C:\WINDOWS\RSCOM.dll" ()                  'Nettoye le buffer en entrée
Declare Function INBUFFER Lib "C:\WINDOWS\RSCOM.dll" () As Integer     '
Nombre de caractère dans le buffer d'entré
Declare Function OUTBUFFER Lib "C:\WINDOWS\RSCOM.dll" () As Integer    '
Nombre de caractère dans le buffer de sortie ?
Declare Sub BUFFERSIZE Lib "C:\WINDOWS\RSCOM.dll" (ByVal b%)           'Change la taille du buffer Taille du buffer
Declare Sub DELAY Lib "C:\WINDOWS\RSCOM.dll" (ByVal ms As Double)       '
delai en micro seconde // duree d'un bit
Declare Function INPUTS Lib "C:\WINDOWS\RSCOM.dll" () As Integer
Declare Sub REALTIME Lib 
"C:\WINDOWS\RSCOM.dll" ()
Declare Function READSTRING Lib "C:\WINDOWS\RSCOM.dll" () As String     'Relire une chaine
Declare Function READBYTE Lib "C:\WINDOWS\RSCOM.dll" () As Integer      '
Lire un caratère
Declare Sub NORMALTIME Lib 
"C:\WINDOWS\RSCOM.dll" ()
Declare Sub SENDBYTE Lib "C:\WINDOWS\RSCOM.dll" (ByVal Dat%)            'Envoyer un caratère
Declare Sub SENDSTRING Lib "C:\WINDOWS\RSCOM.dll" (ByVal Dat$)           '
Envoyer une chaine
Declare Sub TIMEINIT Lib 
"C:\WINDOWS\RSCOM.dll" ()                        'Reinit le temps
Declare Sub TIMEOUTS Lib "C:\WINDOWS\RSCOM.dll" (ByVal b%)                   '
depassement du temps ?
Declare Function TIMEREAD Lib "C:\WINDOWS\RSCOM.dll" () As Double                   'donne le temps d'ouverture du port ?

Private Const sheet1 As String = "RS232-Scope"
Private Const sheet2 As String = "RS232-Data"
'Private Const FrameHeader As String = "*T"


le numero de port COM doit etre < à 10
néamoins on peut renumeroter un PORT VIRTUEL ex COM 45 -> en COM5 (via Parametres systemes , en mode administrateur)
Aide toi, le ciel ou FantasPic t'aidera

liaison serie (uart)-excel
francknvs
Débutant
Débutant
Messages : 82
Enregistré en : septembre 2017
Localisation : Paca-toulon

#4 Message par francknvs » mar. 20 févr. 2024 17:32

bonjour merci à vs 2 pour vos réponses.

j'ai essayé de telecharger le fichier excel associé " RS232_Test_2019"...
j'ai modifié le code VBA en ajoutant "ptrSafe" comme préconisé par mon pc:
"Declare PtrSafe Function OPENCOM..."
etc....
puis j'ai telechargé la dll concerné: "RSCOM.dll"...dans windows: sans succes :mur:
j'ai un pc en win11 64 bit
bref...
c'est bien dommage car c'etait exactement ce que je recherchais...

merci à vs 2 pour votre aide,

franck

liaison serie (uart)-excel
gwion
Passionné
Passionné
Messages : 212
Enregistré en : février 2022

#5 Message par gwion » mar. 20 févr. 2024 19:08

Bonsoir tout le monde,

Ne faut-il pas faire un regsvr32 avant d'utiliser la DLL ?

liaison serie (uart)-excel
francknvs
Débutant
Débutant
Messages : 82
Enregistré en : septembre 2017
Localisation : Paca-toulon

#6 Message par francknvs » mar. 20 févr. 2024 19:19

bonsoir gwion,
oui effectivement en passant par l'invite de cmd...hors RSCOM.dll n'est pas compatible avec mon win11

merci pour ta piste

liaison serie (uart)-excel
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2624
Enregistré en : juillet 2016
Localisation : Terre

#7 Message par Temps-x » mar. 20 févr. 2024 21:47

Bonsoir francknvs, et tout le forum,

francknvs a écrit :Source du message RSCOM.dll n'est pas compatible avec mon win11

C'est quand même curieux ce que tu nous dit, car... il me semble que paulfjujo à essayé sous Windows 11, et sa fonctionne chez lui

Il y a surement un truc à faire pour faire fonctionner cette dll, voir ICI

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

liaison serie (uart)-excel
francknvs
Débutant
Débutant
Messages : 82
Enregistré en : septembre 2017
Localisation : Paca-toulon

#8 Message par francknvs » mer. 21 févr. 2024 15:33

Bonjour Temps-X,
Effectivement curieux..
je viens de telecharger RSCOM.dll, j'ai essayé de copier ce fichier dans:
"C:\WINDOWS\RSCOM.dll"--> erreur, il ne trouve pas le fichier
"C:\WINDOWS\System\RSCOM.dll"--->..pas mieux
"C:\WINDOWS\System32\RSCOM.dll"--->idem.. :mur:
biensur j'ai egalement modifier le chemin d'acces dans la macro :oops:

liaison serie (uart)-excel
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2624
Enregistré en : juillet 2016
Localisation : Terre

#9 Message par Temps-x » mer. 21 févr. 2024 19:54

RE

:roll: pour Windows 64 bits il faut copier le fichier dans : C:\Windows\System64

C'est ton system d'exploitation qui est en 64 bits :?:

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

liaison serie (uart)-excel
francknvs
Débutant
Débutant
Messages : 82
Enregistré en : septembre 2017
Localisation : Paca-toulon

#10 Message par francknvs » mer. 21 févr. 2024 20:58

(re)bonoir temps-x
oui, j'ai tout essayé...sur mon syteme, il n'y a pas ce dossier: C:\Windows\System64.
en revanche C:\Windows\SysWOW64.
Là aussi j'ai mis la "dll" dans ce dossier en respecifiant le chemin dans la macro:

Code : Tout sélectionner


    Declare PtrSafe Function OPENCOM Lib 
"C:\Windows\SysWOW64\RSCOM.dll" (ByVal OpenString$) As Integer
    Declare PtrSafe Sub CLOSECOM Lib 
"C:\Windows\SysWOW64\RSCOM.dll" ()
    Declare PtrSafe Sub TXD Lib "C:\Windows\SysWOW64\RS...
    ETC.....

...et en lançant l'execution j'ai cette alerte: "fichier introuvable: "C:\Windows\SysWOW64\RSCOM.dll"

voila voila :mur: :mur: :mur: :mur:


Retourner vers « Le forum Fantas-PIC »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 4 invités