Skip to content

Commit

Permalink
added DAC command
Browse files Browse the repository at this point in the history
  • Loading branch information
nf-zvv committed Mar 19, 2020
1 parent 4b0e177 commit d9992fe
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 8 deletions.
2 changes: 1 addition & 1 deletion IVC_Tracer.aps
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<AVRStudio><MANAGEMENT><ProjectName>IVC_Tracer</ProjectName><Created>06-Mar-2020 20:39:16</Created><LastEdit>16-Mar-2020 08:52:04</LastEdit><ICON>208</ICON><ProjectType>0</ProjectType><Created>06-Mar-2020 20:39:16</Created><Version>4</Version><Build>4, 19, 0, 730</Build><ProjectTypeName>Atmel AVR Assembler</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>IVC_Tracer.obj</ObjectFile><EntryFile>D:\coding\IVC_Tracer\IVC_Tracer.asm</EntryFile><SaveFolder>D:\coding\IVC_Tracer\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator 2</CURRENT_TARGET><CURRENT_PART>ATmega16</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AvrAssembler><Folder>D:\coding\IVC_Tracer\</Folder><RelPath>IVC_Tracer.asm</RelPath><EntryFile>D:\coding\IVC_Tracer\IVC_Tracer.asm</EntryFile><IncludePath>E:\Programs\Atmel\AVR Tools\AvrAssembler\Appnotes</IncludePath><V2IncludePath></V2IncludePath><V2Parameters></V2Parameters><FileType>I</FileType><ObjectName>IVC_Tracer</ObjectName><Wrap>0</Wrap><ErrorAsWarning>0</ErrorAsWarning><MapFile>1</MapFile><ListFile>0</ListFile><Version1>0</Version1><PreCompile></PreCompile><PostCompile></PostCompile><SourceFiles>,,coreinit.inc,eeprom.asm,eeprom_macro.asm,LCD4.asm,LCD4_macro.inc,macro.asm,math.asm,MCP3204.asm,MCP4921.asm,spi_hw.asm,vectors_m16.inc,wait.asm,cmd.asm,cmd_func.asm,uart_funcs.asm,uart_irq.asm,uart_macro.asm</SourceFiles></AvrAssembler><ProjectIncludeDirs><Dirs><Dir>C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes</Dir></Dirs></ProjectIncludeDirs><ProjectFiles><Files><Name>D:\coding\IVC_Tracer\IVC_Tracer.asm</Name><Name>coreinit.inc</Name><Name>eeprom.asm</Name><Name>eeprom_macro.asm</Name><Name>LCD4.asm</Name><Name>LCD4_macro.inc</Name><Name>macro.asm</Name><Name>math.asm</Name><Name>MCP3204.asm</Name><Name>MCP4921.asm</Name><Name>spi_hw.asm</Name><Name>vectors_m16.inc</Name><Name>wait.asm</Name><Name>cmd.asm</Name><Name>cmd_func.asm</Name><Name>uart_funcs.asm</Name><Name>uart_irq.asm</Name><Name>uart_macro.asm</Name></Files></ProjectFiles><IOView><usergroups/><sort sorted="0" column="0" ordername="1" orderaddress="1" ordergroup="1"/></IOView><Files><File00000><FileId>00000</FileId><FileName>IVC_Tracer.asm</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>cmd_func.asm</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>cmd.asm</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>uart_funcs.asm</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>uart_irq.asm</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>uart_macro.asm</FileName><Status>1</Status></File00005></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
<AVRStudio><MANAGEMENT><ProjectName>IVC_Tracer</ProjectName><Created>06-Mar-2020 20:39:16</Created><LastEdit>19-Mar-2020 16:16:57</LastEdit><ICON>208</ICON><ProjectType>0</ProjectType><Created>06-Mar-2020 20:39:16</Created><Version>4</Version><Build>4, 19, 0, 730</Build><ProjectTypeName>Atmel AVR Assembler</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>IVC_Tracer.obj</ObjectFile><EntryFile>D:\coding\IVC_Tracer\IVC_Tracer.asm</EntryFile><SaveFolder>D:\coding\IVC_Tracer\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator 2</CURRENT_TARGET><CURRENT_PART>ATmega16</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AvrAssembler><Folder>D:\coding\IVC_Tracer\</Folder><RelPath>IVC_Tracer.asm</RelPath><EntryFile>D:\coding\IVC_Tracer\IVC_Tracer.asm</EntryFile><IncludePath>E:\Programs\Atmel\AVR Tools\AvrAssembler\Appnotes</IncludePath><V2IncludePath></V2IncludePath><V2Parameters></V2Parameters><FileType>I</FileType><ObjectName>IVC_Tracer</ObjectName><Wrap>0</Wrap><ErrorAsWarning>0</ErrorAsWarning><MapFile>1</MapFile><ListFile>0</ListFile><Version1>0</Version1><PreCompile></PreCompile><PostCompile></PostCompile><SourceFiles>,,coreinit.inc,eeprom.asm,eeprom_macro.asm,LCD4.asm,LCD4_macro.inc,macro.asm,math.asm,MCP3204.asm,MCP4921.asm,spi_hw.asm,vectors_m16.inc,wait.asm,cmd.asm,cmd_func.asm,uart_funcs.asm,uart_irq.asm,uart_macro.asm</SourceFiles></AvrAssembler><ProjectIncludeDirs><Dirs><Dir>C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes</Dir></Dirs></ProjectIncludeDirs><ProjectFiles><Files><Name>D:\coding\IVC_Tracer\IVC_Tracer.asm</Name><Name>coreinit.inc</Name><Name>eeprom.asm</Name><Name>eeprom_macro.asm</Name><Name>LCD4.asm</Name><Name>LCD4_macro.inc</Name><Name>macro.asm</Name><Name>math.asm</Name><Name>MCP3204.asm</Name><Name>MCP4921.asm</Name><Name>spi_hw.asm</Name><Name>vectors_m16.inc</Name><Name>wait.asm</Name><Name>cmd.asm</Name><Name>cmd_func.asm</Name><Name>uart_funcs.asm</Name><Name>uart_irq.asm</Name><Name>uart_macro.asm</Name><Name>D:\coding\IVC_Tracer\m16Adef.inc</Name><Name>D:\coding\IVC_Tracer\macro.asm</Name><Name>D:\coding\IVC_Tracer\eeprom_macro.asm</Name><Name>D:\coding\IVC_Tracer\LCD4_macro.inc</Name><Name>D:\coding\IVC_Tracer\uart_macro.asm</Name><Name>D:\coding\IVC_Tracer\vectors_m16.inc</Name><Name>D:\coding\IVC_Tracer\uart_irq.asm</Name><Name>D:\coding\IVC_Tracer\coreinit.inc</Name><Name>D:\coding\IVC_Tracer\math.asm</Name><Name>D:\coding\IVC_Tracer\LCD4.asm</Name><Name>D:\coding\IVC_Tracer\spi_hw.asm</Name><Name>D:\coding\IVC_Tracer\MCP3204.asm</Name><Name>D:\coding\IVC_Tracer\MCP4921.asm</Name><Name>D:\coding\IVC_Tracer\wait.asm</Name><Name>D:\coding\IVC_Tracer\eeprom.asm</Name><Name>D:\coding\IVC_Tracer\uart_funcs.asm</Name><Name>D:\coding\IVC_Tracer\strings.asm</Name><Name>D:\coding\IVC_Tracer\cmd.asm</Name><Name>D:\coding\IVC_Tracer\cmd_func.asm</Name></Files></ProjectFiles><IOView><usergroups/><sort sorted="0" column="0" ordername="1" orderaddress="1" ordergroup="1"/></IOView><Files><File00000><FileId>00000</FileId><FileName>IVC_Tracer.asm</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>cmd_func.asm</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>cmd.asm</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>uart_funcs.asm</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>uart_irq.asm</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>uart_macro.asm</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>coreinit.inc</FileName><Status>1</Status></File00006><File00007><FileId>00007</FileId><FileName>eeprom.asm</FileName><Status>1</Status></File00007><File00008><FileId>00008</FileId><FileName>eeprom_macro.asm</FileName><Status>1</Status></File00008><File00009><FileId>00009</FileId><FileName>MCP4921.asm</FileName><Status>1</Status></File00009></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@

#### UART terminal

По UART доступен командный интерпретатор. По мере поступления, входящие символы добавляются в кольцевой буфер UART по прерыванию `UART Receive Complete`. При получении символа перевода каретки (CR, код 13, `\n`), возводится флаг о приёме строки. Далее управление передаётся парсеру `UART_RX_PARSE`. Запускается подпрограмма `SPLIT_LINE`, которая подготавливает командную строку в виде `команда\0[аргументы]\0`: из кольцевого буфера последовательно извлекаются символы, после первой последовательности символов (команды), отделённой пробелом, следуют опциональные аргументы, индексы начала которых добавляются в отдельный массив. Затем запускается подпрограмма `DEFINE_CMD`, которая идентифицирует команду и в случае успеха возвращает `CMD_ID` - идентификатор команды. Если ошибок не обнаружено, управление передаётся обработчику команды при помощи подпрограммы `EXEC_CMD`.
По UART доступен командный интерпретатор. По мере поступления, входящие символы добавляются в кольцевой буфер UART по прерыванию `UART Receive Complete`. При получении символа перевода каретки (CR, код 13, `\n`), возводится флаг о приёме строки. Далее управление передаётся парсеру `UART_RX_PARSE`. Запускается подпрограмма `SPLIT_LINE`, которая подготавливает командную строку `CMDLINE` в виде `команда\0[аргумент]\0[аргумент]\0`: из кольцевого буфера последовательно извлекаются символы, после первой последовательности символов (команды), отделённой символом `\0`, следуют опциональные аргументы, индексы начала которых добавляются в отдельный массив `ARG_ADDR_LIST`. Количество аргументов сохраняется в пременную `ARG_COUNT`. Затем запускается подпрограмма `DEFINE_CMD`, которая идентифицирует команду и в случае успеха возвращает `CMD_ID` - идентификатор команды. Если ошибок не обнаружено, управление передаётся обработчику команды при помощи подпрограммы `EXEC_CMD`.

**Список доступных команд**

Expand All @@ -66,7 +66,8 @@
3. `echo` - эхо, возвращает в терминал значение своего аргумента;
4. `set` - изменение значения переменной (имеет два аргумента: имя переменной и новое значение);
5. `get` - считывание значения переменной (при отправке без аргумента, либо при аргументе `ALL`, выводит список "имя=значение" переменных; при указании конкретного имени переменной выводит значение этой переменной);
6. `start` - запуск процедуры автоматического снятия ВАХ (отправляет в терминал массив измеренных и обработанных данных).
6. `start` - запуск процедуры автоматического снятия ВАХ (отправляет в терминал массив измеренных и обработанных данных);
7. `dac` - получение текущего или установка нового значения ЦАП.

Разделителем служит пробел.

Expand Down
2 changes: 1 addition & 1 deletion cmd.asm
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
.def __zero_reg__ = r2
.endif

.equ CMD_COUNT = 7 ; кол-во команд. Увеличить при добавлении новых!
.equ CMD_COUNT = 8 ; кол-во команд. Увеличить при добавлении новых!
.equ ARG_COUNT_MAX = 2 ; максимальное кол-во аргументов
.equ CMDLINE_LEN = 32

Expand Down
54 changes: 50 additions & 4 deletions cmd_func.asm
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,52 @@ cmd_start:
ret


;------------------------------------------------------------------------------
; Получение текущего или установка нового значения ЦАП
;
;------------------------------------------------------------------------------
cmd_dac:
lds r16,ARG_COUNT ; кол-во аргументов
tst r16
brne cmd_dac_max_arg_tst
rjmp cmd_dac_show ; нет аргументов - выводим текущее значение
cmd_dac_max_arg_tst:
cpi r16,1
breq cmd_dac_next
rjmp cmd_too_many_args
cmd_dac_next:
ldi r16,1 ; берем первый аргумент
rcall GET_ARGUMENT ; (Y - pointer to zero ending argument string)
rcall STR_TO_UINT16 ; (IN: Y; OUT: r25:r24)
tst r13
brne cmd_dac_error_num
sts DAC+0,r24
sts DAC+1,r25
rcall DAC_SET
rjmp cmd_dac_success
cmd_dac_show:
ldi ZL,low(DAC_const*2)
ldi ZH,high(DAC_const*2)
rcall FLASH_CONST_TO_UART ; (IN: Z)
lds XL,DAC+0
lds XH,DAC+1
ldi YL,low(STRING)
ldi YH,high(STRING)
rcall DEC_TO_STR5 ; (IN: X; OUT: Y)
ldi XL,low(STRING)
ldi XH,high(STRING)
rcall STRING_TO_UART ; (IN: X)
rcall UART_LF_CR
rjmp cmd_dac_success
cmd_dac_error_num:
ldi r16,8 ; код ошибки: "некорректное число"
mov r13,r16
ret
cmd_dac_success:
clr r13
ret


;------------------------------------------------------------------------------
; Получение всех переменных
; вывод значений переменных в терминал
Expand Down Expand Up @@ -535,12 +581,9 @@ cmd_echo_const: .db "echo",0,0
cmd_meow_const: .db "meow",0,0
cmd_set_const: .db "set",0
cmd_get_const: .db "get",0
;cmd_pwm_const: .db "pwm",0
;cmd_adc_const: .db "adc",0
;cmd_adc2_const: .db "adc2",0,0
;cmd_dac_const: .db "dac",0
;cmd_vah_const: .db "vah",0
cmd_start_const: .db "start",0
cmd_dac_const: .db "dac",0
meow_const: .db "Meow! ^_^",0
clear_seq_const: .db 27, "[", "H", 27, "[", "2", "J",0

Expand All @@ -552,7 +595,9 @@ IVC_DAC_STEP_var_name: .db "IVC_DAC_STEP",0,0
CH0_DELTA_var_name: .db "CH0_DELTA",0
ADC_V_REF_var_name: .db "ADC_V_REF",0
ACS712_KI_var_name: .db "ACS712_KI",0

ALL_const: .db "ALL",0
DAC_const: .db "DAC=",0,0

; Таблица адресов имен команд и адресов подпрограмм
CMD_TABLE:
Expand All @@ -563,6 +608,7 @@ CMD_TABLE:
.db low(cmd_set_const*2), high(cmd_set_const*2), low(cmd_set), high(cmd_set)
.db low(cmd_get_const*2), high(cmd_get_const*2), low(cmd_get), high(cmd_get)
.db low(cmd_start_const*2), high(cmd_start_const*2), low(cmd_start), high(cmd_start)
.db low(cmd_dac_const*2), high(cmd_dac_const*2), low(cmd_dac), high(cmd_dac)

; Таблица адресов имен переменных во Flash и адресов значений в RAM
VAR_TABLE:
Expand Down

0 comments on commit d9992fe

Please sign in to comment.