/*
 * adc.c - read the adc's and put them in the lcd buffer
 *
 * takes 1.6 msec.
 *
 * $Id: adc.c,v 1.5 2002/07/31 05:52:16 tomdean Exp $
 */

#include <sys/ports_def.h>
#include <os.h>
#include <lcd.h>      /* lcd buffer locations */
#include <libeeprom.h>

unsigned char adc_stack[STACK_SIZE];
/*
 * form an adc reading into a buffer
 *
 * XXXXX inplemented for 0-5v
 */
void adc_str_print(char buf[], short i) {
  char *p = buf;
  unsigned char c;
  unsigned short num = i;

  
  if (num == 0) {
	/* format '0.00' */
	*p++ = '0';
	*p++ = '.';
	*p++ = '0';
	*p++ = '0';
  }
  else {
	/* format 'd.dd' */
	c = num / 51;
	num = 10*(num % 51);
	*p++ = c + '0';
	*p++ = '.';
	c = num / 51;
	num = 10*(num % 51);
	*p++ = c + '0';
	c = num / 51;
	num = 10*(num % 51);
	*p++ = c + '0';
  }
  *p = ' ';
  return;
}

void adc() {
  register unsigned short loop_count = 0;
  
  while (1) {
	hex_to_ascii_4(++loop_count, TASK3_COUNT);
	_io_ports[M6811_ADCTL] = M6811_SCAN | M6811_MULT;
	while (!_io_ports[M6811_ADCTL]&M6811_CCF);
	
	adc_str_print(ADC_1_LOC, _io_ports[M6811_ADR1]);
	adc_str_print(ADC_2_LOC, _io_ports[M6811_ADR2]);
	adc_str_print(ADC_3_LOC, _io_ports[M6811_ADR3]);
	adc_str_print(ADC_4_LOC, _io_ports[M6811_ADR4]);
	
	_io_ports[M6811_ADCTL] = M6811_SCAN | M6811_MULT | M6811_CC;
	while (!_io_ports[M6811_ADCTL]&M6811_CCF);
	
	adc_str_print(ADC_5_LOC, _io_ports[M6811_ADR1]);
	adc_str_print(ADC_6_LOC, _io_ports[M6811_ADR2]);
	adc_str_print(ADC_7_LOC, _io_ports[M6811_ADR3]);
	adc_str_print(ADC_8_LOC, _io_ports[M6811_ADR4]);

	SYS_DONE();
  }
}
