diff --git a/dht11.c b/dht11.c index a0ed62e..c97498e 100644 --- a/dht11.c +++ b/dht11.c @@ -10,7 +10,7 @@ u32 interrupt_line; dht11_state dht11_current_state = DHT11_NONE; u16 dht11_pulse_lengths[6]; -bool data[40]; +bool dht11_data[40]; u8 data_pos = 0; u8 last_temperature = 0; @@ -136,9 +136,9 @@ bool dht11_check_tolerance(u32 timer) { if ((timer >= min) && (timer <= max)) { return true; } - char tab[50]; - sprintf(tab, "Error, expected: %d at position %d, received: %u %d\r\n", expected, data_pos, (unsigned int)timer, dht11_current_state); - printf(tab); +// char tab[50]; +// sprintf(tab, "Error, expected: %d at position %d, received: %u %d\r\n", expected, data_pos, (unsigned int)timer, dht11_current_state); +// printf(tab); return false; } @@ -146,17 +146,17 @@ void dht11_trigger_state_machine(u32 timer, u8 bit) { u8 middle_value = (dht11_pulse_lengths[DHT11_RELEASE_0] + dht11_pulse_lengths[DHT11_RELEASE_1]) / 2; dht11_check_tolerance(timer); - char tab[10]; - sprintf(tab, "%u\r\n", (unsigned int)timer); +// char tab[10]; +// sprintf(tab, "%u\r\n", (unsigned int)timer); switch(dht11_current_state) { case DHT11_NONE: if (bit) { break; // wrong state } - GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET); +// GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET); dht11_current_state = DHT11_INIT_PULL_DOWN; - GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET); +// GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET); break; case DHT11_INIT_PULL_DOWN: dht11_current_state = DHT11_INIT_RELEASE; @@ -172,9 +172,9 @@ void dht11_trigger_state_machine(u32 timer, u8 bit) { case DHT11_RELEASE_0: case DHT11_RELEASE_1: if (timer < middle_value) { - data[data_pos] = 0; + dht11_data[data_pos] = 0; } else { - data[data_pos] = 1; + dht11_data[data_pos] = 1; } ++data_pos; @@ -189,9 +189,9 @@ void dht11_trigger_state_machine(u32 timer, u8 bit) { break; case DHT11_EOT: - GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET); +// GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET); dht11_current_state = DHT11_NONE; - GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET); +// GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET); break; default: break; @@ -211,18 +211,18 @@ void dht11_decode_data() { u8 temp_integral = 0, temp_decimal = 0, rh_integral = 0, rh_decimal = 0, checksum = 0; for (i = 0; i < 8; ++i) { - rh_integral |= data[i] << (7 - i); - rh_decimal |= data[8 + i] << (7 - i); - temp_integral |= data[16 + i] << (7 - i); - temp_decimal |= data[24 + i] << (7 - i); - checksum |= data[32 + i] << (7 - i); + rh_integral |= dht11_data[i] << (7 - i); + rh_decimal |= dht11_data[8 + i] << (7 - i); + temp_integral |= dht11_data[16 + i] << (7 - i); + temp_decimal |= dht11_data[24 + i] << (7 - i); + checksum |= dht11_data[32 + i] << (7 - i); } // sprintf(tab, "%d.%d %d.%d %d\r\n", temp_integral, temp_decimal, rh_integral, rh_decimal, checksum); if (temp_integral + temp_decimal + rh_integral + rh_decimal == checksum) { last_temperature = temp_integral; last_relative_humidity = rh_integral; } else { - printf("Checksum incorrect\r\n"); +// printf("Checksum incorrect\r\n"); last_temperature = 0; last_relative_humidity = 0; } diff --git a/dht11.h b/dht11.h index 1b0e499..69fbfac 100644 --- a/dht11.h +++ b/dht11.h @@ -1,7 +1,7 @@ #ifndef __DHT11_H__ #define __DHT11_H__ #include "stdbool.h" -#include "stdio.h" +//#include "stdio.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" diff --git a/hd44780-i2c.c b/hd44780-i2c.c index 72c8ec7..4a2f7e7 100644 --- a/hd44780-i2c.c +++ b/hd44780-i2c.c @@ -21,18 +21,18 @@ u8 en = 1 << 2; u8 rw = 1 << 1; u8 rs = 1 << 0; TIM_TypeDef *timer; -uint8_t data[4] = {0x00, 0x00, 0x00}; +uint8_t hd44780_data[4] = {0x00, 0x00, 0x00, 0x00}; void hd44780_send(u8 cmd, bool set_rs) { u8 rs_ = 0; if (set_rs) rs_ = rs; - data[0] = (cmd & 0xF0) | backlight | en | rs_; - data[1] = (cmd & 0xF0) | backlight; - data[2] = (cmd & 0x0F) << 4 | backlight | en | rs_; - data[3] = (cmd & 0x0F) << 4 | backlight; - I2C_Master_BufferWrite(I2C1, data, 4, Polling, hd44780_address << 1); + hd44780_data[0] = (cmd & 0xF0) | backlight | en | rs_; + hd44780_data[1] = (cmd & 0xF0) | backlight; + hd44780_data[2] = (cmd & 0x0F) << 4 | backlight | en | rs_; + hd44780_data[3] = (cmd & 0x0F) << 4 | backlight; + I2C_Master_BufferWrite(I2C1, hd44780_data, 4, Polling, hd44780_address << 1); } void hd44780_char(u8 cmd) { @@ -54,9 +54,9 @@ void hd44780_print(char *string) { void hd44780_backlight(bool new_value) { backlight = new_value << 3; - I2C_Master_BufferRead(I2C1, data, 1, Polling, hd44780_address << 1); - data[0] |= backlight; - I2C_Master_BufferWrite(I2C1, data, 1, Polling, hd44780_address << 1); + I2C_Master_BufferRead(I2C1, hd44780_data, 1, Polling, hd44780_address << 1); + hd44780_data[0] |= backlight; + I2C_Master_BufferWrite(I2C1, hd44780_data, 1, Polling, hd44780_address << 1); } void hd44780_go_to_line(u8 line) { @@ -85,7 +85,7 @@ void hd44780_go_to(u8 row, u8 col) { hd44780_cmd(0x14); } -void hd44780_cgram_write(u8 pos, u8 data[8]) { +void hd44780_cgram_write(u8 pos, u8 data_[8]) { if (pos > 7) { return; } @@ -93,7 +93,7 @@ void hd44780_cgram_write(u8 pos, u8 data[8]) { hd44780_cmd(pos); u8 i; for (i = 0; i < 8; ++i) { - hd44780_send(data[i], true); + hd44780_send(data_[i], true); } } @@ -101,14 +101,14 @@ void hd44780_init(TIM_TypeDef *t) { timer = t; // Setup clock if (timer == TIM2) - RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); else if (timer == TIM3) RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); else - while(1){} // not implemented + while(1){} // not implemented TIM_TimeBaseInitTypeDef TIM_InitStructure; TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up; - TIM_InitStructure.TIM_Prescaler = 72 - 1; + TIM_InitStructure.TIM_Prescaler = (SystemCoreClock) / 1000000 - 1; TIM_InitStructure.TIM_Period = 10000 - 1; // Update event every 10000 us / 10 ms TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_InitStructure.TIM_RepetitionCounter = 0; @@ -116,15 +116,18 @@ void hd44780_init(TIM_TypeDef *t) { TIM_Cmd(timer, ENABLE); - data[0] = 0x00 | backlight; - data[1] = 0x00 | backlight; + hd44780_data[0] = 0x00 | backlight; + hd44780_data[1] = 0x00 | backlight; // GPIO_SetBits(GPIOC, GPIO_Pin_8); // delay_us(timer, 250); // GPIO_ResetBits(GPIOC, GPIO_Pin_8); + // Init I2C + I2C_LowLevel_Init(I2C1); + // Reset all - I2C_Master_BufferWrite(I2C1, data, 1, Polling, hd44780_address << 1); + I2C_Master_BufferWrite(I2C1, hd44780_data, 1, Polling, hd44780_address << 1); hd44780_cmd(0x03); delay_us(timer, 5000); @@ -139,12 +142,15 @@ void hd44780_init(TIM_TypeDef *t) { hd44780_cmd(0x0E); // turn on display, set solid cursor hd44780_cmd(0x0C); // turn on display, set invisiblecursor - hd44780_cgram_write(0, (u8[]){0,10,31,31,14,4,0,0}); - hd44780_cgram_write(1, (u8[]){0,10,21,17,10,4,0,0}); + u8 arr[] = {0,10,31,31,14,4,0,0}; + u8 arr2[]= {0,10,21,17,10,4,0,0}; + + hd44780_cgram_write(0, arr); + hd44780_cgram_write(1, arr2); hd44780_cmd(0x01); // clear display, go to 0x0 -// hd44780_backlight(true); + hd44780_backlight(true); // hd44780_print("Linia 0"); // hd44780_go_to_line(1); // hd44780_print("Linia 1"); diff --git a/hd44780-i2c.h b/hd44780-i2c.h index e69e7fd..0cee759 100644 --- a/hd44780-i2c.h +++ b/hd44780-i2c.h @@ -1,17 +1,20 @@ #ifndef __HD44780_I2C_H__ #define __HD44780_I2C_H__ -#include "utils.h" -#include "i2c_dma.h" #include "stdbool.h" + #include #include +#include "common_lib/utils.h" +#include "common_lib/i2c_dma.h" + #define hd44780_address 0x27 void hd44780_init(TIM_TypeDef *timer); void hd44780_print(char *string); void hd44780_go_to_line(u8 line); void hd44780_go_to(u8 row, u8 col); void hd44780_cmd(u8 cmd); +void hd44780_char(u8 c); #endif // __HD44780_I2C_H__