ADC sur S12XDP512 [Forums - HC12 et S12]
ADC sur S12XDP512 [Forums - HC12 et S12]
Pseudo Pass se souvenir de moi     Créer un compte
ARTICLES et TELECHARGEMENTS ~ FORUMS ~ LIENS  
 
             
 
Recherche
 
   
 

Parcourir ce sujet :   1 Utilisateur(s) anonymes





ADC sur S12XDP512
Régulier
Inscrit:
23/10/2012 16:36
Messages: 60
Hors Ligne
Bonjour à tous,

Y a t-il des personnes qui aurait quelques exemples sur l'utilisation de l'ADC sur le micro S12xDP512 ?

J'essaye de récupérer l'image du couple via un variateur LMD18200T.

Merci d'avance.

Posté le : 23/04/2016 17:28
Transférer la contribution vers d'autres applications Transférer


Re: ADC sur S12XDP512
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 546
Hors Ligne
Salut,

Quelles sont tes contraintes ?

Y'a pas grand chose avec un ADC. Tu actives le module, choisis le bon canal, conversion en continu ou bien conversion à la demande et tu lis le registre...

Posté le : 23/04/2016 22:42
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer


Re: ADC sur S12XDP512
Régulier
Inscrit:
23/10/2012 16:36
Messages: 60
Hors Ligne
Salut Dinastar et merci pour ta réponse,

Alors je suis en train de concevoir une carte moteur qui pilote 4 moteurs. Tout fonctionne mais j'aurais besoin de récupérer l'image du courant. Électriquement tout est bon, par contre, informatiquement je n'arrive pas à faire fonctionner l'adc ou cela me donne des valeurs erronées ou figées. J'ai déjà réalisé cette opération mais il y a 2 ans du coup j'ai un peu oublié comment cela fonctionnait.
Voici mon code de base :

void ATD_Init(void){//Initialisation

//Module 0
ATD0DIEN = 0x00U;
ATD0CTL0 = 0x07U;
ATD0CTL1 = 0x07U;
ATD0CTL3 = 0x20U;
ATD0CTL4 = 0x66U;
ATD0CTL5 = 0x00U;
ATD0TEST1 = 0x00U;
ATD0CTL2 = 0x80U;

//module1
ATD1DIEN = 0x00U;
ATD1CTL0 = 0x07U;
ATD1CTL1 = 0x07U;
ATD1CTL3 = 0x20U;
ATD1CTL4 = 0x66U;
ATD1CTL5 = 0x00U;
ATD1TEST1 = 0x00U;
ATD1CTL2 = 0x80U;

}

unsigned int lire_couple(char numero_moteur){

ATD0CTL5 = 0x92;

while(!(ATD0STAT0&ATD0STAT0_SCF_MASK));

switch(numero_moteur){
case 1:
return (unsigned int) couple_moteur1;
case 2:
return (unsigned int) couple_moteur2;
case 3:
return (unsigned int) couple_moteur3;
case 4:
return (unsigned int) couple_moteur4;
default:
return Couple_Limite_MAX;
}

}

Et les defines :
#define couple_moteur1 ATD0DR4
#define couple_moteur2 ATD1DR6
#define couple_moteur3 ATD0DR2
#define couple_moteur4 ATD1DR4


Voila je continu de chercher une solution.

Posté le : 24/04/2016 14:54
Transférer la contribution vers d'autres applications Transférer


Re: ADC sur S12XDP512
Régulier
Inscrit:
23/10/2012 16:36
Messages: 60
Hors Ligne
Et voici le branchement côté micro.

Attacher un fichier:



png  kicad.png (21.48 KB)
1161_571cc2db7536b.png 926X421 px

Posté le : 24/04/2016 14:58
Transférer la contribution vers d'autres applications Transférer


Re: ADC sur S12XDP512
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 546
Hors Ligne
Même si "return" est sencé interrompre ta fonction, es-tu sûr que ton programme ne délire pas en passant par tous les "case" ?

Essayes peut-être d'ajouter un "break;" pour finir chaque case pour voir ?

D'en avoir oublié qu'un seul, mon LCD m'affichait toujours la même valeur car tous les "cas" étaient parcourus ...

Posté le : 24/04/2016 17:15
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer


Re: ADC sur S12XDP512
Pilier de la communauté
Inscrit:
27/09/2005 18:07
De Metz
Messages: 1335
Hors Ligne
Je ne vois pas non plus où est définie la variable qui est retournée.

Posté le : 24/04/2016 18:40
Transférer la contribution vers d'autres applications Transférer


Re: ADC sur S12XDP512
Régulier
Inscrit:
23/10/2012 16:36
Messages: 60
Hors Ligne
Salut,

J'ai enfin réussie à comprendre une bonne partie et j'arrive à récupérer la valeur de l'ADC du s12x.

Voici mon code :

unsigned int lire_couple(char numero_moteur){

ATD0CTL5 = 0B10000010;//Sélection du Canal 2 et single conversion

while(ATD0STAT0_SCF == 0); //wait for end of conversion

return (ATD0DR0+ATD0DR1+ATD0DR2+ATD0DR3+ATD0DR4+ATD0DR5+ATD0DR6+ATD0DR7)/8;//retourne la valeur moyenne sur 8 échantillons.

}

void ATD_Init(void){

ATD0CTL2 = 0xC0; //activation et fast flag clear all
ATD0CTL3 = 0x40; //8 échantillons
ATD0CTL4 = 0x69; //2 MHz et 16 A/D conversion clock periods

}

Ce code fonctionne sur le canal 2 et il suffit de changer les 3 derniers bits de ATD0CTL5 pour changer de canal suivant un tableau dans la data sheet (= c'est surtout ce que je n'avais pas compris).

Concernant les variables couple_moteur1/2/3/4 elles correspondaient à ATD0DR4 ... Mais maintenant que j'ai compris que l'on stock les valeurs/échantillons dans ces variables. Cela n'a plus de sens.

Par contre j'ai 2 interrogations, concernant "channel sample mode" et le "Right" ou "Left justified".

Je ne comprends pas trop l'intérêt que "Channel sample mode" soit sur plusieurs canal (même si j'ai mis sur 1 seul canal dans mon cas). Et concernant Right et Left justified, la je comprend pas à quoi cela correspond. Quelqu'un pourrait m'expliquer ?

Posté le : 26/04/2016 00:08
Transférer la contribution vers d'autres applications Transférer


Re: ADC sur S12XDP512
Pilier de la communauté
Inscrit:
27/09/2005 18:07
De Metz
Messages: 1335
Hors Ligne
Et concernant Right et Left justified, la je comprend pas à quoi cela correspond. Quelqu'un pourrait m'expliquer ?
Si tu as un registre de 16 bits pour stocker le résultat d'un ADC 10 bits, tu auras 6 bits inutiles.

Tu peux placer ces 6 bits à gauche du registre (right justified) ou à droite (left justified). En principe, ça doit être right justified, mais si tu n'as besoin que des 8 bits les plus significatifs, ceux ci se retrouveront dans l'octet de poids fort du registre.

Posté le : 26/04/2016 00:48
Transférer la contribution vers d'autres applications Transférer


Re: ADC sur S12XDP512
Accro
Inscrit:
06/07/2007 09:17
Messages: 697
Hors Ligne
Salut.

Citation :

Je ne comprends pas trop l'intérêt que "Channel sample mode" soit sur plusieurs canal (même si j'ai mis sur 1 seul canal dans mon cas). Et concernant Right et Left justified, la je comprend pas à quoi cela correspond. Quelqu'un pourrait m'expliquer ?


Sauf erreur de ma part,
Tu pourrais imaginer faire "en une fois" 4 échantillons sur la voie 1 et 4 autres sur la voie 3.
Ton buffer est plein et tu récupère d'un coup toutes les données...
Je ne connais pas ton micro, mais sur certain tu peux faire ça en associant un DMA pour la recopie en RAM ;).

Posté le : 02/05/2016 17:11
Transférer la contribution vers d'autres applications Transférer



 Haut   Précédent   Suivant



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Powered by XOOPS© The XOOPS Project
Contacter les administrateurs

ADC sur S12XDP512 [Forums - HC12 et S12]