Forum: Mikrocontroller und Digitale Elektronik ADC CodeVision Temp


von Peter (Gast)


Lesenswert?

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);


      };
}

von Peter (Gast)


Lesenswert?

Kennst sich denn keiner mit ADC und Code Vision?

Bitte um Hilfe

von Gerhard. (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.