Forum: Mikrocontroller und Digitale Elektronik tiny45 ADC3 immer Null


von halbelf (Gast)


Lesenswert?

ATtiny45
8 MHz int. osc.
Vcc = 2,8 V

Uref = Vcc
U_ADC3 = 2,2 V

Ich komm nicht drauf - was läuft hier falsch?
1
void temp_init(void)
2
{
3
  DIDR0 = (1<<ADC3D);          // disable digital
4
  ADCSRA = (1<<ADEN) 
5
      | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
6
  ADMUX = 3;            // select pin, Vcc as reference
7
  ADCSRA |= (ADSC);          // start conversion
8
  while (ADCSRA & (1<<ADSC) );    // wait until completed
9
  int16_t discard = ADC;        // 10 bit value
10
}
11
12
int16_t temp_get(void) 
13
{
14
  ADCSRA |= (ADSC);          // start conversion
15
  while (ADCSRA & (1<<ADSC) );    // wait until completed
16
  return (ADC);            // 10 bit value
17
}
18
19
.......
20
21
while(1)
22
23
  {
24
25
    _delay_ms( 500 );
26
27
    
28
29
    tmp = temp_get();
30
31
    itoa(tmp, buffer, 10);
32
33
    LCD_WriteString(8, 3, buffer);
34
...............

tmp auf einen Wert gesetzt bewirkt erwartungsgemäße Ausgabe.

von halbelf (Gast)


Lesenswert?

int16_t tmp;

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

halbelf schrieb:
>  ADCSRA |= (ADSC);          // start conversion

von halbelf (Gast)


Lesenswert?

Man beachte das Fehlen der Schiebeaktion:
  ADCSRA |= (ADSC);          // start conversion

von halbelf (Gast)


Lesenswert?

ah ja, danke! :-)

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Sowohl in temp_init() als auch in temp_get().

BTW. Warum rufst du in temp_init() nicht einfach temp_get() auf?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.