Heeft iemand enig idee hoe je van een ttl i/o poort een open collector poort kan maken. Ik wil namelijk een i2c bus maken voor een pic16F84. Zijn daar een soort converters voor?
Bastiaan
Bachelor of Engineering -- Microcontrollers AVR, PIC (asm, C), PC applicaties (C, C++), Webpages (HTML, CSS, PHP, SQL), Rail-infra engineer
een poort die grotere stromen en spanningen aan kan zodat je hem kan gebruiken om direct een lampje aan te sturen. of niet?
sven
pointers don't kill programs, programmers kill programs
de uln2803 bevat 8 npn-darlington trappen. Kan direct worden aangesloten op TTL.
Maar is I²C ook geen TTL niveau?
Maar dan kan ik die pennen niet gebruiken als input pennen ofwel? Ik wil het liefst zo weinig mogelijk pennen gebruiken.
sven
pointers don't kill programs, programmers kill programs
Op ma 14-10-2002 16:36:16 schreef bert willems:
Maar dan kan ik die pennen niet gebruiken als input pennen ofwel? Ik wil het liefst zo weinig mogelijk pennen gebruiken.
Een open-collector laat idd geen bidirectioneel verkeer toe.
Alles kan misschien wat duidelijker worden uitgelegd als je zegt wat je wilt aansluiten...(wat meer details)
Ik wil graag een aantal i2c componenten gebruiken. zoals ram, eeprom, a/dc en een usb interface. Is er geen andere oplossing?
Een standaard uitgang op zo'n micro is een push-pull trap meestal bestaande uit FET's. De ene FET 'pull'-t de uitgang naar ground bij een logische nul, De andere
'push'-t de uitgang naar voeding toe bij een logische een.
Bij FET's zijn het de sources die aan de +v en gnd liggen
en de drains die aan elkaar geknoopt naar buiten worden gevoerd.
Bij transistoren liggen de emitters aan de voedingsleidingen en zijn de collectoren aan elkaar geknoopt naar buiten gevoerd.
Bij open collector of open drain is de tor/FET tussen voeding en uitgang weggelaten. De uitgang kan dus geen spanning leveren. De uitgang is dan of zwevend (bij een 1)
of gnd (bij een 0).
Staat een i/o pin als ingang dan zweeft deze ook (High impedance of Z). De truuk is dan ook om bij een '0' de
I/O pin als uitgang te definieren en een nul op de uitgang
te plaatsen. Bij een '1' als de uitgang dus moet zweven,
de I/O pin als ingang definieren.
Meestal kun je ten alle tijden de uitgang teruglezen.
tbot
"The secret to creativity is knowing how to hide your sources." - Albert Einstein
Ik ben net zo erg thuis hierin, maar zoals ik het hier lees kun je geen TTL uitgang op een open-collector ingang zetten ?
sven
pointers don't kill programs, programmers kill programs
bert: nu ben ik geen kenner van I²C maar je kan alle deze ic's toch direct verbinden dmv de datalijnen. Elk ic zou zijn eigen adres moeten hebben. Dus waarom denk je open collectors nodig te hebben?
Tbot: een open collector is idd enkel maar een uitgang. Wordt gebruikt als schakelaar
hier een schema van het interne van de uln2803:
plaats je op de ingang 5V zal de uitgang verbonden worden met massa. Er kan dan stroom vloeien.
Plaats je geen spanning op de ingang zal de uitgang "zweven". Er kan dan ook geen stroom vloeien.
Deze IC wordt regelmatig gebruikt in µC schakelingen om zwaardere (DC!) lasten mee te schakelen.
Rob Keij
Honourable Member
Hallo,
In het kort...
een microcontroller I/O bij gebruik als I2C I/O
Bij verzenden de poort als uitgang zetten.
Bij ontvangst als ingang zetten met de interne pull-up weerstand actief of een externe pull-up weerstand.
Rob
sven
pointers don't kill programs, programmers kill programs
bekijk hier eens het schema van de SK-unit als praktisch voorbeeld voor I²C.
rob: volledig juist hoor, maar dat geldt niet voor alle µC. Bij de 89c2051 (8051 familie) stel je de uitgang op 1, en lees je daarna de poort terug in. Is er een extern laag signaal, zal deze de status wijzigen.
Op di 15-10-2002 23:38:52 schreef Rob Keij:
Hallo,In het kort...
een microcontroller I/O bij gebruik als I2C I/O
Bij verzenden de poort als uitgang zetten.
Bij ontvangst als ingang zetten met de interne pull-up weerstand actief of een externe pull-up weerstand.
Rob
Rob Keij
Honourable Member
Op di 15-10-2002 23:56:36 schreef sven:
bekijk hier eens het schema van de SK-unit als praktisch voorbeeld voor I²C.rob: volledig juist hoor, maar dat geldt niet voor alle µC. Bij de 89c2051 (8051 familie) stel je de uitgang op 1, en lees je daarna de poort terug in. Is er een extern laag signaal, zal deze de status wijzigen.
[...]
Je hebt gelijk, alleen ben ik verslaafd aan AVR en heb ik het niet zo op de philips core..... Alhoewel Atmel deze beter kan maken als philips zelf.
Rob
I2C maakt gebruik van twee lijnen, de kloklijn die de timing regelt (SCL) en de bidirectionele datalijn (sda).
Om bidirectioneel en simpel van opzet te zijn heeft mijnheer Philips gekozen voor een "open collector" structuur. De twee lijnen zijn door middel van twee weerstanden van ca 4k7..10k gepull-up't naar 5v.
Op de bus bevindt zich een master die de klok beheert
en een of meerdere slaves. Is er geen data aanwezig dan
is de bus dus hoog. Heeft de slave ipv een open collector
een push-pull uitgang, dan zal deze enorm veel stroom moeten leveren als een ander de lijn laag maakt, met als
gevolg -en een beetje mazzel- vuurwerk!
Het enige wat je hoeft te doen is:
-de clock en data lijn in de gaten te houden
-de datalijn laag maken indien nodig.
In mijn vorige bericht omschreef ik een manier om een lijn met een i/o pin te besturen. Een andere methode is om een I/O pin permanent als ingang te definieren en een tweede I/O pin te inverteren (in software is dit het makkelijkst) en dan een externe transistor aan te sturen die de lijn laag maakt. Dus bij een nul de uitgang hoog maken en de tor
maakt de lijn laag.
nadeel:
meer onderelen en extra i/o pinnen nodig.
Het maakt verder niet uit wat voor micro je gebruikt.
Ik gebruik zelf meestal atmel vanwege de verkrijgbaarheid en het gebruik van flash. De micro fungeert immers als master. In de datasheet van de slave staat welk adres je moet/kan gebruiken.
Voor de rest is bij philips de I2C specs te downloaden zodat je weet hoe de timing inelkaar steekt. (Wou dat, er dat voor USB ook was
)
[Bericht gewijzigd door williewortel op ]
Iedereen bedankt voor het reageren. Ik denk dat ik de eerste methode van williewortel ga gebruiken. Die is wel het makkelijkst maar er moet goed opgeled worden dat de uitgang van de pic niet 1 is en een andere uitgang tegelijk een 0 geeft. Of heb ik het nu verkeerd begrepen?