Attiny841 ADC

OP #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
}
Gast #3974083
Lesenswert?
• ▲
▼
Stefan S. schrieb:

> 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.

Wie äußert sich das?
#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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.