- 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:
@@ -288,17 +288,6 @@ int adc_is_fininshed()
|
|||||||
return (int)(0 == (ADCSRA & (1 << ADSC)));
|
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)
|
void uart_putc(char c)
|
||||||
{
|
{
|
||||||
while((UCSR0A & (1<<UDRE0)) == 0)
|
while((UCSR0A & (1<<UDRE0)) == 0)
|
||||||
@@ -338,6 +327,33 @@ void port_init()
|
|||||||
}
|
}
|
||||||
FILE uart_file = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);
|
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)
|
int main(void)
|
||||||
{
|
{
|
||||||
@@ -352,8 +368,9 @@ int main(void)
|
|||||||
stdout = &uart_file;
|
stdout = &uart_file;
|
||||||
printf("UART test version 1.0\n\n");
|
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’)
|
uint8_t dac_cmd[] = {0x00, 0x00, 0x00}; // 6.1 Write Volatile DAC Register (C2:C0 = ‘00x’)
|
||||||
i2c_send(0x60, I2C_WRITE, write_dac_full, sizeof(write_dac_full));
|
size_t res = MCP47x6_write_volatile_mem(0x0000, dac_cmd, sizeof(dac_cmd));
|
||||||
|
i2c_send(0x60, I2C_WRITE, dac_cmd, res);
|
||||||
|
|
||||||
sei();
|
sei();
|
||||||
adc_start_conversion(adc_ch);
|
adc_start_conversion(adc_ch);
|
||||||
@@ -369,9 +386,12 @@ int main(void)
|
|||||||
switch(msg.code)
|
switch(msg.code)
|
||||||
{
|
{
|
||||||
case Command:
|
case Command:
|
||||||
|
{
|
||||||
printf("Command : %c\n", msg.data);
|
printf("Command : %c\n", msg.data);
|
||||||
uint8_t write_dac[] = {0x00+(msg.data-'0'), 0x00}; // 6.2 Write Volatile Memory (C2:C0 = ‘010’)
|
uint8_t dac_cmd[] = {0x00, 0x00}; // 6.2 Write Volatile Memory (C2:C0 = ‘010’)
|
||||||
i2c_send(0x60, I2C_WRITE, write_dac, sizeof(write_dac));
|
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;
|
break;
|
||||||
|
|
||||||
case AdcComplete:
|
case AdcComplete:
|
||||||
@@ -380,6 +400,9 @@ int main(void)
|
|||||||
if (ch == 6)
|
if (ch == 6)
|
||||||
{
|
{
|
||||||
printf("ADC=%d\n", adc_value[ch]);
|
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;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user