-
        

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

Thema: ADCIN Problem - Meßwerte ändern sich automatisch

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    30.10.2005
    Beiträge
    52

    ADCIN Problem - Meßwerte ändern sich automatisch

    Anzeige

    Hallo,

    ich habe einen PIC 16F876 bei dem ich einen Digitaleingang zum setzen von 4 Meßwerten nutze. Liegt an dem Setzen-Port ein high an, dann werden die ersten 4 AD-Wandler abgefragt und der Wert in jeweils einer Variable gespeichert. Dann werden kontinuierlich die Werte an den AD-Wandlern gemessen und wenn sich dort der Meßwert ändert, dann wird ein Ausgabeport auf high gelegt.

    Das Programm funktioniert auch ca. 30 Sekunden problemlos, aber dann hat der AD-Wandler auf einmal einen anderen Meßwert und der Alarm wird ausgelöst. Die Eingänge sind alle per Pull-Down auf Messe gezogen und werden nicht verändert.

    Meine Vermutung ist, dass im Programm noch irgendwelche Vorgaben fehlen (z.B. interne Referenzspannung oder so etwas...), aber ich habe schon in allen mir bekannten Beispielen und Anleitungen nachgelesen, jedoch nichts passendes gefunden.

    Die Schaltung dient zum Erkennen von einer Überlastung an 4 Gleichstrommotoren. Diese werden über H-Brücken betrieben, an einem MosFet wird die abgefallene Spannung gemessen, über einen OP verstärkt und der Pic wertet dann die Änderung aus und gibt einen Alarm an den Hauptcontroller.

    Hat jemand eine Idee, was in dem Programm noch falsch ist?

    Mfg,
    Thorsten
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.10.2007
    Ort
    Bayern
    Alter
    29
    Beiträge
    116
    Hi,

    ich kenne mich zwar nicht mit dem Basic Compiler aus, dennoch schreibe ich hier mal meine Vermutung da kein andere gepostet hat.

    Im PIC exisitiert nur ein AD-Wandler, der jeweils mit den verschiedene Eingängen verbunden wird.

    Nornalerweise setzt man den Kanal fest, wartet einen kurzen Augenblick und startet erst dann die Messung. Grund ist das ein Kondensaor am AD-Wandler ist, der erst umgeladen werden muss. Bis das soweit ist können eben falsche Messergebnisse kommen.

    Auch noch ein Tipp: Vielleicht solltest Du in deinem Programm nicht sofort den Alarm auslösen sondern einen Fehlerzähler hochzählen und dann eben bei z.B. 5 aufeinanderfolgenden falschen Messergebnissen den Alarm auslösen. Sobald der Wert wieder in Toleranz ist muss der Fehlerzähler auf 0 gesetzt werden, damit er nicht in 2 Tagen wenn es bis dahin 5 mal in unbestimmten Abständen einen Fehler gibt ausgelöst wird.
    Das kannts Du ja da im Code bei ' nichts tun machne.

    mfg
    Benny

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    09.07.2005
    Ort
    Hangover
    Alter
    51
    Beiträge
    45
    PicBASIC fügt die ganzen Warteschleifen ein, um den AD-Wandler anzusprechen. Im Grunde sieht das Programm soweit gut aus.
    Ich würde die Meßwerte immer mitteln. Entweder einfach (Neu=(Neu+Alt)>>1) oder gewichtet (Neu=(Neu+Alt*3+2)>>2). Damit kann man Spikes wegrechnen. Es wundert mich schon sehr, daß die Tolerenzgrenze von 10 überschritten wird bei 8-Bit-Auflösung.
    Ich arbeite viel mit diesem PIC und habe solche AD-Fehler bisher nicht gesehen (außer, man gibt man richtig Spannung auf PortA-Eingänge, damit die Clamp-Dioden durchschalten...).
    Die 50us Samplezeit würde ich evtl. mal auf 200us hochsetzen um den Sample-C richtig zu laden.
    Wie hoch sind die Widerstände an den analogen Ports ?

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    30.10.2005
    Beiträge
    52
    Vielen Dank für die Antwoten.

    Am PortA liegen im Moment 1,2k Widerstände als PullDown.
    Dann wird max. +5V an die Eingänge gelegt.
    Zum Testen habe ich da auf Widerstände verzichtet. Ist das vielleicht nicht in Ordnung?

    Mit der Sample-Zeit hört sich ziemlich nach dem Fehler an.
    Werde morgen auf jeden Fall ausprobieren, die Sample-Zeit hoch zu setzten und die Eingänge über Widerstände mit 5V versorgen.

    Mfg,
    Thorsten Wurm

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    09.07.2005
    Ort
    Hangover
    Alter
    51
    Beiträge
    45
    Sieh Dir mal mit einem Oszi die Signale an.
    Den Strom in einer H-Brücke messen - da ist viel Feuer auf der Schaltung und auch viele Störungen.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    30.10.2005
    Beiträge
    52
    Hallo,

    stimmt das die H-Brücke ziemlich wilde Signale erzeugt. Mein Problem besteht aber auch, wen ich die Schaltung einzeln betreibe und die Eingänge einfach mit der Betriebsspannung versorge.

    Mfg,
    Thorsten Wurm

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    30.10.2005
    Beiträge
    52
    Hallo,

    habe die Sample-Zeit hochgesetzt, das brachte jedoch keinen Erfolg.
    Dann habe ich mal ein kleines Testprogramm geschrieben. Dieses liest Kanal 0-3 vom AD-Wandler ein und wenn ein Wert gemessen wird, der über 0 liegt (Eingange sind mit Pulldown an Masse), dann leuchtet am Ausgang eine entsprechende LED.
    Dieses Programm (Beispiel 1) funktioniert einwandfrei.

    Aber dann kommt das Problem. Im 2. Beispiel habe ich bei Kanal 1 dann die Abfrage so geändert, dass nur bei ca. 2,5V am Eingang die entsprechende LED leuchten soll. Alle anderen Kanäle sind wie im 1. Beispiel. Lege ich dann an einen Eingang eine Spannung > 0 Volt an, dann leuchten die 4 LED´s der einzelnen Kanäle, wie sie gerade Lust haben. Ich habe da noch keine Gesetzmäßigkeit feststellen können.

    Kann dieses Problem nicht verstehen. Ich glaube fast, dass da im Compiler ein Fehler ist.

    Hat jemand hierzu vielleicht eine Idee?

    Mfg,
    Thorsten Wurm
    Angehängte Dateien Angehängte Dateien

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    09.07.2005
    Ort
    Hangover
    Alter
    51
    Beiträge
    45
    Der direkte Vergleich mit 0 ist schon etwas hart. Soviel Störungen, wie da schon im uC umherirren können, ist das letzte Bit immer "über" und kann rauschen.
    Teste doch mal gegen 5...

    Wieviel Strom fließt durch die LEDs ? Welche Vorwiderstände hast Du da gewählt ?

    Die Zuweisung "ADCON1=82" finde ich - kreativ. Sie macht nichts falsches, aber Du setzt Bits, die es nicht gibt, bis auf eines, das bleibt 0.

    Du bist sicher, daß der uC nicht ständig neu startet, weil Du einen Reset auslöst ? MCLR falsch beschaltet ?

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    30.10.2005
    Beiträge
    52
    Klar ist das mit dem Vergleich gegen 0 hart, aber das ist auch nur zum testen. Im richtigen Programm habe ich da schon eine Toleranz mit hinein programmiert.
    Mein Problem ist ja, dass das in dem 1. Beispiel wunderbar funktioniert und im 2. Beispiel, wo ich denn einen bestimmten Spannungsbereich haben möchte, macht der uC dann, was er will.

    Hab das Programm jetzt auch noch in Assember geschrieben, da läuft es Problemlos. Bin mittlerweile schon fast der Überzeugung, dass da was im PicBasic Compiler nicht in Ordnung ist.

    Mfg,
    Thorsten Wurm

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    09.07.2005
    Ort
    Hangover
    Alter
    51
    Beiträge
    45
    Bug in PicBasic ???
    Netter Versuch.

    Welche Version setzt Du ein ?

    Der Prozessor ist aber ein 876 und kein 876A ?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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