Debug mode -- control the DAC from PC at 115200
git-svn-id: https://bucket.mit.edu/svn/nilm/zoom@6582 ddd99763-3ecb-0310-9145-efcb8ce7c51f
This commit is contained in:
parent
5c87e71d9c
commit
4fddc90a8c
110
firmware/zoom.c
110
firmware/zoom.c
|
@ -11,15 +11,18 @@ int send_data = 0;
|
|||
uint16_t send_adc, send_dac;
|
||||
|
||||
/* Outside these thresholds, we step the DAC value */
|
||||
#define ADC_MIN 0x074b
|
||||
#define ADC_MAX 0x08b3
|
||||
#define ADC_MIN 0x0700
|
||||
#define ADC_MAX 0x0900
|
||||
#define ADC_BIGMIN 0x0500
|
||||
#define ADC_BIGMAX 0x0b00
|
||||
|
||||
/* Max/min DAC output value */
|
||||
#define DAC_MIN 0x0000
|
||||
#define DAC_MAX 0xffff
|
||||
|
||||
/* A DAC step is this many counts */
|
||||
#define DAC_STEP 0x0080
|
||||
#define DAC_STEP 0x0180
|
||||
#define DAC_BIGSTEP 0x0400
|
||||
|
||||
uint16_t dac_cmd = ((uint32_t)DAC_MAX + DAC_MIN) / 2;
|
||||
|
||||
|
@ -40,15 +43,37 @@ void slow_callback(void)
|
|||
send_dac = dac_cmd;
|
||||
send_data = 1;
|
||||
|
||||
/* Update DAC if necessary */
|
||||
/* TODO: Increase step depending on how far from ADC_MIN/ADC_MAX we are */
|
||||
if (v < ADC_MIN && dac_cmd < (DAC_MAX - DAC_STEP)) {
|
||||
dac_cmd += DAC_STEP;
|
||||
dac_write(dac_cmd);
|
||||
} else if (v > ADC_MAX && dac_cmd > (DAC_MIN + DAC_STEP)) {
|
||||
dac_cmd -= DAC_STEP;
|
||||
dac_write(dac_cmd);
|
||||
#undef EXPERIMENTAL
|
||||
#ifdef EXPERIMENTAL
|
||||
/* Update DAC. Add whatever is necessary to cause the ADC
|
||||
to recenter at 0x0800 */
|
||||
{
|
||||
int32_t adjustment = (0x0800 - (int32_t)v) * (10 / 10.8);
|
||||
int32_t newdac = dac_cmd + adjustment;
|
||||
if (adjustment) {
|
||||
if (newdac < DAC_MIN)
|
||||
dac_cmd = DAC_MIN;
|
||||
else if (newdac > DAC_MAX)
|
||||
dac_cmd = DAC_MAX;
|
||||
else
|
||||
dac_cmd = newdac;
|
||||
dac_write(dac_cmd);
|
||||
}
|
||||
}
|
||||
#else
|
||||
/* Update DAC if necessary */
|
||||
if (v < ADC_BIGMIN && dac_cmd < (DAC_MAX - DAC_BIGSTEP))
|
||||
dac_cmd += DAC_BIGSTEP;
|
||||
else if (v < ADC_MIN && dac_cmd < (DAC_MAX - DAC_STEP))
|
||||
dac_cmd += DAC_STEP;
|
||||
else if (v > ADC_BIGMAX && dac_cmd > (DAC_MIN + DAC_BIGSTEP))
|
||||
dac_cmd -= DAC_BIGSTEP;
|
||||
else if (v > ADC_MAX && dac_cmd > (DAC_MIN + DAC_STEP))
|
||||
dac_cmd -= DAC_STEP;
|
||||
else
|
||||
return;
|
||||
dac_write(dac_cmd);
|
||||
#endif
|
||||
}
|
||||
|
||||
void send_to_pc(void)
|
||||
|
@ -66,30 +91,59 @@ void send_to_pc(void)
|
|||
|
||||
int main(void)
|
||||
{
|
||||
int debug = 1;
|
||||
|
||||
config_init();
|
||||
uart1_init(500000);
|
||||
adcext_init();
|
||||
dac_init();
|
||||
adc_init();
|
||||
// adc_adc_callback = fast_callback;
|
||||
adc_dma_callback = slow_callback;
|
||||
|
||||
/*
|
||||
{
|
||||
int16_t i = 0;
|
||||
while(1) {
|
||||
i++;
|
||||
dac_write(i);
|
||||
uart1_put_hex16(i);
|
||||
if (debug) {
|
||||
uart1_init(115200);
|
||||
|
||||
uint16_t dac = 32768;
|
||||
while (1) {
|
||||
dac_write(dac);
|
||||
uart1_put_dec(dac);
|
||||
uart1_crlf();
|
||||
switch (uart1_get()) {
|
||||
case '[':
|
||||
dac--;
|
||||
break;
|
||||
case ']':
|
||||
dac++;
|
||||
break;
|
||||
case '-':
|
||||
dac -= 16;
|
||||
break;
|
||||
case '+':
|
||||
case '=':
|
||||
dac += 16;
|
||||
break;
|
||||
case ',':
|
||||
case '<':
|
||||
dac -= 1024;
|
||||
break;
|
||||
case '.':
|
||||
case '>':
|
||||
dac += 1024;
|
||||
break;
|
||||
case '0':
|
||||
dac = 32768;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
while(1) {
|
||||
if (send_data) {
|
||||
send_to_pc();
|
||||
send_data = 0;
|
||||
} else {
|
||||
uart1_init(500000);
|
||||
|
||||
//adc_adc_callback = fast_callback;
|
||||
adc_dma_callback = slow_callback;
|
||||
|
||||
while(1) {
|
||||
if (send_data) {
|
||||
send_to_pc();
|
||||
send_data = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user