Vladimir N. Shilov 5 年之前
父節點
當前提交
0944c94518
共有 4 個文件被更改,包括 25 次插入17 次删除
  1. 1 0
      MNC-IN12.cbp
  2. 5 1
      ReadMe.txt
  3. 2 2
      inc/common.h
  4. 17 14
      src/main.c

+ 1 - 0
MNC-IN12.cbp

@@ -409,6 +409,7 @@
 		<Unit filename="C:/MCU/avr-gcc/lib/gcc/avr/8.0.1/install-tools/include/limits.h" />
 		<Unit filename="Makefile" />
 		<Unit filename="ReadMe.txt" />
+		<Unit filename="inc/common.h" />
 		<Unit filename="inc/ds3231.h" />
 		<Unit filename="inc/event-system.h" />
 		<Unit filename="inc/i2c.h" />

+ 5 - 1
ReadMe.txt

@@ -104,4 +104,8 @@ My Nixie Clock IN-12 / Мои часы на ГРИ ИН-12
 10 уровней явно не получится.
 
 Облагородил, причесал, настроил оптимизации.
-Нужно всё проверить, новых тдей больше нет.
+Нужно всё проверить, новых идей больше нет.
+
+Поисправлял.
+Появилась мысль - отображать температуру/влажность по нажатию кнопок +/-.
+А по таймеру можно показывать только ночью :-)

+ 2 - 2
inc/common.h

@@ -5,8 +5,8 @@
 /**
  * Global defines
  */
-#define USE_BRIGHT_CONTROL
+//#define USE_BRIGHT_CONTROL
 #define USE_DHT
-#define USE_UART
+//#define USE_UART
 
 #endif /* _COMMON_H */

+ 17 - 14
src/main.c

@@ -46,7 +46,7 @@
 #define FULL_BRIGHT_ON    0x06
 #define FULL_BRIGHT_OFF   0x22
 static const uint8_t PROGMEM brightConv[BRIGHT_IDX_MAX+1] = {
-  217, 219, 224, 236, 255
+  218, 219, 224, 236, 255
 };
 #endif // USE_BRIGHT_CONTROL
 
@@ -191,18 +191,18 @@ void main(void) {
       }
 #ifdef USE_DHT
       switch(RTC.Sec) {
-      case 20:
-      case 50:
+      case 0x20:
+      case 0x50:
         ES_PlaceEvent(evShTemp);
         break;
 
-      case 22:
-      case 52:
+      case 0x22:
+      case 0x52:
         ES_PlaceEvent(evShHum);
         break;
 
-      case 24:
-      case 54:
+      case 0x24:
+      case 0x54:
         ES_PlaceEvent(evShTime);
         break;
       }
@@ -339,8 +339,8 @@ static void dhtProcess(void) {
   if (TCNT1 >= DHT_TIMEOUT) {
     RTOS_SetTask(dhtTimeout, 0, 0);
   }
+  hmdt = 0; tmprtr = 0;
   for (cnt1=0; cnt1<32; cnt1+=8) { // 0 8 16 24 32
-    hmdt = 0; tmprtr = 0;
     buf = 0;
     for (cnt2=0; cnt2<8; cnt2++) {
       buf <<= 1;
@@ -348,7 +348,7 @@ static void dhtProcess(void) {
       while(bit_is_clear(PINB, PB0)); // ждём начало импульса
       tcnt_old = TCNT1; // начало импульса
       while(bit_is_set(PINB, PB0) && TCNT1<DHT_TIMEOUT); // ждём конец импульса
-      if ((TCNT1 - tcnt_old) > 12) {
+      if ((TCNT1 - tcnt_old) > 10) {
         buf |= 1;
       }
     }
@@ -379,11 +379,9 @@ static void dhtProcess(void) {
 }
 
 static void dhtEnd(void) {
-  /*uint8_t i, k;*/
+#ifdef USE_UART
   char buffer[6];
 
-  usart_puts("DHT22 data:\r\n");
-
   usart_puts("Humidity: ");
   itoa(dhtData.Humidity, buffer, 10);
   usart_puts(buffer);
@@ -396,19 +394,24 @@ static void dhtEnd(void) {
   itoa(dhtData.Temperature%10, buffer, 10);
   usart_puts(buffer);
   usart_puts("oC\r\n");
+#endif // USE_UART
 }
 
 static void dhtNoAck(void) {
+#ifdef USE_UART
   usart_puts("DHT22 no ACK occurred.\r\n");
+#endif // USE_UART
 }
 
 static void dhtTimeout(void) {
+#ifdef USE_UART
   usart_puts("DHT22 Timeout occurred.\r\n");
+#endif // USE_UART
 }
 
 void showTemperature(void) {
-  uint8_t a = dhtData.Temperature / 100;
-  uint8_t b = dhtData.Temperature % 100;
+  uint8_t a = dhtData.Temperature / 10;
+  uint8_t b = dhtData.Temperature % 10;
   Digit[0] = a / 10;
   Digit[1] = a % 10;
   Digit[2] = b;