Vergelijk het nieuwe monster in een datalogger met een hoge bemonsteringsfrequentie

Ik gebruik sdFat-bibliotheek het voorbeeld van de analoge bin-logger,

Github: SdFat/SdFat/examples/AnalogBinLogger /

The program is working fine and every thing but the thing is, this high speed datalogger uses interrupts and timers to make the ADC work at a pre-determined sampling frequency and it DOES NOT use the normal analogRead ()

Wat ik wil is, wanneer de invoer van een analoge pin een voorbepaalde waarde is, wil ik HOOG of LAAG schrijven naar een digitale pen, mijn vraag is, hoe kan ik het nieuwe voorbeeld in het voorbeeld van de analoge bin-logger vergelijken, want ik wil eenvoudig het nieuwe voorbeeld vergelijken met:

if ( analogRead() < 256 ) {// do something}

wetende dat er geen analogRead() in het programma is omdat het timers en interrupts gebruikt.

0

1 antwoord

In de functie

ISR(ADC_vect) {

de variabele d bevat de huidige sample:

 //Read ADC data.
#if RECORD_EIGHT_BITS
  uint8_t d = ADCH;
#else //RECORD_EIGHT_BITS
 //This will access ADCL first.
  uint16_t d = ADC;
#endif //RECORD_EIGHT_BITS

U kunt dus "iets" doen, afhankelijk van wat zich in d bevindt. Omdat dit een timeronderbreking is, heb je natuurlijk maar weinig tijd om iets te doen, dus je moet ervoor zorgen dat alles wat je doet snel en efficiënt is - dus eigenlijk wil je directe poorttoegang gebruiken in plaats van digitalWrite ().

3
toegevoegd
@SabirMoglad Probeer adcindex te bekijken.
toegevoegd de auteur Majenko, de bron
dit is perfect, maar bedankt hoe je weet tot welke analoge pincode deze d-waarde behoort, omdat er meer dan één kanaal wordt gebruikt? @majenko
toegevoegd de auteur diegoaguilar, de bron