?? monitor.c
字號:
/*==============================================================
Name: MONITOR.H
Project: ENCODER
Originator: Martin Staebler
Description: RS232 monitor to test sin/cos encoder s/w
==============================================================
Function List: void monitor(void)
void Encoder_MSG(void);
Status: OK
Target: TMS320C240
History: (Date, Revision, Who, What)
---------------------------------------------------------
02/11/97 1.0 STAE Preliminary
==============================================================*/
/*--------------*/
/* Header Files */
/*--------------*/
#include <stdlib.h>
#include <math.h>
#include <conio.h> /* rs232.lib */
#include <sci.h> /* rs232.lib */
#include "C240.h" /* peripheral register declaration for C240 */
#include "adc.h" /* ADC macros */
#include "evm_qep.h" /* QEP unit */
#include "encoder.h" /* sin/cos incremental encoder settings */
#include "monitor.h" /* rs232 monitor settings */
/*==========================================================================*/
/* S U B R O U T I N E S */
/*==========================================================================*/
/*==========================================================================*/
/* void monitor(void) */
/*==========================================================================*/
/* Function: Enables testing of ADC module, QEP unit and sin/cos */
/* incremetal encoder s/w and sends data to terminal */
/* Terminal settings: 9600 baud */
/* 8 data bits */
/* 2 stop bits */
/* No parity */
/* CR -> CR/LF */
/* See e.g. ENCODER.TRM (TERMINAL.EXE) */
/*==========================================================================*/
void monitor(void)
{
char c;
char b[10]="";
char str[20]; /* general purpose buffer */
int i; /* general purpose counter */
int val[3];
static unsigned qep_sample;
volatile unsigned long angle;
volatile float fbuffer;
/*-----------------------------------------------------------*/
/* UART initialization */
/*-----------------------------------------------------------*/
SCI_Init(((SYSCLK*10)/8/BAUDRATE+5)/10);
for (;;)
{
clrscr();
sendstr_PMEM(header);
sendstr_PMEM("\rMain Menu\r");
/*-----------------*/
/* Menue Selection */
/*-----------------*/
sendstr_PMEM("\r\t1) Encoder Initialization");
sendstr_PMEM("\r\t2) ADC1,2 & QEP Test");
sendstr_PMEM("\r\t3) Print Encoder Increment & Phase");
sendstr_PMEM("\r\t4) Print Position (1/1000 Degrees)");
sendstr_PMEM("\r\r Press '1'..'4'. Please make your choice. \r");
for (c = 0; c<'1' || c>'6';c = SCI_Getc());
switch (c)
{
case '1': /*------------------------*/
/* Encoder Initialization */
/*------------------------*/
Encoder_Init(QEP_ROLLOVER);
sendstr_PMEM("\r\r");
sendstr_PMEM(" +--------------------+\r");
sendstr_PMEM(" | Encoder setup done |\r"); /* Screen Output */
sendstr_PMEM(" +--------------------+\r");
sendstr_PMEM(" >> Press any key to confirm\r");
for (c=0; c==0; c = (kbhit() ? getch() : 0) );
break;
case '2': /*----------------*/
/* ADC & QEP TEst */
/*----------------*/
clrscr();
sendstr_PMEM("\rInput from ADC1, ADC2, QEP: 000000 000000 000000");
do
{
sendstr_PMEM("\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
sendstr_PMEM("\b\b\b\b\b\b\b");
/*----------------*/
/* Get ADC Values */
/*----------------*/
ADC_START(5,13);
ADC_READ2(val[0],val[1]);
val[0] = (val[0] - ENC_U0_OFFSET) << 1;
val[1] = (val[1] - ENC_U90_OFFSET)<< 1;
/*----------------*/
/* Get Increments */
/*----------------*/
#ifndef QEP_POWER2
val[2] = QEP_GetIncr();
#else
val[2] = (T2CNT - qep_diff) & (QEP_ROLLOVER-1);
#endif
/*-----------------*/
/* Terminal output */
/*-----------------*/
ltoa ((long)val[0], str);
for (i=strlen(str); i<7; i++)
sendstr_PMEM(" ");
sendstr_DMEM(str);
ltoa ((long)val[1], str);
for (i=strlen(str); i<7; i++)
sendstr_PMEM(" ");
sendstr_DMEM(str);
ltoa ((unsigned long)val[2], str);
for (i=strlen(str); i<7; i++)
sendstr_PMEM(" ");
sendstr_DMEM(str);
} while( SCI_Getc() == -1 );
break;
case '3': /*----------------------------------*/
/* Print Encoder Increments & Phase */
/*----------------------------------*/
clrscr();
sendstr_PMEM("\rSIN/COS Q-Encoder, Increments, Phase: 000000 000000");
do
{
sendstr_PMEM("\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
/*--------------*/
/* Get Position */
/*--------------*/
qep_sample = Encoder_SamplePosition();
Encoder_CalcPosition(qep_sample);
/*-----------------*/
/* Terminal output */
/*-----------------*/
ltoa ((unsigned long) encoder_position[1], str);
for (i=strlen(str); i<7; i++)
sendstr_PMEM(" ");
sendstr_DMEM(str);
ltoa ((unsigned long) encoder_position[0], str);
for (i=strlen(str); i<7; i++)
sendstr_PMEM(" ");
sendstr_DMEM(str);
} while( SCI_Getc() == -1 );
break;
case '4': /*----------------*/
/* Print Position */
/*----------------*/
clrscr();
sendstr_PMEM("\rAngle (1/1000 * Degrees): 000000000");
do
{
sendstr_PMEM("\b\b\b\b\b\b\b\b\b\b");
/*--------------*/
/* Get Position */
/*--------------*/
qep_sample = Encoder_SamplePosition();
Encoder_CalcPosition(qep_sample);
/*------------*/
/* Calc angle */
/*------------*/
angle = ((long) encoder_position[1]) << 16;
angle += (long) encoder_position[0];
fbuffer = ((double) angle)/(2048 * 0x10000);
fbuffer = fbuffer * 360000;
angle = (long) fbuffer;
/*-----------------*/
/* Terminal output */
/*-----------------*/
ltoa (angle, str);
for (i=strlen(str); i<10; i++)
sendstr_PMEM(" ");
sendstr_DMEM(str);
} while( SCI_Getc() == -1 );
break;
} /* end switch */
} /* end for */
} /* end monitor() */
/*======================================================================*/
/* void Encoder_MSG(void) */
/*======================================================================*/
void Encoder_MSG(void)
{
clrscr();
sendstr_PMEM("\r\r");
sendstr_PMEM(" +----------------------------------------------+\r");
sendstr_PMEM(" | S L O W L Y Turn Encoder for Sychronization |\r");
sendstr_PMEM(" +----------------------------------------------+\r");
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -