Browse Source

Added ring buffer for measure results.

Vladimir N. Shilov 2 years ago
parent
commit
2a2ac336ce
3 changed files with 66 additions and 26 deletions
  1. 4 0
      ReadMe.txt
  2. 39 6
      avm.asm
  3. 23 20
      avm.hex

+ 4 - 0
ReadMe.txt

@@ -33,3 +33,7 @@
 Перемерял опорное - 4,985. Можно использовтаь для коррекции делителя на входе.
 Непойму зачем замедлял АЦП, нужно будет сравнить результаты на крайних 
 скоростях.
+
+Попробую сделать буфер результатов измерения и брать скользящее среднее за 8 
+измерений.
+454 + 16 байт.

+ 39 - 6
avm.asm

@@ -37,7 +37,7 @@
 .def cnt1	= r18	; рабочий счётчик, счётчик циклов АЦП
 .def cnt2	= r19	; счётчик циклов Led_Out
 .def LEDN	= r20
-; r21
+.def mIdx	= r21	; индекс буфера измерений
 ; r22
 ;.def = r23	;
 ;.def = r24	;
@@ -46,7 +46,7 @@
 ; r27 XH
 ; r28 YL вывод на ндикатор
 ; r29 YH
-; r30 ZL OUT_NIBBL, BIN2BCD
+; r30 ZL OUT_NIBBL, BIN2BCD, mBuffer
 ; r31 ZH
 ;******************************
 ; константы
@@ -75,6 +75,7 @@
 .equ SPH	= 0x3e
 .equ DOT_BIT	= 5	; bit5 -- точка
 .equ BuffShift	= 4	; сколько раз сдвинуть вправо сумму буфера для усреднения
+.equ mBuffSize	= 8	; ёмкось буфера измерений
 
 ;******************************
 ; макросы
@@ -94,10 +95,10 @@
 
 ;******************************
 ; ячейки в СОЗУ
-;.DSEG
-;.ORG	SRAM_START
+.DSEG
+.ORG	SRAM_START
+mBuffer:	.byte 2*mBuffSize	; буфер измерений
 ;Display:	.byte 4 ; 4 байта для индикатора
-;Buffer:		.byte 2*BuffSize
 
 ;******************************
 ; константы в EEPROM
@@ -226,7 +227,39 @@ ML1:
 	lsr	msrH
 	ror	msrL
 	lsr	msrH
-	ror	msrL		; поделили результат на 2^3
+	ror	msrL
+	; поделили результат на 2^3
+
+;; сохраняем текущий результат в кольцевой буфер
+	ldi	ZL,low(mBuffer)
+	ldi	ZH,high(mBuffSize)
+	st	Z+,msrL
+	st	Z+,msrH
+	inc	mIdx
+	cpi	mIdx,mBuffSize
+	brlo	ML2
+	clr	mIdx
+
+;; берём среднее за mBuffSize измерений
+ML2:	ldi	ZL,low(mBuffer)
+	ldi	ZH,high(mBuffSize)
+	clr	msrH
+	clr	msrL
+	clr	cnt1
+ML2a:	ld	temp,Z+
+	add	msrL,temp
+	ld	temp,Z+
+	adc	msrH,temp
+	inc	cnt1
+	cpi	cnt1,mBuffSize
+	brlo	ML2a
+	; закончили суммировать, делим на 8
+	lsr	msrH
+	ror	msrL
+	lsr	msrH
+	ror	msrL
+	lsr	msrH
+	ror	msrL
 
 ;; теперь нужно умножить на Vref и поделить на 8192 -- получим миливольты на входе АЦП
 ;; а затем умножить на 4, чтобы получить напряжение на входе делителя.

+ 23 - 20
avm.hex

@@ -1,28 +1,31 @@
 :020000020000FC
 :100000000DC0189518951895189518951895189568
-:1000100091C01895189518951895B0C000E00EBFBE
+:10001000ABC01895189518951895CAC000E00EBF8A
 :100020000FED0DBF00E808B901E007B907EC06B90C
 :1000300002E001B903E00EBD0DEF0DBD0FE80CBDF0
 :1000400001E00CB94FEE00EF0ABB0BBB07E007BBAA
 :10005000DD27C4E000E3402E502E602E702E7894F1
-:10006000EE24FF2420E4339A2FD097FF03C09F771C
+:10006000EE24FF2420E4339A49D097FF03C09F7702
 :10007000369AFACF2223C1F73398F694E794F69490
-:10008000E794F694E79404E713E12ED026941794AE
-:100090002694179426941794F22CE12C32D0A4E0E5
-:1000A000BB27022D0F70002319F40FEF0D9301C031
-:1000B00011D0012D029590640DD09F7B012D0AD0A7
-:1000C000002D029507D0CCCF00E205BF8895002710
-:1000D00005BF0895E8E8F1E00F70E00FFB1F049101
-:1000E00096FD0F7D0D930895222420E11695079526
-:1000F00010F41E0C2F1C2794179407942A95B1F71F
-:10010000089520E1222411240024FF27EE0CFF1C77
-:10011000001C111C221C2A9509F40895E3E00291A9
-:100120000D5F03FD00830081005D07FD0083E0306B
-:10013000B1F7ECCF0F930FB70F930DEF0DBD0FE895
-:100140000CBD0BB3006F0BBBC298099138E0C0988F
-:10015000000F10F4C19A01C0C198C09A3A95B9F73E
-:10016000C29A0BB3006F04230BBB440F10F04FEE89
-:10017000C4E090680F910FBF0F91189504B1E00E85
-:1001800005B1F01E2A95189530F32AA2E1A424F2B5
-:0201900020A0AD
+:10008000E794F694E794E0E6F0E0E192F19253957C
+:10009000583008F05527E0E6F0E0FF24EE24222750
+:1000A0000191E00E0191F01E23952830C8F3F694DB
+:1000B000E794F694E794F694E79404E713E12ED0DE
+:1000C000269417942694179426941794F22CE12CD6
+:1000D00032D0A4E0BB27022D0F70002319F40FEFDC
+:1000E0000D9301C011D0012D029590640DD09F7B1E
+:1000F000012D0AD0002D029507D0B2CF00E205BF36
+:100100008895002705BF0895ECEBF1E00F70E00F34
+:10011000FB1F049196FD0F7D0D930895222420E18D
+:100120001695079510F41E0C2F1C2794179407940E
+:100130002A95B1F7089520E1222411240024FF27F5
+:10014000EE0CFF1C001C111C221C2A9509F40895BA
+:10015000E3E002910D5F03FD00830081005D07FD78
+:100160000083E030B1F7ECCF0F930FB70F930DEF93
+:100170000DBD0FE80CBD0BB3006F0BBBC29809910E
+:1001800038E0C098000F10F4C19A01C0C198C09A1D
+:100190003A95B9F7C29A0BB3006F04230BBB440F17
+:1001A00010F04FEEC4E090680F910FBF0F911895BB
+:1001B00004B1E00E05B1F01E2A95189530F32AA27D
+:0601C000E1A424F220A0DE
 :00000001FF