ADC-Wert bei LDR-Messung immer gleich

Gast #3490379
Lesenswert?

Hi Leute !!!

Ich möchte mit einem ATTiny45 die Umgebungshelligkeit messen und in 
Abhängigkeit davon weitere Schaltvorgänge ausführen lassen. Dazu habe 
ich mir zunächst einen entsprechenden Spannungsteiler aus LDR + Poti 
aufgebaut, der mit Pin 7 (ADC1, PB2) des µC verbunden ist.
1
Vcc ----------+
2
+3V           |
3
            -----
4
            | L |
5
            | D |
6
            | R |
7
            -----
8
              |
9
              +------- ADC1 (PB2)
10
              |
11
            -----
12
            | P |
13
            | o |
14
            | t |
15
            | i |
16
            -----
17
              |
18
GND ----------+

Das Ganze ist so kalibriert, daß an PB2 folgende Spannungen meßbar sind 
(mit Multimeter überprüft):
1
> minimale Helligkeit:            0,3 V
2
> mittlere (normale) Helligkeit:  0,9 V
3
> maximale Helligkeit:            1,9 V

Mit nachfolgendem Programm (Auszug) lese ich den ADC-Wert aus.

------------------------------------------------------------------
1
$regfile = "attiny45.dat"
2
$crystal = 4000000
3
$hwstack = 32
4
$swstack = 5
5
$framesize = 20
6

7
Dim Messungen As Byte
8
Dim Uldr As Long
9
Dim Uldr_temp As Word
10

11
Config Portb.2 = Input
12
Portb.2 = 1
13

14
Config Adc = Single , Prescaler = Auto , Reference = Internal_1.1
15

16
For Messungen = 1 To 255
17
  Uldr_temp = Getadc(2)
18
  Uldr = Uldr + Uldr_temp
19
  Waitms 10
20
Next Messungen
21

22
Uldr = Uldr / 255
------------------------------------------------------------------

Leider ergibt sich für ULDR immer nur einer der 3 Werte 512, 513 bzw. 
514, egal welche Umgebungshelligkeit vorherrscht. Ich hatte hier 
natürlich entsprechend der nachgemessenen Spannungsunterschiede auch 
deutlich unterschiedliche ADC-Werte erwartet. Wo ist hier der Fehler zu 
suchen?


Grüße,
The SphereX
Gast #3490388
Lesenswert?

Hi

>Dazu habe
>ich mir zunächst einen entsprechenden Spannungsteiler aus LDR + Poti
>aufgebaut, der mit Pin 7 (ADC1, PB2) des µC verbunden ist.


>Config Portb.2 = Input
>Portb.2 = 1

Ein Pull-Up am ADC-Eingang ist recht kontraproduktiv.

>  Uldr_temp = Getadc(2)

Du willst an ADC1 messen, nicht an ADC2.

MfG Spess
#3490389
Lesenswert?

The SphereX schrieb:
1
>               +------- ADC1 (PB2)
1
>   Uldr_temp = Getadc(2)

Sicher?
Beim Argument zu Getadc würde ich die Nummer des ADC Eingangs erwarten. 
Beim ADC mit der Nummer 1 also eine 1. Ich würde aber nicht erwarten, 
dass hier die Pinnummer anzugeben ist. Denn einen ADC Eingang 1 haben 
alle AVR (sofern sie einen ADC haben). Der muss aber nicht 
notwendigerweise am Pin 2 liegen, der könnte auch am Pin PB5 oder PD3 
oder weiß Gott wo liegen. Aber immer ist es der ADC Eingang mit der 
NUmmer 1. Deswegen will ich aber mein programm nicht dauernd anpassen 
müssen, nur weil Atmel enschieden hat, dass der ADC1 bei einem 
bestimmten µC am Pin PE7 liegt.
Gast #3490423
Lesenswert?

Alle klar, oh Mann wie peinlich. Getadc(1) war schon mal nicht schlecht 
;). Und mit AVCC als Referenz funktioniert's dann auch. Danke für den 
Denkanstoß.

Die 1,1 V Referenz hatte ich ursprünglich gewählt, da AVCC, also die 3 V 
Batteriespannung (CR2032), mit der die Schaltung betrieben werden soll, 
im Laufe der zeit ja sinkt, und ich somit auch andere ADC-Werte erhalte. 
Von der internen Referenz dachte ich zumindest, daß sie relativ konstant 
bleibt?

Grüße,
The SphereX

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