Atmega 8 ADC

OP #2539112
Hallo Forenteam,

ich versuche mich am ADC eines Atmega 8. Ich möchte beim erreichen eines 
digatelen Spannungswertes den Ausgang PORTB 0 auf 1 setzen.

Ich hab versucht mein Prog möglichst nah am Tutorial zu halten, da ich 
noch ein blutiger Anfänger bin. Ich habe versucht es auf den Atmega 8 
anzupassen.

vielleicht könnt ihr mir sagen wo ich müll geschrieben hab.
Angehängte Dateien:
Gast
Jetzt noch bitte in ein Excel-Dokument einfügen, einen Screenshot 
machen, und den in ein Word-Dokument einfügen, und dieses hochladen.
Pro Tip: Das ganze in ein Zip-File.
Gast
Du bist Dipl. Ing.?

Da ich die ganzen Einstellungen nicht im Kopf habe und es spät ist, kann 
ich deinen Fehler so auf die Schnelle nicht finden, aber könntest du das 
nicht eventuell mit dem Analog Komparator lösen? Der ist einfacher zu 
bedienen und schneller.
Ron S. schrieb:
> Hallo Forenteam,
>
> ich versuche mich am ADC eines Atmega 8. Ich möchte beim erreichen eines
> digatelen Spannungswertes den Ausgang PORTB 0 auf 1 setzen.
>
> Ich hab versucht mein Prog möglichst nah am Tutorial zu halten, da ich
> noch ein blutiger Anfänger bin.

Dann frag ich mich, wozu die die überhaupt abgeändert hast? Bis auf die 
Einstellung der Referenzspannung brauchst du erst mal nichts verändern. 
Dann würdest du auch nicht die dummen Fehler machen, die du gemacht 
hast.


PS: 0250
Ich denke nicht, dass du weißt, was du da geschrieben hast. Tip: Das ist 
keine Dezimalzahl. Eine Zahl, die mit 0 beginnt ist in C eine Oktalzahl.
OP
Da manche mit einem Bild nicht klar kommen versuch ich es noch einmal 
so.
Die obere Liste mit Namen usw. lädt Das Prog "Sissy" selber rein. Ich 
bin kein Dipl. ing
#define F_CPU 3686400
#include <avr\io.h>
#include <inttypes.h>
#include <stdint.h>

void ADC_Init(void) {

  uint16_t result;

    ADMUX &= ~( (1<<REFS1) | (1<<REFS0) );  // Referenzsp. auf 5V
    ADCSRA = (1<<ADPS2) | (1<<ADPS0);      // Teiler auf 32
    ADCSRA = (1<<ADEN);              // ADC aktivieren
    ADCSRA = (1<<ADSC);              // eine Wandlung
  while (ADCSRA & (1<<ADSC) ) {
  }
    result = ADCW;
}

uint16_t ADC_Read( uint8_t Channel ){

       ADMUX = (ADMUX & ~(0x1F)) | (Channel & 0x0F);
       ADCSRA |= (1<<ADSC) ;
  while (ADCSRA & (1<<ADSC) ) {
 }
  return  ADCW;

}

int main (void)
{
   uint16_t adcval;
   ADC_Init();
   DDRB = 1;


   while (true) // Mainloop
 {

  adcval = ADC_Read(0);
  if (adcval > 0250) {
      PORTB =0x01;
      }

 }
return 0;
}
Ron S. schrieb:
> Da manche mit einem Bild nicht klar kommen versuch ich es noch einmal
> so.

Es geht nicht um klarkommen. Es geht darum, dass, wenn du Text postest 
(egal ob als eigenes File oder direkt im Beitrag), die Helfer mittels 
Cut&Paste Textstellen ausschneiden und für ihre Antwort benutzen können.
Du bist der der Hilfe braucht, also mach du es uns einfach dir zu 
helfen. Wenn ich dein Programm erst abtippen muss um daraus meine 
Antwort zu basteln, lass ich es lieber.

> Ich bin kein Dipl. ing
Auch als Nicht-Dipl.-Ing hat man kein Nachdenkverbot.

>     ADMUX &= ~( (1<<REFS1) | (1<<REFS0) );  // Referenzsp. auf 5V
>     ADCSRA = (1<<ADPS2) | (1<<ADPS0);      // Teiler auf 32
>     ADCSRA = (1<<ADEN);              // ADC aktivieren
>     ADCSRA = (1<<ADSC);              // eine Wandlung

Ganz schnell: Welchen Wert hat

   i = 5;
   i = 8;

nach all den Zuweisungen?
Und jetzt überleg mal, was diese Erkentniss für Auswirkungen auf ADCSRA 
in deinem Codestück hat.
OP
Dann kann man das so auch so wie du einfach sagen und sich nicht lustig 
machen. Aber egal
Ich bin das stück für stück durch gegangen und hab es versucht zu 
verstehen.
Aber das mit der Null vor der 250 ist ja schon ein Anfang. Ich hab rum 
probiert auf was ich vergleichen kann.
Also sollte ich die Bits in ADCSRA besser in einer Zeile setzen?
Ron S. schrieb:
> Dann kann man das so auch so wie du einfach sagen und sich nicht lustig
> machen. Aber egal

Aber so merkst du dirs. Beim nächsten Mal machst du es besser und alle 
sind zufrieden. (und sei mal ehrlich: auf so eine Idee, Programtext als 
Bild einzustellen, muss man erst mal kommen)

> Also sollte ich die Bits in ADCSRA besser in einer Zeile setzen?

Wäre eine Möglichkeit. Du kannst aber auch sukzessive eine 
Bitkombination nach der anderen in ADCSRA setzen.

Hier
1
uint16_t ADC_Read( uint8_t Channel ){
2

3
       ADMUX = (ADMUX & ~(0x1F)) | (Channel & 0x0F);
4
       ADCSRA |= (1<<ADSC) ;

hats du das ja auch hingekriegt, das einzelne Bit namens ADSC im 
Register ADCSRA zu setzen.
Karl Heinz Buchegger schrieb:
> und sei mal ehrlich: auf so eine Idee, Programtext als
> Bild einzustellen, muss man erst mal kommen

So spontan fiele mir hierzu der Begriff "Screenshot" ein ;)

Karl Heinz Buchegger schrieb:
> Wie hast du auf einem Board den ARef Pin verschaltet?

Die gesamte Schaltung wäre sicherlich interessant aber ich denke doch 
erst wenn das Programm in Ordnung ist ;) :D
OP
>Und jetzt überleg mal, was diese Erkentniss für Auswirkungen auf ADCSRA
>in deinem Codestück hat.

Alles Klar. Das war das ganze Prob. Zumindest funzt es jetzt wie ich es 
haben will.

PS: Zum Glück gibt es hier auch Leute die helfen und nicht nur dumme 
Antworten schreiben.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.