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

 
 
> Как переслать результат АЦП на комп.
PhX
сообщение Nov 17 2006, 17:39
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 473
Регистрация: 10-09-06
Из: Тольятти. Самарская обл.
Пользователь №: 20 249



Аналогово цифровое преобразование выполняется с частотой 20 кГц. Очень хочется чтобы результат оптображался на графике хотя бы встроенном в CCS, кроме того желательно передавать данные в MatLab для дальнейшей обработки. Как такое осуществить?

ezDsp320F2812
CCS 3.1

Сообщение отредактировал PhX - Nov 17 2006, 17:40


--------------------
Если все, то не я...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
=GM=
сообщение Nov 21 2006, 17:24
Сообщение #2


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(PhX @ Nov 17 2006, 14:39) *
Аналогово цифровое преобразование выполняется с частотой 20 кГц. Очень хочется чтобы результат оптображался на графике хотя бы встроенном в CCS, кроме того желательно передавать данные в MatLab для дальнейшей обработки. Как такое осуществить?

ezDsp320F2812
CCS 3.1

В принципе, вам Дока ответил уже, хочу просто дополнить.

Чтобы график отображался в CCS, делаете так View-->Graph-->Time/Frequency... Если хотите динамически, поставьте breakPoint где-нибудь в программе и нажмите кнопку Animate, по мере выполнения программы график будет обновляться.

Чтобы сохранить с помощью CCS данные из программы, делаете так File-->Graph-->Save... Также можно и загружать некие данные в программу.

Еще простой вариант. Графики из окошек CCS удобно заносить в буфер обмена (clipboard) с помощью клавиш Alt+PrtSc, а потом в ворд-документ с помощью копи-пейст (или Ctrl+V). Иногда здорово помогает(:-).


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
PhX
сообщение Nov 21 2006, 21:15
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 473
Регистрация: 10-09-06
Из: Тольятти. Самарская обл.
Пользователь №: 20 249



Цитата(=GM= @ Nov 21 2006, 19:24) *
Чтобы график отображался в CCS, делаете так View-->Graph-->Time/Frequency... Если хотите динамически, поставьте breakPoint где-нибудь в программе и нажмите кнопку Animate, по мере выполнения программы график будет обновляться.

Ну до этого я конечно дошел, осталось 3 вопроса:
Дано: Каждые 1/20000 сек вызывается прервание, где результат преобразования записывается в переменную int16 myadcresult.
Вопросы:
1. Что писать в Start Address?
В хелпе пишется, что это адрес буфера с данными которые будем изображать, т.е. что надо делать этот самый буфер?
2. Acquisition Buffer Size это что такое?
Видимо размер этого буфера.
3. Display Data Size а это что такое?
Видимо размер буфера из которого данные выводяться на график, т.е. из Acquisition Buffer данные постоянно валятся в Display Buffer из которого и выводятся на экран.
Так-то все вроде понятно, но как создать этот самый Acquisition Buffer без дополнительного кода в функции прерывания (а если с ним, то набросайте please).
Если ответить на эти вопросы я думаю проблема будет частично решена.

Цитата(=GM= @ Nov 21 2006, 19:24) *
Чтобы сохранить с помощью CCS данные из программы, делаете так File-->Graph-->Save... Также можно и загружать некие данные в программу.

Не знал спасибо!

Цитата(=GM= @ Nov 21 2006, 19:24) *
Еще простой вариант. Графики из окошек CCS удобно заносить в буфер обмена (clipboard) с помощью клавиш Alt+PrtSc, а потом в ворд-документ с помощью копи-пейст (или Ctrl+V). Иногда здорово помогает(:-).

Ну а это знает каждый advanced user (:-).


--------------------
Если все, то не я...
Go to the top of the page
 
+Quote Post
=GM=
сообщение Nov 22 2006, 17:33
Сообщение #4


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(PhX @ Nov 21 2006, 18:15) *
Цитата(=GM= @ Nov 21 2006, 19:24) *

Чтобы график отображался в CCS, делаете так View-->Graph-->Time/Frequency... Если хотите динамически, поставьте breakPoint где-нибудь в программе и нажмите кнопку Animate, по мере выполнения программы график будет обновляться.

Ну до этого я конечно дошел, осталось 3 вопроса:
Дано: Каждые 1/20000 сек вызывается прервание, где результат преобразования записывается в переменную int16 myadcresult.
Вопросы:
1. Что писать в Start Address?
В хелпе пишется, что это адрес буфера с данными которые будем изображать, т.е. что надо делать этот самый буфер?

Задаете начала массива (Start Address) для графика, поскольку отрисовать можно только массив (или буфер, тот же мтс-символ, только вид сбоку). Сам массив (буфер) должен быть у вас в программе.

Цитата(PhX @ Nov 21 2006, 18:15) *
2. Acquisition Buffer Size это что такое? Видимо размер этого буфера.

Это размер вашего массива, она может не совпадать с длиной буфера отображения, хитрость в том, что возможна нормализация всех элементов буфера, ну или у вас буфер со смешанными сигналами, значит рисовать надо через слово. Много чего там можно придумать.

Цитата(PhX @ Nov 21 2006, 18:15) *
3. Display Data Size а это что такое?
Видимо размер буфера из которого данные выводяться на график, т.е. из Acquisition Buffer данные постоянно валятся в Display Buffer из которого и выводятся на экран.
Так-то все вроде понятно, но как создать этот самый Acquisition Buffer без дополнительного кода в функции прерывания (а если с ним, то набросайте please).
Если ответить на эти вопросы я думаю проблема будет частично решена.

Обычный буфер для отображения, находится на писюке. Сколько надо точек отобразить, таков и буфер
Цитата(PhX @ Nov 21 2006, 18:15) *
Цитата(=GM= @ Nov 21 2006, 19:24) *

Еще простой вариант. Графики из окошек CCS удобно заносить в буфер обмена (clipboard) с помощью клавиш Alt+PrtSc, а потом в ворд-документ с помощью копи-пейст (или Ctrl+V). Иногда здорово помогает(:-).

Ну а это знает каждый advanced user (:-).

Ну раз вы advanced user(:-), вот так сделать можете (ех1) или так (ех2)?
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
PhX
сообщение Nov 23 2006, 21:01
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 473
Регистрация: 10-09-06
Из: Тольятти. Самарская обл.
Пользователь №: 20 249



Большое спасибо за доходчивый ответ. Однако программы на ассемблере мне понятны немногим более чем китайская грамата. Я на С то еще не асс, так что буду разбираться.
Кстати нарвыл такую штуку DataLog из DMCLib, вроде работает, если кто в асме разбирается и будет время и желание глянте.
Применяется так:

main()
{
dlog1.iptr1 = &Q15_var1; // Pass input to DATALOG module
dlog1.iptr2 = &Q15_var2; // Pass input to DATALOG module
dlog1.iptr3 = &Q15_var3; // Pass input to DATALOG module
dlog1.iptr4 = &Q15_var4; // Pass input to DATALOG module
dlog1.trig_value = 0x0; // Pass input to DATALOG module
dlog1.size = 0x400; // Pass input to DATALOG module
dlog1.prescalar = 1; // Pass input to DATALOG module
dlog1.init(dlog1); // Call init function for dlog1
}
void interrupt periodic_interrupt_isr()
{
dlog1.update(&dlog1); // Call update function for dlog1
}

и вроде работает.

Вопросы:

1. Почему один раз буфер забился и все одна и та-же картинка это так должно быть?
2. Что такое dlog1.trig_value?

; File name : DLOG4CHC.ASM
;
; Originator : Advanced Embeeded Control (AEC)
; Texas Instruments Inc.
;
; Description : 4-Channel Data logging module
;
; Date : 02/01/2002 (DD/MM/YYYY)

; Routine Name: data_log_update
;
; C prototype : void DLOG_4CH_update(DLOG_4CH_handle);
; void DLOG_4CH_init(DLOG_4CH_handle);
;
; The struct object is defined in the header file "dlog_4ch.h" as follows:
;
; typedef struct {
; long task; /* Variable: Task address pointer */
; int *iptr1; /* Input: First input pointer (Q15) */
; int *iptr2; /* Input: Second input pointer (Q15) */
; int *iptr3; /* Input: Third input pointer (Q15) */
; int *iptr4; /* Input: Fourth input pointer (Q15) */
; int trig_value; /* Input: Trigger point (Q15) */
; int prescalar; /* Parameter: Data log prescale */
; int skip_cntr; /* Variable: Data log skip counter */
; int cntr; /* Variable: Data log counter */
; long write_ptr; /* Variable: Graph address pointer */
; int size; /* Parameter: Maximum data DLOG_4CH_buffer */
; int (*init)(); /* Pointer to init function */
; int (*update)(); /* Pointer to update function */
; } DLOG_4CH;

;
; External Reference
.def _DLOG_4CH_update
.def _DLOG_4CH_init

; Data log buffer definition
BUFF_SIZE .set 400h

DLOG_4CH_buff1 .usect "DLOG", BUFF_SIZE
DLOG_4CH_buff2 .usect "DLOG", BUFF_SIZE
DLOG_4CH_buff3 .usect "DLOG", BUFF_SIZE
DLOG_4CH_buff4 .usect "DLOG", BUFF_SIZE


;==============================================================================
; Initialization Function
;==============================================================================

_DLOG_4CH_init:
MOVL XAR5,#POS_TRIG_S1
MOVL *XAR4,XAR5 ; task=#POS_TRIG_S1
ADDB XAR4,#10 ; XAR4->trig_value

MOV *+XAR4[2],#0

MOVL XAR5,#DLOG_4CH_buff1
MOVL *+XAR4[4],XAR5 ; write_ptr=DLOG_4CH_buff1


MOV AL,*+XAR4[6] ; ACC=size
MOV *+XAR4[3],AL ; cntr=size
LRETR

;==============================================================================
; Datalog Update Function
;==============================================================================

_DLOG_4CH_update:
SETC SXM
MOVL XAR5,XAR4 ; XAR4->task
MOVL XAR7,*XAR4++ ; XAR4->iptr1, XAR7=task
ADDB XAR5,#10 ; XAR5->trig_value
LB *XAR7 ; Branch to TASK

POS_TRIG_S1:
MOV ACC,*XAR5 ; ACC=trig_value
MOVL XAR6,*XAR4 ; XAR6=iptr1
SUB ACC,*XAR6 ; ACC=(trig_value - *iptr1)
BF DL_EXIT,LEQ ; Exit if ACC <= 0

MOVL XAR6,#POS_TRIG_S2
MOVL *--XAR4,XAR6 ; task=POS_TRIG_S2
LRETR

POS_TRIG_S2:
MOV ACC,*XAR5 ; ACC=trig_value
MOVL XAR6,*XAR4 ; XAR6=iptr1
SUB ACC,*XAR6 ; ACC=(trig_value - *iptr1)
BF DL_EXIT,GEQ ; Exit if ACC >= 0

MOVL XAR6,#DL_TRIGGERED
MOVL *--XAR4,XAR6 ; task=POS_TRIG_S2
LRETR

DL_TRIGGERED:
INC *+XAR5[2] ; skip_cntr=skip_cntr+1
MOV ACC,*+XAR5[2] ; ACC=skip_cntr
SUB ACC,*+XAR5[1] ; ACC=skip_cntr-prescalar
SBF DL_EXIT,NEQ ; if (skip_cntr+1) < prescalar, then exit

MOV *+XAR5[2],#0 ; skip_cntr=0
MOV ACC,*+XAR5[3] ; ACC=cntr
SBF DLOG_END,EQ

DEC *+XAR5[3] ; cntr=cntr-1
ADDB XAR5,#4 ; XAR5->write_ptr

MOVL XAR6,*XAR5 ; XAR6=write_ptr
ADDB XAR6,#1 ; XAR6=write_ptr+1
MOVL *XAR5,XAR6 ; write_ptr=write_ptr + 1
SUBB XAR6,#1 ; XAR6=write_ptr

MOV AR0,#BUFF_SIZE ; AR0=BUFF_SIZE


; Log sample pointed by IPTR1
MOVL XAR7,*XAR4++ ; XAR7=iptr1
MOV AL,*XAR7 ; AL=*iptr1
NOP *,ARP6
MOV *0++,AL ; *write_ptr=*iptr1, XAR6=write_ptr+size

; Log sample pointed by IPTR2
MOVL XAR7,*XAR4++ ; XAR7=iptr2
MOV AL,*XAR7 ; AL=*iptr2
NOP *,ARP6
MOV *0++,AL ; *write_ptr=*iptr2, XAR6=write_ptr+size

; Log sample pointed by IPTR3
MOVL XAR7,*XAR4++ ; XAR7=iptr3
MOV AL,*XAR7 ; AL=*iptr3
NOP *,ARP6
MOV *0++,AL ; *write_ptr=*iptr3, XAR6=write_ptr+size

; Log sample pointed by IPTR4
MOVL XAR7,*XAR4++ ; XAR7=iptr4
MOV AL,*XAR7 ; AL=*iptr4
NOP *,ARP6
MOV *0++,AL ; *write_ptr=*iptr4, XAR6=write_ptr+size
LRETR

; Reinitialise the module to log the data when the logging is triggered next

DLOG_END:

MOVL XAR6,#DLOG_4CH_buff1
MOVL *+XAR5[4],XAR6 ; write_ptr=DLOG_4CH_buff1

MOVL XAR6,#POS_TRIG_S1
MOVL *--XAR4,XAR6 ; task=POS_TRIG_S2

MOV AL,*+XAR5[6] ; ACC=size
MOV *+XAR5[3],AL ; cntr=size

DL_EXIT:
LRETR


--------------------
Если все, то не я...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- PhX   Как переслать результат АЦП на комп.   Nov 17 2006, 17:39
- - Doka   JTAG нужен.. Эмулятор.. не помню встроен ли он в ...   Nov 17 2006, 17:59
|- - PhX   Цитата(Doka @ Nov 17 2006, 22:59) JTAG ну...   Nov 18 2006, 07:27
- - Doka   28xmaster.chm -> Animating the Program and Grap...   Nov 18 2006, 17:22
- - _pv   Цитата(PhX @ Nov 17 2006, 23:39) Аналогов...   Nov 18 2006, 17:54
|- - PhX   После упорной борьбы с собственным ламерством я со...   Dec 4 2006, 19:44
|- - =GM=   Цитата(PhX @ Dec 4 2006, 16:44) ...новая ...   Dec 5 2006, 13:19
|- - PhX   Задача наблюдения за переходными процессами при пу...   Dec 6 2006, 12:28
|- - =GM=   Цитата(PhX @ Dec 6 2006, 09:28) Задача на...   Dec 6 2006, 16:52
- - =GM=   Цитата(PhX @ Nov 17 2006, 14:39) Аналогов...   Dec 6 2006, 17:04
- - PhX   Цитата(=GM= @ Dec 6 2006, 19:04) Фу-ты, н...   Dec 7 2006, 09:18
- - PhX   Получается относительно неплохо :-) Спасибо! О...   Dec 7 2006, 13:28
- - =GM=   Цитата(PhX @ Dec 7 2006, 06:18) Цитата(=G...   Dec 7 2006, 13:55


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

 


RSS Текстовая версия Сейчас: 25th August 2025 - 15:56
Рейтинг@Mail.ru


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