Audiyofan
Audiyofan




Poster un nouveau sujet Répondre au sujet  [ 532 messages ]  Aller à la page Précédente  1 ... 15, 16, 17, 18, 19, 20, 21 ... 36  Suivante
Auteur Message
 Sujet du message: Re: Lampemetre
MessagePosté: Sam 19 Jan 2013, 19:02 
Hors ligne
Site Admin
Avatar de l’utilisateur

Inscription: Mer 15 Juin 2005, 17:23
Messages: 7292
Localisation: Ardeche
Au vu de la doc Gambas, la fonction WRITE est tout aussi piégeuse que cutecom et prend des initiatives différentes selon le type de donnée.
Par exemple, la doc dit:
Code:
    A l’écriture d’une chaîne, la longueur de la chaîne est envoyée avant son contenu.
Voir Représentation des données binaire pour plus d’information.

Approche optimiste:
Parmi toutes les options qu'elle supporte, il y en a une qui fait exactement ce qu'il faut.
Approche pessimiste:
Il va falloir tout se palucher "a mano" 8)

@philbob
Dans les deux cas, il faut savoir comment doivent être représentées les valeurs numérique ?
Autrement dit que signifie
Code:
//envoi du float associé
rs232_tx_32(fd,v)


J'interprète que fd est le handler du port série résultant d'un open, v la valeur et le "32" dans le nom de la fonction, que cette valeur utilisera 32 bits soit 4 bytes.
C'est peu pour float :shock:
Où me gourre je ? ?

Yves.

Ah, messages croisés, il semble que la réponse y soit !
Je décortique . . . après la soupe :wink:

_________________
Seules les choses que l'on refuse de comprendre en leur attribuant des propriétés magiques semblent compliquées.


Haut
 Profil  
 
 Sujet du message: Re: Lampemetre
MessagePosté: Sam 19 Jan 2013, 19:44 
Hors ligne
Site Admin
Avatar de l’utilisateur

Inscription: Mer 01 Oct 2003, 22:47
Messages: 9143
Localisation: St Mathieu de Tréviers près de Montpellier
Re

@ Philbob , je regarderais ta nouvelle version de prog_pc ce soir

Là j'ai relu et encore relu ton explication de Cutecom
du coup vu que cutecom donne pour 1 ou 01 l'allumage d'une led , qui est la réponse attendue
j'essaye d'avoir une seule led allumée avec Gambas , et là ça coince
j'ai 3 leds qui s'allume

@Yves et Philbob AMHA le programme prog_pc envoi un octet par octet
soit 5 octets pour une ligne de commande ,ce que j'ai compris :oops:

j'en reviens alors à l'histoire de Yves de "alloc" pour atteindre les adresses de chaque valeur ( le n° et la valeur de cmde)

Allez je retourne lire , pffff c'est pas évident hein :roll:

Philbob pour essai , l'exemple "port série" de gambas me sert de base pour repartir de zéro
sans cracher l'ihm déjà avancée
si tu veut jeter un oeil par là

Bon appétit à vous deux

_________________
Ce qui est pris n'est plus a prendre


Haut
 Profil  
 
 Sujet du message: Re: Lampemetre
MessagePosté: Sam 19 Jan 2013, 20:11 
Hors ligne
Site Admin
Avatar de l’utilisateur

Inscription: Mer 15 Juin 2005, 17:23
Messages: 7292
Localisation: Ardeche
Totof a écrit:
. ..
j'en reviens alors à l'histoire de Yves de "alloc" pour atteindre les adresses de chaque valeur ( le n° et la valeur de cmde)


Ne te prends pas la tête avec ça !
Un tableau de 5 bytes :

DIM toto[5] as byte

en interne, Gambas s'alloue de la mémoire par "alloc"pour stocker un pointeur ainsi que les 5 bytes puis écrit dans le pointeur l'adresse ou ils sont stockés.
Cette mémoire doit à un moment ou un autre être "rendue" à l'OS par "free"
Tout ça est automatique !


qu'il faut remplir avec les bonnes valeurs (dès que j'aurais compris comment sont codés les "floats" de philbob :?: :?:
Tu n'est même pas obligé de déclarer la taille du tableau si te le rempli par une suite de
toto.push(unoctet)
il s'agrandit tout seul ! ! !
puis pour les envoyer:

DIM c as byte
FOR each c IN toto
Write c
NEXT


Je t'ai envoyé un exemple comme ça.

@+

Yves

_________________
Seules les choses que l'on refuse de comprendre en leur attribuant des propriétés magiques semblent compliquées.


Haut
 Profil  
 
 Sujet du message: Re: Lampemetre
MessagePosté: Sam 19 Jan 2013, 20:20 
Hors ligne
Site Admin
Avatar de l’utilisateur

Inscription: Mer 01 Oct 2003, 22:47
Messages: 9143
Localisation: St Mathieu de Tréviers près de Montpellier
Re Yves

oui , j'ai du mal l'utilisé , je vais le reprendre tub18

au vu du texte du prog_pc , le n°de cde est un int et la valeur un float mais en C
//-----------------------------------------------------------------------
//envoi d'une commande
//-----------------------------------------------------------------------
int envoi_cmde(int fd,int cmde,float v)
{
unsigned char rec;

//printf("envoi de la commande %d\n",cmde);

//envoi du numero de commande
rs232_tx_8(fd,cmde);

//envoi du float associe
rs232_tx_32(fd,v);

//recup du code retour
rs232_rx_8(fd,&rec);

//printf("code retour %d\n",rec);

return rec;
}


je reprends l'ouvrage avec le tableau , je vais finir par comprendre :mrgreen:

bon appétit

_________________
Ce qui est pris n'est plus a prendre


Haut
 Profil  
 
 Sujet du message: Re: Lampemetre
MessagePosté: Sam 19 Jan 2013, 20:30 
Hors ligne
Site Admin
Avatar de l’utilisateur

Inscription: Mer 15 Juin 2005, 17:23
Messages: 7292
Localisation: Ardeche
Totof a écrit:
Re Yves

oui , j'ai du mal l'utilisé , je vais le reprendre tub18

au vu du texte du prog_pc , le n°de cde est un int et la valeur un float mais en C


Oui, c'est ça. Donc 5 octets en tout.
Ce que je ne sais pas c'est comment sont codés les 4 octets "valeur".
Ce que je sais, c'est qu'un type "single" gambas sera plus que suffisant.

Philbob va nous expliquer ça . . . bientôt tub15

Yves.

_________________
Seules les choses que l'on refuse de comprendre en leur attribuant des propriétés magiques semblent compliquées.


Haut
 Profil  
 
 Sujet du message: Re: Lampemetre
MessagePosté: Sam 19 Jan 2013, 21:08 
Hors ligne
Membre Assidu
Avatar de l’utilisateur

Inscription: Dim 09 Oct 2011, 16:53
Messages: 198
Localisation: 15kms sud Rennes
Bonjour,

Pour le codage, voir le lien que j'ai indiqué précédemment:

http://fr.wikipedia.org/wiki/IEEE_754

La méthode de codage est un peu complexe (voir explication plus bas)

Maintenant, si la transmission sous forme de "float" est délicate
à gérer depuis Gambas, on peut en définir une autre.
On n'est pas là pour se faire des nœuds à la tête. :lol:

On peut partir sur un protocole à base de chaines de caractères ou
de single comme le suggère Yves.





//je cite ici un passage de l'explication donnée dans le lien

...
...
...
Un nombre flottant simple précision est stocké dans un mot de 32 bit : 1 bit de signe, 8 bits pour l'exposant et 23 pour la mantisse.

L'exposant est donc décalé de 2^{8-1} - 1 = 127 dans ce cas. L'exposant d'un nombre normalisé va donc de -126 à +127. L'exposant -127 (qui est décalé vers la valeur 0) est réservé pour zéro et les nombres dénormalisés, tandis que l'exposant 128 (décalé vers 255) est réservé pour coder les infinis et les NaNs (voir le tableau précédent).

Un nombre flottant normalisé a une valeur v donnée par la formule suivante :

v = s × 2e × m.

* s = ±1 représente le signe (selon le bit de signe) ;
* e est l'exposant avant son décalage de 127 ;
* m = 1+mantisse représente la partie significative (en binaire), d'où 1 ≤ m < 2 (mantisse étant la partie décimale de la partie significative, comprise entre 0 et 1)

Par exemple pour 0b 0 01111100 01000000000000000000000 : le signe est nul, l'exposant est 124 - 127 = -3, et la partie significative est 0b 1,01 soit 1,25 en décimal (1×20 + 0×2−1 + 1×2−2) ; le nombre représenté est donc +1,25×2−3 soit +0,15625.

Les nombres dénormalisés suivent le même principe, sauf que e = −126 et m = 0+mantisse (attention : pour le calcul, on veillera à prendre e = -126 et non -127, ceci afin de garantir la continuité de cette représentation avec la représentation normalisée, puisque m = 0+mantisse et non plus m = 1+mantisse).
...
...
...

_________________
Cordialement
Phil
(http://bidulic.free.fr)


Haut
 Profil  
 
 Sujet du message: Re: Lampemetre
MessagePosté: Sam 19 Jan 2013, 21:36 
Hors ligne
Site Admin
Avatar de l’utilisateur

Inscription: Mer 01 Oct 2003, 22:47
Messages: 9143
Localisation: St Mathieu de Tréviers près de Montpellier
Re

Donc si je comprends la logique dans les codes affichés par prog_pc dans la ligne 0 0 c8 43
c'est les octets extrait de la représentation hexadecimale de 400 qui doit être sous forme 0000C000
ou ici on aurait 0000C843 pour la valeur décimale 400 c'est bien ça

je retourne lire un peu , le cerveau a du mal a suivre , veuillez m'en excuser :oops:

_________________
Ce qui est pris n'est plus a prendre


Haut
 Profil  
 
 Sujet du message: Re: Lampemetre
MessagePosté: Sam 19 Jan 2013, 21:53 
Hors ligne
Membre Assidu
Avatar de l’utilisateur

Inscription: Dim 09 Oct 2011, 16:53
Messages: 198
Localisation: 15kms sud Rennes
Bonjour,

Oui, c'est bien cela! 8)

_________________
Cordialement
Phil
(http://bidulic.free.fr)


Haut
 Profil  
 
 Sujet du message: Re: Lampemetre
MessagePosté: Sam 19 Jan 2013, 21:55 
Hors ligne
Site Admin
Avatar de l’utilisateur

Inscription: Mer 15 Juin 2005, 17:23
Messages: 7292
Localisation: Ardeche
C'est malin, pas simple . . . mais on peut le faire.
Si tu as l'algo écrit en C, il suffit de transposer en Basic / Gambas.

J'avais choisi d'utiliser un format "texte" parce que c'est facile à débugger et à simuler en écrivant ou en lisant un fichier texte que l'on peut d'autre part examiner ou modifier avec n'importe quel éditeur ou même avec la console.
Il n'y a rien à changer dans le protocole de com, seulement à remplacer les commandes par des lettres ou des chiffres et la valeurs par des chaînes de caratères "en clair".
Côté Gambas, c'est simple. Qu'en est il côté µP ou les ressources sont moindres ?
Il suffit d'un équivalent à printf() même limité. Existe t'il ?
Si oui, je suggère de ne pas hésiter :wink:

On verra demain matin si la nuit a porté conseil 8)

Yves.
J'ai un port RS232 sur ma machine, je dois pouvoir faire des test depuis la console avec cat.

_________________
Seules les choses que l'on refuse de comprendre en leur attribuant des propriétés magiques semblent compliquées.


Haut
 Profil  
 
 Sujet du message: Re: Lampemetre
MessagePosté: Sam 19 Jan 2013, 22:06 
Hors ligne
Membre Assidu
Avatar de l’utilisateur

Inscription: Dim 09 Oct 2011, 16:53
Messages: 198
Localisation: 15kms sud Rennes
Bonjour,


Je pense qu'il est plus simple de passer en mode "clair" que
de faire une routine qui implémente la norme des float 32.
Cependant, je ne ferme pas la porte....

Du coup, je suis en train de faire des tests sur le µC pour
mettre au point une transmission "en clair".
Si je n'y arrive pas, j'applique le plan B.

Reste à trouver le plan B... :wink:

_________________
Cordialement
Phil
(http://bidulic.free.fr)


Haut
 Profil  
 
 Sujet du message: Re: Lampemetre
MessagePosté: Sam 19 Jan 2013, 22:09 
Hors ligne
Site Admin
Avatar de l’utilisateur

Inscription: Mer 01 Oct 2003, 22:47
Messages: 9143
Localisation: St Mathieu de Tréviers près de Montpellier
Oui bonne nuit

je vais pour changer les idées regardé sous Kicad pour récolter les composants et commencer
à faire le schéma de base des booster pour les essais futur, comme j'ai reçu mes composants
pour bricoler je vais pouvoir regarder question taille brochage ce que j'ai besoin

Avant je recharge le prog_muc et teste le nouveau prog_pc de Philbob , au moins je deviendrais bon
en "upload de .hex" dans la mémoire du µc :mrgreen:

A demain tub25 tub25 tub25

_________________
Ce qui est pris n'est plus a prendre


Haut
 Profil  
 
 Sujet du message: Re: Lampemetre
MessagePosté: Dim 20 Jan 2013, 12:24 
Hors ligne
Membre Assidu
Avatar de l’utilisateur

Inscription: Dim 09 Oct 2011, 16:53
Messages: 198
Localisation: 15kms sud Rennes
Bonjour,


Résultat partiel des tests

Objectif: le µC retourne un flottant sous la forme d'une chaine de caractères.

La routine n'a pas été triviale mais cela semble fonctionner.
Le µC retourne un flottant avec un nombre de décimales pouvant
au choix aller de 0 à 4.
La chaine retournée contient donc les codes ascii de la valeur.

En début, le signe moins (le "-") si nécessaire
puis au maximum sur 4 octets la partie entière
puis le séparateur décimal (le ".") si nécessaire
et enfin la partie décimale au maximum sur 4 octets

J'ai vérifié sous cutecom, ça a l'air correct.

Maintenant, je passe à la routine de récupération d'une valeur
depuis le PC.

Là, j'ai besoin de savoir comment est codée la chaine:

La taille est t'elle fixe, y a t'il un caractère de fin de ligne ?

_________________
Cordialement
Phil
(http://bidulic.free.fr)


Haut
 Profil  
 
 Sujet du message: Re: Lampemetre
MessagePosté: Dim 20 Jan 2013, 12:46 
Hors ligne
Site Admin
Avatar de l’utilisateur

Inscription: Mer 01 Oct 2003, 22:47
Messages: 9143
Localisation: St Mathieu de Tréviers près de Montpellier
Bonjour Philbob

regarde là http://www.gambasforge.org/sujet-4395-dialogue-via-rs232-entre-une-ihm-en-gambas3-et-un-controleur-page-1.html#m5

j'ai posé la question sur le forum Gambas

Je rentre du jogging là , donc douche puis repas donc je lis tout ça cet après midi :mrgreen:

Bon appétit

_________________
Ce qui est pris n'est plus a prendre


Haut
 Profil  
 
 Sujet du message: Re: Lampemetre
MessagePosté: Dim 20 Jan 2013, 19:44 
Hors ligne
Membre Assidu
Avatar de l’utilisateur

Inscription: Dim 09 Oct 2011, 16:53
Messages: 198
Localisation: 15kms sud Rennes
Bonjour,

Voilà, je viens de mettre au point une routine de récupération
des valeurs en provenance du PC et sous format texte.

Normalement, ce soir, je donne un "dummy_12AX7_V02" avec
quelques explications.

Mais cela après la soupe et si je ne sombre pas sur le canapé.... tub25

_________________
Cordialement
Phil
(http://bidulic.free.fr)


Haut
 Profil  
 
 Sujet du message: Re: Lampemetre
MessagePosté: Dim 20 Jan 2013, 19:49 
Hors ligne
Site Admin
Avatar de l’utilisateur

Inscription: Mer 01 Oct 2003, 22:47
Messages: 9143
Localisation: St Mathieu de Tréviers près de Montpellier
Bonsoir

tub18 tub18 tub18

Nickel

Là je commence le schéma d'un booster sous Kicad pour essai

To be continued

@ Philbob , bonne soupe alors :mrgreen:

_________________
Ce qui est pris n'est plus a prendre


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 532 messages ]  Aller à la page Précédente  1 ... 15, 16, 17, 18, 19, 20, 21 ... 36  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

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


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Aller à:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduction par: phpBB-fr.com