http://satellite-board.de
http://satellite-board.de/board/

Adam Tuner - Mulituner über PCF8574
http://satellite-board.de/board/viewtopic.php?f=45&t=20012
Seite 4 von 5

Autor:  oli [ Mi 8. Jul 2009, 20:29 ]
Betreff des Beitrags:  Re: Adam Tuner - Mulituner über PCF8574

Bitte mal diese Schaltung/BOM kontrollieren!

cu Oli

Dateianhänge:
Präsentation1.pdf [170.88 KiB]
440-mal heruntergeladen
Scannen002.pdf [448.68 KiB]
433-mal heruntergeladen

Autor:  fbgm [ Do 9. Jul 2009, 15:58 ]
Betreff des Beitrags:  Re: Adam Tuner - Mulituner über PCF8574

Hallo Oli,

Die Schaltung sollte funktionieren, wenn die ADAM einen 5V I2C Bus hat. Ist
der I2C Bus nur bei 3,3V, sollte der Philips Levelshifter eingebaut werden.

Der Baustein PCF7574 hat einen Betreibsspannungsbereich von 2,6-6V und
kann damit auch direkt in einer 3,3V Umgebung laufen.

R3 sollte kleiner sein, ca 1-2k, so dass der Transistor sauber in die Sättigung
kommt. Für den Transistor selbst reicht ein BC558 o.ä..

mfg
Franz

Autor:  oli [ Do 9. Jul 2009, 17:04 ]
Betreff des Beitrags:  Re: Adam Tuner - Mulituner über PCF8574

Sollten 5V sein. Jedenfalls mist das mein altes Messgerät.
Ich habe noch einige BD136 hier gehen die auch?

cu Oli

Autor:  oli [ Fr 10. Jul 2009, 11:47 ]
Betreff des Beitrags:  Re: Adam Tuner - Mulituner über PCF8574

So die Schaltung sollte jetzt gehen. Jedenfalls wenn ich von "Hand" 5V auf den T1 lege schatet dieser (üder den R3=1K).

Jetzt hätte ich noch eine Verständnisfrage für die eschreibung des i2c codes für den PCF8574P. Im Datasheet steht danicht "so" viel. Wie ich dies jetzt verstehe schreibt und liest man immer alle Infos zu allen 8 Ports? Ich müßte also erst einmal den Status aus dem PCF auslesen und dann meine Info dazu "addieren" und dann wieder schreiben...??? Richtig?

Also Adressieren:

S 0100 000 0

0100 = an wen an PCF8574
000 = A0-A2 auf GND
0 = Schreiben
---> 0100 erste Bit = 0x4
---> 0000 zweites Bit = 0x0

So das ich bei der Adressierung 0x40 bin fürs Schreiben und 0x41 zum lesen.

Jetzt aber die Daten???

A ??? 1 P

Wenn ich das Datenblatt richtig verstehe dann:

A P7 P6 P5 P4 P3 P2 P1 P0 0 P

Die P sind dann je die Ports. Für micht heißt dann 0x0 aus und 0x1 ein ??? richtig?

A 0 0 0 0 0 0 0 1 0 P
0000 = 0x0
0001 = 0x1
----> 0x01

was sich ergibt zu:

S 0x40 A 0x01 0 P

Jetzt tut sich aber dabei gar nichts!!! Mach ich was Falsch?
ich verwende die gleiche i2c Funktion die den SAA1064 ansteuert, das geht ja.

Kann es sein das es an der letzten Bit vor dem Stop liegt 0 bzw. 1 für lesen/schreiben. So ergibt sich von der Länge eine ungerade Zahl an Bits. Da aber die i2c funktion intern Byts verwendet...

Code:
BOOL gx_I2C_WriteReg(I2C_HANDLE hBus, BYTE bAddr, BYTE bValue)


cu Oli

Autor:  fbgm [ Fr 10. Jul 2009, 16:46 ]
Betreff des Beitrags:  Re: Adam Tuner - Mulituner über PCF8574

Hallo Oli,

der PCF8574 arbeitet immer mit 8Bits. Die Adressierung ist so wie von
Dir bereits beschrieben:
S 0 1 0 0 A A A 0 -
Der Strich bedeutet warten auf Acknowledge. Dann werden die Portdaten
gesendet:
7 6 5 4 3 2 1 0 - P
Die Nummern sind die Portbits und der Strich wieder warten auf Acknowledge.
Danach kommt die Stopmeldung P.

Die zusätzliche 1 in den Diagrammen ist nur beim Lesebefehl. Das besagt, das
in dieser Zeit der PCF8574 auf das Acknoledge vom Master wartet. Das ist kein
Bit was übertragen wird.

So wie Du das beschrieben hast, werden wahrscheinlich zwei Datenbytes zum
PCF gesendet. Das erste mit 0x01 und das zweite mit 0x00. Das heisst also das
das Portbit 0 nur für eine Byteübertragungszeit (~400kHz) gesetzt ist und dann wieder
zurückgeschalten wird.

S 0x40 A 0x01 P, schalten das Port 0 auf 1 (5V)
S 0x40 A 0x00 P, schalten das Port 0 auf 0 (GND)

mfg
Franz

Autor:  oli [ Fr 10. Jul 2009, 22:31 ]
Betreff des Beitrags:  Re: Adam Tuner - Mulituner über PCF8574

Ich habe bisher nur dises gesendet:

S 0x40 A 0x01 P

Weil die letzte Stelle konnte ich nicht senden da es ja nur ein Bit war, ich kann aber nur bytes senden.

Code:
BOOL gx_I2C_WriteReg(I2C_HANDLE hBus, BYTE bAddr, BYTE bValue)
{
   IICTRANS iicTransBuf;
   BYTE bData[4];
   BYTE bCmd[4];
   BOOL bRet = FALSE;

   bData[0] = bAddr;    // Address
   bData[1] = bValue;

   bCmd[0] = IIC_START;
   bCmd[1] = IIC_DATA;
   bCmd[2] = IIC_STOP;

   iicTransBuf.dwCount = 3;
   iicTransBuf.pData = bData;
   iicTransBuf.pCmd = bCmd;

   bRet = iicTransaction(&iicTransBuf, hBus);

   return bRet;
}


Aufruf:

Code:
gx_I2C_WriteReg(DEFAULT_I2C, Port2PCF, 0x01);


cu oli

Autor:  fbgm [ Sa 11. Jul 2009, 17:31 ]
Betreff des Beitrags:  Re: Adam Tuner - Mulituner über PCF8574

Hallo Oli

wie ist denn die LED nach diesem Befehl? An oder Aus.

mfg
Franz

Autor:  oli [ Sa 11. Jul 2009, 18:14 ]
Betreff des Beitrags:  Re: Adam Tuner - Mulituner über PCF8574

Ich habe den Fehler gefunden. Es lag doch noch an dieser Schaltung. Jetzt scheint es zu gehen. Jedenfalls bei diesem einen Port.

:yeah:

Also folgende Änderungen gegenüber der Schaltung oben:

T1 = BC574
R4 = 2*330Ohm in Reihe
R3 = 1Kohm
anderes LED verwendet.

Ansprechen in Code, wie oben beschrieben! Der Treiber ist zu finden unter
Code:
X:\OSRAD_DEV\Drivers\pcf8574\pcf8574.c
X:\OSRAD_DEV\Drivers\pcf8574\pcf8574.h

Ich werde einen Port dafür nutzen die Antenenversorgungsspannung (5V) für DVB-T ein und aus zu schalten. Original sind die 5V beim adamT nicht angeklemmt. Ich würde dies aber nur mit dem stärkeren NT der adamS verwenden! Meine Antenne zieht 35mA, das sollte noch gehen.
Am Pin 1 des Tuners fehlen 2 Widerstände (adamT), dort wo die 5V anliegen kommt eine 0R Brücke rein, der andere ist ein 33R laut gxSchaltplan.

cu Oli

Autor:  oli [ So 12. Jul 2009, 09:55 ]
Betreff des Beitrags:  Re: Adam Tuner - Mulituner über PCF8574

Jetzt habe ich versucht den Status auszulesen, allerdings bekomme ich ein etwas unerwartetes Ergebnis???

Code:
uchar      pcf_data = 0;

gx_I2C_ReadReg(DEFAULT_I2C, Port2PCF, &pcf_data);


Code:
BOOL gx_I2C_ReadReg(I2C_HANDLE hBus, BYTE bAddr, BYTE *pValue)


Dann gebe ich &pcf_data (=*pValue) aus:

Code:
printf("\n\r[PCF8574] 0x%02x \n\r", pcf_data);


Nun wird aber Folgendes im Log ausgegeben:

Code:
[PCF8574] 0x2ed08c


Ich hätte hier nur ein BYTE erwartet und dieses 0x00 oder 0x01.

Wo liegt da der Hund begraben???

cu Oli

Autor:  fbgm [ So 12. Jul 2009, 16:17 ]
Betreff des Beitrags:  Re: Adam Tuner - Mulituner über PCF8574

Hallo Oli,

Das kann auch nur am printf Befehl liegen. Nach meiner Meinung müsste der Befehl so aussehen:
printf("\n\r[PCF8574] 0x%x \n\r", pcf_data);
Eventuell liest auch das gx_I2C_ReadReg Programm mehr als nur ein Byte aus.

Der Inhalt des Bytes ist immer der Portinput wenn der Portausgang auf 1 gesetzt ist. Ansonsten
undefiniert.

mfg
Franz

Autor:  oli [ Di 14. Jul 2009, 17:56 ]
Betreff des Beitrags:  Re: Adam Tuner - Mulituner über PCF8574

Also ich habe jetzt ein weiteres Problem. Am BC547B gibt es einen Spannungsabfall zwischen Emitter und Kollektor, am Kollektor liegen also nicht die vollen 5V an (etwa <3V) obwohl am Emitter die vollen 5V anliegen.

Woran kan dies liegen? Ist der BC547B für diesen Fall ungeeignet?

cu Oli

Autor:  fbgm [ Mi 15. Jul 2009, 08:34 ]
Betreff des Beitrags:  Re: Adam Tuner - Mulituner über PCF8574

Hallo Oli

der Transistor BC547 ist ein NPN Transistor. Du benötigts
aber einen PNP Transistor. Z.B. BC558.

mfg
Franz

Autor:  oli [ Mi 15. Jul 2009, 08:40 ]
Betreff des Beitrags:  Re: Adam Tuner - Mulituner über PCF8574

Ich als dummer Maschinenbauer... Grundsätzlich ging der BC547 für die LED ja....bis auf die Spannung.
Tja da werde ich wieder mal etwas bestellen müssen. Wenn ich sowieso bestelle muss, der BC558 ist die richtige Wahl?

cu Oli

Autor:  fbgm [ Mi 15. Jul 2009, 15:11 ]
Betreff des Beitrags:  Re: Adam Tuner - Mulituner über PCF8574

Hallo Oli,

der BC558 ist Ok für die Schaltung. Es geht auch der BC547, wenn
der Transistor genen GND schaltet. Das würde bedeuten:
- +5V
- LED
- Widerstand (für 5mA)
- BC847
- GND
Die LED müsste dann leuchten, wenn das Portbit = 1 ist.

mfg
Franz

Autor:  jimjack [ Mo 20. Jul 2009, 08:59 ]
Betreff des Beitrags:  Re: Adam Tuner - Mulituner über PCF8574

Hallo in die Runde,

bin nun wieder im Lande - Urlaub ist vorbei :-(.

@Oli,
schau mal, ob Du mit den Casten nach int (-> (int) vor die auaszugebenede Variable) bei printf die richtige Ausgabe bekommst. Ich weiss jetzt nicht, wie bei dem Compiler printf implementiert ist, baer meist musst Du explizit nach int casten, sonst kommt bei einer char/byte-Variable Müll raus.

Seite 4 von 5 Alle Zeiten sind UTC
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/