www.mikrocontroller.net

Forum: GCC AVR-Atmel Tiny13- ADC Problem

Autor: Dominik Hensler (xcc)
Datum: 03.07.2008 15:26

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:
#include <avr/io.h> 
#include <stdint.h> 
#include <util/delay.h>

void init(void);
void alarm(void);


int main(void) 
{ 
   DDRB=0xff; 
   DDRB&=~(1<<4);
   init();  
   while(1)
   {

   if(ADCH<250)
     PORTB&=~(1<<0);
   else
   PORTB|=(1<<0);
   }   

   return 0; 
} 

void init(void)
{
    ADCSRA&=~(1<<ADPS2);
  ADCSRA&=~(1<<ADPS1);
  ADCSRA&=~(1<<ADPS0);
  ADMUX&=~(1<<REFS0);
  ADCSRB&=~(1<<ADTS2);
    ADCSRB&=~(1<<ADTS1);
    ADCSRB&=~(1<<ADTS0);
  ADMUX|=(1<<0);
  ADMUX&=~(1<<1);
    ADMUX|=(1<<ADATE);
  ADMUX|=(1<<ADLAR);
  ADCSRA|=(1<<ADEN);
  ADCSRA|=(1<<ADSC);
}

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
Autor: Stefan Ernst (sternst)
Datum: 03.07.2008 15:52

Du hast im MUX PB2 ausgewählt, und nicht PB4.
Autor: Stefan Ernst (sternst)
Datum: 03.07.2008 15:55

Und das Bit ADATE liegt nicht in ADMUX.
Autor: Dominik Hensler (xcc)
Datum: 03.07.2008 16:27

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.
Autor: Jörg X. (Gast)
Datum: 03.07.2008 16:30
Dateianhang: tn13_adc.c (1,2 KB, 36 Downloads) | formatierter Code

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
Autor: Dominik Hensler (xcc)
Datum: 03.07.2008 16:41

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

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net