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 ---
- 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 ---
liaison serie (uart)-excel
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
par avance,
merci
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 |= ((1 << ADON) | (1 << 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
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.
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
Expert- Messages : 2600
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
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..
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)
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)
liaison serie (uart)-excel
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
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
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
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
liaison serie (uart)-excel
liaison serie (uart)-excel
Bonsoir francknvs, et tout le forum,
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+
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+
liaison serie (uart)-excel
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..
biensur j'ai egalement modifier le chemin d'acces dans la macro
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..
biensur j'ai egalement modifier le chemin d'acces dans la macro
liaison serie (uart)-excel
liaison serie (uart)-excel
(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:
...et en lançant l'execution j'ai cette alerte: "fichier introuvable: "C:\Windows\SysWOW64\RSCOM.dll"
voila voila
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
Retourner vers « Le forum Fantas-PIC »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 4 invités