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
|
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. 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/ |