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
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?
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
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
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
Hallo, ok ich nenne die Ports in Zukunft ADC! Soweit so gut, wann weiß ich denn zu welchem Zeitpunkt die Wandlung fertig ist?
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.
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!!
>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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.