PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ADCIN Problem - Meßwerte ändern sich automatisch



wurm
17.04.2008, 11:48
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

HF SHOOTER
21.04.2008, 18:07
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

BigWumpus
23.04.2008, 22:54
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 ?

wurm
24.04.2008, 00:04
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

BigWumpus
24.04.2008, 08:14
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.

wurm
24.04.2008, 12:19
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

wurm
24.04.2008, 21:19
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

BigWumpus
25.04.2008, 16:49
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 ?

wurm
25.04.2008, 20:53
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

BigWumpus
25.04.2008, 22:53
Bug in PicBasic ???
Netter Versuch. ;-)

Welche Version setzt Du ein ?

Der Prozessor ist aber ein 876 und kein 876A ?

wurm
26.04.2008, 08:22
hi,

das Picbasic dort eine Bug haben soll ist sicherlich eher unwarscheinlich.
Ich habe gestern mit dem Support telefoniert, der hatte aber auch keine Idee mehr und wollte das weiter prüfen. Bin mal gespannt, was da rauskommt.
Ich habe bis dahin die Version 2.46 benutzt. Habe gestern jedoch das Update auf 2.50 gekauft. Mal schauen, ob es damit anders wird...

Ich benutze eine PIC16F873A. Habe oben das A vergessen.

Mfg,
Thorsten Wurm

BigWumpus
26.04.2008, 08:36
...und die 3 statt der 6 hast Du auch vergessen.

BigWumpus
26.04.2008, 08:47
Zur Sicherheit auch das Comperator-Modul (CMCON=7) abschalten und das Comperator Voltage Reference-Modul ist hoffentlich nicht eingeschaltet (CVRCON=0).

Nach wie vor vermisse ich hier einen Schaltplan.

wurm
28.04.2008, 16:10
Hallo,

mit PicBasic Version 2.50 mit dem Update, was man aktuell runterladen kann, funktioniert das Programm.
Habe heute die Version bekommen, das Programm neu compeliert und es hat auf Anhieb funktioniert.

Ich gehe jetzt mal dran und zeichne einen Schaltpllan.

Mfg,
Thorsten Wurm