реклама на сайте
подробности

 
 
> Преобразование кода АЦП, нужен совет
novlev
сообщение Mar 24 2008, 11:25
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 116
Регистрация: 24-09-06
Пользователь №: 20 645



Вопрос такой:
есть код ацп, его надо преобразовать в десятичную форму(1й байт целая часть, 2й - дробная). Как проще всего это сделать. Пишу на асме, контроллер - ADuC841.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Linker
сообщение Mar 24 2008, 13:10
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 210
Регистрация: 15-01-08
Из: Новосибирск
Пользователь №: 34 105



Цитата(novlev @ Mar 24 2008, 17:25) *
Вопрос такой:
есть код ацп, его надо преобразовать в десятичную форму(1й байт целая часть, 2й - дробная). Как проще всего это сделать. Пишу на асме, контроллер - ADuC841.

Я так понимаю, Вы хотите потом этот код передать по СОМ-порту в гипертерминал в цифробуквенном виде в кодах ASCII? Или что?


--------------------
Я здесь и сейчас...
Go to the top of the page
 
+Quote Post
novlev
сообщение Mar 24 2008, 13:19
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 116
Регистрация: 24-09-06
Пользователь №: 20 645



да, передать по интерфейсу 485, но не в кодеровке, а именно 2 байта, но представление инфы долждно быть как десятичное, те вычитал (например 0А8А) и отправил в первом байте 05, во втором - 12 (условно), и это типа 5,12 вольта.Сижу ломаю головуsad.gif
Go to the top of the page
 
+Quote Post
Linker
сообщение Mar 24 2008, 13:42
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 210
Регистрация: 15-01-08
Из: Новосибирск
Пользователь №: 34 105



Цитата(novlev @ Mar 24 2008, 19:19) *
да, передать по интерфейсу 485, но не в кодеровке, а именно 2 байта, но представление инфы долждно быть как десятичное, те вычитал (например 0А8А) и отправил в первом байте 05, во втором - 12 (условно), и это типа 5,12 вольта.Сижу ломаю головуsad.gif

мдя. делать такие преобразования на 8 разрядном ядре на ASM- гимор. Может сделать таблицу коэффициентов? Т.е. каждому возможному отсчету (их всего 4096) присвоить значения, полученные путем деления опорного напряжения на 4096, а потом умноженного на 12-разрядный отсчет. Эти расчеты сделать например в EXELL. Памяти в ADuC 845 для для хранения такой таблицы достаточно. Не элегантно конечно, но зато потом будет быстро работать.

Сообщение отредактировал Linker - Mar 24 2008, 13:44


--------------------
Я здесь и сейчас...
Go to the top of the page
 
+Quote Post
tag
сообщение Mar 24 2008, 14:54
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 21-02-06
Пользователь №: 14 561



Цитата(Linker @ Mar 24 2008, 16:42) *
мдя. делать такие преобразования на 8 разрядном ядре на ASM- гимор.


...геммороя здесь нет, книги читать надо. Вот этот фрагмент кода выполняет преобразование 12-разрядного числа в упакованное BCD-число из 2-х байт. В регистры R2 и R3 загружаете соответственно младшую и старшую часть искомого числа, на выходе в регистре R0 две младшие цифры числа, в R1 старшие цифры числа. Например R2 = FFh R3= 0Fh -> R0 = 95h R1 = 40h. Дальше все просто.
Код
                  mov        R0,#0
        mov        R1,#0
        mov        R2,A
                  mov            R3,B
        mov        R4,#0

loop:
        mov        A,R0
        add        A,R0
        da        A
        mov        R0,A
        mov        A,R1
        addc             A,R1
        da        A
        mov        R1,A

        mov        A,R2
        rlc        A
        mov        R2,A

                  mov           A,R3
                  rlc              A
                  mov           R3,A

                  mov           C,ACC.4

        mov        A,R0
        addc             A,#0
        da        A
        mov        R0,A
        mov        A,R1
        addc             A,#0
        da              A
        mov        R1,A

        inc        R4
        cjne        R4,#12,loop
Go to the top of the page
 
+Quote Post
Linker
сообщение Mar 24 2008, 15:50
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 210
Регистрация: 15-01-08
Из: Новосибирск
Пользователь №: 34 105



Цитата(tag @ Mar 24 2008, 20:54) *
...геммороя здесь нет, книги читать надо. Вот этот фрагмент кода выполняет преобразование 12-разрядного числа в упакованное BCD-число из 2-х байт.

Тут гимор в том, нужно получить результат в вольтах, а не просто преобразвать в BCD упаковку. Ну и потом, приведенный фрагмент кода вы считаете эффективным?

Цитата(novlev @ Mar 24 2008, 19:52) *
Да я уже думал об этом, просто таких таблиц надо сгородить несколько для одного девайся, а их несколько разных, но спасибо за совет, теперь я уже уверен что так и сделаю. А есть пример реализации? т е механизм работы с таблицей

А почему несколько таблиц? Что, опора будет меняться? Или коэфф. усиления? Примера к сожалению нет. А механизм работы с таблицей прост: адрес соответствующего коэффициента в вольтах соответствует полученному значению преобразования, который загружается в DPTR. Далее командой "MOVC A,@A+DPTR" извлекается младшая часть результата. Используя теневой DPTR(такой есть в ADuC - Dual Data Pointer) извлекаешь старшую часть. Либо без теневого DPTR просто меняешь соответсвующий разряд в текущем DPTR.

Сообщение отредактировал Linker - Mar 24 2008, 15:33


--------------------
Я здесь и сейчас...
Go to the top of the page
 
+Quote Post
novlev
сообщение Mar 25 2008, 06:14
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 116
Регистрация: 24-09-06
Пользователь №: 20 645



Цитата(Linker @ Mar 24 2008, 19:50) *
Тут гимор в том, нужно получить результат в вольтах, а не просто преобразвать в BCD упаковку. Ну и потом, приведенный фрагмент кода вы считаете эффективным?
А почему несколько таблиц? Что, опора будет меняться? Или коэфф. усиления? Примера к сожалению нет. А механизм работы с таблицей прост: адрес соответствующего коэффициента в вольтах соответствует полученному значению преобразования, который загружается в DPTR. Далее командой "MOVC A,@A+DPTR" извлекается младшая часть результата. Используя теневой DPTR(такой есть в ADuC - Dual Data Pointer) извлекаешь старшую часть. Либо без теневого DPTR просто меняешь соответсвующий разряд в текущем DPTR.


Опорное постоянное, а вот коэффициенты разные (5 напряжений и несколько температур). Коэф. задаются делителями, а они разные... Если я правильно понял вопрос.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- novlev   Преобразование кода АЦП   Mar 24 2008, 11:25
||- - novlev   Цитата(Linker @ Mar 24 2008, 17:42) мдя. ...   Mar 24 2008, 13:52
|||- - Linker   Цитата(novlev @ Mar 25 2008, 12:14) Опорн...   Mar 25 2008, 16:53
|||- - novlev   Цитата(Linker @ Mar 25 2008, 20:53) Тогда...   Mar 26 2008, 09:27
|||- - Linker   Цитата(novlev @ Mar 26 2008, 15:27) увы ...   Mar 27 2008, 17:59
||- - novlev   Цитата(tag @ Mar 24 2008, 18:54) ...геммо...   Mar 25 2008, 06:33
|- - @Ark   Цитата(novlev @ Mar 24 2008, 16:19) да, п...   Mar 27 2008, 23:10
- - MrYuran   а почему на си нельзя? В том же Кейле, к примеру? ...   Mar 24 2008, 15:02
|- - novlev   Цитата(MrYuran @ Mar 24 2008, 19:02) а по...   Mar 24 2008, 15:07
- - MrYuran   А к чему такая спешка, чтобы прям сразу отвечать, ...   Mar 25 2008, 06:18
- - Omen_13   Можно сделать ход конём - умножением результата из...   Mar 27 2008, 20:13
- - Omen_13   Нашел фрагмент, может поможет... R6R5 - код с АЦП ...   Mar 28 2008, 14:51
- - novlev   всем спасибо за советы, забрел сейчас в такие дебр...   Apr 2 2008, 08:30
- - novlev   Все... имею на выходе челую и дробную части, загру...   Apr 2 2008, 10:18
- - asm_lock   Я так понимю тема про АЦП. В контроллера ADuC841, ...   Jul 9 2010, 22:52
|- - asm_lock   Я так понимю тема про АЦП. В контроллера ADuC841, ...   Jul 10 2010, 08:17
- - Микрюков Вячеслав   Цитата(novlev @ Mar 24 2008, 15:25) Вопро...   Sep 6 2010, 08:29


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 10:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01419 секунд с 7
ELECTRONIX ©2004-2016