Hur fungerar digitalRead() på arduino?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Hur fungerar digitalRead() på arduino?

Inlägg av Al_Bundy »

Hej!

Jag har just kommit förbi digitalWrite() och den var enkelt att förstå. digitalWrite() skickar ut spänning i 5 volt om det är HIGH eller LOW.

Men nu har jag kommit till digitalRead() och jag förstår inte hur dom har tänkt här.
http://arduino.cc/en/Tutorial/DigitalReadSerial

Bild

Som ni ser här på bilden så är det kopplat så här.
Koden ser ni här nedan:

Kod: Markera allt

int pushButton = 2;

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  // make the pushbutton's pin an input:
  pinMode(pushButton, INPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input pin:
  int buttonState = digitalRead(pushButton);
  // print out the state of the button:
  Serial.println(buttonState);
  delay(1);        // delay in between reads for stability
}
Frågeställning:
Går det någon ström från pin 2 i PWM till jorden?
När kretsen är sluten så går det spänning från POWER 5V till GND (som kan betraktas som minuspolen). Men hur läser input 2 av detta? Går det spänning från POWER 5V till pin 2 i PWM och inte till GND när knappen är itryckt?

Best regards....
Al
Användarvisningsbild
Walle
Moderator
Inlägg: 7701
Blev medlem: 14 december 2004, 10:32:18
Ort: Stockholm

Re: Hur fungerar digitalRead() på arduino?

Inlägg av Walle »

Som så många andra har påpekat skulle du verkligen tjäna på att lära dig grunderna först.

När knappen inte är intryckt hålls D2 till jord via R1 (som är ett så kallat pull down-motstånd).
När knappen är intryckt kommer D2 naturligtvis ha samma potential som "på andra sidan knappen", d.v.s. 5 V i det här fallet.

Edit: Det här står förövrigt i klartext precis ovanför schemat som du postade i ditt inlägg:
When the pushbutton is open (unpressed) there is no connection between the two legs of the pushbutton, so the pin is connected to ground (through the pull-down resistor) and reads as LOW, or 0. When the button is closed (pressed), it makes a connection between its two legs, connecting the pin to 5 volts, so that the pin reads as HIGH, or 1.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur fungerar digitalRead() på arduino?

Inlägg av Al_Bundy »

Jag är inte så bra på engelska. Men jag tolkar ditt så här.

När knappen är ej itryckt så går spänningen från 5V till GND och då skriver arduinon ut det som 0.
När knappen är itryckt så går spänningen från 5V till D2 och då skriver arduinon ut det som 1.

Det jag inte förstår nu är varför blir det en 1:a när jag trycker ned knappen. Då har spänningen två val att gå. Antingen till D2 eller GND, men tydligen så väljer den D2. Är det pga motståndet?

Jag lär mig grunderna via praktiken.

EDIT:
Varför blir det 101010101010 när jag pluggar ur GND?
Användarvisningsbild
Walle
Moderator
Inlägg: 7701
Blev medlem: 14 december 2004, 10:32:18
Ort: Stockholm

Re: Hur fungerar digitalRead() på arduino?

Inlägg av Walle »

Det är feltolkat, när knappen inte är intryckt går det ingen spänning från 5 V (den är ju fysiskt frånkopplad!), men D2 hålls mot gnd (d.v.s. D2 får samma potential som gnd).

Spänningen "går" ingenstans, spänningen ligger över komponenter, strömmen går genom dem. Men det som är viktigt att komma ihåg är att alla punkter som är ihopkopplade utan motstånd (eller andra komponenter) har alltid samma potential. När knappen är intryckt så är D2 fysiskt ihopkopplad med 5 V. Potentialen/spänningen mellan 5 V och D2 blir då givetvis noll (det finns ju ingen resistans där emellan) och således så ligger D2 på exakt samma potential som 5 V-pinnen. Eftersom gnd ligger på 0 V så kommer spänningen över R1 således vara 5 V.
Jag lär mig grunderna via praktiken.
Problemet är ju att du inte öht verkar hänga med på hur det verkligen fungerar. Du bildar dig egna uppfattningar som är totalt felaktiga, just för att du inte kan grundläggande Ohms lag och Kirchoffs lag.

Angående det här med spänning och ström så brukar det vara pedagogiskt att tänka sig vatten i ett rör istället. En spänning motsvaras då i en tryckskillnad, och strömmen motsvaras av flödet. En resistor är helt enkelt en strypning. Kör du litet flöde genom strypningen så kommer tryckskillnaden över strypningen vara liten. Kör du större flöde genom strypningen kommer tryckskillnaden över strypningen att vara större.
TobiasEinarsson
Inlägg: 58
Blev medlem: 6 september 2012, 11:15:33
Ort: Göteborg

Re: Hur fungerar digitalRead() på arduino?

Inlägg av TobiasEinarsson »

Al_Bundy skrev:Varför blir det 101010101010 när jag pluggar ur GND?
arduino.cc skrev:If you disconnect the digital i/o pin from everything, the LED may blink erratically. This is because the input is "floating" - that is, it doesn't have a solid connection to voltage or ground, and it will randomly return either HIGH or LOW. That's why you need a pull-down resistor in the circuit.
Google Translate (med viss redigering) skrev:Om du kopplar bort den digitala I/O pinnen från allt, kan LED blinka oregelbundet. Detta beror på att ingången är "flytande" - den har alltså inte en fast anslutning till varken spänning eller jord, och det kommer slumpmässigt returnera antingen hög eller låg. Det är därför du behöver en pull-down resistor i kretsen.
Får jag föreslå att du hittar en kurs på svenska som du kan följa utan att fråga om allt här, alternativt går en engelskakurs (eller använder Google Translate)?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46974
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Hur fungerar digitalRead() på arduino?

Inlägg av TomasL »

Eftersom han siktar på maskiningenjör, så borde nog engelska vara högprioriterat, kan man tycka.
Användarvisningsbild
Walle
Moderator
Inlägg: 7701
Blev medlem: 14 december 2004, 10:32:18
Ort: Stockholm

Re: Hur fungerar digitalRead() på arduino?

Inlägg av Walle »

Ja, engelska är väl i princip det enda språk som gäller inom den inriktningen.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur fungerar digitalRead() på arduino?

Inlägg av Al_Bundy »

Walle skrev:Det är feltolkat, när knappen inte är intryckt går det ingen spänning från 5 V (den är ju fysiskt frånkopplad!), men D2 hålls mot gnd (d.v.s. D2 får samma potential som gnd).
Jag förstår att det går ingen spänning till D2 när knappen är intryckt.
Spänningen "går" ingenstans, spänningen ligger över komponenter, strömmen går genom dem. Men det som är viktigt att komma ihåg är att alla punkter som är ihopkopplade utan motstånd (eller andra komponenter) har alltid samma potential. När knappen är intryckt så är D2 fysiskt ihopkopplad med 5 V. Potentialen/spänningen mellan 5 V och D2 blir då givetvis noll (det finns ju ingen resistans där emellan) och således så ligger D2 på exakt samma potential som 5 V-pinnen. Eftersom gnd ligger på 0 V så kommer spänningen över R1 således vara 5 V.
Vi kan göra det lite enklare.
Jag förstår varför det blir 1 när jag kopplar ihop kablarna som går från 5V (eller 3.3V) och D2 med varandra.
Jag förstår också varför det blir 0 när jag kopplar ihop kablarna som går från GND (som är 0 V) och D2 med varandra.

Dock förstår jag inte varför det blir 10101010101 (på löpande band) när jag inte kopplar ihop någon av dessa kablar.

Jag förstår också varför arduinon hakar upp sig när jag ansluter kablarna 5V och GND med varandra. Jag misstänker att motståndet är det som förhindrar det.

Så nu har jag lärt mig att GND är 0V och det är anledningen varför det blir 0.
Och 0 volt igenom motståndet är ju 0 volt. Men varför kan det inte blir 0 om jag inte kopplar ihop D2 med GND? GND är ju 0 volt och det går ju ingen spänning där.
Jag lär mig grunderna via praktiken.
Problemet är ju att du inte öht verkar hänga med på hur det verkligen fungerar. Du bildar dig egna uppfattningar som är totalt felaktiga, just för att du inte kan grundläggande Ohms lag och Kirchoffs lag.
[/quote]
Tyvärr är jag en person som måste hålla på med praktiska saker för att lära mig. Jag har prövat att läsa litteraturer som inte ingår i programmet och det blir rätt ganska...slappt. Därför tänkte jag nu lära mig via praktiken. Jag märker direkt skillnad.
Kirchoffs lag kan jag redan.
Senast redigerad av Al_Bundy 6 oktober 2013, 22:56:58, redigerad totalt 1 gång.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur fungerar digitalRead() på arduino?

Inlägg av Al_Bundy »

TomasL skrev:Eftersom han siktar på maskiningenjör, så borde nog engelska vara högprioriterat, kan man tycka.
Walle skrev:Ja, engelska är väl i princip det enda språk som gäller inom den inriktningen.
Tyvärr inte. Att vara maskiningenjör handlar inte i huvudsaken att man ska vara duktig på engelska.
Det handlar att man ska klara kurserna.

Vi har EN 7.5 hp valbar kurs som är engelska. Många..inkl. mig...brukar prioritera något viktigare.
Kaggen
Inlägg: 432
Blev medlem: 29 januari 2005, 03:06:02

Re: Hur fungerar digitalRead() på arduino?

Inlägg av Kaggen »

Dock förstår jag inte varför det blir 10101010101 (på löpande band) när jag inte kopplar ihop någon av dessa kablar.
Ingångar är väldigt känsliga. Man bör alltid sätta ben som man inte använder som utgångar.

Jag antar att du hört talas om statisk elektricitet och ESD? En ingång på en microcontroller plockar lätt upp sådant och ger därför utslag. Håller man handen i närheten eller andra saker som t.ex mobiler, ljusrör annan elektronik så kan det vara tillräckligt för att ge utslag på en ingång.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur fungerar digitalRead() på arduino?

Inlägg av Al_Bundy »

Okej. Tackar.
Jag tolkar som att D2 kräver en någon typ av spänning. Om det är 0 volt eller 10 volt eller 3.334 volt.
Den nöjer sig inte med - volt för då vet arduinon inte om den ska sätta ut en 1:a eller 0:a ?

Kan man formulera så? :)

Ungefär som denna.
http://arduino.cc/en/Tutorial/AnalogReadSerial

Arduino måste alltså få någon resistans annars vet de Arduino inte vad den ska skriva ut.
Om jag bara kör koden som den är utan att koppla upp sakerna så spottar den ut randomtal mellan 0 och 1023, dvs 1024 "positioner" eller vad man ska säga.

analogRead() förstår jag nu när jag förstår digitalRead().
Siffran som spottas på monitor ut avgörs hur mycket spänning som kommer till A0 från 5V.
Jag gissar på att om man bara kopplade A0 med 5V så ges 1023 och kopplar man bara ihop A0 med 0V (GND) så blir siffran på monitoren 0. Halverar man spänningen som går från 5V till A0 så antar jag man kommer landa på 1024/2 vilket är 512.
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Hur fungerar digitalRead() på arduino?

Inlägg av bearing »

Ingången har ett schmitt trigger-steg. Det betyder att det finns tröskelvärden, och hysteres, för vilka spänningar som räknas som 1:a och 0:a. Vad tröskelvärdena/hysteresen är kan du läsa i databladet för aktuell AVR. Grovt kan man säga att spänningar över 4V räknas som 1:a, och under 1V som 0:a, ifall matningen är 5V. Om spänningen ligger någonstans mellan trösklarna ändras inte den digitala siffran.

Bild
Bild
http://en.wikipedia.org/wiki/Schmitt_trigger

Det är inte tillåtet att koppla 10V till en ingång, eftersom att det överskrider matningsspänningen (5V).
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Hur fungerar digitalRead() på arduino?

Inlägg av jesse »

Al_Bundy skrev:Tyvärr inte. Att vara maskiningenjör handlar inte i huvudsaken att man ska vara duktig på engelska.
Det handlar att man ska klara kurserna.
Tyvärr så har du fel. Det handlar inte alls om att klara kurserna.
Det handlar om att förstå och vara intresserad av det innehåll som lärs ut på kurserna. Det är något helt annat än att "klara kurserna".
Om du bara är ute efter att klara kurserna så kommer du att få det svårt framöver.

Men nu undrar jag, AlBundy:

Varför svänger du dig med svåra termer som "spänning" och "ström" när du inte har en aning om vad det betyder? Vänta med att använda sådana begrepp tills du vet hur du ska använda dem! Jag länkade ju i förra tråden till en sida om kretsteori... Varför läste du inte den först? Om du hade läst (och förstått) så hade du inte behövt fråga något i den här tråden.
Går det någon ström från pin 2 i PWM till jorden?
Vad har PWM med saken att göra? Och vilken pinne på bilden kallar du för pin2 ?
Användarvisningsbild
säter
Inlägg: 35301
Blev medlem: 22 februari 2009, 21:16:35
Ort: Säter

Re: Hur fungerar digitalRead() på arduino?

Inlägg av säter »

Walle skrev:När knappen inte är intryckt hålls D2 till jord via R1 (som är ett så kallat pull down-motstånd).
När man sedan trycker in knappen, då sker alltså ett visst "läckage" av ström via R1?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46974
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Hur fungerar digitalRead() på arduino?

Inlägg av TomasL »

Al_Bundy skrev:
TomasL skrev:Eftersom han siktar på maskiningenjör, så borde nog engelska vara högprioriterat, kan man tycka.
Walle skrev:Ja, engelska är väl i princip det enda språk som gäller inom den inriktningen.
Tyvärr inte. Att vara maskiningenjör handlar inte i huvudsaken att man ska vara duktig på engelska.
Det handlar att man ska klara kurserna.

Vi har EN 7.5 hp valbar kurs som är engelska. Många..inkl. mig...brukar prioritera något viktigare.
Ja engelskan är nog bland det viktigaste, utan den så kan du aldrig någonsin jobba som ingenjör, eller nått annat lite mer avancerat jobb.
Skriv svar