mikrocontroller.net

Forum: Compiler & IDEs Atmega 16, ADC Wandlung, Hilfe!


Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

Ich habe mit meinem STK 500 einen Single Conversion ADC programmiert.
Das Programm soll, sobald ich eine Taste (ich verwende die switches am 
stk) drücke eine Spannung welche ich am PIN PA0 anlege messen.
Ich simuliere am PIN PA0 5V indem ich PortB PB0 auf Low setze (5V) und 
ihn mit PA0 verbinde....
Egal was ich am Pin PA0 anlege, der ADC gibt immer HIGH aus (leds 
leuchten).....

Hier das Programm:

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

//***************************
//ADC Single conversion Mode
//***************************

void main ()
{
  int i=0;
  DDRD=0xFF;      // Data direction Bits auf Ausgänge
  PORTD = 0xFF;
  DDRC=0x00;

  DDRB=0xFF;
  PORTB=0b00000001;
  PORTC=0xFF;

  unsigned char wert;  //Variable für ADC Wert

  ADMUX = (0<<MUX4) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) |(0<<MUX0); 
//interne Referenzspannung verwenden
  ADMUX = (1<<REFS0) | (ADLAR<<0);
  ADCSRA = (0<<ADIF) | (1<<ADEN) | (1<<ADIE); // ADC einschalten 
(generell erlauben) und interrupt enable setzen

  while(1)       // Endlosschleife
  {

  if(PINC!=0xFF)    //Solange eine Taste gedrückt ist
    {
    ADCSRA |= (1<<ADSC);   //ADC starten

    while ( (ADCSRA & ( 1<<ADIF))==0);  //Warten bis die Konvertierung 
abgeschlossen ist

    wert=ADCL;
    wert=ADCH;  //Die unteren 4 Bits des Ergebnisses werden verworfen
    PORTD=wert;  //Der Wert des ADC wird am Port D ausgegeben

    for (i=0; i<10; i++)  //Warteschleife
    {
    _delay_ms(100);
        }

    PORTD=0xFF;

     }
  }

}

Was mache ich falsch??
Und noch eine Frage: Muss ich das ADC ergebnis invertieren??
Weil ja beim stk 500 bei 0x00 alle leds leuchten und nicht bei 0xFF...

Ich hoffe ihr könnt mir helfen!

Mit freundlichen Grüßen,
Georg

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist mit Sicherheit nicht richtig

  ADMUX = (1<<REFS0) | (ADLAR<<0);
                       **********


Warum benutzt eigentlich kein Mensch für seine ersten Gehversuche mit 
dem ADC die Routine aus dem Tutorial? Ist die zu einfach zu benutzen?

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.