Optocoupler aan PCF8574

Beste,

Ik probeer een 24V signaal te registeren via 5V.

Dit zou ik graag via een optocoupler willen doen, zou blijft alles netje gescheiden van elkaar.



Dit is het schema wat ik heb gemaakt, de 24V kant werkt prima, echter de 5V kant doet minder goed mee.

Als je alleen de led aansluit zoals in het schema, dan werkt alles prima, led gaat branden.

Alleen wil ik graag ook een signaal doorgeven naar de PCF8574.

En daar gaat het fout, als ik dit namelijk aansluit, komt er maar 2V op de PCF8574 te staan, en dit is niet genoeg, er moet namelijk minimaal 3,5V op komen te staan.

Zijn er hier mensen die zien wat hier nou precies fout gaat!?

Thanks!!
timberleek

Golden Member

Je bent goed onderweg, maar je kan het beter iets anders neerzetten.

Als je de optocoupler nu eens direct aan de massa hangt (met de onderste pin).
En de led tussen de 5v en de andere opto pin.

Dan doet de led nog hetzelfde als je zou verwachten.
De pic kun je dan aansluiten op de bovenste opto pin (waar de led ook op zit).

Als de led uit is. staat hier 5v. Staat de led aan, dan staat hier +/- 0v.
Betekent wel dat je in de software wat om moet draaien.
Zo wordt het dan?! Alleen zo gaat de led dus niet uit?
Het dit werkt ook nog niet helemaal goed.. blijft soms hangen het signaal.

[Bericht gewijzigd door Henry S. op 18 maart 2019 21:25:29 (66%)]

timberleek

Golden Member

vergeet de weerstand bij de led niet.

Als de 24v bron nu uit staat moeten beide leds uit zijn en de pin naar de microcontroller 5V.

Let wel, de microcontroller pin moet natuurlijk wel als ingang geschakeld staan.
Als ik de weerstand plaats dan werkt het niet... dit is de enige manier waarop ik het aan de praat krijg.

op de Arduino staat het volgende:

c code:
#include "Arduino.h"
#include <PCF8574.h>
 
PCF8574 pcf8574(0x38);
void setup()
{
	Serial.begin(9600);
	pcf8574.pinMode(P0, INPUT);
	pcf8574.begin();
 
}
 
void loop()
{
	Serial.print("IO:");
	Serial.println(pcf8574.digitalRead(P0));
	delay(500);
}

[Bericht gewijzigd door Henry S. op 18 maart 2019 21:25:56 (0%)]

De weerstand moet ertussen, anders blaas je led en optocoupler op...
Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
Shiptronic

Golden Member

V uit de PIC is niet genoeg spannigen om de LED en de optocoupler (in serie) te gelijk te laten branden?

[edit] sorry ik moet dee andere kant op denken :)



Dit zou moeten werken.

[Bericht gewijzigd door Shiptronic op 19 maart 2019 00:09:57 (12%)]

Wie de vraag stelt, zal met het antwoord moeten leren leven.
Ja hoor, da's geen probleem (zeker niet bij sinken)
Maar zo te zien heeft TS helemaal nog geen schakeling, alleen een simulatie. (en da's sowieso onbetrouwbaar)
Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
Shiptronic

Golden Member

zit er nog ergens een pull down?
Wie de vraag stelt, zal met het antwoord moeten leren leven.
Op 19 maart 2019 00:05:26 schreef Arco:
Ja hoor, da's geen probleem (zeker niet bij sinken)
Maar zo te zien heeft TS helemaal nog geen schakeling, alleen een simulatie. (en da's sowieso onbetrouwbaar)


Daar heb je gelijk.

Hier heb ik foto`s van de schakeling, misschien een beetje rommelig.




De witte draad gaat vanaf de optocoupler naar de PCF8574. De bruine draad naar GND en de Weerstand zit op 5V.

Als de witte draad los is staat daar 5V op, en 0V op de weerstand.
wat ik dus wil. Echter als ik deze aansluit op de PCF8574, staat er 0V op deze ingang. Er staat dan 5V volt over de weerstand.
Er zal toch wel wat verkeerd zitten, niet makkelijk te zien.
De pinnen van de PCF8574A moeten default al hoog zijn als er niets zit aangesloten. (door hun opbouw, zijn quasi-bidirectionele poorten)
Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
Op 21 maart 2019 12:08:13 schreef Arco:
Er zal toch wel wat verkeerd zitten, niet makkelijk te zien.
De pinnen van de PCF8574A moeten default al hoog zijn als er niets zit aangesloten. (door hun opbouw, zijn quasi-bidirectionele poorten)


Dat klopt dat de uitgangen standaard hoog zijn. Alleen ik heb poort P0 ingesteld als ingang daarom staat daar nu geen spanning op.

code:
#include "Arduino.h"
#include <PCF8574.h>
 
PCF8574 pcf8574(0x38);
void setup()
{
	Serial.begin(9600);
	pcf8574.pinMode(P0, INPUT);
	pcf8574.begin();
 
}
 
void loop()
{
	Serial.print("IO:");
	Serial.println(pcf8574.digitalRead(P0));
	delay(500);
}
Alleen ik heb poort P0 ingesteld als ingang daarom staat daar nu geen spanning op.

Je kunt die pinnen niet als in of output zetten, ze zijn beide tegelijk... (da's de essentie van quasi-bidirectioneel: OC met pull-up)
Je kunt wel de pin laagtrekken als output, of hoog/laag aansturen als input.
Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
Op 21 maart 2019 12:37:25 schreef Arco:
[...]
Je kunt die pinnen niet als in of output zetten, ze zijn beide tegelijk... (da's de essentie van quasi-bidirectioneel: OC met pull-up)
Je kunt wel de pin laagtrekken als output, of hoog/laag aansturen als input.


Dat is toch wat ik wil doen, wil toch dat er 5V op P0 komt te staan?!
fatbeard

Honourable Member

Op 18 maart 2019 23:30:49 schreef Arco:
De weerstand moet ertussen, anders blaas je led en optocoupler op...
Dat valt reuze mee: de stroom wordt begrensd door de CTR van de opto.
Nu loopt er in het primaire circuit (afhankelijk van de toegepaste LED) ca. 21mA; met de opgegeven CTR (100-200, pag.1 van de datasheet) en de toegepaste IF (zie figuur 11, p.6) is er worst-case iets van 38mA secundair beschikbaar (al is 25-30mA waarschijnlijker).
Wat veel, maar het opblazen van de secundaire LED zal niet zo'n vaart lopen. De collector current is opgegeven als 50mA, dus die overleeft het zeker.
Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.
Op 21 maart 2019 14:23:21 schreef fatbeard:
[...]Dat valt reuze mee: de stroom wordt begrensd door de CTR van de opto.
Nu loopt er in het primaire circuit (afhankelijk van de toegepaste LED) ca. 21mA; met de opgegeven CTR (100-200, pag.1 van de datasheet) en de toegepaste IF (zie figuur 11, p.6) is er worst-case iets van 38mA secundair beschikbaar (al is 25-30mA waarschijnlijker).
Wat veel, maar het opblazen van de secundaire LED zal niet zo'n vaart lopen. De collector current is opgegeven als 50mA, dus die overleeft het zeker.


De opto werkt ook prima, daar is niks mis mee, alleen de PCF8574 werkt niet mee.
Ik ken de driver voor de pcf niet, maar mijn ervaring is dat je de pcf steeds moet aansturen om te kijken wat de byte waarde is, dus alle 8 inp/output tegelijk lezen/schrijven. Zie datasheet van de pcf.
Arco en BenI2C hebben gewoon gelijk.
De 8574 heeft zijn poorten standaard hoog. Uitlezen geeft dan een 1. Je kunt ze extern omlaag trekken zoals in jouw schema als de opto wordt opengestuurd. Dan lees je een 0. Als je er naar toe schrijft kun je ze 0 of 1 maken.

Nou ken ik de Arduino niet maar ik zie wel iets vreemds: de initiatiecode zegt PCF8574(0x38). Dat kan in mijn beleving alleen maar betekenen dat het basisadres van de PCF 0x38 is. Dat kan niet.
Er zijn twee typen: de standaardversie met base adres 40(Hex) en de A-versie met basisadres 70(Hex). Door middel van de adrespinnen op de chip kun je dan van die 40 nog 42,44,46 etc maken door daar hoog of laag op te zetten. Ik begin te denken dat die chip helemaal niet uitgelezen wordt....
Adres van de PCF8574 is 0x20, van de PCF8574A is dat 0x38.
Vaak wordt onterecht het R/W bit daarbij opgeteld, dan kom je op 0x40 resp. 0x70...
(ik weet niet hoe die Arduino library dat behandelt)
Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
Ah, dat zou kunnen; ik ben idd. gewend om dat bit mee te nemen in het basisadres. TS lijkt de A versie te hebben als ik de foto goed bekijk. Wat de library doet is mij ook onbekend.
Dew pull-up weerstanden op SCL en SDA lijken me wat aan de hoge kant (ik denk 15k te zien) maar zonder kennis van bekabeling, afstand etc. valt daar verder weinig over te zeggen.
Ik kan verder niets vinden wat niet deugt dus begin ik dan aan een defecte chip te denken. Die lijken toch wat kwetsbaar. Vrij recent heb ik er twee opgeblazen zonder dat het waardoor duidelijk was.
Shiptronic

Golden Member

Pak eens een andere input pin.

Op 22 maart 2019 15:06:14 schreef BenI2C:
En toen werd het stil....



Probleem is opgelost ? Altijd fijn om even te laten weten !
Wie de vraag stelt, zal met het antwoord moeten leren leven.
Ik heb het inderdaad even een paar dagen in de koelkast geparkeerd maar gisteren heb ik het probleem weten op te lossen.

Wat bleek nou.. als je een ingang van de PCF8574 direct aan de 5V aansluit, gaat er 46mA lopen.

De optocoupler zou dit kunnen leveren. Alleen levert hij dat niet, denk ik door de lage stroom die er aan de andere kant gaat lopen.

Door het toevoegen van een BC547 transistor is het verholpen, deze transistor kan 100mA aan. En levert zo dus het vermogen aan de PCF8574.

Door het gebruik van een tweede BC547 kan er ook nog een led geschakelt worden zonder dat dit ten kosten gaat van de 5V op de PCF8574.

Het schema wat er gebruikt wordt ziet er als volgt uit.



En in de praktijk ziet dit er dan als volgt uit:




Zo kunnen we verder, op naar het volgende probleem.

Ik zou graag iedereen willen bedankt met het meedenken!!!
Wat bleek nou.. als je een ingang van de PCF8574 direct aan de 5V aansluit, gaat er 46mA lopen.

Dan doe je iets grondig fout. Als je de uitgang bijv. laag maakt gebeurt dat, omdat de OC/OD output transistor dan aan het sinken is...
Je mag nooit een 'hard' 5v signaal op zo'n quasi-bidirectionele poort zetten, alleen hard laag via wired-and of hoog via een pull-up.
(bestudeer anders eens hoe zo'n poort werkt)

Zo kunnen we verder, op naar het volgende probleem.

Ik dacht het niet. Da's geen oplossing, maar een 'kludge'... ;)
Vroeger of later blaas je die poort op, er loopt veel te veel stroom. (de uitgangstransistor/fet sluit nu de voedingsspanning kort)
Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
Mee eens. Dit deugt niet. Voor alle duidelijkheid. In outputmode mag een poort 25mA sinken. Voor de totale chip (8 i/o's) geldt een maximum van 200mA.