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