atlo atmega168pa working
parent
cc1785dfee
commit
b036f711b7
|
@ -1,9 +1,9 @@
|
||||||
PRG = uart_hello
|
PRG = uart_hello
|
||||||
OBJ = main.o buzzer.o keypad.o twi.o
|
OBJ = main.o buzzer.o keypad.o twi.o
|
||||||
PROGRAMMER = avrisp2
|
PROGRAMMER = usbasp
|
||||||
PORT = usb
|
PORT = usb
|
||||||
MCU_TARGET = atmega8
|
MCU_TARGET = atmega168p
|
||||||
AVRDUDE_TARGET = atmega8
|
AVRDUDE_TARGET = m168p
|
||||||
OPTIMIZE = -Os
|
OPTIMIZE = -Os
|
||||||
DEFS =
|
DEFS =
|
||||||
LIBS =
|
LIBS =
|
||||||
|
@ -81,7 +81,7 @@ install: $(PRG).hex
|
||||||
|
|
||||||
fuse:
|
fuse:
|
||||||
avrdude -p $(AVRDUDE_TARGET) -c $(PROGRAMMER) -P $(PORT) -v \
|
avrdude -p $(AVRDUDE_TARGET) -c $(PROGRAMMER) -P $(PORT) -v \
|
||||||
-U lfuse:w:0xe4:m -U hfuse:w:0xd9:m
|
-U lfuse:w:0xe2:m -U hfuse:w:0xde:m
|
||||||
|
|
||||||
ddd: gdbinit
|
ddd: gdbinit
|
||||||
ddd --debugger "avr-gdb -x $(GDBINITFILE)"
|
ddd --debugger "avr-gdb -x $(GDBINITFILE)"
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include "io.h"
|
#include "io.h"
|
||||||
#include "buzzer.h"
|
#include "buzzer.h"
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
IMPORT_IO(BUZZER);
|
IMPORT_IO(BUZZER);
|
||||||
|
|
||||||
|
@ -20,9 +21,9 @@ void buzzer_init(void)
|
||||||
void buzzer_start(uint16_t ticks)
|
void buzzer_start(uint16_t ticks)
|
||||||
{
|
{
|
||||||
cli();
|
cli();
|
||||||
TIMSK &= ~_BV(OCIE1A);
|
TIMSK1 &= ~_BV(OCIE1A);
|
||||||
OCR1A = ticks;
|
OCR1A = ticks;
|
||||||
TIMSK |= _BV(OCIE1A);
|
TIMSK1 |= _BV(OCIE1A);
|
||||||
TCNT1 = 0;
|
TCNT1 = 0;
|
||||||
sei();
|
sei();
|
||||||
}
|
}
|
||||||
|
@ -37,7 +38,9 @@ void buzzer_start_timed(uint16_t freq, uint16_t ticks)
|
||||||
void buzzer_stop(void)
|
void buzzer_stop(void)
|
||||||
{
|
{
|
||||||
cli();
|
cli();
|
||||||
TIMSK &= ~_BV(OCIE1A);
|
TIMSK1 &= ~_BV(OCIE1A); // dissable compare interrupt
|
||||||
|
TIFR1 |= _BV(OCF1A); // clear compare flags
|
||||||
|
IO_OUT(BUZZER, 1);
|
||||||
sei();
|
sei();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,7 +51,7 @@ ISR(TIMER1_COMPA_vect)
|
||||||
{
|
{
|
||||||
g_BuzzerTicksLeft--;
|
g_BuzzerTicksLeft--;
|
||||||
if (g_BuzzerTicksLeft == 0)
|
if (g_BuzzerTicksLeft == 0)
|
||||||
TIMSK &= ~_BV(OCIE1A);
|
TIMSK1 &= ~_BV(OCIE1A);
|
||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
void buzzer_init(void);
|
void buzzer_init(void);
|
||||||
void buzzer_signal_boot(void);
|
void buzzer_signal_boot(void);
|
||||||
void buzzer_start_timed(uint16_t, uint16_t);
|
void buzzer_start_timed(uint16_t, uint16_t);
|
||||||
|
void buzzer_start(uint16_t ticks);
|
||||||
|
void buzzer_stop(void);
|
||||||
|
|
||||||
#define TONE_LOW 128
|
#define TONE_LOW 128
|
||||||
#define TONE_MID 64
|
#define TONE_MID 64
|
||||||
|
|
|
@ -18,9 +18,9 @@ static void _keypad_update_column(void);
|
||||||
|
|
||||||
void keypad_init(void)
|
void keypad_init(void)
|
||||||
{
|
{
|
||||||
TCCR0 = _BV(CS02);
|
TCCR0B = _BV(CS02);
|
||||||
TCNT0 = 0;
|
TCNT0 = 0;
|
||||||
TIMSK |= _BV(TOIE0);
|
TIMSK0 |= _BV(TOIE0);
|
||||||
|
|
||||||
IO_OUT(KPAD_ROW1, 1);
|
IO_OUT(KPAD_ROW1, 1);
|
||||||
IO_OUT(KPAD_ROW2, 1);
|
IO_OUT(KPAD_ROW2, 1);
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include <avr/wdt.h>
|
#include <avr/wdt.h>
|
||||||
#include <util/delay.h>
|
#include <util/delay.h>
|
||||||
#include <avr/interrupt.h>
|
#include <avr/interrupt.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "io.h"
|
#include "io.h"
|
||||||
#include "buzzer.h"
|
#include "buzzer.h"
|
||||||
|
@ -13,27 +14,31 @@
|
||||||
/////////////////////
|
/////////////////////
|
||||||
|
|
||||||
// Buzzer on PC2
|
// Buzzer on PC2
|
||||||
DECLARE_IO(BUZZER, C, 2);
|
DECLARE_IO(BUZZER, B, 2);
|
||||||
// Red LED pn PC0
|
// Red LED pn PC0
|
||||||
DECLARE_IO(LED_RED, C, 0);
|
DECLARE_IO(LED_RED, D, 4);
|
||||||
// Green LED on PC1
|
// Green LED on PC1
|
||||||
DECLARE_IO(LED_GREEN, C, 1);
|
DECLARE_IO(LED_GREEN, D, 1);
|
||||||
|
|
||||||
// Keypad
|
// Keypad
|
||||||
DECLARE_IO(KPAD_COL3, D, 0);
|
DECLARE_IO(KPAD_COL1, D, 5);
|
||||||
DECLARE_IO(KPAD_ROW3, D, 1);
|
DECLARE_IO(KPAD_COL2, B, 0);
|
||||||
|
DECLARE_IO(KPAD_COL3, B, 3);
|
||||||
|
|
||||||
|
DECLARE_IO(KPAD_ROW1, C, 1);
|
||||||
|
DECLARE_IO(KPAD_ROW2, C, 0);
|
||||||
|
DECLARE_IO(KPAD_ROW3, B, 5);
|
||||||
|
DECLARE_IO(KPAD_ROW4, B, 4);
|
||||||
|
|
||||||
DECLARE_IO(KPAD_COMMON, D, 2);
|
DECLARE_IO(KPAD_COMMON, D, 2);
|
||||||
DECLARE_IO(KPAD_COL2, D, 3);
|
|
||||||
DECLARE_IO(KPAD_ROW1, D, 4);
|
|
||||||
DECLARE_IO(KPAD_ROW2, D, 5);
|
|
||||||
DECLARE_IO(KPAD_ROW4, D, 6);
|
|
||||||
DECLARE_IO(KPAD_COL1, D, 7);
|
|
||||||
|
|
||||||
#define KEYPAD_BUFFER_SIZE 16
|
#define KEYPAD_BUFFER_SIZE 16
|
||||||
static volatile uint8_t KeypadBytes[KEYPAD_BUFFER_SIZE];
|
static volatile uint8_t KeypadBytes[KEYPAD_BUFFER_SIZE];
|
||||||
static volatile uint8_t KeypadIndex = 0;
|
static volatile uint8_t KeypadIndex = 0;
|
||||||
static volatile uint8_t KeypadShouldRead = 0;
|
static volatile uint8_t KeypadShouldRead = 0;
|
||||||
|
|
||||||
|
void fsm_logic(void); // TODO move
|
||||||
|
|
||||||
#define KEYPAD_STATE_IDLE 0
|
#define KEYPAD_STATE_IDLE 0
|
||||||
#define KEYPAD_STATE_GETTING_BYTES 1
|
#define KEYPAD_STATE_GETTING_BYTES 1
|
||||||
#define KEYPAD_STATE_TIMEOUT 2
|
#define KEYPAD_STATE_TIMEOUT 2
|
||||||
|
@ -53,13 +58,14 @@ static void fsm_idle(void)
|
||||||
KeypadState = KEYPAD_STATE_IDLE;
|
KeypadState = KEYPAD_STATE_IDLE;
|
||||||
KeypadShouldRead = 0;
|
KeypadShouldRead = 0;
|
||||||
KeypadIndex = 0;
|
KeypadIndex = 0;
|
||||||
IO_OUT(LED_RED, 0);
|
IO_OUT(LED_RED, 1);
|
||||||
IO_OUT(LED_GREEN, 0);
|
IO_OUT(LED_GREEN, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fsm_get_bytes(uint8_t required)
|
static void fsm_get_bytes(uint8_t required)
|
||||||
{
|
{
|
||||||
KeypadState = KEYPAD_STATE_GETTING_BYTES;
|
KeypadState = KEYPAD_STATE_GETTING_BYTES;
|
||||||
|
memset((void *)KeypadBytes, 0 , sizeof(KeypadBytes));
|
||||||
KeypadShouldRead = required;
|
KeypadShouldRead = required;
|
||||||
KeypadIndex = 0;
|
KeypadIndex = 0;
|
||||||
}
|
}
|
||||||
|
@ -84,11 +90,11 @@ int main (void)
|
||||||
TWI_Start_Transceiver();
|
TWI_Start_Transceiver();
|
||||||
|
|
||||||
// Flash LEDs and buzz buzzer for debug
|
// Flash LEDs and buzz buzzer for debug
|
||||||
IO_OUT(LED_GREEN, 1);
|
|
||||||
IO_OUT(LED_RED, 1);
|
|
||||||
buzzer_signal_boot();
|
|
||||||
IO_OUT(LED_GREEN, 0);
|
IO_OUT(LED_GREEN, 0);
|
||||||
IO_OUT(LED_RED, 0);
|
IO_OUT(LED_RED, 0);
|
||||||
|
buzzer_signal_boot();
|
||||||
|
IO_OUT(LED_GREEN, 1);
|
||||||
|
IO_OUT(LED_RED, 1);
|
||||||
|
|
||||||
// Zero out the keypad buffer
|
// Zero out the keypad buffer
|
||||||
for (uint8_t i = 0; i < KEYPAD_BUFFER_SIZE; i++)
|
for (uint8_t i = 0; i < KEYPAD_BUFFER_SIZE; i++)
|
||||||
|
@ -135,7 +141,7 @@ int main (void)
|
||||||
break;
|
break;
|
||||||
case KEYPAD_I2C_SOUND_OK:
|
case KEYPAD_I2C_SOUND_OK:
|
||||||
TWI_Start_Transceiver();
|
TWI_Start_Transceiver();
|
||||||
IO_OUT(LED_GREEN, 1);
|
IO_OUT(LED_GREEN, 0);
|
||||||
buzzer_start(TONE_HIGH);
|
buzzer_start(TONE_HIGH);
|
||||||
_delay_ms(100);
|
_delay_ms(100);
|
||||||
buzzer_stop();
|
buzzer_stop();
|
||||||
|
@ -154,7 +160,7 @@ int main (void)
|
||||||
break;
|
break;
|
||||||
case KEYPAD_I2C_SOUND_DENIED:
|
case KEYPAD_I2C_SOUND_DENIED:
|
||||||
TWI_Start_Transceiver();
|
TWI_Start_Transceiver();
|
||||||
IO_OUT(LED_RED, 1);
|
IO_OUT(LED_RED, 0);
|
||||||
buzzer_start(TONE_HIGH);
|
buzzer_start(TONE_HIGH);
|
||||||
_delay_ms(100);
|
_delay_ms(100);
|
||||||
buzzer_stop();
|
buzzer_stop();
|
||||||
|
|
Loading…
Reference in New Issue