Охота вам над железкой издеваться? 4 прерывания с четырьмя обработчиками в один и тот же момент - выпутывайся, как знаешь. И обработки коротких импульсов нет.
/* для 328 (UNO/NANO/MINI), см. схему
с регистрацией коротких импульсов
Arduino 1.8.6.
*/
volatile uint16_t counters[] = {0, 0, 0, 0,}; // 0.2, 0.4, 08, 1.2
uint32_t startTime = 0;
uint16_t interval = 1000;
void detect() {
uint8_t pinD = PIND;
counters[bitRead(pinD,4)+ bitRead(pinD,5)+ bitRead(pinD,6)]++ ;
digitalWrite(7, LOW);
digitalWrite(7, HIGH);
}
void setup() {
Serial.begin(57600);
pinMode(7, OUTPUT);
digitalWrite(7, LOW);
digitalWrite(7, HIGH);
/*
* ешё что надо настраиваем
*/
startTime = millis();
attachInterrupt(1, detect, RISING);
}
void loop() {
if (millis() - startTime >= interval) {
detachInterrupt(1);
/* Здесь передаюм что попало куда угодно,
измеряем температуру и вообще не спеша
делаем что хочется
*/
for (uint8_t n = 0; n < 4; n++) { counters[n] = 0; }
startTime = millis();
attachInterrupt(1, detect, RISING);
}
}
Охота вам над железкой издеваться? 4 прерывания с четырьмя обработчиками в один и тот же момент - выпутывайся, как знаешь. И обработки коротких импульсов нет.
По моему, может потребоваться задержка фронта по входу С, чтобы не пропустить "верхние" значения.
Охота вам над железкой издеваться? 4 прерывания с четырьмя обработчиками в один и тот же момент - выпутывайся, как знаешь. И обработки коротких импульсов нет.
По моему, может потребоваться задержка фронта по входу С, чтобы не пропустить "верхние" значения.
м.быть,.. поставить вместо одного ТМ8 два корпуса ТМ2 с изменением схемы тактирования.
в любом случае желательно погонять/проверить на имитаторе.
Охота вам над железкой издеваться? 4 прерывания с четырьмя обработчиками в один и тот же момент - выпутывайся, как знаешь. И обработки коротких импульсов нет.
/* для 328 (UNO/NANO/MINI), см. схему с регистрацией коротких импульсов Arduino 1.8.6. */ volatile uint16_t counters[] = {0, 0, 0, 0,}; // 0.2, 0.4, 08, 1.2 uint32_t startTime = 0; uint16_t interval = 1000; void detect() { uint8_t pinD = PIND; counters[bitRead(pinD,4)+ bitRead(pinD,5)+ bitRead(pinD,6)]++ ; digitalWrite(7, LOW); digitalWrite(7, HIGH); } void setup() { Serial.begin(57600); pinMode(7, OUTPUT); digitalWrite(7, LOW); digitalWrite(7, HIGH); /* * ешё что надо настраиваем */ startTime = millis(); attachInterrupt(1, detect, RISING); } void loop() { if (millis() - startTime >= interval) { detachInterrupt(1); /* Здесь передаюм что попало куда угодно, измеряем температуру и вообще не спеша делаем что хочется */ for (uint8_t n = 0; n < 4; n++) { counters[n] = 0; } startTime = millis(); attachInterrupt(1, detect, RISING); } }Охота вам над железкой издеваться? 4 прерывания с четырьмя обработчиками в один и тот же момент - выпутывайся, как знаешь. И обработки коротких импульсов нет.
По моему, может потребоваться задержка фронта по входу С, чтобы не пропустить "верхние" значения.
Охота вам над железкой издеваться? 4 прерывания с четырьмя обработчиками в один и тот же момент - выпутывайся, как знаешь. И обработки коротких импульсов нет.
По моему, может потребоваться задержка фронта по входу С, чтобы не пропустить "верхние" значения.
в любом случае желательно погонять/проверить на имитаторе.