Sida 1 av 4

Varför behöver man en "pullup" (Arduino)

Postat: 31 augusti 2012, 22:41:48
av Pandy
Försöker lära mig lite om Arduino. Men jag förstår inte varför jag behöver en "pullup".

Egentligen så förtår jag inte hur det fungerar alls. Koden förstår jag men det är koplingen jag inte förstår. Lampan kommer att tändas när input (pin 2)är av(Low, det blir den när man trycker ner knappen). Men jag tycker att pin 2 borde vara på heltiden eftersom att man har den där "pullup", den borde ge pin2 ström hela tiden oberoende om knappen är på eller av.

Bild

Kod: Markera allt

void setup() {                
  pinMode(13, OUTPUT);
  pinMode(2, INPUT);
}

void loop() {
  if (digitalRead(2) == LOW) {
    digitalWrite(13, HIGH); 
  }
  else {
    digitalWrite(13, LOW); 
  }
}
MvH Andreas

Re: Varför behöver man en "pullup" (Arduino)

Postat: 31 augusti 2012, 22:45:13
av victor_passe
Om knappen ät nedtryckt får pinnen 0V
Om knappen är uppe så måste i/o pinnen ha någon nivå, därav motståndet.

Re: Varför behöver man en "pullup" (Arduino)

Postat: 31 augusti 2012, 22:47:48
av danei
Resistansen mot jord är väldigt mycket mindre än 10kohm när knappen är nertryckt, så spänningen kommer att ligga väldigt nära 0V

Re: Varför behöver man en "pullup" (Arduino)

Postat: 31 augusti 2012, 22:48:55
av X-IL
Pullupen behövs för att annars kommer spänningen att bli flytande, alltså odefinierad. Du behöver ha två fasta lägen, hög och låg. Såg att Victor_Passe hunnit emellan nu.

EDIT: Och Danei...

Re: Varför behöver man en "pullup" (Arduino)

Postat: 31 augusti 2012, 23:02:04
av sodjan
> Men jag tycker att pin 2 borde vara på heltiden eftersom att man har den där
> "pullup", den borde ge pin2 ström hela tiden oberoende om knappen är på eller av.

Du stirrar dig alldeles blind på hur själva schemat ser ut. Du måste fokusera mer
på hur det faktiskt är kopplat. Ta fallet med knappen *nedtryckt*.
Då kan du lika gärna plocka bort knappen och dra ett rakt streck istället. Du kan
se det som att "I/O 2" är direkt kopplat till GND. Sen, helt oberoende av detta
och kanske på någon helt annan plats på plattan och i schemat, sitter det ett
10 kohm motstånd mellan 5V ch GND. Motståndet har i det läget (alltså med
knappen nedtryckt") ingenting alls med knappen eller "I/O 2" att göra längre...

10 k motståndet har enbart någon funktion då knappen *inte* är nedtryckt.

Re: Varför behöver man en "pullup" (Arduino)

Postat: 31 augusti 2012, 23:37:13
av Pandy
Nu kanske jag säger precis tvärt emot vad du sa "sodjan". Men är det så att jorden är noll(LOW) och + är (HIGH). När man inte trycker ner knappen så gör + (med resistorn) så att pin 2 blir HIGH och lampan slocknar. När man trycker ner knappen så kommer jorden fram till pin 2 då blir det (LOW) eftersom att jorden är noll, eftersom att + har högre resistans en vad jorden har så blir det lättare för jorden att ta sig fram och därför blir det LOW och inte HIGH.

Re: Varför behöver man en "pullup" (Arduino)

Postat: 31 augusti 2012, 23:42:22
av X-IL
Det är lite på rätt väg, men jorden tar sig ingenstans, möjligtvis kan du föra det resonemanget med spänningen.

Re: Varför behöver man en "pullup" (Arduino)

Postat: 1 september 2012, 00:02:51
av Pandy
Men det har någonting med att gör att + har resistor och att den har en högre resistans, för jag läste någonstans att man skulle ha en så hör resistans som möjligt. Testade att ta bort resistorn helt och då lös lampan hela tiden men lite starkare när man tryckte ner knappen. Om jag bar satte dit en kabel istället så var dioden släckt hela tiden (den blinkade till när man tryckte ner knappen). Så resistorn behöver vara där för det måste bli spänning när knappen inte är ner tryckt, och när knappen väl är ner tryckt så behövs resistorn för att skapa ett motstånd. Är det rätt så långt??

Re: Varför behöver man en "pullup" (Arduino)

Postat: 1 september 2012, 00:16:17
av danei
Nej.

När knappen är nertryckt behövs ingen resistor. Spänningen in till din µC kommer att vara 0V oavsett om den finns eller inte.
När knappen inte är nertryckt så behövs den för att du ska vara säker på att det är 5V på ingången. Det kan funka utan, men det kommer att bli väldigt störnings känsligt.
Storleken på resistorn är en kompromiss mellan att ge en stabil 5V när knappen inte är nertryckt och en låg strömförbrukning när den är det. 10kohm är ett vanligt val. Har man höga krav på låg strömförbrukning kan man gå upp i resistans.

Re: Varför behöver man en "pullup" (Arduino)

Postat: 1 september 2012, 07:15:26
av Mindmapper
Pandy skrev:Men det har någonting med att gör att + har resistor och att den har en högre resistans, för jag läste någonstans att man skulle ha en så hör resistans som möjligt. Testade att ta bort resistorn helt och då lös lampan hela tiden men lite starkare när man tryckte ner knappen. Om jag bar satte dit en kabel istället så var dioden släckt hela tiden (den blinkade till när man tryckte ner knappen). Så resistorn behöver vara där för det måste bli spänning när knappen inte är ner tryckt, och när knappen väl är ner tryckt så behövs resistorn för att skapa ett motstånd. Är det rätt så långt??
Du har rätt!
För att få ingången hög måste du få positiv spänning någonstans ifrån till ingången. Därför finns resistorn kopplad till plus. En ström går då genom ingången och resistorn upp till plus.
För att du ska få ingången låg måste du få bort den ström som går genom ingången och genom resistorn upp till plus. Du kan ju få bort denna ström på två sätt. Endera ta bort resistorn (som Danei), själv tycker jag att det blir lite bökigt att koppla om kretsen och ta bort resistorn varje gång jag vill ha ingången låg. Ett bekvämare alternativ är att trycka på knappen som gör att ingången kopplas direkt till jord och blir låg.

Fortfarande finns en ström som flyter genom resistorn men nu går den enklaste vägen genom strömbrytaren ner till jord. När du tar bort resistorn och ersätter den med en bit tråd. Har du bytt ut resistorns 10kohm med trådens låga resistans (kanske 1ohm). När du trycker på knappen går ström genom tråden ner till jord via den slutna strömbrytaren.
Ohms lag säger då att strömmen blir I = U/R = 5/1 = 5A. Klarar din strömförsörjning av att lämna 5A kommer den strömmen att gå genom strömbrytaren. Klarar den inte 5A kommer den att ta skada. Om inte din strömförsörjning klarar av att lämna 5A kommer den att ta skada. Nu kan strömförsörjningen vara skyddad så att den tål en kortslutning och då kommer det att gå bra.

Om resistansen i kretsen har blivit 0,1ohm när du kortsluter den kommer strömförsörjningen att försöka leverera 50A. Att ha en hög resistans är därför bra om man ska trycka på knappen.

Egentligen behöver du inte resistorn om du använder AVR's inbyggda pull-up. Den kan du läsa om i databladet för mikroprocessorn.

Re: Varför behöver man en "pullup" (Arduino)

Postat: 1 september 2012, 11:07:33
av sodjan
> Nu kanske jag säger precis tvärt emot vad du sa "sodjan".

Det är sällan någon bra idé... :-)

> Testade att ta bort resistorn helt...

Vilket är totalt tokfel, det *måste* finnas en pullup!
Antingen som ett externt pullupmotstånd (som i schemat) eller genom att man
har slagit på internt pullup (om den aktuella processorn har det, läs databladet).
Utan pullup (extern eller intern) får man stora problem! Om du är
intresserad så kan du googla "open cmos input".

> Men är det så att jorden är noll(LOW) och + är (HIGH).

Meningen är formulerad som en fråga men det finns inget "?".
*Om* det är en fråga så är svaret självklart "ja".

> och när knappen väl är ner tryckt så behövs resistorn för att skapa ett motstånd.

Som jag skrev, när knapen är *nertryckt* så saknar motståndet helt funktion och
behövs inte *just då*. Det är när knappen är "uppe" som motståndet är nödvändigt.

Mindmapper> Du har rätt!

Det var en väldigt snäll tolkning... :-)
Resten borde du nog inte ha skrivet för det är någonstans mellan förvillande och helt fel.
Ingången kan t.ex inte göras låg enbart genom att plocka bort motståndet som du anger
som ett alternativ. Du utrycker dig som att det faktiskt skulle fungera, märkligt.
En rejäl björntjänst att röra till det på det där sättet.
(Det sista om intern pullup är dock helt rätt... :-) )

Re: Varför behöver man en "pullup" (Arduino)

Postat: 1 september 2012, 11:24:28
av ToPNoTCH
På tal om förvillande.

"När knappen är nertryckt saknar motståndet helt funktion"

Jag skulle hävda precis tvärtom.

Enda anledningen att moståndet existerar/behövs är ju att säkerställa att det inte går för mycket ström mellan +5V och jord (kortslutning) NÄR knappen är nedtryckt.

Re: Varför behöver man en "pullup" (Arduino)

Postat: 1 september 2012, 11:28:59
av Swech
Enda anledningen till motståndet är att säkerställa att det finns en logisk "1" på processorn
då knappen INTE är intryckt

Swech

Re: Varför behöver man en "pullup" (Arduino)

Postat: 1 september 2012, 11:41:51
av sodjan
> Enda anledningen att moståndet existerar/behövs är ju att säkerställa att det inte går för mycket
> ström mellan +5V och jord (kortslutning) NÄR knappen är nedtryckt.

Skitsnack. *Eller* så förutsätter du något om kopplingen som inte framgår.
T.ex att ingången skulle vara *fast* kopplad till +5V. I så fall får du skriva det.
Å andra sidan så ändrar det ju helt förutsättningarna för alltihopa och hela
diskussionen blir lite lätt meningslös.

Så som kopplingen är ritad så saknar motståndet funktion då knappen är nertryckt.

Re: Varför behöver man en "pullup" (Arduino)

Postat: 1 september 2012, 12:08:27
av ToPNoTCH
Jag gör det lätt för dig Sodjan.

1.) Ta bort motståndet ur schemat.
2.) Utan nedtryckt knapp = Inga problem
3.) Med nedtryckt knapp = Magisk rök

Hävdar du fortfarande att motståndet INTE fyller någon funktion vid nedtryckt knapp ?

Jag försöker lista ut hur du tänker här.
Det måste vara något med att du ser ordet "funktion" ur MCU'ns perspektiv. Det vill säga "för att få nolla på pinnen vid nedtryckt knapp så krävs inget motstånd" (eller +5V heller för den delen). Det kan nog vara så att jag ser på "funktion" att "hela kretsen skall funka och inte kortsluta".

Aja...Nog med psykoanalys.. :shock: