Hur fungerar digitalRead() på arduino?
Re: Hur fungerar digitalRead() på arduino?
Exakt, i storleksordningen 1 mA eller så i det här fallet (förutsatt att man använder 4k7 som pull-down, vilket är vanligt).
Däremot så går det i princip ingen ström alls in genom pinnen D2 eftersom den är mycket hög-impediv när porten är konfigurerad som ingång.
Viktigt att tänka på är också att om man råkar konfigurera porten som utgång med en nolla lagt på utgången så kortsluter man effektivt +5 till gnd, genom utgången, om man trycker på knappen. Detta kan vara destruktivt för Arduinon, om den saknar skydd. Notera dock att jag kan noll och nada om Arduino, jag förutsätter att de dubbelriktade portarna är s.k. tri-state som har hög impedans när de är konfigurerade som ingång och är open collector när de konfigureras som utgång.
Däremot så går det i princip ingen ström alls in genom pinnen D2 eftersom den är mycket hög-impediv när porten är konfigurerad som ingång.
Viktigt att tänka på är också att om man råkar konfigurera porten som utgång med en nolla lagt på utgången så kortsluter man effektivt +5 till gnd, genom utgången, om man trycker på knappen. Detta kan vara destruktivt för Arduinon, om den saknar skydd. Notera dock att jag kan noll och nada om Arduino, jag förutsätter att de dubbelriktade portarna är s.k. tri-state som har hög impedans när de är konfigurerade som ingång och är open collector när de konfigureras som utgång.
Senast redigerad av Walle 7 oktober 2013, 00:24:15, redigerad totalt 1 gång.
Anledning: Ändrade 10 mA till 1 mA, felräkning.
Anledning: Ändrade 10 mA till 1 mA, felräkning.
Re: Hur fungerar digitalRead() på arduino?
GND är en förkortning av "ground", vilket är engelska (Al_Bundy skrev:Så nu har jag lärt mig att GND är 0V

Du verkar ha inställningen att begrepp och definitioner inte är så viktiga för dig. Att du kan klara dig med mer lösa/flytande/mjuka definitioner av begreppen. Det kommer inte att hålla i längden. Du kommer behöva lära dig en (hel) del "hård kunskap".
Re: Hur fungerar digitalRead() på arduino?
Jag har bra betyg och ger mycket i skolan.jesse skrev: 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 om du har rätt så har alla mina lärare (doktorsexamen, docenter) fel.
Jag kanske skrev fel ovan. Men strömen är I, ampere och spänningen är U(eller V) volt.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.
Det står PWM just vid pinne 2. Så därför skrev jag det.Vad har PWM med saken att göra? Och vilken pinne på bilden kallar du för pin2 ?
Re: Hur fungerar digitalRead() på arduino?
Ja. Det är viktigt. Men nu ska vi inta ta i.TomasL skrev: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.Al_Bundy skrev:TomasL skrev:Eftersom han siktar på maskiningenjör, så borde nog engelska vara högprioriterat, kan man tycka.Tyvärr inte. Att vara maskiningenjör handlar inte i huvudsaken att man ska vara duktig på engelska.Walle skrev:Ja, engelska är väl i princip det enda språk som gäller inom den inriktningen.
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.
Det finns förstås kurser som är...viktigare...på papper t.o.m.

Re: Hur fungerar digitalRead() på arduino?
Jag vet att GND är ground.bearing skrev:GND är en förkortning av "ground", vilket är engelska (Al_Bundy skrev:Så nu har jag lärt mig att GND är 0V), och betyder jord. Jord har potentialen 0V.
Du verkar ha inställningen att begrepp och definitioner inte är så viktiga för dig. Att du kan klara dig med mer lösa/flytande/mjuka definitioner av begreppen. Det kommer inte att hålla i längden. Du kommer behöva lära dig en (hel) del "hård kunskap".
Det var ca 9 år sedan jag höll på med elektronik, praktiskt alltså.
Jag har aldrig hållt på med en mikroprocessor förut.
Om du undrar "Men du har ju över 400 inlägg och varit aktiv här länge???".
Tjaa...jag får alltid förslag från folk vart jag ska börja. Många tycker att jag ska läsa massa böcker, och sedan ge mig på praktiken. När jag väl gör det så tycker folk att jag gör fel. De anser att man kan lära sig allt via praktiken om man har tillgång. Då när jag gör det så blir en annan del av kunskapsberikande folk lite sne och anser att man ska göra si och så först.
Så jag tänkte att köra på praktiken istället.
Jag kommer bara läsa igenom böckerna bara, så jag vet vad det är för något och vad man brukar använda det till.
Senast redigerad av Al_Bundy 7 oktober 2013, 00:19:02, redigerad totalt 2 gånger.
- SeniorLemuren
- Inlägg: 8427
- Blev medlem: 26 maj 2009, 12:20:37
- Ort: Kristinehamn
Re: Hur fungerar digitalRead() på arduino?
Hmm. Svängde du till med 10mA bara så där eller räknade du fel på en tiopotens?Walle skrev:Exakt, i storleksordningen 10 mA eller så i det här fallet (förutsatt att man använder 4k7 som pull-down, vilket är vanligt).
I = 5/4700 = 1mA
Eller är det jag som bara är trött?

Re: Hur fungerar digitalRead() på arduino?
Utgångarna är byggda i CMOS, och kan både ge och ta ström. Jag har provat att ha utgångar kortslutna i flera minuter, och mätt hur mycket ström som går genom dem. Det verkar som att de är strömbegränsade. Dels har de en resistans på omkring 30 ohm (matningsberoende), och dels verkar det som att strömmen begränsas till omkring 80mA (om jag minns rätt) ifall den kortsluts med 5V-matning. Jag vet inte om strömbegränsningen beror på att kanalen blir så het att resistansen stiger, eller om det är så att transistorn aldrig drivs till mättning, så att strömmen begränsas på det viset. En 8-pin DIP blir ljummen ifall den får stå ett tag med ett par utgångar kortslutna...Walle skrev:Viktigt att tänka på är också att om man råkar konfigurera porten som utgång med en nolla lagt på utgången så kortsluter man effektivt +5 till gnd, genom utgången, om man trycker på knappen. Detta kan vara destruktivt för Arduinon, om den saknar skydd. Notera dock att jag kan noll och nada om Arduino, jag förutsätter att de dubbelriktade portarna är s.k. tri-state som har hög impedans när de är konfigurerade som ingång och är open collector när de konfigureras som utgång.

Re: Hur fungerar digitalRead() på arduino?
Oooops, bra att du såg det! Jag huvudräknade fel en tiopotens, skyller på att jag är trött (och fullkomligt värdelös på huvudräkningSeniorLemuren skrev:Hmm. Svängde du till med 10mA bara så där eller räknade du fel på en tiopotens?Walle skrev:Exakt, i storleksordningen 10 mA eller så i det här fallet (förutsatt att man använder 4k7 som pull-down, vilket är vanligt).
I = 5/4700 = 1mA
Eller är det jag som bara är trött?


Edit: Bearing, där ser man! Ja det är klart, Arduino är ju tänkt att den ska vara så enkel som möjligt att använda, och i det ingår det väl också att den inte ska förstöras vid minsta lilla felkoppling

Re: Hur fungerar digitalRead() på arduino?
Nu är det väl så att engelska, liksom matte och att kunna läsa och skriva, är grundläggande. Det är liksom inte något man läser vid sidan om bara för att lära sig engelska - det behöver man kunna för att klara av allt det andra. Så utan engelska eller matte så klarar man inte heller maskinteknik eller vad det nu är som är huvudämnet... Därför är engelska bland det viktigaste.
Samma sak inom elektroniken. Kretsteorin, ohms lag mm.. är grunden. Utan den kommer det att bli svårt att lära sig något om transistorer, dioder eller andra komponenter.
Det är alltså spänningen som mäts på ingången. (inte ström eller resistans, även om dessa saker kan påverka spänningen).
En analog ingång på en processor drar en försumbart låg ström. Så om du gör en spänningsdelare med två motstånd mellan +5V och GND, och ansluter till den analoga ingången, så får du ett värde som motsvarar spänningen i spänningsdelaren:


Så om t.ex. R1 = 22kohm och R2 = 33kohm så får du spänningen V1 = 22/(33+22) * 5.0 volt = 2.0 volt, vilket då i analog read blir 40% av 1024 = ca 410.
En digital ingång tolkar all spänning över 0.66 * VCC som "etta", och allt under 0.33 * VCC som "nolla". (VCC = matningsspänningen, dvs 5 volt). Där i mellan är det inte helt säkert vad det blir, eftersom gränsen är lite osäker.
Samma sak inom elektroniken. Kretsteorin, ohms lag mm.. är grunden. Utan den kommer det att bli svårt att lära sig något om transistorer, dioder eller andra komponenter.
Helt korrekt!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.
Det är alltså spänningen som mäts på ingången. (inte ström eller resistans, även om dessa saker kan påverka spänningen).
En analog ingång på en processor drar en försumbart låg ström. Så om du gör en spänningsdelare med två motstånd mellan +5V och GND, och ansluter till den analoga ingången, så får du ett värde som motsvarar spänningen i spänningsdelaren:


Så om t.ex. R1 = 22kohm och R2 = 33kohm så får du spänningen V1 = 22/(33+22) * 5.0 volt = 2.0 volt, vilket då i analog read blir 40% av 1024 = ca 410.
En digital ingång tolkar all spänning över 0.66 * VCC som "etta", och allt under 0.33 * VCC som "nolla". (VCC = matningsspänningen, dvs 5 volt). Där i mellan är det inte helt säkert vad det blir, eftersom gränsen är lite osäker.
Re: Hur fungerar digitalRead() på arduino?
Processorn på ett Arduino-kort brukar vara en ATmega. Arduino är i princip bara ett mjukvarubibliotek, samt en standardiserad placering av några stiftlister. Det finns inte någon extern elektronik som skyddar processorns I/O, utan ledningar är dragna direkt från kretsen till stiftlisterna!Walle skrev:Bearing, där ser man! Ja det är klart, Arduino är ju tänkt att den ska vara så enkel som möjligt att använda, och i det ingår det väl också att den inte ska förstöras vid minsta lilla felkoppling
Den begränsning jag mätt upp gissar jag finns inbyggd i alla ATmega/-tiny, efter att ha provat några exemplar. Enligt databladet får man använda max 20mA, med 40mA "absolute max", så det är möjligt att 80mA bränner porten ifall den är kortsluten för länge, men de minuter jag provat verkar inte ha orsakat något fel på mina kretsar.
Re: Hur fungerar digitalRead() på arduino?
Intressant! Jag visste att de är baserade på ATmega, men jag trodde att det satt extern elektronik som så att säga "anpassade" den till "enklare användning". Man lär sig något nytt varje dag, som tur är! 
Vid nåt tillfälle när jag har fått lite elektronikprylar till båten så måste jag göra ett motsvarande test med några olika PICar.

Vid nåt tillfälle när jag har fått lite elektronikprylar till båten så måste jag göra ett motsvarande test med några olika PICar.
Re: Hur fungerar digitalRead() på arduino?
Varför använder man inte istället en brytare som drar ner till jord, när den är uppsläppt?Walle skrev:Exakt, i storleksordningen 1 mA eller så i det här fallet (förutsatt att man använder 4k7 som pull-down, vilket är vanligt).
Däremot så går det i princip ingen ström alls in genom pinnen D2 eftersom den är mycket hög-impediv när porten är konfigurerad som ingång.
Re: Hur fungerar digitalRead() på arduino?
Därför att ingången blir oansluten när brytaren växlas/glappar, och det är inte god praxis att låta ingångar av den här typen vara oanslutna. Dessutom är sådana brytare dyrare!
Re: Hur fungerar digitalRead() på arduino?
> Den begränsning jag mätt upp gissar jag finns inbyggd i alla ATmega/-tiny...
Nej, det är så som CMOS fungerar rent generellt. Om det inte handlar om
direkta "power" komponenter så är det normalt och inte "by design".
> ...Enligt databladet får man använda max 20mA...
Ja, för att Atmel ska garantera att *övriga* parametrar i databladet
faller inom de specade ramerna!
> med 40mA "absolute max"...
Men Atmel garanterar *inte* att processorn fungerar normalt vid "Absolute Max" nivåerna!
Atmel garanterar enbart att den inte tar *permanent* skada. Den måste dock inte "fungera".
> ...men de minuter jag provat verkar inte ha orsakat något fel på mina kretsar.
Jag kan garantera att du inte har en susning om det! Du har kört utanför
specifikationerna och kretsen är helt enkelt inte att lita på längre. Vad som
något "verkar" är ointressant.
Nej, det är så som CMOS fungerar rent generellt. Om det inte handlar om
direkta "power" komponenter så är det normalt och inte "by design".
> ...Enligt databladet får man använda max 20mA...
Ja, för att Atmel ska garantera att *övriga* parametrar i databladet
faller inom de specade ramerna!
> med 40mA "absolute max"...
Men Atmel garanterar *inte* att processorn fungerar normalt vid "Absolute Max" nivåerna!
Atmel garanterar enbart att den inte tar *permanent* skada. Den måste dock inte "fungera".
> ...men de minuter jag provat verkar inte ha orsakat något fel på mina kretsar.
Jag kan garantera att du inte har en susning om det! Du har kört utanför
specifikationerna och kretsen är helt enkelt inte att lita på längre. Vad som
något "verkar" är ointressant.
Re: Hur fungerar digitalRead() på arduino?
Fast detta är INTE unikt för MCU'er, ohms lag är ungefär så grundläggande det kan bli inom elektroniken, och hur höga och låga signaler fungerar är snarare grundläggande logik, du skulle få precis samma frågeställningar om du använde rena logikkretsar (typ 74xx/40xx).Al_Bundy skrev: Det var ca 9 år sedan jag höll på med elektronik, praktiskt alltså.
Jag har aldrig hållt på med en mikroprocessor förut.
Vad gjorde du egentligen för 9 år sedan om du missade hela denna biten ?
Prova att ställa frågan rakt ut, jag är helt säker på att dom håller med precis i det Jesse skriver, speciellt den första meningen.Al_Bundy skrev:Jag har bra betyg och ger mycket i skolan.jesse skrev: 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 om du har rätt så har alla mina lärare (doktorsexamen, docenter) fel.