Bonsoir,
Voilà que j'ai passé mon Dimanche à essayer de communiquer avec mon AD 7715, sans succès ! Pourtant je touche au but puisque c'est juste un bug que je n'arrive pas à trouver.
J'ai câblé le circuit comme sur cette page avec un oscillo externe 1MHz (vérifié).
http://paulfjujo.free.fr/AD7715/AD7715_LCD_16F84.htm
La doc technique : http://paulfjujo.free.fr/AD7715/docu/AD7715.pdf
Ce que je fais dans mon programme :
- D'abord j'envoie la valeur 0x10 pour initialiser le registre de comm. (gain = 1)
- Ensuite j'envoie la valeur 0x40 dans le registre Setup (1Mhz, filtre 50Hz)
Une fois ceci fait, je demande une lecture de la valeur analogique donc :
- Je test DRDY et quand il est à 0, j'envoie la valeur 0x38
- J'attends ensuite les données.
Le bug :
- Au début, durant les 5 premières secondes, je reçois bien des données qui correspondent à la valeur analogique d'entrée. Et au bout d'environ 5 à 10 secondes, les données passent à 0, plus rien ! Pourtant mon signal d'horloge (paquet de 8 fronts et le paquet de 16 fronts) est bien généré.
J'ai lu et relu la doc, vérifié les timings, mais là je ne vois pas du tout où pourrait être le problème.
Je fournis les chronos et le programme:
Merci beaucoup de votre future aide et bonne soirée / journée !Code:void ADC_Write(unsigned char inpData) { unsigned char i; ADC_CS = 0; delay_us(5); for(i=1; i<=8; i++) { ADC_CLK = 0; delay_us(5); ADC_DI = (inpData & 0x80); inpData = inpData << 1; ADC_CLK = 1; delay_us(5); } delay_us(5); } unsigned int ADC_ReadValue(void) { unsigned char i = 0; unsigned int adc_data = 0; while (ADC_DRDY); while (ADC_DRDY); ADC_Write(0x38); ADC_CS=0; delay_us(5); for(i=1; i<=16; i++) { ADC_CLK = 0; delay_us(5); ADC_CLK = 1; delay_us(5); adc_data = adc_data | ADC_DO; adc_data = adc_data << 1; } delay_us(5); ADC_CS=1; return adc_data; } void ADC_init(void) { ADC_RST=0; delay_ms(10); ADC_CLK=1; delay_ms(10); ADC_CS=1; delay_ms(10); ADC_RST=1; delay_ms(100); ADC_Write( 0x10 ); ADC_Write( 0x40 ); }
-----