Gå til innhold

Enkel krets og mikrokontroller


Anbefalte innlegg

Hei!

Jeg har nettopp begynt med programmering av mikrokontroller, og det stoppet kjapt opp da jeg oppdaget min mangel på elektronikkunskaper. Det jeg lurer på er hva som er poenget med motstanden på 100 k(komponent R8). Hva er den eksakte funksjonen til denne komponenten i kretsen? Jeg klarer ikke å forstå hvorfor den trenger å være der når mikrokontrolleren (PIC16F54) allerede bruker 5 V både som input og output.

post-218846-1280693745,3411_thumb.jpeg

Lenke til kommentar
Videoannonse
Annonse

Ved bryteren trykt inn, ligger det 5 volt på RA0, og hvis den ikke er trykt inn ligger det 0 volt på RA0. Motstanden er der for å gi mikrokontrolleren et definert spenningsnivå. Når pinnene på mikrokontrolleren er programmert som inngang går det i praksis ingen strøm gjennom den (funker som en ørliten kondensator). Hvis den ikke er koblet til et definert spenningsnivå er det bare gambling om mikrokontrolleren tolker pinnen som høy eller lav. Derfor skal pinnen alltid ligge innenfor lovlig område (dette står nærmere beskrevet i databladet) typisk rundt 0 - 0,5 volt for lav og (Vcc-0.5 volt) - Vcc for høy.

 

Grunnen til at det er en motstand der ok ikke direkte kontakt til jord er at strømforsyningen ville naturligvis blitt kortsluttet gjennom bryteren når den ble trykt inn.

Lenke til kommentar

Hvis du tenker RA0 som et isolert punkt så ville ikke R8 påvirke det. 

Men RA0 er ikke isolert, det er koblet til transistorer og motstander internt i pakken. Via disse vil det gå en svak strøm gjennom R8, og da blir spenningsnivået på RA0 vel definert til et logisk nivå.

 

Hvis RA0 ikke var tilkoblet noe så ville spenningen her være i det 'ulovlige' området mellom høy og lav. Og det må man unngå.

 

 

Lenke til kommentar

Hvis RA0 ikke var tilkoblet noe så ville spenningen her være i det 'ulovlige' området mellom høy og lav. Og det må man unngå.

 

Nå spør jeg kanskje dumt, men vil ikke det 'ulovlige' området mellom høy og lav bli tolket som lav eller høy uansett?. Altså, dokumenteres dette i et datablad o.l.? Omtrent slik som en SR-vippe, der kan man jo ha en som er set eller reset-dominert ved input på både S og R, selv om det er 'ulovlig'.

Det kan jo skape en del uheldige situasjoner hvis det er helt tilfeldig hva som skjer når en inngang blir flytende pga. feil i kretsen.

Endret av Dj_eLmO
Lenke til kommentar

Noen mikrokontrollere har interne pull-up eller pull-down motstander (eller begge deler som kan velges via et register). En flytende tilkobling vil da være respektivt høy eller lav.

 

Andre mikrokontrollere har ikke dette, det vil nok alltid stå en forklaring i manualene.

 

Hva det "ulovlige" området blir tolket som er uvist, det kan faktisk endres over tid, endres med temperatur etc. Så vidt jeg vet vil de fleste produsenter derfor aldri fortelle hva som skjer når et signal ligger i det "ulovlige" området, ganske enkelt fordi de ikke vet hva som skjer, eller ikke kan garantere at det samme skjer -alltid. Samtidig kan også eksterne kilder påvirke slike flytende pinner, f.eks elektromagnetisk støy.

Endret av Thorsen
Lenke til kommentar

Det siste har vi smertelig erfaring med. Husker ikke helt detaljene, men det var en krets hvor det var vagt definert i databladet hvordan en bestemt pinne skulle kobles. Den hadde skiftet funksjon i en revidert utgave, før var den NC. 

Vi slet med uforklarige feil i et års tid før det ble oppdaget.

Lenke til kommentar

Jepp, og dette "trikset" gjør at man kan klare seg med en 2 posisjonsknapp kontra en 3-posisjons knapp.

 

Alternativet er en knapp som både er koblet til 5V og 0V (men på to forskjellige terminaler)

 

 

post-47774-1280765712,4285_thumb.png

 

Den koblingen der er litt uheldig. I løpet av den tiden det tar og vippe over bryteren og den ikke er koblet til noe, har mikrokontrolleren kjørt mange tusen klokkesykler med pinnen ikke i definert spenningsområde.

Lenke til kommentar

Jepp, og dette "trikset" gjør at man kan klare seg med en 2 posisjonsknapp kontra en 3-posisjons knapp.

 

Alternativet er en knapp som både er koblet til 5V og 0V (men på to forskjellige terminaler)

 

 

post-47774-1280765712,4285_thumb.png

 

Den koblingen der er litt uheldig. I løpet av den tiden det tar og vippe over bryteren og den ikke er koblet til noe, har mikrokontrolleren kjørt mange tusen klokkesykler med pinnen ikke i definert spenningsområde.

 

Akkurat samme problem kan du oppleve med "bounce" på trykknappen.

 

Det "ugyldige området" vi bli detektert som enten 1 eller 0. I tilfelle her der man skal oppdatere lys på et forferdelig tregt display har det lite å si. Siden du uansett skal endre posisjon har det jo lite å si om kontrolleren egentlig detekterer

 

000000001010111111111111111 (De 1-0 inni skjer så fort at lysene ikke rekker å tennes engang).

 

Er det derimot kritisk er det ingen problem å legge inn en liten test i programkode som sjekker om knappen faktisk har vært trykket inn, eller sakt på en annen måte, om det logiske nivået faktisk er endret. En metode er å lese knapper hvert mikrosekund, eller hver millisekund. Og bare oppdatere status etter f.eks 10-100-1000 logiske nivåer av samme type etter hverandre.

 

Forresten er det vel også i visse tilfeller betraktet som dårlig kodepraksis å kjøre tastaturdeteksjon/knappedeteksjon kontinuerlig, mye bedre å kjøre et avbrudd ved f.eks hvert 100 mikrosekund. (De fleste uC har jo mulighet for avbruddsporgrammering i dag). Hvorfor skal man lese en trykknapp så raskt som uC klarer når mennesket uansett ikke reagerer så raskt?

 

For mer avanserte uC som kan settes i sleep-mode,(sovemodus), er det mulig å oppnå at kontrolleren sover over 90% av tiden. Dette ved å bruke avbruddbasert kontrollering, det tilsvarer nesten 90% mindre effektforbruk, som igjen fører til lengre batterilevetid etc. Eksempelvis kan kontrolleren i dette tilfelle legge seg til å sove. Våkne hvert 100 millisekund, lese knapp og oppdatere displayet. Dette tar kanskje maksimalt 1 millisekund, for så å legge seg til å sove igjen.

 

Men dersom man uansett vil ha pull-down / pull-up er det ingen problem å legge dette inn i kretsen jeg har vist til heller. Det er bare en enkel skisse for å illustrere for trådstarter ;)

Endret av Thorsen
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...