Pour mon premier post, je vais décrire mon projet en cours. Merci de faire part de vos commentaire.
L'idée, c'est de faire un datalogger qui pourra servir pour la domotique, en particulier alarme et station météo.
Le cahier des charges est le suivant :
- mesures aussi régulières que possibles, au moins une fois par seconde.
- agrégation et enregistrement sur clé USB toutes les 10 mesures environ,
- système enfoui dans le grenier ; donc nécessité de récupérer les données par une liaison série. (il reste la possibilité de récupérer la clé USB dans les cas graves, mais ce ne sera pas l'usage normal)
- possibilité de transmettre les données en temps réel.
Je suis parti sur la base d'un 40X2 et d'un Vdrive2 et les débuts sont satisfaisants.
Je n'ai pas trouvé de code satisfaisant pour dialoguer avec le vdrive en tâche de fond. Je m'explique :
- tous les exemples sont plus ou moins dérivés du même code,
- ils utilisent certes le scratchpad, mais pas de façon satisfaisante à mon avis !
- En effet, ces codes commencent systématiquement par une pause de plusieurs secondes "pour récupérer les données" On n'est plus en tâche de fond là...
La lecture d'un port série en tâche de fond a normalement pour but de laisser du temps au processeur pour faire son travail. Dans mon cas et pour fixer les idées, il mesure la vitesse du vent pour détecter les rafales. Si j'introduis des pauses de plusieurs secondes, je risque de manqer une rafale ; le système perd en pertinence.
Hors, en étudiant la doc, je constate que ces PICAXEs (que je découvre) sont très bien pouvus pour éviter ce problème. En effet, le scratchpad est un buffer CIRCULAIRE. Simplement les exemples de code donnés n'en tiennent pas compte et remettent systématiquement à zéro le pointeur, tuant dans l'oeuf les bénéfices d'un buffer circulaire.
Les premiers essais montrent que ce buffer marche très bien, et qu'il n'est nullement besoin de pauses pour lire le vdrive, renvoyer les données à la console et continuer à faire régulièrement des mesures, tout ça sans utiliser le multitâches.
Si d'autres sont intéressés, je peux donner une explication plus complète de l'utilisation d'un buffer circulaire.
Cordialement,
L'idée, c'est de faire un datalogger qui pourra servir pour la domotique, en particulier alarme et station météo.
Le cahier des charges est le suivant :
- mesures aussi régulières que possibles, au moins une fois par seconde.
- agrégation et enregistrement sur clé USB toutes les 10 mesures environ,
- système enfoui dans le grenier ; donc nécessité de récupérer les données par une liaison série. (il reste la possibilité de récupérer la clé USB dans les cas graves, mais ce ne sera pas l'usage normal)
- possibilité de transmettre les données en temps réel.
Je suis parti sur la base d'un 40X2 et d'un Vdrive2 et les débuts sont satisfaisants.
Je n'ai pas trouvé de code satisfaisant pour dialoguer avec le vdrive en tâche de fond. Je m'explique :
- tous les exemples sont plus ou moins dérivés du même code,
- ils utilisent certes le scratchpad, mais pas de façon satisfaisante à mon avis !
- En effet, ces codes commencent systématiquement par une pause de plusieurs secondes "pour récupérer les données" On n'est plus en tâche de fond là...
La lecture d'un port série en tâche de fond a normalement pour but de laisser du temps au processeur pour faire son travail. Dans mon cas et pour fixer les idées, il mesure la vitesse du vent pour détecter les rafales. Si j'introduis des pauses de plusieurs secondes, je risque de manqer une rafale ; le système perd en pertinence.
Hors, en étudiant la doc, je constate que ces PICAXEs (que je découvre) sont très bien pouvus pour éviter ce problème. En effet, le scratchpad est un buffer CIRCULAIRE. Simplement les exemples de code donnés n'en tiennent pas compte et remettent systématiquement à zéro le pointeur, tuant dans l'oeuf les bénéfices d'un buffer circulaire.
Les premiers essais montrent que ce buffer marche très bien, et qu'il n'est nullement besoin de pauses pour lire le vdrive, renvoyer les données à la console et continuer à faire régulièrement des mesures, tout ça sans utiliser le multitâches.
Si d'autres sont intéressés, je peux donner une explication plus complète de l'utilisation d'un buffer circulaire.
Cordialement,
Last edited: