Forum: Mikrocontroller und Digitale Elektronik Analoge Ports auslesen


von Norbert (Gast)


Lesenswert?

Hallo,
ich hoffe es kann mir jemand helfen. Ich suche ein Programmbeispiel in 
Assembler mit dem ich mehrere Analoge Ports hintereinander auslesen 
kann.
Bin schon Stunden dran und kommen auf keinen grünen Zweig.
Danke

von Karl H. (kbuchegg)


Lesenswert?

Norbert schrieb:
> Hallo,
> ich hoffe es kann mir jemand helfen. Ich suche ein Programmbeispiel in
> Assembler mit dem ich mehrere Analoge Ports hintereinander auslesen
> kann.

Was ist ein 'analoger Port'.
Auf welchem Prozessor?

von Oliver (Gast)


Lesenswert?

rprta 1,x
rprta 2,y
rprta 3,z

usw.

Falls das dein Mikrocontroller nicht versteht, müsstest du uns halt 
verraten, welche du nutzt, und was ein "analoger Port" überhaupt sein 
soll.

Oliver

von Norbert (Gast)


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

von Karl H. (kbuchegg)


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

von Norbert (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


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.

von Norbert (Gast)


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!!

von ... .. (docean) Benutzerseite


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.

von ::: (Gast)


Lesenswert?

Das Warten in Schleifen ist auch einem Mega8 schlechter Stil. In einem 
Demoprogramm macht man das natuerlich.

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.