#include <avr/interrupt.h>
#include <inttypes.h>
-#define RF433_PIN 10
-//********************************************************************//
+//INPUT PINS digital 2-7 PIND
+#define PIND_MASK B11111100
+//INPUT PINS digitat 8-12 PINB
+#define PINB_MASK B00011111
+//INPUT PINS analog 0-4 PINC
+#define PINC_MASK B00011111
+
+#define INPUT_SIG_PORTD B11000000
+#define INPUT_SIG_PORTB B00011111
+#define INPUT_SIG_PORTC B00010000
+
+#define OUTPUT_SIG_PORTB ( PINB_MASK & ~INPUT_SIG_PORTB )
+// B00011111 & ! B00011111 = 0
+#define OUTPUT_SIG_PORTC ( PINC_MASK & ~INPUT_SIG_PORTC )
+// B00011111 & ! B00010000 = B00001111
+#define OUTPUT_SIG_PORTD ( PIND_MASK & ~INPUT_SIG_PORTD )
+// B11111100 & ! B11000000 = 00111100
+union union16 {
+ byte uint8[2];
+ uint16_t uint16;
+};
+
+union union32 {
+ byte uint8[4];
+ uint16_t uint16[2];
+ uint32_t uint32;
+};
-typedef unsigned char byte;
-typedef struct {
- byte offset;
- byte state;
-} rf_bit_t;
-
-// offset is number of alphas (0.08ms)
-
-const rf_bit_t zero_bit[] = { { 4, 1 },
- { 16, 0 },
- { 20, 1 },
- { 32, 0 },
- { 0, 0 } };
-
-const rf_bit_t one_bit[] = { { 12, 1 },
- { 16, 0 },
- { 28, 1 },
- { 32, 0 },
- { 0, 0 } };
-
-const rf_bit_t float_bit[] = { { 4, 1 },
- { 16, 0 },
- { 28, 1 },
- { 32, 0 },
- { 0, 0 } };
-
-const rf_bit_t sync_bit[] = { { 4, 1 },
- { 128, 0 },
- { 0, 0 } };
-
-typedef enum { ZERO = 0, ONE , FLOAT , SYNC } adbit_t;
-typedef byte ad_bit_t;
-#define WORD_LEN 13
-typedef ad_bit_t word_t[WORD_LEN];
-
-const rf_bit_t* bit_defs[] = { zero_bit, one_bit, float_bit, sync_bit };
-
-byte alpha_cnt = 0;
-byte bit_cnt = 0;
-byte chunk_cnt = 0;
-byte word_cnt = 0;
-const ad_bit_t* current_word;
-byte volatile frame_finished = 1;
-
-#define FRAME_LEN 8
-
-#define A1_ON 0
-#define A1_OFF 1
-#define A2_ON 2
-#define A2_OFF 3
-
-#define B1_ON 4
-#define B1_OFF 5
-#define B2_ON 6
-#define B2_OFF 7
-
-#define C1_ON 8
-#define C1_OFF 9
-#define C2_ON 10
-#define C2_OFF 11
-
-#define D1_ON 12
-#define D1_OFF 13
-#define D2_ON 14
-#define D2_OFF 15
-
-const word_t words[] = {
-{ ZERO, ZERO, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // A1_ON
-{ ZERO, ZERO, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC }, // A1_OFF
-{ ZERO, ZERO, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // A2_ON
-{ ZERO, ZERO, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC }, // A2_OFF
-
-{ FLOAT, ZERO, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // B1_ON
-{ FLOAT, ZERO, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC }, // B1_OFF
-{ FLOAT, ZERO, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // B2_ON
-{ FLOAT, ZERO, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC }, // B2_OFF
-
-{ ZERO, FLOAT, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // C1_ON
-{ ZERO, FLOAT, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC }, // C1_OFF
-{ ZERO, FLOAT, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // C2_ON
-{ ZERO, FLOAT, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC }, // C2_OFF
-
-{ FLOAT, FLOAT, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // D1_ON
-{ FLOAT, FLOAT, FLOAT, FLOAT, ZERO, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC }, // D1_OFF
-{ FLOAT, FLOAT, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, FLOAT, SYNC }, // D2_ON
-{ FLOAT, FLOAT, FLOAT, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, FLOAT, FLOAT, ZERO, SYNC } // D2_OFF
-};
+//********************************************************************//
+typedef unsigned char byte;
//********************************************************************//
-
+/*
void start_timer()
{
// timer 1: 2 ms
TCCR1B = 0; // no clock source
TIMSK1 = 0; // disable timer interrupt
}
-
-union {
- byte uint8[4];
- uint32_t uint32;
-} rf433_data;
-byte rf433_hi_cnt=0;
-byte rf433_lo_cnt=0;
-byte last_sample=0;
-int valid=0;
-ISR(TIMER1_COMPA_vect)
-{
- byte sample = digitalRead(RF433_PIN);
- if (last_sample!=sample && sample==HIGH)
- {
- if ( rf433_lo_cnt > 2 && rf433_lo_cnt<6 && rf433_hi_cnt>10 && rf433_hi_cnt < 14)
- {
- rf433_data.uint32<<=1;
- rf433_data.uint32|=1;
- valid++;
- } else if (rf433_hi_cnt > 2 && rf433_hi_cnt<6 && rf433_lo_cnt>10 && rf433_lo_cnt < 14) {
- rf433_data.uint32<<=1;
- valid++;
- } else if (rf433_hi_cnt > 2 && rf433_hi_cnt<6 && rf433_lo_cnt>120 && rf433_lo_cnt < 128 && valid >=24) {
- //rf433_data.uint8[3]=0;
- //Serial.print(rf433_data.uint32);
- Serial.print(rf433_data.uint8[0],BYTE);
- Serial.print(rf433_data.uint8[1],BYTE);
- Serial.print(rf433_data.uint8[2],BYTE);
- //Serial.print(rf433_data.uint8[3],BYTE);
- } else {
- valid=0;
- rf433_data.uint32=0;
- }
- rf433_hi_cnt=0;
- rf433_lo_cnt=0;
- }
- if (sample == HIGH)
- rf433_hi_cnt++;
- else
- rf433_lo_cnt++;
- last_sample=sample;
+*/
+byte last_input=0;
+byte last_output=0;
+static void PCint(uint8_t port) {
+ byte input = ( INPUT_SIG_PORTB & ~ PINB ) | ( ( INPUT_SIG_PORTC & ~ PINC ) <<1 ) |( INPUT_SIG_PORTD & ~ PIND );
+ byte output = ( OUTPUT_SIG_PORTC & ~ PINC ) | (( OUTPUT_SIG_PORTD & ~ PIND ) <<2 ); // no output on B
+
+ if (!input)
+ return;
+ if (last_input==input && last_output==output)
+ return;
+ last_input=input;
+ last_output=output;
+ Serial.print(output,HEX);
+ Serial.print('\t');
+ Serial.println(input,HEX);
+ return;
}
-//unsigned long wm_start_[3]={0,0,0};
-//bool wait_millis(unsigned long *start_time, unsigned long ms)
-//{
-// if (ms == 0)
-// return false;
-// else if (*start_time > 0)
-// {
-// if (millis() < *start_time || millis() > (*start_time) + ms)
-// {
-// *start_time = 0;
-// return false;
-// }
-// else
-// return true;
-// }
-// else
-// {
-// *start_time=millis();
-// return true;
-// }
-//}
-//********************************************************************//
+SIGNAL(PCINT0_vect) {
+ PCint(0);
+}
+SIGNAL(PCINT1_vect) {
+ PCint(1);
+}
+SIGNAL(PCINT2_vect) {
+ PCint(2);
+}
void setup()
{
- pinMode(RF433_PIN, INPUT); // set pin to input
- digitalWrite(RF433_PIN, LOW); // turn of pullup resistors
-
+// pinMode(RF433_PIN, INPUT); // set pin to input
+// digitalWrite(RF433_PIN, LOW); // turn of pullup resistors
+ //Set Port as input
+ DDRB=0;
+// disable pull up
+ PORTB=0;
+ DDRD = DDRD & 3;
+ PORTD= PORTD & 3;
+
+ DDRC=0;
+ PORTC=0;
Serial.begin(57600);
-// Serial.println("starting timer");
- start_timer();
+ //Serial.println("starting timer");
+ PCMSK0=PINB_MASK & INPUT_SIG_PORTB;
+ PCMSK1=PINC_MASK & INPUT_SIG_PORTC;
+ PCMSK2=PIND_MASK & INPUT_SIG_PORTD;
+ PCICR|= B111;
+
+// start_timer();
}
+//INPUT PINS digital 2-7 PIND
+//INPUT PINS digitat 8-12 PINB
+//INPUT PINS analog 0-4 PINC
void loop()
{
+// Serial.Serial.println("foo");
+// return;
+
+
}