Hallo allen,

Klein vraagje, overal en ook tijdens mijn opleiding hoor je laat nooit digitale ingangen open want deze zijn hoog-impedant. Maar nooit wordt er bij verteld waarom dat nu problemen veroorzaakt ... ? De ingang kan storingen en lading opvangen vanuit de lucht maar wat doet die hoog impedant er nu aan? Hoe kun je nu wiskundig of fysisch aantonen dat die problemen oplevert (die hoge impedantie ?)

Dank voor een woordje uitleg
mvg,
nh

Door de hoge weerstand van de ingang kan de lading niet makkelijk weg en bouwt zich op totdat de ingang doorslaat.

Let wel: het hoeft geen probleem te zijn. Alleen als de ingang in kwestie invloed kan uitoefenen op de schakeling kunnen er natuurlijk rare situaties optreden. De meeste IC's zijn intern voorzien van clampdioden (als ESD bescherming) dus de kans de boel stuk gaat is klein.

Wat doen we met I/O pennen van bijv. een PIC die niet gebruikt worden?? Zijn er hier mensen die er een uitgesproken mening over hebben???? Bij een software bugje o.i.d. kan de pen uitgang worden met als gevolg mogelijke kortsluiting... ik laat ze dus open... en zet niet gebruikte pennen als uitgang

Op 26 februari 2007 21:33:11 schreef FullPower:
Wat doen we met I/O pennen van bijv. een PIC die niet gebruikt worden?? Zijn er hier mensen die er een uitgesproken mening over hebben???? Bij een software bugje o.i.d. kan de pen uitgang worden met als gevolg mogelijke kortsluiting... ik laat ze dus open... en zet niet gebruikte pennen als uitgang

Met pinnen van een microcontroller moet je zorgen dat er niets fout kan gaan. Dus je kan ze als ingang zeten, als ze maar geen interrupts oid kunnen veroorzaken, uitgang mag ook, zolang je maar weet wat je doet.

En software bugjes horen niet in je programma te zitten snugger :P

En de rede dat je bij digitale IC`s de ingangen moet definieren: soms kunnen de ingangen van niveau wisselen door signalen die in de buurt lopen, of nog erger: oscilleren.

Een transitie kost stroom, sommige IC`s kunnen door oscillatie zoveel dissiperen dat ze naar de klote gaan. En het komt je stroomverbruik ook niet ten goede.

Dat schijnen piccies ook te kunnen, dat opstoken door oscilatie.
Ik knoop de niet gebruikte pinnen altijd met 10k aan gnd en ik zet ze als ingang, better safe than sorry, vooral omdat ik al eens gehad heb dat een pic zomaar bleef hangen.

Op 26 februari 2007 21:33:11 schreef FullPower:
Let wel: het hoeft geen probleem te zijn. Alleen als de ingang in kwestie invloed kan uitoefenen op de schakeling kunnen er natuurlijk rare situaties optreden. De meeste IC's zijn intern voorzien van clampdioden (als ESD bescherming) dus de kans de boel stuk gaat is klein.

Bij CMOS en TTL werkt het juist door het hele IC heen.

Bij ordinaire TTL hingen de ingangen inwendig al via weerstanden aan de plus. Dat was niet zo hoogohmig, dus die kon je desnoods wel "open" laten: je vertrouwde dan op de interne pull-ups, die de ingang op een "een" (althans: een "hoog" ) zetten.

Toen kwam de CMOS en als je die ingangen open liet, gingen ze rond de helft van de voedingsspanning hangen. Niet nul en niet één dus, en dan wist je niet wat de uitgang ging doen. Dat kon dus niet.

Om van alles af te zijn is de regel: vertel een ingang wat voor niveau je bedoelt, dan is het altijd goed.

Bijna goed. Het probleem is dat een ingang halverwege kan blijven hangen. Belangrijk is dat elke buffer in cmos (maar ook ttl) een fet naar + heeft, en een naar - . Afhankelijk van het hoog of laag zijn van de buffer wordt een van beide fets aangestuurd. Als je nu de ingang halverwege zet, dan zijn BEIDE fets opengestuurd, waardoor er "kortsluiting" onstaat. Er zit ook nog wat weerstand in de tak, dus echt sluiting is het ook weer niet, maar er loopt in elk geval veel stoom. Normaal gaat die overgang 0-1 or 1-0 heel snel, dus het moment van kortsluiting duurt maar heel even. Dan kan het geen kwaad.

"rond de helft van de voedingsspanning" - dat zeg ik :)
In TTL zaten trouwens geen FETs. Dat schema (met die gare multi-emitter ingang) kan ik wel dromen.

Op 26 februari 2007 22:37:30 schreef Frederick E. Terman:
Bij ordinaire TTL hingen de ingangen inwendig al via weerstanden aan de plus

dat had je gedroomd

Het grootste probleem is oscilleren. Als dat gebeurd, dan heeft dat vaak invloed op de hele schakeling, omdat het erg veel zooi op de voeding en op de andere loshangende ingangen geeft. Erg vervelend. Zodra er dan ook nog iets analoogs bij aan te pas moet komen kan je het dan verder schudden.

@flipflop: dat probleem heb ik nog nooit gezien. Maar misschien zal het bij sommige soorten logica wel zo zijn.

Stel dat ik een Atmega16 neem, deze heeft 4 poorten van 8 bits.

- Wat doe ik dan met de niet gebruikte poorten ?
- Wat doe ik met de interrupt ingangen ?

Alle niet gebruikte IO's uitgangen maken. Dan zijn ze intern gepull-uped.

Op 27 februari 2007 08:33:47 schreef 6foot6:
[...]

dat had je gedroomd

OK, via één weerstand dan - de gemeenschappelijke basisweerstand in de basis van die multiemitter ingangstor.
Hoe dan ook, open = hoog door die weerstand.

/e Hang maar eens een ingang aan aarde via een milliamperemeter, dan zie je het effect van die R wel.

[Bericht gewijzigd door Frederick E. Terman op ]

Op 27 februari 2007 11:49:09 schreef WilToyo:
Alle niet gebruikte IO's uitgangen maken. Dan zijn ze intern gepull-uped.

Pull-ups zijn worden meestal bij ingangen gebruikt, uitgangen zijn meestal totem-pole. Klok-en-Klepel ?

Niet helemaal klok-en-klepel maar wel verwarrend. Maar je hebt wel gelijk
http://www.wilcodejong.nl/imwrong.JPG

Bij de TTL's zoals 74xx, 74lsxx, 74alsxx enz moeten niet gebruikte ingangen gedefinieerd worden. Laat je ze open dan meet je doorgaans ongeveer 1.5V en die level ligt tussen low en high. Het zijn als kleine antennes die alle signalen oppikken met alle gevolg. Onze algemene regel was altijd dat een nietgebruikte TTL ingang via een 3K3 weerstand aan de VCC moest. Een extra voordeel was dat je later deze ingang nog kon gebruiken om andere TTL signalen aan te koppelen als je ergens iets moet testen of toevoegen.

Hetzelfde geld voor de COMS reeks, vooral de 4000 reeks was een sluipende killer. Naast dezelfde verschijnselen dat deze openliggende ingangen een bron van storingen konden vormen was er het trage sluipende afsterven van de CMOS. Zoals hierboven al beschreven is een tussenlevel dramatisch en begint de gate stroom te trekken. Dit uit zich vooral op langere termijn, meestal 1 tot 2 jaar zelfs met het gevolg van een hoge uitval van de schakelingen.

Om deze reden wisten onze routers, de mannen die niets anders moesten doen dan PCB's tekenen, dat als er gates over waren van logisch poorten dat ze deze moeten defineren. Soms brachten ze er een aantal samen op een pullup weerstand als er weinig plaats was of zelfs indien nodig gewoon aan GND.

Moderne chips hebben tegenwoordig deze pullup's intern ingebouwd of je kunt ze zelfs in en uitschakelen. Daar vervalt die noodzaak maar het verbied je niet extern toch een lagere waarde te plaatsen.

Ongebruikte interups zou ik altijd extern gaan vastleggen. Maar zelfs op mijn cyclone ingangen die ik naar de connector breng zal ik nog steeds een pullup weerstand plaatsen. Het verhoogt je betrouwbaarheid en kost je weinig. Het is erg vervelend als een applicatie het af en toe eens laat afweten omdat je een ongebruikte ingang hebt laten zweven, vooral als die applicatie aan de andere kant van de wereld opgesteld staat en de klant wekelijks gaat aan de bel trekken.

Bij de huidige chips kun je minstens de datasheets raadplegen om zeker te zijn of er intern voorzieningen zijn en hoe je ze eventueel moet inschakelen.

En wat is nu het beste voor niet gebruikte AVR poorten ?

- Ingang van maken en de pull-up weerstand activeren
- Uitgang maken en GEEN logische level aan toekennen.
( is deze dan in Tri-state ?)
- Uitgang van maken en dan de uitgang laag maken.

Bij Altera bevelen ze aan om alle niet gebruikte I/O pinnen als uitgang low te definieren en ze aan de GND te leggen. Dit verlaagd interne ongewenste transitie's omdat er meer GND signalen ontstaan. Deze regel zal ook wel gelden voor andere chip fabrikanten.

Maar..... Nadeel is dat je ze later niet meer kunt gebruiken bij vb een multilayer waar die verbinding in de binnenlayer zit. Daarom was het de gewoonte om een aantal niet gebruikte pinnen tot juist aan de rand van de chip te routen op de bovenste of de onderste layer en daar werden ze dan via een 1ohm weerstand (smd) aan GND gelegd. Moest je later een I/O pin vrijmaken dan moest je enkel die SMD weerstand niet bestukken en had je een pad om een verbinding te maken.

[Bericht gewijzigd door fotoopa op ]

Voor de AVR geldt hetzelfde als voor de Altera: je kunt er uitgangen van maken. Ik doe dat zelf liever niet: Als ik een foutje maak en er perongeluk iets op aansluit (bijvoorbeeld als ik een uitbreiding aan het maken ben), dan is het fijn om niet de boel meteen op te blazen.

Dus: Voor AVR: Maak de poort input, en schrijf het PORT register "1", zodat het een input-met-pull-up wordt.

Bij de Altera weet ik even niet uit m'n hoofd hoe een poort een interne pullup (of -down!) te geven. Ik geloof in het IO pin configuratie scherm.

Als je schema definitief is, en je gaat printjes produceren, kan je overwegen om het advies van Altera op te volgen en de niet gebruikte pennen aan GND te hangen en ze als "output 0" te programmeren. Zelf vind ik een extra IO nog veel te leuk, en zal ik voorlopig proberen hem dan op een connectortje voor toekomstige toepassingen beschikbaar te houden....

Op 27 februari 2007 11:49:09 schreef WilToyo:
Alle niet gebruikte IO's uitgangen maken. Dan zijn ze intern gepull-uped.

Brrrr

Lekker als input laten staan, voor development interne pull-up aan. Klaar.
Als er aan definitieve versie van is, kun je ze hard aan GND leggen indien je het wenselijk acht ivm 'rommel' die ze op kunnen pikken. Feitelijk wat rew dus ook zegt.

Met interrupts heb je niets te maken. Die moet je toch softwarematig enablen, dus het niveau is niet relevant. (mag hopen dat je ze alleen enabled als je ze ook gebruikt uiteraard...).

- Uitgang maken en GEEN logische level aan toekennen. (is deze dan in Tri-state ?)

Wat denk je zel? Als je wat in tri-state wilt hebben, definieer je het als input (op een AVR). 8051 look-alikes hebben doorgaans open collector (zou dat nog bestaan?) / open drain uitgangen. Ook hier: RTFD.