Ejemplo n.º 1
0
uint16_t hardware_analogRead(uint8_t ch)
{
    uint32_t buf = 0;

    // Initialize the ADC driver before first use
    ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32);

    // Must setup the ADC channel to read beforehand
    if(ch < 15) 
        ADC_SetupChannel(ch);
    
    if(ch > 7) 
        ch = (1 << 8 | ((ch - 8) << MUX0));
    else 
        ch = ch << MUX0;

    // Perform a single conversion of the ADC channel 1
//  buf = ADC_GetChannelReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | ch);

    // Start reading ADC channel 1 in free running (continuous conversion) mode
    ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | ch);
    
    for(uint8_t i = 0; i < ADC_READINGS; i++)
    {
        while (!(ADC_IsReadingComplete()));
        
        buf += ADC_GetResult();
    }

    // Leave ADC Disabled to save power
    ADC_Disable();

    return (uint16_t)(buf / ADC_READINGS);
}
Ejemplo n.º 2
0
void ButtonStates(void) {

  uint16_t port, result;
  char buffer[64];

  PORTD = 0b11111111;
  /*for (int i=0; i<4; i++) {
    if (i > 1) {
      PORTC = (i%1 == 0) ? 0b01000000 : 0b10000000;
    } else {
      PORTB = (i%1 == 0) ? 0b01000000 : 0b10000000;
    }
*/
    // TODO: dry this up
    ADC_StartReading(ADC_REFERENCE_AVCC | ADC_LEFT_ADJUSTED | ADC_CHANNEL0);
    while(!(ADC_IsReadingComplete())) {}
    sprintf(buffer, "4,%d\n", ADC_GetResult());
    fputs(buffer, &USBSerialStream);

    ADC_StartReading(ADC_REFERENCE_AVCC | ADC_LEFT_ADJUSTED | ADC_CHANNEL1);
    while(!(ADC_IsReadingComplete())) {}
    sprintf(buffer, "0,%d\n", ADC_GetResult());
    fputs(buffer, &USBSerialStream);

    ADC_StartReading(ADC_REFERENCE_AVCC | ADC_LEFT_ADJUSTED | ADC_CHANNEL4);
    while(!(ADC_IsReadingComplete())) {}
    sprintf(buffer, "1,%d\n", ADC_GetResult());
    fputs(buffer, &USBSerialStream);

    ADC_StartReading(ADC_REFERENCE_AVCC | ADC_LEFT_ADJUSTED | ADC_CHANNEL5);
    while(!(ADC_IsReadingComplete())) {}
    sprintf(buffer, "2,%d\n", ADC_GetResult());
    fputs(buffer, &USBSerialStream);

    ADC_StartReading(ADC_REFERENCE_AVCC | ADC_LEFT_ADJUSTED | ADC_CHANNEL6);
    while(!(ADC_IsReadingComplete())) {}
    sprintf(buffer, "3,%d\n", ADC_GetResult());
    fputs(buffer, &USBSerialStream);

    ADC_StartReading(ADC_REFERENCE_AVCC | ADC_LEFT_ADJUSTED | ADC_CHANNEL12);
    while(!(ADC_IsReadingComplete())) {}
    sprintf(buffer, "7,%d\n", ADC_GetResult());
    fputs(buffer, &USBSerialStream);

    ADC_StartReading(ADC_REFERENCE_AVCC | ADC_LEFT_ADJUSTED | ADC_CHANNEL13);
    while(!(ADC_IsReadingComplete())) {}
    sprintf(buffer, "6,%d\n", ADC_GetResult());
    fputs(buffer, &USBSerialStream);

    ADC_StartReading(ADC_REFERENCE_AVCC | ADC_LEFT_ADJUSTED | ADC_CHANNEL7);
    while(!(ADC_IsReadingComplete())) {}
    sprintf(buffer, "5,%d\n", ADC_GetResult());
    fputs(buffer, &USBSerialStream);

/*
    ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | ADC_CHANNEL5);
    while(!(ADC_IsReadingComplete())) {}
    sprintf(buffer, "  %d", ADC_GetResult());
    fputs(buffer, &USBSerialStream);

    ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | ADC_CHANNEL6);
    while(!(ADC_IsReadingComplete())) {}
    sprintf(buffer, "  %d", ADC_GetResult());
    fputs(buffer, &USBSerialStream);

    ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | ADC_CHANNEL7);
    while(!(ADC_IsReadingComplete())) {}
    sprintf(buffer, "  %d", ADC_GetResult());
    fputs(buffer, &USBSerialStream);


    PORTB = 0;
    PORTC = 0;
  //}
  */
}