mikrocontroller.net

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


Autor: gone gone (xcc)
Datum:

Bewertung
0 lesenswert
nicht 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:
#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:

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

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und das Bit ADATE liegt nicht in ADMUX.

Autor: gone gone (xcc)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg X. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: gone gone (xcc)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

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

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.