From 5e65b9156ac7fe4cda052f9b315d7f6c3798d07c Mon Sep 17 00:00:00 2001 From: Steins7 Date: Wed, 29 Jan 2020 21:50:45 +0100 Subject: [PATCH] LCD driver is fixed (in a crappy way) * fixed weird bug in lcd driver + imported graphs for the thermistor * updated linker file to better fit the device used (more to be done) --- Makefile | 2 +- docs/Graphs.ods | Bin 23586 -> 23588 bytes src/drivers/lcd.c | 83 ++++++++++++++++++++++++++++---------- src/drivers/lcd.h | 22 ++++++++-- src/main.c | 33 +++++++++++---- src/target/STM32F103XB.ld | 4 +- 6 files changed, 108 insertions(+), 36 deletions(-) diff --git a/Makefile b/Makefile index 635993f..a6913fd 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ # --- control global project settings # RELEASE=1 -> enable optimisation, then disable debug # RELEASE=0 -> disbale optimisation, then enable debug -RELEASE=0 +RELEASE=1 # --- project architecture # program name diff --git a/docs/Graphs.ods b/docs/Graphs.ods index 16918a1c862040f2d2873aeebf184aa1162828f9..ab7beed45e8e7baefffc704e7dcd04ae15422280 100644 GIT binary patch delta 4688 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 MMnu?*y1%*q18!+!tN;K2 diff --git a/src/drivers/lcd.c b/src/drivers/lcd.c index 0fcfffb..c784193 100644 --- a/src/drivers/lcd.c +++ b/src/drivers/lcd.c @@ -6,7 +6,11 @@ enum mode { UNDEFINED }; -static int mode = UNDEFINED; +//TODO make the driver dynamic ? +static TIM_TypeDef* timer = 0; +static uint8_t mode = UNDEFINED; +static uint8_t rows = 0; +static uint8_t columns = 0; //------------------------------------------------------------------------------ // internal functions @@ -39,18 +43,19 @@ int set_mode_write(void) { } void wait_for_ready(void) { - // configure the lcd - if(mode != READ) if(set_mode_read()) return; - - // read D7 pin - for(;;) { - io_set(GPIOA, PIN_11); - for(int i=0; i<1000; ++i); //timer_wait is overkill here - if(!io_read(GPIOB, PIN_4)) break; - io_clear(GPIOA, PIN_11); - for(int i=0; i<1000; ++i); //same - } - io_clear(GPIOA, PIN_11); + //TODO debug that +// // configure the lcd +// if(mode != READ) if(set_mode_read()) return; +// +// // read D7 pin +// for(;;) { +// io_set(GPIOA, PIN_11); +// for(int i=0; i<1000; ++i); //timer_wait is overkill here +// if(!io_read(GPIOB, PIN_4)) break; +// io_clear(GPIOA, PIN_11); +// for(int i=0; i<1000; ++i); //same +// } + timer_wait_ms(timer, 2, 0); //wait max delay } void write_byte(uint8_t byte) { @@ -59,7 +64,7 @@ void write_byte(uint8_t byte) { // start tranfert io_set(GPIOA, PIN_11); - timer_wait_us(TIM1, 1, 0); + timer_wait_us(timer, 1, 0); // send the data io_write(GPIOA, (byte >> 0) & 0x1, PIN_8); @@ -76,8 +81,12 @@ void write_byte(uint8_t byte) { } //------------------------------------------------------------------------------ -// API functions -int lcd_init(TIM_TypeDef* tim) { +int lcd_init(TIM_TypeDef* tim, uint8_t col, uint8_t row) { + + timer = tim; + columns = col; + rows = row; + // disable JTAG, as it utilise needed pins, SWD remains usable in // synchronous mode RCC->APB2ENR |= 0x1; @@ -91,17 +100,17 @@ int lcd_init(TIM_TypeDef* tim) { if(set_mode_write()) return -1; //no check in case the pins were used //somewhere else - // select instrution register + // select instruction register io_write(GPIOA, LCD_MODE_CMD, PIN_10); // begin initialisation sequence - timer_wait_ms(tim, 15, 0); + timer_wait_ms(timer, 15, 0); write_byte(LCD_FUNC_SET | LCD_FUNC_8BIT | LCD_FUNC_2LINE | LCD_FUNC_5x8DOTS); - timer_wait_ms(tim, 5, 0); + timer_wait_ms(timer, 5, 0); write_byte(LCD_FUNC_SET | LCD_FUNC_8BIT | LCD_FUNC_2LINE | LCD_FUNC_5x8DOTS); - timer_wait_us(tim, 150, 0); + timer_wait_us(timer, 150, 0); write_byte(LCD_FUNC_SET | LCD_FUNC_8BIT | LCD_FUNC_2LINE | LCD_FUNC_5x8DOTS); wait_for_ready(); @@ -121,7 +130,39 @@ int lcd_init(TIM_TypeDef* tim) { LCD_CTRL_BLINK_ON); wait_for_ready(); write_byte(LCD_CLEAR); - wait_for_ready(); return 0; } + +void lcd_send_cmd(uint8_t cmd) { + // wait for the screen + wait_for_ready(); + + // select instruction register + io_write(GPIOA, LCD_MODE_CMD, PIN_10); + + // send the command + write_byte(cmd); +} + +void lcd_print(const char* txt) { + // prepare data + const char* c = txt; + + // wait for the screen + wait_for_ready(); + + // select data register + io_write(GPIOA, LCD_MODE_DATA, PIN_10); + + // send the caracters until end of string + while(*c != '\0') { + wait_for_ready(); + write_byte(*c); + c++; + } +} + +void lcd_set_cursor(uint8_t col, uint8_t row) { + lcd_send_cmd(LCD_DDRAM_ADDR | col); +} diff --git a/src/drivers/lcd.h b/src/drivers/lcd.h index d7086be..5eba6e1 100644 --- a/src/drivers/lcd.h +++ b/src/drivers/lcd.h @@ -5,6 +5,7 @@ #include "../config.h" #include "timer.h" #include "io.h" +#include //------------------------------------------------------------------------------ /* LCD mode selection */ @@ -17,7 +18,7 @@ enum lcd_register { /* LCD commands */ enum lcd_command { LCD_CLEAR = 0x01, - LCD_CR = 0x02, + LCD_CUR_HOME = 0x02, LCD_ENTRY = 0x04, LCD_DISP_CTRL = 0x08, LCD_SHIFT = 0x10, @@ -67,11 +68,24 @@ enum lcd_func_option { }; //------------------------------------------------------------------------------ -int lcd_init(TIM_TypeDef* tim); +/** lcd_init + * initialise the lcd, needed before anything else can be done + * the timer is used for delays and can't be in use when lcd functions are + * called + */ +int lcd_init(TIM_TypeDef* tim, uint8_t col, uint8_t row); -void lcd_write(uint8_t byte); +/** lcd_send_cmd + * send the specified command to the lcd + */ +void lcd_send_cmd(uint8_t cmd); -uint8_t lcd_read(void); +/** lcd_print + * print a null-terminated string on the lcd + */ +void lcd_print(const char* txt); + +void lcd_set_cursor(uint8_t col, uint8_t row); #endif diff --git a/src/main.c b/src/main.c index 5933cbb..6349e2c 100644 --- a/src/main.c +++ b/src/main.c @@ -1,9 +1,9 @@ #include "drivers/rcc.h" #include "drivers/io.h" +#include "drivers/lcd.h" #include "drivers/adc.h" Clock_t sysclks; - #include "drivers/timer.h" int val = 0; @@ -12,6 +12,8 @@ uint16_t data = 0; static void timeout_cb(void) { io_write(GPIOC, val, PIN_13); val = !val; + data = adc_read(ADC1, 2); + data -= adc_read(ADC1, 3); } int main(void) { @@ -22,16 +24,31 @@ int main(void) { return 0; io_write(GPIOC, 1, PIN_13); - timer_tick_init(TIM2, 1000, timeout_cb); - timer_start(TIM2); - - if(io_configure(GPIOA, PIN_4 | PIN_5, IO_MODE_INPUT | IO_IN_ANALOG, 0)) + if(io_configure(GPIOA, PIN_2 | PIN_3, IO_MODE_INPUT | IO_IN_ANALOG, 0)) return 0; if(adc_init(ADC1)) return 0; - for(;;){ - data = adc_read(ADC1, 5); - data -= adc_read(ADC1, 4); + //int test = 0; + + timer_tick_init(TIM2, 1000, timeout_cb); + timer_start(TIM2); + + lcd_init(TIM1); + lcd_print(" et paf"); + lcd_print("Hello world!"); + lcd_send_cmd(LCD_CUR_HOME); + lcd_send_cmd(LCD_CUR_HOME); + lcd_set_cursor(5, 1); + + + while(1){ + lcd_print("loop"); + lcd_print("loop2"); + lcd_print("loop3"); + lcd_print("loop4"); + //voltage = data*4.0f/4095.0f; + //temp = (voltage-0.45)/0.04f; + timer_wait_ms(TIM1, 200, 0); } return 0; diff --git a/src/target/STM32F103XB.ld b/src/target/STM32F103XB.ld index 9d1604b..5c80b6a 100644 --- a/src/target/STM32F103XB.ld +++ b/src/target/STM32F103XB.ld @@ -6,8 +6,8 @@ STACK_SIZE = 0x400; MEMORY { - FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 64K - RAM (rwx) : ORIGIN = 0x200000F0, LENGTH = 20K - (0xEC+0x4) + FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 32K + RAM (rwx) : ORIGIN = 0x200000F0, LENGTH = 10K - (0xEC+0x4) } /* Linker script to place sections and symbol values. Should be used together