Forum: Mikrocontroller und Digitale Elektronik ADC-Wert bei LDR-Messung immer gleich


von The SphereX (Gast)


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

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

1,1V Referenz bei 1,9V maximaler Spannung ist suboptimal.

von spess53 (Gast)


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

von Karl H. (kbuchegg)


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.

von The SphereX (Gast)


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

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.