Vladimir N. Shilov 2 лет назад
Родитель
Сommit
3b62f13711
2 измененных файлов с 40 добавлено и 31 удалено
  1. 16 8
      avm.asm
  2. 24 23
      avm.hex

+ 16 - 8
avm.asm

@@ -71,7 +71,7 @@
 .equ T1DIVL	= 0x8F
 .equ T1DIVH	= 0xFD	; 0x10000-8MHz/64/200Hz
 ;.equ T0DIV	= 0x83	; 0x100-8MHz/256/250Hz
-.equ VREF	= 4989	; опорное напряжение, миливольты
+.equ VREF	= 4980	; опорное напряжение, миливольты
 .equ SPH	= 0x3e
 .equ DOT_BIT	= 5	; bit5 -- точка
 .equ BuffShift	= 4	; сколько раз сдвинуть вправо сумму буфера для усреднения
@@ -232,9 +232,12 @@ ML1:
 
 ;; сохраняем текущий результат в кольцевой буфер
 	ldi	ZL,low(mBuffer)
-	ldi	ZH,high(mBuffSize)
+	ldi	ZH,0
+	mov	temp,mIdx
+	lsl	temp
+	add	ZL,temp
 	st	Z+,msrL
-	st	Z+,msrH
+	st	Z,msrH
 	inc	mIdx
 	cpi	mIdx,mBuffSize
 	brlo	ML2
@@ -242,7 +245,7 @@ ML1:
 
 ;; берём среднее за mBuffSize измерений
 ML2:	ldi	ZL,low(mBuffer)
-	ldi	ZH,high(mBuffSize)
+	clr	ZH
 	clr	msrH
 	clr	msrL
 	clr	cnt1
@@ -264,22 +267,27 @@ ML2a:	ld	temp,Z+
 ;; теперь нужно умножить на Vref и поделить на 8192 -- получим миливольты на входе АЦП
 ;; а затем умножить на 4, чтобы получить напряжение на входе делителя.
 ;; т.е. делим на 2048
+;; Но... результат умножения - 4 байта, мы получим только три старших, т.е. на 256 уже
+;; поделено, остаётся доделить на 8 и получим 2 байта результата.
 	ldi	temp,low(VREF)
 	ldi	tmp1,high(VREF)
-	rcall	MPY16U		; отбросили job0 == поделили на 256
+	rcall	MPY16U
 	lsr	job2
 	ror	job1
+	ror	job0
 	lsr	job2
 	ror	job1
+	ror	job0
 	lsr	job2
 	ror	job1
+	ror	job0
 
 ;; в реале нужно будет множить например на 400 и делить на 100 -- под реальный делитель.
 ; тут можно добавить коррекцию усиления.
 
-; сейчас текущий результат измерний в job2:job1. Перенесём в msr
-	mov	msrH,job2
-	mov	msrL,job1
+; сейчас текущий результат измерний в job1:job0. Перенесём в msr
+	mov	msrH,job1
+	mov	msrL,job0
 ; наш результат, это по сути среднее за 64 измерения, в миливольтах, по входу.
 
 ;;; преобразуем msr в десятичный вид и положим в буфер индикатора

+ 24 - 23
avm.hex

@@ -1,31 +1,32 @@
 :020000020000FC
 :100000000DC0189518951895189518951895189568
-:10001000ABC01895189518951895CAC000E00EBF8A
+:10001000B1C01895189518951895D0C000E00EBF7E
 :100020000FED0DBF00E808B901E007B907EC06B90C
 :1000300002E001B903E00EBD0DEF0DBD0FE80CBDF0
 :1000400001E00CB94FEE00EF0ABB0BBB07E007BBAA
 :10005000DD27C4E000E3402E502E602E702E7894F1
-:10006000EE24FF2420E4339A49D097FF03C09F7702
+:10006000EE24FF2420E4339A4FD097FF03C09F77FC
 :10007000369AFACF2223C1F73398F694E794F69490
-:10008000E794F694E794E0E6F0E0E192F19253957C
-:10009000583008F05527E0E6F0E0FF24EE24222750
-:1000A0000191E00E0191F01E23952830C8F3F694DB
-:1000B000E794F694E794F694E79404E713E12ED0DE
-:1000C000269417942694179426941794F22CE12CD6
-:1000D00032D0A4E0BB27022D0F70002319F40FEFDC
-:1000E0000D9301C011D0012D029590640DD09F7B1E
-:1000F000012D0AD0002D029507D0B2CF00E205BF36
-:100100008895002705BF0895ECEBF1E00F70E00F34
-:10011000FB1F049196FD0F7D0D930895222420E18D
-:100120001695079510F41E0C2F1C2794179407940E
-:100130002A95B1F7089520E1222411240024FF27F5
-:10014000EE0CFF1C001C111C221C2A9509F40895BA
-:10015000E3E002910D5F03FD00830081005D07FD78
-:100160000083E030B1F7ECCF0F930FB70F930DEF93
-:100170000DBD0FE80CBD0BB3006F0BBBC29809910E
-:1001800038E0C098000F10F4C19A01C0C198C09A1D
-:100190003A95B9F7C29A0BB3006F04230BBB440F17
-:1001A00010F04FEEC4E090680F910FBF0F911895BB
-:1001B00004B1E00E05B1F01E2A95189530F32AA27D
-:0601C000E1A424F220A0DE
+:10008000E794F694E794E0E6F0E0052F000FE00F28
+:10009000E192F0825395583008F05527E0E6FF27AB
+:1000A000FF24EE2422270191E00E0191F01E2395FA
+:1000B0002830C8F3F694E794F694E794F694E7941E
+:1000C00004E713E131D026941794079426941794EB
+:1000D0000794269417940794F12CE02C32D0A4E0D6
+:1000E000BB27022D0F70002319F40FEF0D9301C0F1
+:1000F00011D0012D029590640DD09F7B012D0AD067
+:10010000002D029507D0ACCF00E205BF88950027EF
+:1001100005BF0895E8ECF1E00F70E00FFB1F0491BC
+:1001200096FD0F7D0D930895222420E116950795E5
+:1001300010F41E0C2F1C2794179407942A95B1F7DE
+:10014000089520E1222411240024FF27EE0CFF1C37
+:10015000001C111C221C2A9509F40895E3E0029169
+:100160000D5F03FD00830081005D07FD0083E0302B
+:10017000B1F7ECCF0F930FB70F930DEF0DBD0FE855
+:100180000CBD0BB3006F0BBBC298099138E0C0984F
+:10019000000F10F4C19A01C0C198C09A3A95B9F7FE
+:1001A000C29A0BB3006F04230BBB440F10F04FEE49
+:1001B000C4E090680F910FBF0F91189504B1E00E45
+:1001C00005B1F01E2A95189530F32AA2E1A424F275
+:0201D00020A06D
 :00000001FF