-
-
Problem bei ADWandlung mit PCF 8591
Moin Moin
Mein Problem: Ich spreche über die LPT Schnittstelle einen PCF 8591 an und es funktioniert auch einigermaßen. "Einigermaßen" heißt das der PCF8591 auf mein Addressbyte reagiert, aber teilweise ganz falsche Werte zurückliefert.
Die Spannung am Eingang regel ich mit einem Poti zwischen 0V und 5V, ne Versuchsreihe hat ergeben, dass bis 2,5V der Wert den der PC ausgibt um den Faktor 2 falsch ist sobald die 2,5V Marke überschritten ist sind die Werte um den Faktor 1/2 falsch. Hier nochmal aufgeschrieben:
(KA heißt keine Acknowledge beim senden des Addressbytes vom PCF empfangen)
U[mV](Voltmeter) --> U[mV](PC)
0 --> 20
200 --> 500
850 --> 1700
1200 --> 2420
1250 --> 2540
2000 --> 3900
2500 --> 4940
3000 --> 900 KA
3500 --> 1780 KA
4000 --> 2740 KA
4500 --> 3700 KA
5000 --> 5100 KA
Also hat jemand eine Idee wodran es liegen könnte? Das Programm, was ich geschrieben habe scheint an sich zu funktionieren. Es könnte auch irgendein elektrotechnisches Problem sein, also Pull-up's oder Pull-down's hab ich gar nicht eingebaut, da ich gar nicht genau weiss wozu diese Widerstände gebraucht werden.
Ach ja, zur Pinbelegung an AIN0 liegt der Schleifer des Potis an, die Pins der Hardware Addresse liegen alle auf GND, genauso wie AGND, Vss und EXT. An Vref und Vdd liegen 5V an.
Ich bin für jede mir weiterhelfende Antwort sehr dankbar!
-
Erfahrener Benutzer
Roboter-Spezialist
Du solltest dich bei der Ansteuerung des PCF's schon an das I2C Protokoll halten. Lese dir mal die Seiten dazu hier im Forum durch.
Die Pullups solltest du nicht weglassen....
mfG
Batti
-
JO!
Vielen Dank das werde ich auf jeden Fall machen, aber woher weiss ich wie hoch die Widerstände sein müssen.
Und die werden dann zwischen 5V und den SCL und SDA gelegt, oder?
-
Erfahrener Benutzer
Lebende Robotik Legende
Hallo crowdy!
Genau, die pull-up Resistoren sollen der H Pegel auf den SCL und SDA Busletungen halten, wenn kein, von den an die I2C Bus angeschlossenen Modulen, sie auf L zieht. Du kannst von 4,7 kOhm ausgehen und abhängig von I2C Frequenz und Belastung durch angeschlossenen Module, dementsprechend ändern.
MfG
-
Hi
Danke für die Antwort, hab's gleich ausprobiert. Es hat aber nicht geklappt. Könnte es sein das der PCF vielleicht beschädigt ist und deshalb falsche Werte zurückliefert?
Hab zwar eine IC Fassung benutzt, um sicher zu sein das der Baustein beim Löten nicht zu heiß geworden ist, aber vielleicht wurde er irgendwie anders beschädigt.
Das wars erstmal morgen schreib ich noch was zur Schaltung und dem Programm
-
Erfahrener Benutzer
Fleißiges Mitglied
Wie sieht denn das Control-Byte aus das du ihm schickst?
-
Moin Moin
Control-Byte?
Nee ich sende gar keins, da beim auslesen der Spannung so wie ich es dem Datenblatt des PCF 8591 entommen habe kein Controlbyte gesendet werden muss (Auf Seite 9 Figure 9)
Hier das DB
Dann wollte ich auch noch etwas zur Schaltung schreiben und zwar wird das SCL-Signal durch einen NE555 Baustein erzeugt dessen Signal auf den PCF und die LPT Schnittstelle gegeben werden. Hier der Plan ich hoffe man kann alles erkennen! Die Pull-ups hab ich leider vergessen einzuzeichnen!
Bild hier
Das Programm werde ich später nochmal einfügen, da ich im Moment noch dabei bin alles umzuschreiben.
Bis denn!
-
Erfahrener Benutzer
Fleißiges Mitglied
Ich habe zwar den PCF8591 bis jetzt nur im D/A-Modus verwendet aber ich glaube, dass man ihm im A/D-Modus trotzdem zuerst ein Control Byte senden muss(zur Channel Auswahl, Auto-Increment, ...)
Versuch einmal bevor du die A/D-Werte abrufst ihn ein Control-Byte zu senden indem du ihn zuerst mit der Write-Adresse aufrufst.
Als Control-Byte müsste 00h gehen...
-
Nun hab ich auch mal mit einem Controlbyte probiert eine Spannung auszulesen. Es hat aber auch nicht funktioniert. Die Spannungen verhalten sich genause wie in der oberen Tabelle. Das Controlbyte hatte den Wert 0 und das Addressbyte den Wert 145.
Bitte helft mir, ich versuche schon seit mehreren Wochenenden das teil zum laufen zubringen und ich biin am verzweifeln.
-
Erfahrener Benutzer
Fleißiges Mitglied
als du das Controlbyte gesendet hast, hast du da als Adressbyte 145 verwendet?
Wenn du ihm etwas sendest, musst du ihn schon im WRITE-Mode aufrufen (Adressbyte 144)
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen