Je suis nouveau dans le monde de Python et mes compétences en programmation sont assez pauvres, mais je suis en train de trouver un moyen d'utiliser Python pour afficher la sortie d'un circuit EEG (en utilisant le circuit OpenEEG http://openeeg.sourceforge.net)Microprocesseur à l'intrigue en temps réel RS-232 en utilisant PySerial/Matplotlib?
Le La sortie analogique est amplifiée et traitée via un ADC (dans un microcontrôleur ATmega8) et convertie en RS232 par un MAX232.
Le RS232 signal est la suivante:
Octet 1: valeur de synchronisation 0xA5
Byte 2: valeur de synchronisation 0x5A
Byte 3: Version
Byte 4: Numéro de cadre
Byte 5: Voie 1 Faible octet
octet 6: canal 1 octet de poids fort
octet 7: canal 2 octet de poids faible
octet 8: canal 2 octet de poids fort
...
Octets 9-16 sont pour les canaux d'électrodes supplémentaires, mais les données ne sont pas nécessaires puisque seulement en utilisant les deux premiers
...
Byte 17: états des boutons (b1-b4)
J'ai quelques fonctionnalités de base, mais pyserial Je dois trouver un moyen d'utiliser les données entrantes en tamponnant et tracer les valeurs utiles comme 2 formes d'ondes xy en temps réel (temps vs tension)
mise à jour question:
Je reçois le code imprimer avec les quelques lignes évidentes de PySerial mais c'est du charabia. J'essaie de réduire les données au format des valeurs qui peuvent ensuite être tracées. Les 17 octets de données arrivent actuellement à 256 images/sec. Les (deux) canaux sont constitués chacun de 10 bits de données (avec 6 zéros pour constituer le reste des 2 octets). Ils sont non signés en donnant des valeurs possibles de 0 à 1023. Ils correspondent à des valeurs qui doivent être tracées comme positives et négatives, donc une valeur binaire de 512 correspond à un tracé de zéro (micro) volts ....
Comment faire J'ai lu le flux entrant en binaire 8 bits (en supprimant les données dont je n'ai pas besoin), puis combinez les deux octets pertinents de chaque canal que je veux (en supprimant éventuellement les 6 zéros en surplus si nécessaire)?
Quels octets représentent la tension? Quelle est l'importance de l'exigence «en temps réel»? AFAIK, matplotlib ne supporte pas le traçage en temps réel ... – unutbu
Oui, dans une certaine mesure. Mais pour tracer en temps réel quelque chose comme Chaco est probablement la meilleure solution. – nikow
la tension pour chaque canal est représentée par l'octet faible et les 2 LSB de l'octet haut (le reste de l'octet haut est zéros) Un retard serait bien (par exemple une seconde) tant qu'il en affichera quelques-uns secondes valeur sur l'écran, puis peut-être redessiner une nouvelle intrigue. Si je peux seulement afficher des données après qu'elles ont toutes été reçues, alors je pourrais devoir repenser. –