Pelle_3 Skrevet 1. august 2010 Rapporter Del Skrevet 1. august 2010 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. Lenke til kommentar
Zalo Ultra Skrevet 1. august 2010 Rapporter Del Skrevet 1. august 2010 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
Thorsen Skrevet 2. august 2010 Rapporter Del Skrevet 2. august 2010 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) Lenke til kommentar
Pelle_3 Skrevet 2. august 2010 Forfatter Rapporter Del Skrevet 2. august 2010 (endret) Tusen takk for svar! Men det er fortsatt noe jeg ikke skjønner helt - hvordan kan R8 påvirke spenningen som går til RA0 når denne motstanden er koplet i parallell? Endret 2. august 2010 av Pelle_3 Lenke til kommentar
Hårek Skrevet 3. august 2010 Rapporter Del Skrevet 3. august 2010 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
Nedward Skrevet 3. august 2010 Rapporter Del Skrevet 3. august 2010 (endret) 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 3. august 2010 av Dj_eLmO Lenke til kommentar
Thorsen Skrevet 3. august 2010 Rapporter Del Skrevet 3. august 2010 (endret) 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 3. august 2010 av Thorsen Lenke til kommentar
Hårek Skrevet 3. august 2010 Rapporter Del Skrevet 3. august 2010 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
Zalo Ultra Skrevet 3. august 2010 Rapporter Del Skrevet 3. august 2010 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) 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
Thorsen Skrevet 3. august 2010 Rapporter Del Skrevet 3. august 2010 (endret) 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) 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 3. august 2010 av Thorsen Lenke til kommentar
Pelle_3 Skrevet 8. august 2010 Forfatter Rapporter Del Skrevet 8. august 2010 Takk for svar Er dette da en pull down-resistor, som holder pinnen i low state når bryteren ikke er trykket inn? Lenke til kommentar
Hårek Skrevet 8. august 2010 Rapporter Del Skrevet 8. august 2010 Ja, det er riktig. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå