Re: Traceur de courbes basique en DIY
Posté : 10 févr. 2015, 14:07
Je suis également ça avec attention (bien que je sois grave largué dès la 2ème ligne
)

La théorie des amplificateurs à tubes
https://www.projetg5.com/phpbb3/
Code : Tout sélectionner
// Arrays to save our results in
unsigned long start_times[100];
unsigned long stop_times[100];
unsigned long values[100];
// Define various ADC prescaler
const unsigned char PS_16 = (1 << ADPS2);
const unsigned char PS_32 = (1 << ADPS2) | (1 << ADPS0);
const unsigned char PS_64 = (1 << ADPS2) | (1 << ADPS1);
const unsigned char PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
// Setup the serial port and pin 2
void setup() {
Serial.begin(115200);
pinMode(2, INPUT);
// set up the ADC
ADCSRA &= ~PS_128; // remove bits set by Arduino library
// you can choose a prescaler from above.
// PS_16, PS_32, PS_64 or PS_128
ADCSRA |= PS_16;
// set our own prescaler to 64
}
void loop() {
unsigned int i;
// capture the values to memory
for(i=0;i<100;i++) {
start_times[i] = micros();
values[i] = analogRead(A3);
stop_times[i] = micros();
}
// print out the results
Serial.println("\n\n--- Results ---");
for(i=0;i<100;i++) {
Serial.print(values[i]);
Serial.print(" elapse = ");
Serial.print(stop_times[i] - start_times[i]);
Serial.print(" us\n");
}
delay(6000);
}
Alors en fait il y a 2 choses :Totof a écrit :Pas besoin de se passer des libs Arduino, on peut modifier le prescaler directement dans l'IDE
Alors il faut bien distinguer 2 choses : ce qu'il est possible de faire (tout), et ce que peut gérer Processing (dans ce domaine, pas grand chose).Totof a écrit :Pour Arduino et les interruptions et le transfert vers Processing, ça devrait le faire pourtant![]()
Code : Tout sélectionner
ISR(USART_TX_vect)
{
// Traitement de la réception d'un caractère
}
Alors pour le 1, je ne fais que me référer au datasheet, p. 240 pour l'ATmega328 :Totof a écrit :Peux tu un peu développer le problème que tu soulève SVP , ça m'intéresse
1° cette fréquence pour la pleine résolution du CAN
2° le soucis du polling
Par contre aucun moyen de savoir quelle est la résolution réelle en fonction de la fréquence, il faut donc considérer que le (les ?) LSB n'est pas significatif au-dessus de 200kHz, ce qui équivaut à une résolution de 9 bits (ou moins).Atmel a écrit :the successive approximation circuitry requires an input clock frequency between 50kHz and 200kHz to get maximum resolution. If a lower resolution than 10 bits is needed, the input clock frequency to the ADC can be higher than 200kHz to get a higher sample rate.
Code : Tout sélectionner
// start the conversion
sbi(ADCSRA, ADSC);
// ADSC is cleared when the conversion finishes
while (bit_is_set(ADCSRA, ADSC));
Non, c'est moi quiTotof a écrit :En effet pour moi Processing était juste le programme de création d'interface graphique qui va bien en complément de l'IDE Arduino![]()
![]()
De ce que j'en comprend, c'est que le ou les bits de poids faible peuvent être "faux" à une fréquence élevée. Ainsi, si tu as exactement 2.5V sur l'ADC, tu pourras lire 511, ou 512, ou peut-être même 510 ou 513... Bref, il y a une erreur possible sur la valeur mesurée qui peut faire passer ta résolution effective de 5mV (10 bits significatifs) à 10mV (9 bits significatifs) ou même 20mV (8 bits significatifs).Totof a écrit :Pour les ADC et mon prescaler de 16 , j'ai bien une valeur retournée de 0 à 1023 , je relirais les pages du datasheet, mais j'ai du mal à voir ou est le soucis , le seul truc que j'ai remarqué en analysant les mesures retournée c'est que les premières conversion à l'allumage ne sont pas fiable et souvent erronées , mais ça c'est marqué dans le datasheet aussi![]()