- cleaned up

- add MCP47x6 code

git-svn-id: http://moon:8086/svn/projects/HendiControl@14 fda53097-d464-4ada-af97-ba876c37ca34
This commit is contained in:
2019-02-18 20:43:41 +00:00
parent cef75ff414
commit 36c8bf481a
+39 -16
View File
@@ -288,17 +288,6 @@ int adc_is_fininshed()
return (int)(0 == (ADCSRA & (1 << ADSC)));
}
int16_t adc_read()
{
return adc_value;
while(!adc_is_fininshed());
uint16_t value_low = (uint16_t)ADCL;
uint16_t value_high = (uint16_t)ADCH;
ADCSRA |= (1<<ADIF);
return value_high << 8 | value_low;
}
void uart_putc(char c)
{
while((UCSR0A & (1<<UDRE0)) == 0)
@@ -338,6 +327,33 @@ void port_init()
}
FILE uart_file = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);
enum MCP47x6_flags
{
C0 = 0x20,
C1 = 0x40,
C2 = 0x80,
PDN0 = 0x10,
PDN1 = 0x20,
mask = 0xF0
};
size_t MCP47x6_write_volatile_dac(uint16_t dac_value, uint8_t *buffer, size_t size)
{
*(buffer++) = ~mask & (uint8_t)(dac_value >> 8);
*(buffer++) = (uint8_t)(dac_value >> 0);
return 2;
}
size_t MCP47x6_write_volatile_mem(uint16_t dac_value, uint8_t *buffer, size_t size)
{
*(buffer++) = mask & 0x40;
dac_value <<= 4;
*(buffer++) = (uint8_t)(dac_value >> 8);
*(buffer++) = (uint8_t)(dac_value >> 0);
return 3;
}
int main(void)
{
@@ -352,8 +368,9 @@ int main(void)
stdout = &uart_file;
printf("UART test version 1.0\n\n");
uint8_t write_dac_full[] = {0x40, 0x00, 0x00}; // 6.1 Write Volatile DAC Register (C2:C0 = 00x)
i2c_send(0x60, I2C_WRITE, write_dac_full, sizeof(write_dac_full));
uint8_t dac_cmd[] = {0x00, 0x00, 0x00}; // 6.1 Write Volatile DAC Register (C2:C0 = 00x)
size_t res = MCP47x6_write_volatile_mem(0x0000, dac_cmd, sizeof(dac_cmd));
i2c_send(0x60, I2C_WRITE, dac_cmd, res);
sei();
adc_start_conversion(adc_ch);
@@ -369,9 +386,12 @@ int main(void)
switch(msg.code)
{
case Command:
printf("Command : %c\n", msg.data);
uint8_t write_dac[] = {0x00+(msg.data-'0'), 0x00}; // 6.2 Write Volatile Memory (C2:C0 = 010)
i2c_send(0x60, I2C_WRITE, write_dac, sizeof(write_dac));
{
printf("Command : %c\n", msg.data);
uint8_t dac_cmd[] = {0x00, 0x00}; // 6.2 Write Volatile Memory (C2:C0 = 010)
size_t res = MCP47x6_write_volatile_dac((uint16_t)(msg.data-'0')<<8, dac_cmd, sizeof(dac_cmd));
i2c_send(0x60, I2C_WRITE, dac_cmd, res);
}
break;
case AdcComplete:
@@ -380,6 +400,9 @@ int main(void)
if (ch == 6)
{
printf("ADC=%d\n", adc_value[ch]);
uint8_t dac_cmd[] = {0x00, 0x00}; // 6.2 Write Volatile Memory (C2:C0 = 010)
size_t res = MCP47x6_write_volatile_dac(adc_value[ch]<<2, dac_cmd, sizeof(dac_cmd));
i2c_send(0x60, I2C_WRITE, dac_cmd, res);
}
}
break;