start
This commit is contained in:
153
Source/Internal/DAC.c
Normal file
153
Source/Internal/DAC.c
Normal file
@@ -0,0 +1,153 @@
|
||||
#include "DSP2833x_Device.h" // DSP281x Headerfile Include File
|
||||
#include "DSP2833x_SWPrioritizedIsrLevels.h"
|
||||
#include "filter_bat2.h"
|
||||
#include "measure.h"
|
||||
|
||||
#include "RS485.h"
|
||||
#include "message.h"
|
||||
#include "DAC.h"
|
||||
#include "package.h"
|
||||
#include "tools.h"
|
||||
|
||||
#include "peripher.h"
|
||||
#include "log_to_mem.h"
|
||||
|
||||
#define dCLK_1() GpioDataRegs.GPBSET.bit.GPIO63=1
|
||||
#define dCLK_0() GpioDataRegs.GPBCLEAR.bit.GPIO63=1
|
||||
#define dCS_1() GpioDataRegs.GPBSET.bit.GPIO59=1
|
||||
#define dCS_0() GpioDataRegs.GPBCLEAR.bit.GPIO59=1
|
||||
|
||||
unsigned long WAKEpowse;
|
||||
unsigned long IMPowse;
|
||||
unsigned int period_dac, time_dac;
|
||||
|
||||
void Setup_DAC_time(void)
|
||||
{
|
||||
WAKEpowse = 3L * DAC_FREQ +1;
|
||||
|
||||
period_dac = READY_FREQ / DAC_FREQ;
|
||||
time_dac = LOAD_TIME * DAC_FREQ;
|
||||
}
|
||||
|
||||
void dOUT(int x)
|
||||
{
|
||||
if(x) GpioDataRegs.GPBSET.bit.GPIO60=1;
|
||||
else GpioDataRegs.GPBCLEAR.bit.GPIO60=1;
|
||||
}
|
||||
|
||||
void wast()
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i=0;i<25;i++);
|
||||
}
|
||||
|
||||
void dSEND(unsigned int word)
|
||||
{
|
||||
int i;
|
||||
|
||||
dCS_0(); DSP28x_usDelay(1L);
|
||||
|
||||
for(i=0;i<16;i++)
|
||||
{
|
||||
dCLK_1();
|
||||
dOUT((word & 0x8000)?1:0); word = word<<1; DSP28x_usDelay(1L);
|
||||
dCLK_0(); DSP28x_usDelay(1L);
|
||||
}
|
||||
dCS_1();
|
||||
}
|
||||
|
||||
void Init_DAC(void)
|
||||
{
|
||||
dSEND(0x9002|0x0000);
|
||||
toggle_RES_OUT_1();
|
||||
}
|
||||
|
||||
void Anal_output(long vrot, long maxx)
|
||||
{
|
||||
long out;
|
||||
static int x;
|
||||
|
||||
out = DAC_min() + vrot * DAC_max() / maxx - vrot * DAC_min() / maxx ;
|
||||
|
||||
x=0;// !x; òùåòíî áûòèå
|
||||
|
||||
if(cCalibrDac) out=DAC_cal();
|
||||
|
||||
out = out & 0xFFF;
|
||||
|
||||
if(x) dSEND(out|0x0000|0x0000);
|
||||
else dSEND(out|0x8000|0x0000);
|
||||
|
||||
modbus[123] = out;
|
||||
|
||||
modbus[0x1C] = 40L + vrot * 200 / maxx - vrot * 40 / maxx ;
|
||||
|
||||
/*
|
||||
if(!no_write)
|
||||
{
|
||||
Test_mem_limit(4);
|
||||
|
||||
Log_to_mem(modbus[0x7B]);
|
||||
Log_to_mem(modbus[0x63]);
|
||||
Log_to_mem(modbus[0x1C]);
|
||||
Log_to_mem(modbus[0x1D]);
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
}
|
||||
|
||||
void Load_runner()
|
||||
{
|
||||
static unsigned int count_dac=0, count_load=0, x=1;
|
||||
float sinus=0;
|
||||
int kod;
|
||||
|
||||
if(IMPowse) IMPowse--;
|
||||
if(++count_dac >= period_dac)
|
||||
{
|
||||
count_dac=0;
|
||||
|
||||
if(WAKEpowse)
|
||||
{
|
||||
--WAKEpowse;
|
||||
|
||||
if( (WAKEpowse == DAC_FREQ/2*6)||
|
||||
(WAKEpowse == DAC_FREQ/2*5)||
|
||||
(WAKEpowse == DAC_FREQ/2*4)||
|
||||
(WAKEpowse == DAC_FREQ/2*3)||
|
||||
(WAKEpowse == DAC_FREQ/2*2)||
|
||||
(WAKEpowse == DAC_FREQ/2*1) )
|
||||
{
|
||||
Init_DAC(); x=1;
|
||||
} }
|
||||
|
||||
else
|
||||
{
|
||||
if(cUMPstart)
|
||||
{
|
||||
if(count_load > (time_dac/2))count_load++;
|
||||
|
||||
if(++count_load > time_dac) count_load = time_dac;
|
||||
|
||||
// sinus = ((float)(DAC_stop - DAC_go) / 16.0 * count_load) + ((float)(DAC_go - 4.0) / 16.0 * time_dac);
|
||||
sinus = (10.0 / 16.0 * count_load) + (2.0 / 16.0 * time_dac);
|
||||
}
|
||||
else
|
||||
{ count_load = 0;
|
||||
sinus=0;
|
||||
x = (x+1)&0x3FF;
|
||||
}
|
||||
|
||||
if(!x || cInitDac)
|
||||
{
|
||||
Init_DAC(); x=1; cInitDac=0;
|
||||
}
|
||||
else
|
||||
{
|
||||
kod = (int)sinus;
|
||||
|
||||
Anal_output(kod, time_dac);
|
||||
} } } }
|
||||
Reference in New Issue
Block a user