- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 8 von 8

Thema: ADC konfigurieren (Tiny84)

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706

    ADC konfigurieren (Tiny84)

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Moin zusammen!

    Ich versuche gerade, den ADC eines ATTiny84 so zu konfigurieren, dass als Referenz die internen 1,1 Volt gewählt werden. In Bascom ging das (erwartungsgemäß) nicht, sowohl Reference = INT als auch Reference = Internal wurden vom Compiler nicht akzeptiert.

    Ist ja nicht schlimm - man kennt solche Eigenwilligkeiten des Compilers ja. Ich habe das ADMUX dann selbst gesetzt, und zwar auf 130 bzw. &B10000010 (Eingang 2 und 1,1V als Referenz).
    Per LCD lasse ich mir das Register am Programmanfang anzeigen - der Wert wird zunächst tadellos übernommen. Nach dem ersten mal Getadc(2) wird ADMUX aber auf &B00000010 verändert, d.h. ADC2 als Eingang und Vcc als Referenz.

    Hier mal der kurze Code:
    Code:
    $regfile = "attiny84.dat"
    $crystal = 1000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Porta.7 , E = Porta.0 , Rs = Porta.1
    Initlcd
    Cursor = Off
    
    Admux = &B10000010
    Adcsra = &B11000000
    Adcsrb = &B00000000
    
    Locate 1,1
    LCD ADMUX
    wait 1
    
    Dim Wert As Word
    
    Do
    Wert = Getadc(2)
    Locate 1 , 1
    Lcd "ADMUX: " ; ADMUX
    Locate 2 , 1
    Lcd Wert
    Waitms 250
    Cls
    Loop
    Warum passiert das - und was kann ich dagegen tun? Vcc als Referenz ist nämlich in diesem Fall keine besonders gute Lösung...

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.11.2004
    Ort
    Aachen
    Alter
    39
    Beiträge
    246
    Du kannst anstatt Getadc() ja auch hier weiter mit den Registern arbeiten.
    Ich denke mal Getadc() setzt alle Register entsprechend der Konfiguration neu...

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    o.k. - aber wie sag ich´s ihm in Registern, dass er JETZT eine AD-Konversion vornehmen soll?

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Wenn er auf dauer-Messung steht, dann reichts glaubich, das Register auszulesen.
    Wenn er One-Shot ist, dann musst du ihn anmachen und dann das Messergebnis aus dem Register holen.

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Danke für Eure Tipps - jetzt klappt´s: ADSC setzen, auf ADIF warten, Register auslesen, ADSC löschen, fertig. Schade, dass Bascom sich mit den unterschiedlichen Referenzen so schwer tut

    Schönen Sonntag noch!!

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

    Wenn man kein Config ADC hat, wurde ADMUX immer gelöscht, bei einem Getadc !
    Man kann aber bei Getadc das ganze Byte für ADMUX mitgeben.
    Bei der 1.11.9.2 werden die Ref-Bits aber ausmaskiert bevor der Kanal gesetzt wird.

    Welche Bascom-Version hast Du, ich kann Reference Internal verwenden bei der 1.11.9.2. Und es wird auch richtig im Register gesetzt.

    Das hier wird bei mir richtig compiliert:
    Code:
    $regfile = "attiny84.dat"
    $crystal = 1000000
    
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    
    Dim W As Word , Channel As Byte
    
    Channel = 2
    
    Do
    
        W = Getadc(channel)
    
    Loop
    
    End

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Dann scheint das inzwischen verbessert worden zu sein, ich habe 1.11.8.2. als Vollversion, und da geht Reference = Internal definitiv nicht. Vielleicht sollte ich meine Aversion gegen Updates mal langsam ablegen Aber die direkte Arbeit mit den Registern ist dem Gesamtverständnis ja sehr zuträglich, daher bastele ich eigentlich ganz gerne auf diser Ebene herum.

    Vielleicht date ich ja demnächst doch mal up..

    Gruß,

    Daniel

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.11.2004
    Ort
    Aachen
    Alter
    39
    Beiträge
    246
    Hast du schonmal in C reingeschaut?
    Wenn dir diese Ebene eher liegt, wirst du dich da wohl schnell zurecht finden und hast meiner Meinung nach viel mehr Möglichkeiten...

    Gruß,
    Thomas

Berechtigungen

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

Labornetzteil AliExpress