diff options
-rw-r--r-- | software/ihu/ihu.asm | 6 | ||||
-rw-r--r-- | software/ihu/solar.inc | 13 | ||||
-rw-r--r-- | tools/solarmeter/solarmeter.c | 26 |
3 files changed, 30 insertions, 15 deletions
diff --git a/software/ihu/ihu.asm b/software/ihu/ihu.asm index 6ccc821..da0ef9b 100644 --- a/software/ihu/ihu.asm +++ b/software/ihu/ihu.asm @@ -368,7 +368,7 @@ uart_rx_fe ;; MAINLOOP main ; sleep - nop +; nop ;; -------------------- ;; ADC Test @@ -436,12 +436,10 @@ main call wait_ms movf SOL_POWERL,w - movwf TXREG - + movwf TXREG movlw .8 call wait_ms - clrf TMP goto main ;; -------------------- diff --git a/software/ihu/solar.inc b/software/ihu/solar.inc index 484a538..3c7134e 100644 --- a/software/ihu/solar.inc +++ b/software/ihu/solar.inc @@ -61,14 +61,19 @@ sol_mula_vc btfss SOL_CALC_9,0 goto sol_mula_rotate + bcf STATUS,C movf SOL_CALC_0,w addwf SOL_CALC_3,f - movlw .1 btfss STATUS,C + goto sol_mula_vc1 + bcf STATUS,C + movlw .1 addwf SOL_CALC_4,f btfsc STATUS,C incf SOL_CALC_5,f +sol_mula_vc1 + bcf STATUS,C movf SOL_CALC_1,w addwf SOL_CALC_4,f btfsc STATUS,C @@ -113,12 +118,15 @@ solar_calc_power bcf STATUS,C movf SOL_CALC_3,w addwf SOL_CALC_6,f - movlw .1 btfss STATUS,C + goto solar_calc_power1 + bcf STATUS,C + movlw .1 addwf SOL_CALC_7,f btfsc STATUS,C incf SOL_CALC_8,f +solar_calc_power1 movf SOL_CALC_4,w addwf SOL_CALC_7,f btfsc STATUS,C @@ -133,6 +141,7 @@ solar_calc_power rlf SOL_CALC_8,f ;; if(SOL_CALC_6 & 0x80) SOL_CALC_7:8+=1 + bcf STATUS,C movlw .1 btfsc SOL_CALC_6,7 addwf SOL_CALC_7,f diff --git a/tools/solarmeter/solarmeter.c b/tools/solarmeter/solarmeter.c index 1ddca80..9aace5b 100644 --- a/tools/solarmeter/solarmeter.c +++ b/tools/solarmeter/solarmeter.c @@ -11,7 +11,7 @@ int main (int argc, char* argv[]) { u_int8_t tmp = 0; u_int8_t buffer[12]; - u_int16_t power = 0; + u_int32_t power[2]; int infile_fd = -1; if (argc > 1) { @@ -26,22 +26,30 @@ int main (int argc, char* argv[]) while (read(infile_fd, &tmp, 1) == 1) { if (tmp == 255) { - if (read(infile_fd, &buffer, sizeof(buffer)) != sizeof(buffer)) { - perror("read error:"); + int ret = read(infile_fd, &buffer, sizeof(buffer)); + if(ret < 0) { + perror("read error"); return 2; + } else if(!ret) { + return 0; + } else if(ret != sizeof(buffer)) { + continue; } - power = (buffer[10]<<8) + buffer[11]; - printf("%5d (", power); + power[0] = (buffer[10]<<8) + buffer[11]; + printf("%5d (", power[0]); int i; for(i=0; i<10; i++) printf("%3d ", buffer[i]); - power = (((u_int16_t)buffer[0] + (u_int16_t)buffer[1] + (u_int16_t)buffer[2] + (u_int16_t)buffer[3]) * (u_int16_t)buffer[4]) + - (((u_int16_t)buffer[5] + (u_int16_t)buffer[6] + (u_int16_t)buffer[7] + (u_int16_t)buffer[8]) * (u_int16_t)buffer[9]); - - printf(") -> %5d\r", power); + power[1] = (((u_int16_t)buffer[0] + (u_int16_t)buffer[1] + (u_int16_t)buffer[2] + (u_int16_t)buffer[3]) * (u_int32_t)buffer[4]) + + (((u_int16_t)buffer[5] + (u_int16_t)buffer[6] + (u_int16_t)buffer[7] + (u_int16_t)buffer[8]) * (u_int32_t)buffer[9]); + int tmp = 0; + if(power[1]%128 >= 64) tmp=1; + power[1] /= 128; + power[1] += tmp; + printf(") -> %s (%5d) \n", power[1] == power[0] ? "ok" : "xx", power[1]); } } printf("\n"); |