PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Getadc() liesst die Channels 8-15 falsch aus!!



amozi
10.01.2008, 18:07
Hallo,

ich habe ein Problem beim Auslesen der Kanäle 8-15 mit der Bascom-Funktion Getadc(). Die unteren Channels 0-7(Port F beim Atmega1280) funktioniert einwandfrei. Aber sobald ich Port K (also Channel 8-15) auslese, wird die Referenzspannung 5V ausgegeben obwohl 1,2V an dem entsprechenden Port anliegt (natürlich der Counter ausgegeben).

Hier ist mein Code, zusammengefaßt:

$regfile = "m1280def.dat"

Config Portf = &B00000000
Config Portk = &B00000000

Dim Result As Word
Dim Channel As Word

Config Adc = Single , Prescaler = Auto , Reference = Avcc 'Avcc=5V
Start Adc

'Channel 0-7 auslesen funktioniert
Result = Getadc(0) '0-7

'Channel 8-15 wird falsch ausgelesen 1023(5V) anstatt 245(1.2V)
'im ADMUX-Registor muss ADLAR gesetzt sein, deswegen entspricht
'32=Channel[8] 33=Channel[9] .... 39=Channel[15]
Channel = 32
Result = Getadc(channel)
'Bits um 6 verschieben, da bei Channel 8-15 die beiden ADC-Dataregister linksorientiert sind
Shift Result , Right , 6


Vielen Dank für die Unterstützung

linux_80
10.01.2008, 20:08
Guckst Du hier:
https://www.roboternetz.de/phpBB2/viewtopic.php?p=295075#295075

amozi
10.01.2008, 22:10
linux_80 VIELEN DANK für die wichtige Information. Ich werde das gleich morgen auf der Arbeit ausprobieren, weil ich die Version 1.11.8.8.

Eine Frage: Momentan gibt es schon das Update für die Version 1.11.9.0 (habe eben auf mcselec.com gesehen). Ist dieser Bug bzw. auch andere Bugs in der Version behoben, wenn ja, wie wird dort getadc() eingesetzt?

So: getadc(32) für ADC8 'In der Sim. wird das Bit ADLAR mit 32 gesetzt
getadc(39) für ADC15

Oder so: ADMUX.MUX5=1
getadc(0) für ADC8
getadc(7) für ADC15

Abschließende Frage welche Version würdest du empfehlen?

Danke

linux_80
10.01.2008, 23:54
Das Bit Mux5 ist aber nicht im gleichen Register wie der Rest, sonst wär's ja einfach. Mux5 liegt in ADCSRB !

Bascom schreibt einfach den Wert den man bei getadc mitgibt ins ADMUX, so könnte man auch immer die Referenz einstelllen, falls es eine andere gibt, die man per Bascom-Config nicht angeben kann.
Wie das gelöst ist mit ADC8-15 müsste man sich mal in der neuen Lib anschauen. Wenn nur auf >7 abgefragt wird, gibt das auch ein Problem, was dann aber nur beim M1280 bzw. M2560 zZt. der Fall ist wie es scheint.

Da fällt mir grad ein: Bei Getadc() kann man ja den Kanal und den Offset getrennt übergeben, dann passt das wieder. Wenn ein Kanal >7 gewünscht ist, wird MUX5 gesetzt, dann 8 abgezogen und dieser Wert dann nach ADMUX geschrieben, mit einem Wert Offset verknüpft falls vorhanden.

Der Tiny26 hat auch mehr als 8 Eingänge, hier wurde aber normal gezählt, dH. wenn man eine 10 nach ADMUX schreibt, ist es auch Kanal 10.

Ich hab noch die Version .8.8 laufen, da ich selber noch keinen AVR verwende mit mehr als 8 ADC-Eingängen.