Schönen Guten Abend.
Ich sitze nun schon seit 3 Wochen an meinem PCF8591. Aber nun habe ich
den Punkt erreciht, wo ich nicht weiterkomme. Ich hoffe ihr könnt
helfen.
Ich möchte ein einzelnen Poti auslesen. Dieser Wert soll vorläufig als
Binärer Wert angezeigt werden (LED'S)
Die Schaltung ist fertig und definitiv funktionstüchtig. Wir haben da
von der Schule so ne tolle Platine, wo wir verschiedene Device drauf
ansprechen können.
Nur mit der Software hab ich ein Problem. Ich verstehe leider nicht, wie
ich über den SDA-Pin sowohl inputs machen kann als auch outputs bekomme.
Und ich bin mir unsicher, ob ich nun auch das Controlbyte schicken muss,
oder ob das adressbyte reicht (schließlich will ich ja nur eine
analog-zu-digital-konversation)
Ich hoffe, dass sich jemand mit dem Chip auskennt und mir helfen kann.
Das Problem ist, dass alle LED's leuchten. Ich also FF zurücbekomme,
egal wie die Stellung des Poti ist.
Das Datenblatt findet sich hier:
http://www.nxp.com/acrobat_download/datasheets/PCF8591_6.pdf
und mein Code hier. Ich hoffe er ist übersichtlich:
Wäre net wenn Du mal ein Flussdiagramm zeichnen würdest, damit man
blickt wie das Programm arbeiten soll. Beschreib mal dein Konzept.
Irgendwie drängt sich mir auf, das da was fehlt aber ich komm nicht
drauf.
Du musst zuerst dem PCF8591 über, das Controll-Byte, mitteilen von
welchen Kanal Du den Analogenwert empfangen möchtest auswählen.
Im einfachsten Fall solltest Du noch single ended wählen.
Im Anhang siehst Du wie gelesen werden muss um einen Analogen Wert zu
empfangen.
Also musst Du dem PCF8591 mitteilen das Du lesen möchtest und immer ein
ACK sendest solange wie Du Daten empfangen willst danach auf jedenfall
nACK und I2C_Stop senden.
Ich habe mit dem 8591 auch schon mal gearbeitet. Wenn ich Freitag
zuhause bin dann kann ich Dir meinen Code für den 8051 schicken (wenn es
dann noch nicht zu spät ist...).
cu,
olly...
Danke für eure Antworten,
ein Flussdiagramm kann ich die kommenden Tage sehr gerne uploaden und
dann hier reinstellen.
@klaus
eben das Frage ich mich auch...ob ich nun das Controlbyte benötige oder
nicht. aber wenn man mal auf die Protokolle bei der
analog-digital-konversation schaut (datenblatt), dann ist da keins
eingetragen. ur beim digital zu analog. Un dich will ihm ja keine
digitaen inputs geben, wie du gecshrieben hast.. sondern analoge und es
sollen digitale rauskommen.
Das mit dem ack hab ich auch gemacht... theoretisch sollte es klappen
@rossi75
nein der source wäre dann absolut nicht zu spät... =) ich würde ihn
nicht übernehmen.. dafür hab ich schon zu lange an meinem gearbeitet.
aber dadurch kann ich sehr gut entdecken was ich falsch habe.
Hallo!
Habe mal herumgestöbert und doch noch was gefunden.
Ich hab hier mal in Komprimierter Form ein Dateianhang.
Ich Habe damals einen Sensor GP2D120 zum Spass mal Angeschlossen.
Soviel ich noch weiss muss man erst einen sog. Dummy einlesen dann erst
die Werte. Frag mich aber nicht warum das so ist. Steht so irgendwo in
der Doku.
Ich hoffe es hilft dir ein wenig weiter.
So, als Anhang mein Quelltext zur Unterhaltung auf der
I2C-Schnittstelle...
#define PCF8591_0 0x48 // 01001000
_Aufruf zum Schreiben:_
Str_Temp[0] = 0x40; // Konfiguration (EP0 lesen, 4 Endpunkte, D/A aktiv)
Str_Temp[1] = Str_Delayer[0]; // Wert der ausgegeben werden soll
i2c_send(PCF8591_0, 0, Str_Temp, 2); // Schreiben des DA-Wertes
_Aufruf zum Lesen:_
i2c_send(PCF8591_0, 1, Str_Temp, 4); // Leseanforderung von 4 Werten
delayer_wrt(twi_message.buf[1]); // Spannungsergebnis in den Delayer
schreiben
ich hoffe Euch geholfen zu haben...
olly...