#include #include #include #define MAX_LINES 10 #define NO_INPUT 0 #define DIGITAL_INPUT 1 #define ANALOG_INPUT 2 #define PWMFreq 720 // output PWM frequency (Hz) uint16_t ICR16Val; void setup() { int i; ICR16Val = 16000000/PWMFreq/2; // set Phase PWM //////////////////////////////////////////////////////////////////////////////////////////////// struct MyLine { uint8_t InputType; // NO_INPUT, ANALOG_INPUT, DIGITAL_INPUT uint8_t A_InPort; // pin number of analog input port uint8_t D_InPort; // pin number of digital input port uint8_t OutPort; // pin number of pwm output port uint8_t Timer; // assigned timer uint16_t OCRReg; // Adresse Output Compare Register // uint16_t TCCRAReg; // Adresse Output Compare Register // uint16_t TCCRBReg; // Adresse Output Compare Register // uint8_t Comxy; // bitmask uint8_t LEDPin; // pin number of status LED }; struct MyLine Lines[MAX_LINES] { NO_INPUT, A1, 38, 12, 1, 0x88, 0x80, 0x81, COM1A1, 22, NO_INPUT, A2, 39, 11, 1, 0x8A, 0x80, 0x81, COM1B1, 23, DIGITAL_INPUT, A3, 40, 5, 3, 0x98, 0x90, 0x91, COM3A1, 24, DIGITAL_INPUT, A4, 41, 2, 3, 0x9A, 0x90, 0x91, COM3B1, 25, DIGITAL_INPUT, A5, 42, 3, 3, 0x9C, 0x90, 0x91, COM3C1, 26, DIGITAL_INPUT, A6, 43, 6, 4, 0xA8, 0xA0, 0xA1, COM4A1, 27, DIGITAL_INPUT, A7, 46, 7, 4, 0xAA, 0xA0, 0xA1, COM4B1, 28, DIGITAL_INPUT, A8, 47, 8, 4, 0xAC, 0xA0, 0xA1, COM4C1, 29, DIGITAL_INPUT, A9, 48, 44, 5, 0x128, 0x120, 0x121, COM5A1, 30, DIGITAL_INPUT, A10, 49, 45, 5, 0x12A, 0x120, 0x121, COM5B1, 31 }; // initialize line status LEDs for ( i = 22 ; i < 38 ; i++) { pinMode(i, OUTPUT); digitalWrite(i, LOW); } // Initialize input and output ports (Arduino Pins) for ( i = 0; i < 10; i++) { pinMode(Lines[i].A_InPort,INPUT); // Initialize all analog input ports digitalWrite(Lines[i].A_InPort,LOW); pinMode(Lines[i].D_InPort,INPUT); // Initialize all digital input ports digitalWrite(Lines[i].D_InPort,LOW); pinMode(Lines[i].OutPort,OUTPUT); // Initialize all PWM output port if (Lines[i].InputType) { digitalWrite(Lines[i].LEDPin, HIGH); } } /////////////////////////////////////////////// Timer 3 /////////////////////////////////////////////// TCCR3A = TCCR3B = TCCR3C = 0; for ( i=2; i<5;i++) { if (Lines[i].InputType) { TCCR3A |= (1<