www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC CodeVision Temp


Autor: Peter (Gast)
Datum:

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


      };
}

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kennst sich denn keiner mit ADC und Code Vision?

Bitte um Hilfe

Autor: Gerhard. (Gast)
Datum:

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

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.