2 #include <avr/interrupt.h>
5 //INPUT PINS digital 2-7 PIND
6 #define PIND_MASK B11111100
7 //INPUT PINS digitat 8-12 PINB
8 #define PINB_MASK B00011111
9 //INPUT PINS analog 0-4 PINC
10 #define PINC_MASK B00011111
12 #define INPUT_SIG_PORTD B11000000
13 #define INPUT_SIG_PORTB B00011111
14 #define INPUT_SIG_PORTC B00010000
16 #define OUTPUT_SIG_PORTB ( PINB_MASK & ~INPUT_SIG_PORTB )
17 // B00011111 & ! B00011111 = 0
18 #define OUTPUT_SIG_PORTC ( PINC_MASK & ~INPUT_SIG_PORTC )
19 // B00011111 & ! B00010000 = B00001111
20 #define OUTPUT_SIG_PORTD ( PIND_MASK & ~INPUT_SIG_PORTD )
21 // B11111100 & ! B11000000 = 00111100
33 typedef unsigned char byte;
38 TCCR1A = 0; // prescaler 1:8, WGM = 4 (CTC)
39 TCCR1B = 1<<WGM12 | 1<<CS10 | 1<<CS11; //
40 OCR1A = 65000; // (1+159)*8 = 1280 -> 0.08ms @ 16 MHz -> 1*alpha
41 // OCR1A = 207; // (1+207)*8 = 1664 -> 0.104ms @ 16 MHz -> 1*alpha
42 TCNT1 = 0; // reseting timer
43 TIMSK1 = 1<<OCIE1A; // enable Interrupt
46 void stop_timer() // stop the timer
49 TCCR1B = 0; // no clock source
50 TIMSK1 = 0; // disable timer interrupt
53 ISR(TIMER1_COMPA_vect)
63 byte PINB_COPY = PINB;
64 byte PINC_COPY = PINC;
65 byte PIND_COPY = PIND;
66 byte output = ( OUTPUT_SIG_PORTC & ~ PINC_COPY ) | (( OUTPUT_SIG_PORTD & ~ PIND_COPY ) <<2 ); // no output on B
67 byte input = ( INPUT_SIG_PORTB & ~ PINB_COPY ) | ( ( INPUT_SIG_PORTC & ~ PINC_COPY ) <<1 ) |( INPUT_SIG_PORTD & ~ PIND_COPY );
73 //if (last_input==input && last_output==output)
77 // Serial.print(output,HEX);
78 // Serial.print('\t');
79 // Serial.print(input,HEX);
80 // Serial.print('\t');
88 Serial.println(value,HEX);
89 PCICR&= ~ B111; // Disable Interrupt
101 SIGNAL(PCINT2_vect) {
106 // pinMode(RF433_PIN, INPUT); // set pin to input
107 // digitalWrite(RF433_PIN, LOW); // turn of pullup resistors
118 //Serial.println("starting timer");
119 PCMSK0=PINB_MASK & INPUT_SIG_PORTB;
120 PCMSK1=PINC_MASK & INPUT_SIG_PORTC;
121 PCMSK2=PIND_MASK & INPUT_SIG_PORTD;
127 //INPUT PINS digital 2-7 PIND
128 //INPUT PINS digitat 8-12 PINB
129 //INPUT PINS analog 0-4 PINC
132 // Serial.Serial.println("foo");