PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem bei ADWandlung mit PCF 8591



crowdy
23.11.2005, 16:04
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!

batti112
24.11.2005, 08:19
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

crowdy
24.11.2005, 10:59
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?

PICture
24.11.2005, 18:49
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

crowdy
24.11.2005, 22:44
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

skillii
25.11.2005, 20:15
Wie sieht denn das Control-Byte aus das du ihm schickst?

crowdy
26.11.2005, 11:29
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 (http://www.semiconductors.philips.com/acrobat_download/datasheets/PCF8591_6.pdf)

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!

http://www.cosas-latinas.de/LPT.gif

Das Programm werde ich später nochmal einfügen, da ich im Moment noch dabei bin alles umzuschreiben.

Bis denn!

skillii
26.11.2005, 12:57
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...

crowdy
26.11.2005, 13:00
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.

skillii
26.11.2005, 13:11
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)