Browse Source

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
tags/zoom-1.0
jim 16 years ago
parent
commit
4fddc90a8c
1 changed files with 80 additions and 26 deletions
  1. +80
    -26
      firmware/zoom.c

+ 80
- 26
firmware/zoom.c View File

@@ -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;

#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 */
/* TODO: Increase step depending on how far from ADC_MIN/ADC_MAX we are */
if (v < ADC_MIN && dac_cmd < (DAC_MAX - DAC_STEP)) {
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;
dac_write(dac_cmd);
} else if (v > ADC_MAX && dac_cmd > (DAC_MIN + 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;
dac_write(dac_cmd);
}
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…
Cancel
Save