-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: ADC Wert falsch??? HILFEEE!

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    29.03.2007
    Beiträge
    64

    ADC Wert falsch??? HILFEEE!

    Anzeige

    Hallo,

    habe folgendes Programm getippt (Tiny45,Auszug):

    Code:
    $regfile = "ATtiny45.dat"                                   'Tiny45 Regfile
    
    $crystal = 8000000                                          '8MHz
    
    On Adc Onadc                                                'Interrupt für Adc Wert
    
    Admux = &B00100010
    '         ^^-----------------Voltage Reference:00=Vcc
    '           ^----------------Left Adjust
    '            ^---------------Not Used
    '             ^^^^-----------Analog Channel:0010=ADC2 PB4
    
    Adcsra = &B11111101
    '          ^-----------------Adc Enable
    '           ^----------------Adc Start Conversion
    '            ^---------------Adc Auto Trigger Enable
    '             ^--------------Adc Interrupt Flag
    '              ^-------------Adc Interrupt Enable
    '               ^^^----------Adc Prescaler Select Bits;Prescaler128
    
    Enable Interrupts                                           'Interrupts globaleinschalten 
    
    Dim Analog As Word  
    Dim Akku_low As Bit    
    
    do
    loop
    
    Onadc:                                                      ' Interrupt ADC
    Analog = Adch                                               'ADC Wert an Variable übergeben
     If Analog =< 485 Then                                      
       Akku_low = 1                                             'Akku_low Bit bilden
     End If
     If Analog >= 533 Then
       Akku_low = 0
     End If
    Return
    Der ADC ist 10 Bit breit also 1024 Dig.
    Also müsste bei der 5V Referenz das Akku_Low Bit bei <=2,368V gesetzt und bei 2,604V zurückgesetzt werden.
    Tut es leider nicht, das Bit ist die ganze Zeit gesetzt. Ich muss die beiden Werte (485 sowie 533) schon auf ca. 100 runttersetzen mit sich etwas im 2V Bereich am ADC tut.

    Langsam verzweifel ich. Das Datenblatt habe ich schon zig mal gelesen.
    Vielleicht findet ja hier jemand den Fehler.

    Danke
    Daniel

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Ja,ich bin mal so gemein und frage dich was das Kürzel "ADCH" bedeutet (Ich weiß es) und ob da nicht doch noch etwas fehlt ?
    Gruß
    Ratber

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    29.03.2007
    Beiträge
    64
    Bist du gemein

    Aber so lernt man ja am besten.

    Code:
    Onadc:                                                      ' Interrupt ADC
    Analog = Adch                                               'ADC Wert an Variable
    "ADCH" finde ich in der Bascom Hilfe nicht. Nach suchen im Netz habe ich herausgefunden das es das ADC Hibyte ist, also 8Bit breit.
    Doch was ist ein Hi- bzw. Lowbyte?
    Wenn ich jetzt mit einer Auflösung von 8Bit=256 messe, dann komme ich bei Spannungen um 2,3V auf 121Dig, was ja hinhauen würde.
    Doch wie bekomme ich so eine 10Bit auflösung hin?
    Vielleicht so:
    Code:
    Onadc:                                                      ' Interrupt ADC
    Analog = Adch + Adcl
    ???
    Der Compiler schimpft schon mal nicht...
    Hab die Schaltung gerade nicht hier, so dass ich es ausprobieren kann.

    Gruß
    Daniel

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    12.05.2007
    Beiträge
    31
    wert=adch*256+adcl

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    @Meldano

    Bist du gemein
    Yep !


    Aber so lernt man ja am besten.
    Genau darum geht es.

    Mich graust es immer wenn ich mitbekomme das die Leute zwar alles Mögliche basteln wollen aber sogut wie nichts an Grundlagen besitzen.
    Selbst das Lesen und verstehen eines Datenblattes ist oft Fehlanzeige oder nur sehr Mangelhaft.

    Da einfach nur Vorkauen zu oft dazu führt das der Jeweilige damit einfach verschwindet,nichts lernt um dann beim nächsten Problem wieder auf der Matte zu stehen händle ich es lieber nach Möglichkeit mit kleinen nicht zu komplizierten Anmerkungen und leichten Rätseln um die eigenständige Suche und Kombination des jeweiligen zu fordern.
    Gerade letzteres ist in fast allen Gebieten menschlicher Tätigkeiten sehr wichtig.

    Zur Rechnung und den Lösungsansätzen:

    Du bist auf dem richtigen Weg und hast den Wesentlichen Teil schon entdekt.
    Jetzt mußt du nur die Vorgehensweise in die richtige Reihenfolge bringen.

    Es ist nur noch ein kleiner Schritt Mathematischer Natur.

    Tipp:

    Im Datenblatt des Controllers steht alles nötige dazu drinne.
    Les einfach mal den Abschnitt zum ADC durch.
    Du mußt nicht alles behalten aber ein grober Überblick bringt etwas Übersicht.


    @Robbifan

    Psssssssssst........Oller Spielverderber
    Gruß
    Ratber

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    29.03.2007
    Beiträge
    64
    Hi Ratber,

    ja zum lernen bin ich ja hier! Ich möchte keine Codeschnipsel ohne sie zu verstehen. Deswegen setze ich die Register weitestgehend ja auch händisch.
    Nur so lernt man wie der Controller funktioniert.

    Leider komme ich mit deinen Tips aber nicht so ganz weiter.

    Folgende Info habe ich gefunden (Ein Gedankengang):
    -Das ADC Messergebnis wird in die Register ADCH sowie ADCL geschrieben (da Ergebnis 10Bit also in zwei Register).
    -Wichtig ist auch ADLAR im Steuerregister ADMUX. Hier wird "eingestellt" wie das Messergebnis ausgerichtet ist. Also Rechts- oder Linksbündig.

    Rechtsbündigie 8 niederwertigsten Bits des Ergebnisses werden in ADCL abgelegt. Die verbleibenden 2 Bits des Ergebnisses werden im Register ADCH in den Bits 0 und 1 abgelegt.

    Linksbündigie 8 höchstwertigen Bits des Ergebnisses werden in ADCH abgelegt. Die verbleibenden 2 niederwertigen Bits werden im Register ADCL in den Bits 6 und 7 abgelegt.

    Ich hatte ja im eingangs genannten Beispiel linksbündig ausgerichtet. Also:

    2 hoch 9 ; 2 hoch 8 ;.....2 hoch 2 > ADCH

    2 hoch 1 ; 2 hoch 0 > ADCL

    Wenn ich jetzt also rechtsbündig ausrichte, und adcl "voll" habe ergibt das ja 255. Wenn adch 2hoch0 sowie 2hoch1 "Eins" ist komme ich auf 3.

    In die Formel von Robifan eingesetzt, (3*256)+255= 1023 also 10 Bit auflösung.

    Wenn der ADC jetzt nur 8Bit breit wäre, dann würde ich einfach rechtsbündig ausrichten und ADCL auslesen.
    __________________________________________________ ____________

    Gedankengang ende

    Liege ich mit meiner Logik jetzt richtig und kann sagen, ich habe es verstanden, oder liege ich voll daneben ?????


    Danke für eure Hinweise!

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Bis auf den letzten Satz kann man alles so stehen lassen.



    Wenn der ADC jetzt nur 8Bit breit wäre, dann würde ich einfach rechtsbündig ausrichten und ADCL auslesen.
    Wenn der ADC wirklich nur 8 Bit hätte dann gäbe es kein ADCH und ADCL sondern nur ein einzelnes Ausgaberegister und im Forum viiiiielll weniger Fragen zu dem Thema "Wie lese ich meinen ADC aus" (Ne,kein Quatsch.Is wirklich so).

    Spaß beiseite.

    Oder meintest du das in Zusammenhang mit dem anderen Topic also der Auflösungsreduzieung ?

    Wenn ja dann ist es etwas komplexer.
    Wenn man diue auflösung reduzieren will dann nimmt man die Niederwertigsten Stellen weg (Willst du 0-100V Messen und das Multimeter bietet schon auf 0.01V Genau an dann schneidet man die Niederwertigsten Stellen also die beiden hinterm Komme weg).
    Dh. beim ADC läst man die niederwertigsten Bits angefangen bei 0 weg.
    Man kann den ganzen 10-Bit wert nehmen und per Shiftbefehl bzw. durch entsprechende Teilung die Auflösung herabsetzen.

    Soweit ok ?
    Gruß
    Ratber

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    29.03.2007
    Beiträge
    64
    Hi Ratber,

    vielen Dank!
    Jetzt kann ich sagen, ich habe alles verstanden
    Und habe nicht einfach nur nen Codeschnipsel eingefügt.

    War halt gestern spät als ich den letzten Beitrag geschrieben habe.

    Gruß
    Daniel

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Yo,is ja kein Problem.

    Ich sehe gerade das ich Heut Morgen auch nicht gerade sehr gradeaus geschrieben habe
    Gruß
    Ratber

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    12.05.2007
    Beiträge
    31
    ...Wenn der ADC jetzt nur 8Bit breit wäre, dann würde ich einfach rechtsbündig ausrichten und ADCL auslesen. .....


    jo...

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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