ADC CodeVision Temp

Gast #986211
Guten Abend!

Habe folgendes Problem:

Möchte am ADC0 vom Mega8 Controller eine Spannung einlesen vom 
Temperatur fühler und diese erstmal nicht um gewandelt ausgeben Z.B ADC 
= 512  512 sol dann später um gerechnet werden.

wie mache ich das am esten welchen befehl verwende ich dazu adc_read ?

programmiere mit CodeVision    LCD display läuft schon nur mit dem adc 
kenne ich mich nicht aus weil mir das befehl zum lesen fehlt....



#include <mega8.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>
#include <delay.h>
// Declare your global variables here

void main(void)
{

lcd_init(20);

while (1)
      {
      lcd_gotoxy(0,0);
      delay_ms(100);
      lcd_putsf("Test");
      delay_ms(100);


      };
}
Gast
Hallo Peter,

Du hast vergessen den AD Wandler zu initialisieren; -(

Der AD Wandler muss in main() zuerst konfiguriert werden:

Am Besten siehst Du Dir das Example Programm ADC8535.c (EXAMLES)an.

Studier das Programm gleichzeitig mit dem Datenblatt und lese alles 
durch bis Du genau jede Programmzeile die sich mit dem Gebrauch des 
AD-Wandlers befasst, verstehst.

Grundsaetzlich muessen alle Peripherien vor dem Einsatz immer 
konfiguriert werden. Zum BEispiel:

// ADC initialization
// ADC Clock frequency: 57.600 kHz
// ADC Voltage Reference: AREF pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
// Select ADC input 0
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x8E;
SFIOR&=0xEF;

In vielen Programmen wird der AD-Wandler am Besten im Interruptbetrieb 
verwendet um den CPU nicht waeherend der Messung aufzuhalten.(Ist wie Du 
im Beispiel siehst nicht schwierig)

Falls keine Interrupts gewuenscht sind, dann musst Du eine bestimmte 
Zeit die von der Clock abhaengig ist, warten.

Die AD-Konvertierung muss normalerweise immer mit einem Befehl gestartet 
werden. Im einfachsten Fall als Beispiel:

// Starte the first AD-Messung:
ADCSRA|=0x40;

Warten bis die AD Wandlung fertig ist oder pollen
delay_ms(20); (Normalerweise nur ein paar zig us)

Resultat lesen:
Resultat = ADCW;

Das ist im Prinzip was notwendig ist. In der Praxis ist der 
Interruptbetrieb am Besten, da der CPU waeherende der Messung keine Zeit 
vergeuden muss um auf das Resultat zu warten. Der Wandler kann in 
"Single
Conversion Mode" und im "Auto Trigger" Modus betrieben werden.

(Steht alles genau im Datenblatt)

Sonst wuerde ich Dir noch raten die einschlaegigen Tutorials hier im 
Formum durchzugehen.

Viel Erfolg!

MFG,
Gerhard

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.