Raar gedrag PIC12F629 statische elektriciteit

Beste allen,

Ik heb een schakeling gemaakt op een breadboard met een PIC12F629 met vier led patterns. Deze schakeling werkt zonder fouten in Proteus.

In deze schakeling zit ook een PCB switch (kleine drukschakelaar) Wanneer ik met mijn handen in de buurt kom van deze switch vertoond het programma in de PIC rare kunsten. Deze switch zit met een breadboard draadje van 10cm aan poort 6 (GP1). Het lijkt erop dat statische elektriciteit een spelbreker is.

Hoe kan ik dit voorkomen, beter nog: wat kan ik hieraan doen?

De voedingsbron is 12V (8 x 1.5v batt) en ziet er zo uit:

+12V -> 1N4007 -> 25V/ 100uF -> 100n -> UA78L05 -> 100n -> poort 1 Vdd

Heb je wel een pull-up of pull-down gemonteerd?

Zo goed als het vroeger was, is het nooit geweest.
Arco

Special Member

Je kunt de interne pull-up aanzetten, maar die is vrij hoog. (~250µA)
Als je maar 1 switch gebruikt dan is GPIO2 beter geschikt, is een S/T input. (GPIO1 is een TTL)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Op 1 maart 2012 17:38:38 schreef Tommyboy:
Heb je wel een pull-up of pull-down gemonteerd?

Nee dat heb ik niet gedaan.

Poort 4 (GP3) en poort 7 (GP0) worden niet gebruikt. Op poort 6 (GP1) zit de switch.

Hoe en waar moet ik een pull-up of pull-down monteren?

Op 1 maart 2012 18:15:16 schreef Arco:
Je kunt de interne pull-up aanzetten, maar die is vrij hoog. (~250µA)
Als je maar 1 switch gebruikt dan is GPIO2 beter geschikt, is een S/T input. (GPIO1 is een TTL)

Poort 6 GP2 wordt al gebruikt voor output. Hieronder een lijstje:

Poort 1 Vdd
Poort 2 (GP5) niet gebruikt
Poort 3 (GP4) output voor led via mosfet
Poort 4 (GP3) niet gebruikt
Poort 5 (GP2) output voor led via mosfet
Poort 6 (GP1) switch
Poort 7 (GP0) niet gebruikt
Poort 8 Vss

Natuurlijk kan ik ook andere poorten kiezen, maar ik begrijp niet helemaal wat de reden hier dan voor is. Ik probeer het te begrijpen.

Arco

Special Member

Als de switch tussen pin en Gnd zit heb je een pull-up (10k naar Vcc) nodig.
Als de switch tussen pin en Vcc zit heb je een pull-down (10k naar Gnd) nodig.
GPOI1 is een TTL poort, heeft veel eerder last van stoorpulsen als bijv. GPIO2, is een S/T poort.

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Op 1 maart 2012 18:36:35 schreef Arco:
Als de switch tussen pin en Gnd zit heb je een pull-up (10k naar Vcc) nodig.
Als de switch tussen pin en Vcc zit heb je een pull-down (10k naar Gnd) nodig.
GPOI1 is een TTL poort, heeft veel eerder last van stoorpulsen als bijv. GPIO2, is een S/T poort.

Dus als ik het goed begrijp dan moet ik het volgende doen:

- Verander de output van GP2 naar bijvoorbeeld GP3 (is over)
- Gebruik dan GP2 voor de switch zodat GP1 niet meer voor de switch gebruikt wordt

- pull-down: Vdd (+5v) -> pull-down 10k -> switch -> naar pin GP2

Eigenlijk zoiets: http://www.acroname.com/howto/button/button.html

Arco

Special Member

Dat kan niet, GPIO3 is alleen input, je kunt wel GPIO1 en 2 omdraaien.
Poort 5 (GP2) switch
Poort 6 (GP1) output voor led via mosfet

[Bericht gewijzigd door Arco op donderdag 1 maart 2012 19:26:16 (13%)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Op 1 maart 2012 19:25:00 schreef Arco:
Dat kan niet, GPIO3 is alleen input, je kunt wel GPIO1 en 2 omdraaien.
Poort 5 (GP2) switch
Poort 6 (GP1) output voor led via mosfet

Dat klopt, had ik niet gezien :-)

Dan zou het er zo moeten uitzien:

GP5 niet gebruikt
GP4 output voor led via mosfet
GP3 niet gebruikt
GP2 switch
GP1 output voor led via mosfet
GP0 niet gebruikt

De switch via aan pull-down 10K (switch zit aan Vcc)

Aan de poorten die niet gebruikt worden hoef ik dus niets aan te doen?

Helaas, het wisselen van poorten heeft geen zin gehad. Ik blijf zitten met statische elektriciteit.

Ik zal vanmiddag proberen om nog een pull-up van 10k tussen de switch en de pic te zetten.

Ik neem aan dat de swicth gevoed moet worden met +5v en niet met +12v. Is dit juist?

Frank. Dat lag in de lijn der verwachting. Je zult echt die pulldown moeten monteren.

Als ik het goed heb, heb je je switch tussen de VCC en de pin hangen.

Als je op het knopje drukt wordt de spanning hoog. Dat gedeelte werkt.

Maar wat nu als je NIET op het knopje drukt? Dan is de schakelaar open. Daar loopt geen enkele elektron meer! En aan de andere kant van dat draadje? Daar zit de input. Als het goed is, loopt daar ook niks.

Als je het datasheet leest, dan zou het kunnen dat daar iets van 100nA gaat lopen, maar dan nog weet je niet of dat de poort in of de poort uit loopt. Kortom, de spanning op de poort zou 5V kunnen blijven. Of 3V. Of wat dan ook. kom je in de buurt met een grote dikke vinger, gaat ie kennelijk een beetje meedansen samen met de 50Hz van het elektriciteitsnet. Soms zie je hem dan hoog en gaat je programma dingen doen. (het is dus wisselspanning en geen statische elektriciteit!)

Als je nu een pulldown monteert wordt de spanning netjes nul en zal je de poort altijd als "laag" zien als de schakelaar niet wordt bediend....

Nu nog: Waarom de schmitt trigger input?

Als je net naar de schakelaar kijkt terwijl ie op de een of andere manier NET aan het schakelen is, dan is bij de ST input netjes gedefinieerd dat ie OF nul OF 1 zal meten. Bij de andere poorten kan ie nog wel wat precies rond het omslagpunt staan te klapperen. Mocht je last hebben van "bounce" dan kan je met de ST input in ieder geval gewoon een condensatortje (100n) plaatsen om het op te lossen. Bij de normale input werkt het dan "meestal" maar nog niet altijd.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

@ rev,

Mooie heldere uitleg, dit had ik net even nodig om de logica te begrijpen.

Ik vind het wel knap dat sommigen hier een oplossing aandragen voor een probleem dat verre van duidelijk is. "Het programma vertoont rare kunsten". Wat betekent dat? Gaat ie door reset? Zie ie een ingedrukte schakelaar wat er niet is? Gaat ie het bos in? Wat gebeurt er?
Die pull-up/down is zeker nodig, dat wel.

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
Arco

Special Member

Een ander voordeel van S/T inputs is dat de logische "1" drempel veel hoger ligt, dus kleine stoorpulsjes minder last geven. Logisch "1" minimum nivo voor TTL ligt tussen 0.8...2V, bij S/T tegen de 4V...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Lambiek

Special Member

Zo doe ik het altijd, zie voorbeeld schema.
http://www.uploadarchief.net/files/download/resized/voorbeeld%20-%20frankw.jpg
Ik gebruik de interne weerstanden nooit. Bij GPIO3 zet ik altijd een 10K weerstand, en een condensator. En die lange draad bij je schakelaar is ook niet aan te raden. Zie nu dat ik een 12F675 gepakt heb als voorbeeld, maar deze is pin compatible met de 12F629.

Als je haar maar goed zit, GROETEN LAMBIEK.

OPGELOST

Het was inderdaad de pull-down van 10k die nog geïnstalleerd moest worden tussen de switch en +5v.

In Proteus kun je dit heel mooi zien. Zonder pull-down staat er 1,67 volt op de GP1 poort. Met pull-down staat er 0 volt op de GP1 poort.

Na het indrukken van de switch zie je mooi 5,00 volt verschijnen op GP1 en daarna weer 0 volt.

Hier staat ook een mooie uitleg:
http://www.picbasic.nl/frameload.htm?http://www.picbasic.nl/info_pull-…

Na meer dan twintig jaar ben ik opnieuw begonnen met elektronica, vergeef me als ik niet alles meer weet :-) Buiten dat zijn microcontrollers geheel nieuw voor mij.

Vanavond zal ik nog een link toevoegen van het eindproduct via YouTube.

http://youtu.be/QUzUwxcIpi4?hd=1

Iedereen die ideeën heeft aangedragen wil ik hartelijk bedanken.