/*
unsigned int timerValue; // значение таймера
volatile int x=0xaaaa;
volatile int y;
void setup() {
Serial.begin(9600); // инициализируем последовательный порт, скорость 9600
// установки таймера 1
TCCR1A = 0;
TCCR1B = 0;
}
void loop() {
noInterrupts(); // запрет прерываний
TCNT1H = 0; // сброс таймера
TCNT1L = 0;
TCCR1B = 1; // разрешение работы таймера
// ---------- исследуемый программный блок ---------
//analogReadFast(A0);
int _value = 0;
_value = analogRead(A0);
//Serial.println("ADC Output " + String(_value));
//float measuredVoltage = _value * coefficientOne + minVoltage;
//Serial.println("Voltage " + String(measuredVoltage));
//float _rNtc = measuredVoltage * R1 / (inputVoltage - measuredVoltage);
//float temperature = 1 / (log(_rNtc / ntcR25) / ntcBeta + 1 / (273.15 + 25)) - 273.15;
//Serial.println("temperature " + String(temperature));
//float temperature1 = 1 / (log(_rNtc / ntcR25) / ntcBeta + 0.003354016) - 273.15;
//Serial.println("temperature1 " + String(temperature1));
//return temperature;
// -------------------------------------------------
TCCR1B = 0; // остановка таймера
timerValue = (unsigned int)TCNT1L | ((unsigned int)TCNT1H << 8); // чтение таймера
interrupts(); // разрешение прерываний
// вывод на компьютер
Serial.print( (float)(timerValue - 2) * 0.0625);
Serial.println(" mks");
delay(500);
}
uint16_t analogReadFast(uint8_t pin) {
pin = ((pin < 8) ? pin : pin - 14); // analogRead(2) = analogRead(A2)
ADMUX = (DEFAULT<< 6) | pin; // Set analog MUX & reference
bitSet(ADCSRA, ADSC); // Start
while (ADCSRA & (1 << ADSC)); // Wait
return ADC; // Return result
}
*/
// Тест скорости выполнения команд Arduino
// Просто помести свой код внутри test() и загрузи прошивку!
inline __attribute__((always_inline))
void test(void) {
asm ("nop");
// исследуемый текст помещать ниже ________________
uint8_t pin = A0;
pin = ((pin < 8) ? pin : pin - 14); // analogRead(2) = analogRead(A2)
ADMUX = (DEFAULT<< 6) | pin; // Set analog MUX & reference
bitSet(ADCSRA, ADSC); // Start
while (ADCSRA & (1 << ADSC)); // Wait
return ADC; // Return result
//____________________________________
}
// =========================================
volatile uint16_t cnt_ovf = 0;
void setup() {
Serial.begin(9600);
TCCR1A = TCCR1B = TCNT1 = cnt_ovf = 0; // Сброс таймера
TIFR1 = (1 << TOV1);
TIMSK1 = (1 << TOIE0); // Прерывание переполнения
TCCR1B = (1 << CS10); // Старт таймера
test(); // тест
TCCR1B = 0; // остановить таймер
uint32_t count = TCNT1 - 2; // минус два такта на действия
count += ((uint32_t)cnt_ovf * 0xFFFF); // с учетом переполнений
Serial.print("ticks: ");
Serial.println(count);
Serial.print("time (us): ");
Serial.println(count * (float)(1000000.0f / F_CPU), 4);
}
ISR(TIMER1_OVF_vect) {
cnt_ovf++;
}
void loop() {
}