D7 - input 6
B0 - input 7
B1 - input 8
+B2 - input 9
+B3 - input 10
+B4 - input 11
+B5 - input 12
Inputs are pulled high by internal pull-up resistors. Connect to GND to
activate.
+
+The module can be configured by sending a string of form ":Shhh." over the
+serial port, where hhh is a hex number. Lower two bits indicate the number of
+inputs (00=4, 01=8, 10=12, 11=16) and upper ten bits indicate offset of lowest
+input in multiples of 4 bits. At the moment there are no provisions for
+having 16 physical inputs.
+
+Example: ":S016." would configure the module to have 12 inputs at offset 20.
*/
#include <avr/io.h>
DDRD = 0x02; // 00000010
PORTD = 0xFC; // 11111100
- DDRB = 0x20; // 00000000
+ DDRB = 0x00; // 00000000
PORTB = 0x3F; // 00111111
serial_init(9600);
- serial_set_callback(receive);
- timer_init(1, 2);
- timer_set_callback(send_state);
+ timer_start_hz(1, 1, 2);
sei();
}
}
+SERIAL_SET_CALLBACK(receive)
+
void send_state(void)
{
uint8_t i;
serial_write('.');
}
+TIMER_SET_CALLBACK(1, send_state)
+
uint8_t hexdigit(uint8_t n)
{
n &= 0xF;