Megatron 22Y ou 25Y Manuel utilisateur
PDF
Descargar
Documento
Note d’application AN-169 Rev 1.0 MISE en OEUVRE DES CODEURS SSI Exemple de code (microchip XC8) : typedef union { // conversion et découpage d'un int en bytes Les codeurs des séries 22Y ou 25Y disposent d'une interface série synchrone. struct { Le maître fournit une horloge et lit les 12 bits formant la position actuelle du codeur. }; Le codeur ne dispose pas de signal de validation comme un « chip select » et doit être resynchronisé à chaque transmission. La resynchronisation est effectuée par la mise à l'état haut du signal d'horloge « CLK » pendant un temps dit « TimeOut ». Ceci a pour conséquence d'imposer des temps limites sur CLK, en effet une horloge trop lente pourrait être interprétée comme un TimeOut. int valInt; } valueInt; unsigned int grayToBinary(unsigned int num) { unsigned int mask; for (mask = num >> 1; mask != 0; mask = mask >> 1) { num = num ^ mask; } return num; } int main(int argc, char** argv) { La durée à l'état bas de CLK doit être comprise entre 25ns et 16µs valueInt dataVal; La durée à l'état haut de CLK doit être comprise entre 25ns et 16µs. init(); while (1) { TimeOut dataVal.valInt = 0; // variable qui va contenir la valeur lue sur le codeur SSI clk = 0; __delay_us(1); // la durée à l'état bas doit etre entre 25ns et TimeOut CLK DATA unsigned char low, high; D11 D10 D0 for (char i = 0; i < 12; i++) { 0 clk = 1; D'autre part les 12 bits sont transmis selon un code Gray réduit, symétrique par rapport à la valeur médiane. __delay_us(1); // la durée à l'état haut doit etre entre 25ns et TimeOut clk = 0; // la durée à l'état bas doit etre entre 25ns et TimeOut dataVal.valInt = (dataVal.valInt << 1) | data; // le premier bit transmis est D11 // __delay_us(1); // la durée à l'état bas doit etre entre 25ns et TimeOut // donc ne pas rajouter de délai si la durée du décalage est suffisamment longue } // Un dernier coup de clock, mais sans décalage clk = 1; __delay_us(1); // la durée à l'état haut doit etre entre 25ns et TimeOut Tél:04.50.70.54.54 [email protected] http://www.megatron.fr AN-169 2 clk = 0; __delay_us(1); // la durée à l'état haut doit etre entre 25ns et TimeOut clk = 1; // __delay_us(17); // Timeout de 16µs mini permettant la resynchronisation pour la demande suivante // dataVal.valInt = grayToBinary(dataVal.valInt); while (BusyUSART()); WriteUSART(dataVal.high); // par exemple sortie sur UART du MSB while (BusyUSART()); WriteUSART(dataVal.low); // par exemple sortie sur UART du LSB } Exemple d'interface : Les lignes CLK et DATA étant symétriques une conversion de type RS422 est nécessaire DCM-102-D 5 ou +24V GND 2 1 +5V CN3 C2 1 2 100nF U1 1 +5V 2 3 4 8 7 6 5 CN1 5 1 4 2 3 +5V 2 3 C3 1 1 2 3 4 RO RE DE DI VCC B A GND 6 7 6 5 http://www.megatron.fr VCC GND CLK+ CLKDAT+ DAT- DCM-106-D 2 8 MAX3082CPA [email protected] 2 100nF U2 Tél:04.50.70.54.54 4 5 +5V 120 1 R2 CN2 VCC B A GND MAX3082CPA DCM-105-D CLK DATA GND VCC RO RE DE DI 1 ">

Enlace público actualizado
El enlace público a tu chat ha sido actualizado.