Attiny841 ADC

#3973946
Lesenswert?

Hallo,

ich teste gerade den ATtiny841 für eine Spannungsmessung. Genutzt wird 
derzeit die interene 1V1 Referenz ohne Bypass Kondensator. Würde gerne 
zur Erhöhung der Genauigkeit diesen Kondensator zu schalten. (PA0 und 
GND mit einem Kerko verbinden).

Nur kann ich den ADC1 nicht auslesen. Hingegen geht es mit dem ADC0 
wunderbar. Woran liegt das und ist es sinnvoll, den Bypass zu nutzen für 
die Messung?
1
/*
2
* tiny841_adc.c
3
*
4
* Created: 19.01.2015 19:18:10
5
*  Author: sschultewolter
6
*/
7

8

9
#include <avr/io.h>
10
#include <util/delay.h>
11
#include "uart/uart.h"
12

13
void adc_init(void)
14
{
15
  // Internval 1.1V reference
16
  ADMUXB = /*(1<<REFS2) | (1<REFS1) |*/ (1<<REFS0);
17
  
18
  ADCSRA = (1<<ADPS1) | (1<<ADPS0);
19
  ADCSRA |= (1<<ADEN);
20
  
21
  ADCSRA |= (11<<ADSC);
22
  while(ADCSRA & (1<<ADSC));
23
  (void) ADCW;
24
}
25

26
uint16_t adc_read(uint8_t channel)
27
{
28
  ADMUXA = (ADMUXA &~(0x1F)) | (channel & 0x1F);
29
  ADCSRA |= (1<<ADSC);
30
  while(ADCSRA & (1<<ADSC));
31
  return ADCW;
32
}
33

34
uint16_t adc_read_avg(uint8_t channel, uint8_t nsamples)
35
{
36
  uint32_t sum = 0;
37
  for(uint8_t i = 0; i < nsamples; i++)
38
  {
39
    sum+=adc_read(channel);
40
  }
41
  return (uint16_t)(sum/nsamples);
42
}
43

44
int main(void)
45
{
46
  uart_init();
47
  adc_init();
48
  
49
  sei();
50
  uart_puts_P("ADC Test Channel ADC1\r\n");
51
  
52
  uint16_t adcval;
53
  uint16_t count;
54
  while(1)
55
  {
56
    adcval = adc_read_avg(1, 10);
57
    uart_puti_format(count);
58
    uart_puts_P(" : ");
59
    uart_puti_format(adcval);
60
    uart_puts_P("\r\n");
61
    _delay_ms(1000);
62
  }
63
}
#3974111
Lesenswert?

Stefan S. schrieb:
> Genutzt wird derzeit die interene 1V1 Referenz ohne Bypass Kondensator.
> Würde gerne zur Erhöhung der Genauigkeit diesen Kondensator zu schalten.

Für die interne Referenz kannst/brauchst Du beim Tiny841 keinen externen 
Kondensator! AREF ist nur für externe Referenzen gedacht.

Wie c-hate schon schrieb: was heißt ADC1 nicht auslesen können?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren