Sida 1 av 1
Ingången kopplad till varken 0 eller 1 ger problem.
Postat: 27 januari 2008, 10:42:24
av InSipiD
Har programmerat en 16F628A till att fungera som en styrbar PWM, där jag tänkt använda mig av två knappar kopplad till varsin ingång för att sänka och höja duty cycle.
Problemet är att det råder en osäkerhet om vad ingången har för värde, under den tid då den inte är 0 eller 1, vilket gör att duty cyclen fladdrar upp och ner.
Hur löser man såna här problem? Jag tyckte mig lyckas bättre när jag använde interruptingången på RB0, men tyvärr finns det ju bara en sådan.
MVH
InSipiD
Postat: 27 januari 2008, 10:50:57
av AndLi
Du har altså två knappar in på två ingångar på Picen?
Har du pullupmotstånd alt. används de interna?
Är det inte så att det är kontaktstudsen från brytaren du har problem med?
Ett litet RC filter kan hjälpa här, eller så kontaktavstudsar man i avläsningsrutinen.
Postat: 27 januari 2008, 12:27:05
av Icecap
Jag är mycket säker på att det du beskriver inte är vad som egentligen sker men beskriv din koppling ordentligt först, så ska du se att lösningen är mycket nära.
Postat: 27 januari 2008, 13:35:33
av InSipiD
På RB0 samt RB5 är två sladdar kopplade till var sin strömbrytare som i sin tur är kopplad till +5V. När strömbrytaren trycks ned kopplas alltså +5V på ingångarna, och när den är uppsläppt "hänger sladden i luften".
Problemet jag får om jag inte jordar ingångarna är att duty cyclen hela tiden ändras, och det händer alltså inte om jag jordar ingångarna.
Om jag tar bort strömbrytarna och bara låter kablarna hänga löst på kopplingsplattan får jag samma problem, och det blir genast mycket värre om jag rör dem.
Använder varken pull-up eller rc-filter just nu men ska testa det när jag får tillfälle.
Postat: 27 januari 2008, 13:42:35
av sodjan
> Använder varken pull-up...
GÖR DET !!
Du bryter mot design-regel 1A när det gäller CMOS.
Vanligt nybörjarfel, i och för sig...
Det finns även massor av trådar i forumet där andra har gjort samma tabbe.
Postat: 27 januari 2008, 13:44:09
av InSipiD
Okidoki, då ska jag slå på det

Började precis en kurs i hårdvarunära programmering så jag är väl lite grön
Tack så mycket!
Postat: 27 januari 2008, 13:49:02
av sodjan
> Okidoki, då ska jag slå på det
Eller sätta dit det.
> Började precis en kurs i hårdvarunära programmering
Att aldrig lämna CMOS-ingångar öppna har varken med programmering
eller mikrokontrollers att göra. Det gäller *alla* CMOS kretsar, oavsett
vad de har för funktion för övrigt.
Postat: 27 januari 2008, 16:13:47
av 007sweden
Postat: 27 januari 2008, 16:14:58
av oJsan
Kom ihåg att koppla om strömbrytaren till GND istället för till VCC, annars kommer du aldrig märka av knapptryckningen med pullup aktiverade.
(Ett alternativ är ju att låta knappen förbli kopplad till VCC och istället använda pulldown)
Postat: 27 januari 2008, 17:11:01
av xxargs
OK, det var nybörjamisstag no: 1
Nu väntar jag bara på kontaktstudsarna där även sk. 'proffsen' gör fel - dvs. i utvecklingsavdelningarna där de gamla rävarna från 70 och 80-talet är utslängda - det är bara att se på tex. miniräknare hp49g och senare där man trott att lämplig delay i programvaran skulle lösa alla problemen med kontaktstudsar[1] - icke sa nicke - när det väl är inne i mjukvara så är det redan försent och har säkert med Nyqvist sampelteorem att göra - precis som aliasing/vikning i ljudet inte går att få bort när det väl har samplats in och hörs mest där det är som mest oönskad....
[1]
Ett tag så var säkert 30% av alla inläggen på forum från folk som försökte desperat hitta en konstant som fungerade utan dubbelinslag/inget alls för deras sätt att trycka och gummikontaktens tillfälliga kondition... på något som var fullständigt problemfritt på alla tidigare versioner av miniräknare...
Postat: 27 januari 2008, 17:54:28
av hcb
Trådkapning!
xxargs: Efter den cliffhangern måste du beskriva Rätt Sätt(tm) att ta hand om kontaktstudsarna (och ja, jag är personligen intresserad av det!)
Postat: 27 januari 2008, 19:28:45
av xxargs
hmm - jag kanske stack ut hakan för mycket - men svaret är lämplig analog filtrering för att lugna ned förloppen och lämplig hysteres, från RC-kretsar till mer avancerade lösningar - förr fans det speciell avkodarkretsar för tangentbord med sådant inbyggt i sig och kunde vara ganska avancerat - problemen kommer när man försöker göra samma sak enbart med mjukvara och samplar för gles takt samt har ingångar utan hysteres och tröghet. Olika kontakttyper kan också behöva olika åtgärder innan själva insamplandet och beräkningen mellan samplen.
hmm... förresten var inte 74C922 och 923 just sådana dekoders...
Hanterar man kontakt/tangentbortsavkodning för lättvindligt och inte inser att det är ett ganska avancerad 'skit'-problem, så får man problem senare i användafasen med irriterade användare - och som i HP:s fall nästan tappade hela sin miniräknarmarknad då hårdtryckta gummitangenter istället för riktiga knappar och timingproblemet lortade ner hela HP:s lönsamma premiumsegment av miniräknare.
Postat: 30 januari 2008, 08:05:10
av bos
InSipiD skrev:Använder varken pull-up eller rc-filter just nu men ska testa det när jag får tillfälle.
CMOS är väldigt känsligt för störningar, och därför är det av högsta vikt att du ser till att ingångar är antingen 0 eller 1. Flytande nivåer (dvs varken 0 eller 1) på ingångar gör att ingången suger upp allt brus som finns i närheten (prova röra ett finger på pinnen, t.ex) och den kommer sen spruta ut 0:or och 1:or växelvis till kretsen, som kommer knäa och uppvisa det problem du beskriver.
Lösning till ditt problem är alltså att antingen lägga på ett pull up-/pull down-motstånd. Det kan kännas bekvämt att strunta i ett motstånd, men problemen växer till skyarna om man gör det, på samma vis som man kan få helt dunderskumma fel om man struntar i att avkoppla spänningsregulatorer eller Vdd/Vss med en kondensator.
Postat: 30 januari 2008, 08:57:16
av Marta
CMOS är väldigt känsligt för störningar
Där har Du helt fel. "Äkta" CMOS har betydligt bättre störmarginaler än TTL. Det gäller inte HCT vid nolla, eftersom dess ingångar är konstruerade för att följa de nivåer som gäller för TTL.
Däremot har de väldigt hög impedans på ingångarna som därför alltid och ovillkorligen måste vara anslutna till något.
Detta gäller även TTL, det är mycket fult att ha öppna ingångar och anta att dessa ligger snyggt och stabilt på en etta. Att det alls kan fungera beror på att TTL är strömstyrd (riktig TTL, inte HC?).