Forum: Compiler & IDEs AVR-Atmel Tiny13- ADC Problem


von gone g. (xcc)


Lesenswert?

moin,

ich hab hier einen ATMEL Tiny13, an welchen zwei LEDs angeschlossen 
sind. LED #1 an PB0, LED #2 an PB3. PB4 ist als Eingang geschaltet. Wenn 
die Spannung an PB4 ansteigt(von 0V auf etwa 50mV) soll eine der beiden 
LEDs ausgehen.
Nun Habe ich folgendes kleines Testprogramm geschrieben:
1
#include <avr/io.h> 
2
#include <stdint.h> 
3
#include <util/delay.h>
4
5
void init(void);
6
void alarm(void);
7
8
9
int main(void) 
10
{ 
11
   DDRB=0xff; 
12
   DDRB&=~(1<<4);
13
   init();  
14
   while(1)
15
   {
16
17
   if(ADCH<250)
18
     PORTB&=~(1<<0);
19
   else
20
   PORTB|=(1<<0);
21
   }   
22
23
   return 0; 
24
} 
25
26
void init(void)
27
{
28
    ADCSRA&=~(1<<ADPS2);
29
  ADCSRA&=~(1<<ADPS1);
30
  ADCSRA&=~(1<<ADPS0);
31
  ADMUX&=~(1<<REFS0);
32
  ADCSRB&=~(1<<ADTS2);
33
    ADCSRB&=~(1<<ADTS1);
34
    ADCSRB&=~(1<<ADTS0);
35
  ADMUX|=(1<<0);
36
  ADMUX&=~(1<<1);
37
    ADMUX|=(1<<ADATE);
38
  ADMUX|=(1<<ADLAR);
39
  ADCSRA|=(1<<ADEN);
40
  ADCSRA|=(1<<ADSC);
41
}

Problem: LED #1 leuchtet und geht auch wie beabsichtigt aus wenn der 
Stromkreis geschlossen wird, jedoch erst wenn die vollen 2,4V 
anliegen(also alles was die Batterie hergibt). Wie kriege ich das 
Programm dazu bereits bei einer Spannung von etwa 50mV zu reagieren? Hab 
übrigens in der "if(ADCH<250)"-Abfrage alle möglichen Werte von 1-250 
durchprobiert - keine Veränderung :(


Danke

Dominik

von Stefan E. (sternst)


Lesenswert?

Du hast im MUX PB2 ausgewählt, und nicht PB4.

von Stefan E. (sternst)


Lesenswert?

Und das Bit ADATE liegt nicht in ADMUX.

von gone g. (xcc)


Lesenswert?

so, hab nun   ADMUX&=~(1<<0); in ADMUX|=(1<<0); und ADMUX|=(1<<0) in 
ADMUX&=~(1<<1); geändert.

Die Schaltung verhält sich jetzt genau wie vorher, mit dem Unterschied, 
dass wenn ich den ADHC register auf werte unter 200 prüfe die LED 
immer an ist, und wenn ich ADHC auf Werte über 200 prüfe die LED 
immer aus ist.

von Jörg X. (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab das mal etwas leserlicher umgeschrieben.
Aber:
 - mit welcher Spannung läuft der Attiny (bzw. wie hoch ist die 
Referenzspannung für den ADC)?
 - mit welchem Takt läuft der Attiny (der ADC-takt muss auf 50-200kHz 
eingestellt werden -- auch mehr, falls du nur die 8-Bit brauchst)
 - bist du sicher, dass die LEDs mit den 2,4V überhaupt leuchten? ;)
 - wenn du bei 50mV (0,05V) schalten willst, wäre das aber bei ADCH = 
0,05/5 * 256 == 2 (wenn der tiny mit 5V läuft)

hth. Jörg

von gone g. (xcc)


Lesenswert?

Stefan Ernst wrote:
> Und das Bit ADATE liegt nicht in ADMUX.

DAS war`s! War tatsächlich nur ein Tippfehler!

Sorry, und vielen Dank an alle

Dominik

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.