- 12V Akku mit 280 Ah bauen         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: ADC Problem am Mega8

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.07.2008
    Ort
    NRW
    Alter
    51
    Beiträge
    169

    ADC Problem am Mega8

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hi Leute,

    ich habe da ein Problem mit dem ADC.
    Es liegt am ADC7 eine Spannung an von 3V (z.B.), zeitgleich mit dem einschalten des µC. Diese Spannung lasse ich mir über LEDs anzeigen.

    Das Problem ist, das die anliegende Spannung erst dann erkannt wird wenn eine Änderung dieser Eintritt, vorher nicht.

    Ich habe schon viel probiert, z.B. Stop ADC und direkt Start ADC eingefügt, um kurz die Spannung vom ADC zu entfernen.
    Auch der Betriebsmodus Single oder Free brachte keine Änderung.
    Hier mal das Programm:

    Code:
    $regfile = "m8def.dat"
    $framesize = 32
    $swstack = 64
    $hwstack = 64
    $crystal = 1000000
    
    Dim I As Byte , W As Word , B(7) As Word , C(7) As Word , A As Byte
    
    Config Portd = Output                                     
    Config Pind.7 = Input                                      
    Config Portb.1 = Output                                    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 8
    
    Compare1a = 1
    
    Config Timer0 = Timer , Prescale = 64
    Enable Timer0
    Enable Interrupts
    On Timer0 Zaehlen
    
    Do
    
    W = Getadc(7)
    
    If W > 0 And W < 50 Then : Led_port = &B10100111 : End If
    If W > B(1) And W < C(1) Then : Led_port = &B11111001 : End If
    If W > B(2) And W < C(2) Then : Led_port = &B11000000 : End If
    If W > B(3) And W < C(3) Then : Led_port = &B10100100 : End If
    If W > B(4) And W < C(4) Then : Led_port = &B10110000 : End If
    If W > B(5) And W < C(5) Then : Led_port = &B10011001 : End If
    If W > B(6) And W < C(6) Then : Led_port = &B10010010 : End If
    If W > B(7) And W < C(7) Then : Led_port = &B10000010 : End If
    
    Loop
    Irgend jemand ne Idee woran es liegt ? Ich habe im Datenblatt des Mega8 nichts gefunden wo z.B. steht das der ADC erst bei Änderung der anliegenden Spannung was macht.
    Wenn ich allerdings anstelle von W=GETADC(7) W=200 angebe funktioniert es sofort. Sobald sich der Wert einmal geändert hat funktioniert alles bestens, bis man den µC wieder abschaltet oder resettet.

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.02.2005
    Ort
    Südtirol
    Beiträge
    283
    Hi, wo steht denn in deinem Programm des "Start ADC" ?

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.07.2008
    Ort
    NRW
    Alter
    51
    Beiträge
    169
    Hi,

    hier:

    Config Adc = Single , Prescaler = Auto , Reference = Avcc

    danach startet der ADC automatisch. Allerdings habe ich auch trotzdem schon versucht es auch noch einmal hin zu schreiben.
    Klappt aber auch nicht mit Start ADC.

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    30
    Beiträge
    601
    Hallo,

    vielleicht hilft es, die verwendeten Pins am PortA (oder gleich den gesamten Port) zunächst auf Input zu schalten?
    Jetzt ohne es probiert zu haben...

    Viele Grüße

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.07.2008
    Ort
    NRW
    Alter
    51
    Beiträge
    169
    Hi,

    der ADC7 und ADC6 hängen nicht am Port A, diese sind zusätzlich vorhanden in der TQFP32 Version.

    Gruß
    Jens

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    30
    Beiträge
    601
    Kann es eventuell sein, dass du den ADC zu oft in der Hauptschleife abfragst? Versuche mal, eine kleine Pause (~50-150 ms) in der Hauptschleife einzubauen. Auch sollte man vor der eigentlichen Messung immer eine Dummy-Messung durchführen, deren Resultat wird dann einfach ignoriert.

    Viele Grüße

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.07.2008
    Ort
    NRW
    Alter
    51
    Beiträge
    169
    Hmm also es funktioniert ja alles super sobald man EINMAL die Spannung am ADC verändert. Danach läuft er wie er soll. Ich hab auch schon eine Pause von 200ms eingebaut, resultat wie vorher.

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Vielleicht liegt das Problem ja ganz wo anders? Poste doch mal den ganzen Code...

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.07.2008
    Ort
    NRW
    Alter
    51
    Beiträge
    169
    Im Prinzip ist das schon der ganze Code, vor dem DO kommt nur noch eine READEEPROM Routine um die Werte von B(x) und C(x) einzulesen.
    Selbst danach hatte ich schon eine Pause von 2s eingelegt, brachte aber auch nichts.

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    59
    Beiträge
    1.080
    welche werte werden denn für b(x) und c(x) eingelesen? vielleicht erreicht der adc nie diese werte und zeigt deshalb nichts an?
    Mein Hexapod im Detail auf www.vreal.de

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test