-
        

Ergebnis 1 bis 4 von 4

Thema: Getadc() liesst die Channels 8-15 falsch aus!!

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    27.12.2006
    Beiträge
    32

    Getadc() liesst die Channels 8-15 falsch aus!!

    Anzeige

    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:
    Code:
    $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
    Angehängte Dateien Angehängte Dateien
    • Dateityp: bas adc.bas (653 Bytes, 2x aufgerufen)

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    27.12.2006
    Beiträge
    32
    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

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    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.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •