Одновременный счет импульсов с 4х входов и передача их по 485 в ПК

SLKH
Offline
Зарегистрирован: 17.08.2015

Охота вам над железкой издеваться?  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);
  }
}

 

Bruzzer
Offline
Зарегистрирован: 17.03.2020

SLKH пишет:

Охота вам над железкой издеваться?  4 прерывания с четырьмя обработчиками в один и тот же момент - выпутывайся, как знаешь. И обработки коротких импульсов нет.



По моему, может потребоваться задержка фронта по входу С, чтобы не пропустить "верхние" значения.

SLKH
Offline
Зарегистрирован: 17.08.2015

Bruzzer пишет:

SLKH пишет:

Охота вам над железкой издеваться?  4 прерывания с четырьмя обработчиками в один и тот же момент - выпутывайся, как знаешь. И обработки коротких импульсов нет.



По моему, может потребоваться задержка фронта по входу С, чтобы не пропустить "верхние" значения.

м.быть,.. поставить вместо одного ТМ8 два корпуса ТМ2 с изменением схемы тактирования.

в любом случае желательно погонять/проверить на имитаторе.