diff --git a/adc.c b/adc.c new file mode 100644 index 0000000..afd3824 --- /dev/null +++ b/adc.c @@ -0,0 +1,76 @@ +#include +#include + +#include "adc.h" + +void adc_init() +{ + ADMUX = 1 << REFS0 | 0 << REFS1; //Select external Vref + + //ADC Status Register A + ADCSRA = 1 << ADEN //Enable ADC + | 1 << ADIE //Enable ISR after conversion complete + //| 1< + +extern volatile uint16_t temp_values[4]; + +void adc_init(void); + +#endif//_ADC_H_ + diff --git a/main.c b/main.c index 269adb4..ce0cef5 100644 --- a/main.c +++ b/main.c @@ -13,22 +13,23 @@ #include "i2c.h" #include "modbus.h" #include "menu.h" +#include "adc.h" volatile uint16_t holdingRegisters[10]; +volatile uint16_t temp_values[4]; +volatile uint16_t temp_setpoints[4]; + void modbusGet(void) { if (modbusGetBusState() & (1<=2024) + x=0; } } ISR(TIMER0_OVF_vect) { //this ISR is called 9765.625 times per second modbusTickTimer(); } + +ISR(PCINT2_vect){ + if((PIND & (1<<7)) && (menu_state >= 1) && (menu_state <= 3)){ + if(PIND & (1<<6)) + temp_setpoints[menu_state-1]++; + else + temp_setpoints[menu_state-1]--; + } + + + + //if(PIND & (1<<7)) + // if(PIND & (1<<6)){ + // if(temp_setpoints[menu_state] > 0) + // } + // else{ + // if(temp_setpoints[menu_state] < 300) + // } +} diff --git a/makefile b/makefile index 53488e8..6f963ed 100644 --- a/makefile +++ b/makefile @@ -1,5 +1,5 @@ TARGET = main -FILES = main i2c lcd modbus menu +FILES = main i2c lcd modbus menu adc MCU = atmega328p PROGC = m328p CC = avr-gcc diff --git a/menu.c b/menu.c index 6dec3f3..70a93c7 100644 --- a/menu.c +++ b/menu.c @@ -1,4 +1,12 @@ #include "lcd.h" +#include "menu.h" +#include + +// 0 = nothing selected +// 1 = change zone 1 +// 2 = change zone 2 +// 3 = change zone 3 +volatile uint8_t menu_state = 0; void write_heater_real_temp(uint8_t n, uint16_t temp){ @@ -8,6 +16,26 @@ void write_heater_set_temp(uint8_t n, uint16_t temp){ } +void update_cursor(){ + switch(menu_state){ + case 1: + lcd_set_position(2,6); + lcd_cursor(1); + break; + case 2: + lcd_set_position(2,11); + lcd_cursor(1); + break; + case 3: + lcd_set_position(2,16); + lcd_cursor(1); + break; + default: + lcd_cursor(0); + break; + } +} + void draw_menu(){ lcd_clear(); lcd_write(" Heat Zone Control"); @@ -15,11 +43,47 @@ void draw_menu(){ lcd_write(" set:"); lcd_set_position(3, 0); lcd_write("real:"); + //char str[16]; + //sprintf(str, "test %d", 1); + //lcd_print_str(str); +} + +void write_temps(){ + char str[4]; + + lcd_set_position(3, 6); + sprintf(str, "%3i", temp_values[0]); + lcd_print_str(str); + + lcd_set_position(3, 11); + sprintf(str, "%3i", temp_values[1]); + lcd_print_str(str); + + lcd_set_position(3, 16); + sprintf(str, "%3d", temp_values[2]); + lcd_print_str(str); +} + +void write_setpoints(){ + char str[4]; + + lcd_set_position(2, 6); + sprintf(str, "%3i", temp_setpoints[0]); + lcd_print_str(str); + + lcd_set_position(2, 11); + sprintf(str, "%3i", temp_setpoints[1]); + lcd_print_str(str); + + lcd_set_position(2, 16); + sprintf(str, "%3i", temp_setpoints[2]); + lcd_print_str(str); } void set_item(uint8_t page_num){ - lcd_clear(); - lcd_home(); - lcd_write("page %x", page_num); + //if(menu_state=page_num) + // menu_state=0; + //else + menu_state = page_num; } diff --git a/menu.h b/menu.h index 3b51323..3ca17d0 100644 --- a/menu.h +++ b/menu.h @@ -1,7 +1,15 @@ #ifndef _MENU_H_ #include -void set_page(uint8_t page_num); +extern volatile uint8_t menu_state; + +extern volatile uint16_t temp_values[4]; +extern volatile uint16_t temp_setpoints[4]; + +void write_temps(void); +void write_setpoints(void); +void update_cursor(void); +void set_item(uint8_t page_num); void draw_menu(void); #endif