SPI - sortie analogique

Ben Huur

New Member
Bonjour,

Je suis étudiant, et je dois concevoir et réaliser un générateur numérique de signaux analogiques.

J'ai essayé la sortie DAC du PICAXE 18M2, mais le signal ne convient pas.

La meilleure solution que j'ai trouvé est de le faire à l'aide d'un PICAXE 20X2 et un convertisseur digital-analogique MCP4921.
La communication entre les deux se fait en SPI, et c'est justement sur ça que je suis bloqué : je ne comprend pas la commande SPI (hspisetup, hspiout).
Pourriez-vous me l'expliquer? ou me montrer un petit programme simple l'utilisant? (je ne comprends pas l'exemple du manuel PICAXE)

D'avance merci
 

BESQUEUT

Senior Member
1) En quoi la sortie DAC ne convient-elle pas ?
2) L'exemple page 99 du manuel est pour une mémoire, et démontre l'écriture mais aussi la lecture (dont tu n'as pas besoin pour un convertisseur DAC).

==> Il faut modifier l'exemple pour tenir compte des caractéristiques du MCP4921. Voir paragraphe 5.2 du data-sheet.
Quels sont les points qui ne sont pas clairs ?

Pour le setup, prendre les valeurs de l'exemple pour commencer. SI ça ne marche pas, il va falloir se préoccuper du timing décrit sous la forme d'un schéma au début du data-sheet, mais c'est rarement le cas.

Pour l'écriture, il faut écrire les valeurs successives à convertir en analogique. Comme c'est sur 12 bits, il y a 4096 valeurs de tension possibles, et il faut 2 octets à chaque fois...

3) C'est quoi l'objectif final du montage, à part la beauté du geste ? D'où viennent les valeurs à convertir ?

Bonne lecture !
 

Ben Huur

New Member
Merci de votre réponse

1) La sortie DAC ne donne pas un signal "assez beau" pour le prof.

2) J'ai essayé de reprendre l'exemple page 99 et de l'adapter, mais sans succès.
Je ne comprends pas à quoi correspondent les variables de l'exemple.

3) Je dois concevoir et réaliser un générateur numérique de signaux analogiques (rampes, sinusoïdes,...), à fréquence variable et amplitude ajustable. Contrôle de la fréquence manuel et par une entrée digitale de plusieurs bits.
Je pense faire une table de valeurs pour chaque signal, aller les rechercher pour les envoyer au convertisseur, et ainsi obtenir le signal désiré.

Bonne soirée
 

BESQUEUT

Senior Member
Ben Huur said:
...
2) J'ai essayé de reprendre l'exemple page 99 et de l'adapter, mais sans succès.
Je ne comprends pas à quoi correspondent les variables de l'exemple.
La variable b1 est utilisée pour lire un octet. Mais tu n'en a pas besoin puisque tu ne fais qu'écrire...
Comment c'est écrit en commentaire, CS est la broche correspondante pour le bus SPI.
A ma connaissance, il n'y a pas d'autres variables ! Merci de préciser ton interrogation...
Un petit schéma du montage ainsi que l'état actuel de ton programme seraient utiles...

Ben Huur said:
3) Je dois concevoir et réaliser un générateur numérique de signaux analogiques (rampes, sinusoïdes,...), à fréquence variable et amplitude ajustable. Contrôle de la fréquence manuel et par une entrée digitale de plusieurs bits.
Je pense faire une table de valeurs pour chaque signal, aller les rechercher pour les envoyer au convertisseur, et ainsi obtenir le signal désiré.
Compte-tenu de la précision demandée, la mémoire du PICAXE risque d'être un peu juste ; tu auras peut-être besoin d'une mémoire externe, mais ce n'est pas une urgence.
Par contre, la vitesse risque de poser problème : quelles sont les plages de fréquence envisagées ?
L'entrée digitale est sans doute un port série ? Attention : tu ne pourras pas gérer en même temps la lecture du port série et la génération du signal. Il faut prévoir un mécanisme d'interruption...
 
Last edited:

westaust55

Moderator
Utilisant le RAM tel que le block-notes soyez plus rapide que la lecture EEPROM (interne ou externe).

Une base pour un programme de PICAXE peut être comme suit :

Choisissez un type de forme d'onde
READ a désiré les données de forme d'onde d'EEPROM et le magasin en Scratchpad mémoire

Dans une boucle :

DO
READ une valeur de Scratchpad avec le @ptrinc
Envoyez les données à l'external DAC
LOOP ; Retournez au début de la boucle


Si vous pensez en termes de 1 instruction de programme de BASIC prenant en général 0.25 msec à 4 MHz,
alors courant le morceau 20X2 à 64 mégahertz vous pourriez réaliser l'usec en général 16 par instruction ainsi la boucle pourrait,
comme conjecture, réaliser donner d'environ 100 usec dites 10.000 étapes par seconde.
Vous devrez examiner ceci dans la pratique et la vitesse est basée sur le PICAXE faisant absolument rien d'autre mais produisant de la forme d'onde.
 

BESQUEUT

Senior Member
comme conjecture, réaliser donner d'environ 100 usec dites 10.000 étapes par seconde.
.
Avec un échantillonage de 1024 pas (taille maxi de la mémoire du PICAXE), ça ne fait pas plus de 10 hertz...
et on est loin des 4096 pas que nécessiterait une forme d'onde à la précision du MCP4921...
En plus, il faudrait lire les données dans une mémoire externe, ce qui serait plus long...
L'utilisation d'un PICAXE et la fréquence sont-ils imposés ? Si oui, le problème est pour le moins ... ardu...
 

Ben Huur

New Member
Bonsoir,

Non l'utilisation du Picaxe n'est pas imposée, et la fréquence non plus.

Je ne parviens toujours pas à faire fonctionner le DAC.

Si j'ai bien compris, je dois juste garder le "hspisetup", et envoyer mes valeurs avec un "hspiout" ?

Le code ci-dessous devrait donc fonctionner (cs en C.0 et "valeur" prend des valeurs de 0 à 4095) :

Code:
init:
	hspisetup spimode11e, spimedium
	

main:
	low cs 
	hspiout (valeur) 	
	high cs

	pause 100
	
goto main
Est-ce qu'il existe un moyen de savoir ce qui est envoyé exactement autrement qu'avec un debug?
Ou un logiciel de simulation ?
 

PieM

Senior Member
Bonjour,

Evitez d'utiliser le debug. Utilisez de préférence l'instruction SERTXD.

Mais je crois que le problème de fond reste de savoir ce que votre prof attend ! Si le cahier des charges consiste à dire que le DAC du Picaxe donne un signal qui n'est "pas assez beau", on va pouvoir disserter longtemps sur le sujet !

Que le DAC Picaxe d'une résolution de 5 bits soit médiocre, soit, mais avez vous besoin d'une résolution de 12 bits ?

En outre si la fréquence n'est pas imposée, alors utilisez un simple circuit R/2R + un ampli op monté en suiveur, et vous aurez une résolution de 8 bits.

Je dirais pour l'instant que le problème posé ne me semble "pas assez clair". :rolleyes:
 

BESQUEUT

Senior Member
Ce serait mieux si on disposait du programme complet ainsi que du schéma du montage.
Quel appareil est utilisé en sortie du DAC ? Voltmètre ? Oscillo ? HP ?
Le listing obtenu avec SERTXD est une bonne chose, mais je doute qu'il donne autre chose que les 4096 valeurs.
Attention, hspiout ne sort qu'un octet à la fois, hors le DAC en demande 2...
 
Top