void reader_init() {
// For reader:
// PC5 input, pull-up
bit_RX = digitalPinToBitMask(input_pin);
port_RX = digitalPinToPort(input_pin);
if (port_RX == NOT_A_PIN)
{ Serial.println("BAD input PIN");
return;
}
Serial.println("Hi");
direction_RX = portModeRegister(port_RX);
out_RX = portOutputRegister(port_RX);
in_RX = portInputRegister(port_RX);
*out_RX |= bit_RX;
// enable pin change interrupt PCINT#
if(digitalPinToPCICR(input_pin)==0)
{
Serial.println("not interupt pin");
return;
}
*digitalPinToPCICR(input_pin) |= (1<<digitalPinToPCICRbit(input_pin));
*digitalPinToPCMSK(input_pin) |= (1<<digitalPinToPCMSKbit(input_pin));
reader_pin_last = *in_RX & bit_RX; // read pin state
// Timer1 setup CLK/64
OCR1A = 0x61A7; // will campare value of OCR1A against timer 1 for timeout
TCCR1B = (1<<CS11) | (1<<CS10); //CLK/64
TCCR1A =0;
TCCR1C =0;
// Timer1 enable Output Compare 1 match interrupt
TIMSK1 |= (1<<OCIE1A); // if OCR1A matches timer interupt will happen
// notes:
// 100,000us = 0x61A7 (CTC timer max)
// 64us = 15 (small bit period)
// 128us = 29 (large bit period)
// 200us = 46 (Start Of Frame period)
// 768us = 177 (Break period)
}
Bookmarks