Analoge Ports auslesen

Gast #1337170
Lesenswert?

Hallo,
ich arbeite mit einenm Atmega8 und programmiere in Assembler. Es gelingt 
mir einen Analogport ( Port C Wandler0 ) zu lesen, aber ich weiß nicht 
wie ich am elegantesten mehrere Anlaogwerte von Wandler 1,2+3 
hintereinander lesen kann. Ein Beispiel wäre hilfreich.
Danke
#1337179
Lesenswert?

Norbert schrieb:
> Hallo,
> ich arbeite mit einenm Atmega8 und programmiere in Assembler. Es gelingt
> mir einen Analogport ( Port C Wandler0 ) zu lesen,

Nenne das Teil bitte in Zukunft ADC
Konkret möchtest du die ADC0, ADC1, ADC2 auslesen.


> aber ich weiß nicht
> wie ich am elegantesten

Kümmere dich erst mal darum, dass du überhaupt den jeweiligen ADC 
auslesen kannst. Eleganz kommt dann später.

Du musst in ADMUX den jeweils gewünschten Kanal einstellen.
Siehe zb hier
http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC#ADMUX

Danach aktivierst du den ADC so wie du es auch bei deinem ersten 
erfolgreichen Kanal gemacht hast, wartest auf das Ergebnis und holst dir 
aus dem ADCH/ADCL Register den Messwert ab. Alles wie gehabt. Der 
einzige Unterschied zwischen den einzelnen Anschlüssen ist nur die 
Kanalnummer in ADMUX
#1337204
Lesenswert?

Norbert schrieb:
> Hallo,
> ok ich nenne die Ports in Zukunft ADC!
> Soweit so gut, wann weiß ich denn zu welchem Zeitpunkt die Wandlung
> fertig ist?

Studiere das Beispiel auf der verlinkten Tutorialseite.

Auszug:
1
sample_adc:
2
    sbi     ADCSRA, ADSC        ; den ADC starten
3
 
4
wait_adc:
5
    sbic    ADCSRA, ADSC        ; wenn der ADC fertig ist, wird dieses Bit gelöscht
6
    rjmp    wait_adc
7
 
8
; ADC einlesen:
9
 
10
    in      adlow, ADCL         ; immer zuerst LOW Byte lesen
11
    in      adhigh, ADCH        ; danach das mittlerweile gesperrte High Byte

Als Assemblerprogrammierer kommst du nicht umhin, auch mal anderen Code 
ein paar Stunden lang zu studieren. Die Tutorialsbeispiele sind 
hoffentlich soweit gut genug mit Kommentaren versehen, dass man im Code 
nachvollziehen kann was abgeht.
Gast #1337219
Lesenswert?

Hallo,
ich denke nun komme ich klar. Es ist immer hilfreich wenn man ein 
Beispiel hat. Ich wusste z.B. nicht dass das ADCSRA Register auch 
Bitweise gelesen und geschrieben werden kann. Ich komme aus der SPS-Welt 
und da ist einfach alles etwas einfacher zudem bin ich das zyklische 
programmieren gewohnt und komme normaler weise nicht auf die Idee eine 
Schleife zu bilden die erst dann verlassen wird wenn das Ereignis wahr 
oder flasch ist. In der Automatisierungstechnik geht das nicht da die 
dort verwendeten CPUs um mehrere Potenzen langsamer sind.
Nochmals vielen Dank.
Ich finde dieses Portal echt super!!
Persönliche Seite #1337692
Lesenswert?

>In der Automatisierungstechnik geht das nicht da die
>dort verwendeten CPUs um mehrere Potenzen langsamer sind.

Das ist einfach falsch bzw. nicht mehr richtig...

Heutige SPS haben locker die Power eines Mega8. Spätestens eine 
Software-SPS kann wenn gewünscht/möglich auf die Power von n PC-x86 
Kernen zugreifen

Das warten in Schleifen kann dort nicht machen weil dein System dann 
nicht mehr echtzeitfähig ist.
Eine SPS muss in festen Zeitabständen (dem Zyklus), Eingänge lesen und 
Ausgänge schreiben.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren