5.5.2 · D1 · Coding › Embedded Systems & Real-Time Software › GPIO — input - output, pull-up - pull-down, interrupt on pin
Ek GPIO pin ek single wire hai jise ek chhota computer ya to voltage push kar sakta hai (output) ya voltage feel kar sakta hai (input) — aur baaki sab kuch (resistors, interrupts, active-LOW logic) sirf usi ek wire ko reliable aur responsive banane ki machinery hai. Teen pictures master karo — ek wire jo do possible heights par ho sakti hai, ek resistor jo gently us height ko hold karta hai, aur ek "tap on the shoulder" jab height jump kare — aur poora parent note obvious ho jaata hai.
Yeh D1 foundations page hai. Parent note (GPIO topic ) bahut saare symbols ek saath throw karta hai: V D D , GN D , HIGH/LOW, R , I , "Hi-Z", "edge", volatile. Neeche hum inme se har ek ko bilkul zero se build karte hain — pehle plain words, phir picture, phir kyun yeh topic iske bina nahi chal sakta .
Voltage do points ke beech ka electrical push hai, jo volts (V) mein measure hota hai. Ise ek height ki tarah socho: jo point "upar hai" woh charge ko neeche ki taraf push karna chahta hai us point ki taraf jo "neeche hai".
Picture yeh hai: har wire ko ek paani ki tank ki tarah imagine karo jo kisi height par rakhi ho. Paani (charge) ek unchi tank se ek chhoti tank ki taraf bahta hai. Voltage hai floor ke comparison mein tank kitni unchi hai .
Hum height hamesha kisi cheez ke relative measure karte hain. Us reference floor ko ground kehte hain.
GN D
Ground (symbol GN D ) agreed zero-height reference hai — floor. Hum ise define karte hain 0 volts ke roop mein. Circuit ki har doosri voltage "floor se kitna upar hai" ke roop mein measure hoti hai.
Definition Supply voltage
V D D
V D D chip ki sabse zyada voltage hai — tank ka top, "ceiling". Common values: 3.3 V ya 5 V . Subscript D D purana transistor jargon hai (drain supply); ise bas "positive rail" samjho.
Yeh topic inka kyun use karta hai: pin ke "HIGH" ya "LOW" hone ke baare mein har ek sentence secretly matlab hai "close to V D D " ya "close to GN D ". Floor (GN D ) aur ceiling (V D D ) ke bina, HIGH aur LOW ke words meaningless hain.
Ek digital wire sirf do heights ki parwah karta hai:
HIGH = ceiling V D D ke paas = hum ise logic 1 kehte hain.
LOW = floor GN D ke paas = hum ise logic 0 kehte hain.
Jo bhi clearly upar ke paas ho woh 1 count hota hai, jo bhi clearly neeche ke paas ho woh 0 count hota hai. Messy middle "undefined" hai — hum isse avoid karte hain.
Picture yeh hai: ek light switch ke sirf up aur down hote hain. Koi "half-on" nahi hota jise digital world respect kare.
Yeh topic iska kyun use karta hai: button padhna, LED drive karna, interrupt fire karna — yeh sab CPU ka yeh decide karna hai ki "kya yeh wire 1 hai ya 0?"
Output pin woh hota hai jise CPU drive karta hai : woh wire ko apni chosen height par force karta hai (HIGH ya LOW). CPU paani ka pump hai.
Input pin woh hota hai jise CPU sense karta hai : woh sirf wire ki height measure karta hai bina ise force kiye. CPU ek thermometer hai, pump nahi.
Intuition Yeh physically alag kyun hain
Push karna (output) ek strong pump chahiye jo charge bahar dhakkel sake ya ander khiinch sake. Feel karna (input) ek super-gentle sensor chahiye jo almost koi charge nahi leta — warna woh us cheez ko hi disturb kar dega jise woh measure kar raha hai. Isliye chips alag registers rakhte hain "main kya write karta hun" vs "main kya read karta hun" ke liye: yeh same pin par do alag hardware pieces hain.
Yeh topic iska kyun use karta hai: poora note "output half" (push-pull, open-drain) aur "input half" (pull resistors, floating, interrupts) mein split hota hai. Yeh root fork hai.
I
Current charge ka flow rate hai — per second kitna paani guzarta hai — jo amperes (A) mein measure hota hai. Chhote flows milliamps use karte hain (1 mA = 0.001 A ) ya microamps (1 μ A = 0.000001 A ).
R
Resistance yeh hai ki ek component flow ko kitna fight karta hai , jo ohms (Ω ) mein measure hota hai. Ek patli, kinked pipe = high resistance = thoda paani guzarta hai.
Intuition Yeh tool kyun, kuch fancier kyun nahi?
Hume jawaab dena hai: "Agar ek pull-up resistor pin ko V D D se tie karta hai aur ek dabaya hua button use GN D se tie karta hai, toh kitna current waste hota hai?" Yeh seedha push-through-a-pipe question hai — sabse simple electrical relationship. Ohm's Law exact tool hai: yeh teen quantities ko link karta hai jo hamare paas already hain (V D D , R , I ) bina kisi extra ke. No calculus, no time — situation steady hai, isliye ek plain ratio hi sab kuch hai.
Worked example Parent ki pull-up calculation, zero se
Chip V D D = 3.3 V par run karti hai. Jab button dabaya jata hai toh poora 3.3 V pull-up resistor R ke across baithta hai, isliye current seedha ground tak flow karti hai. Hum chahte hain woh wasted current zyada se zyada 100 μ A ho.
R ≥ I V D D = 100 × 1 0 − 6 3.3 = 33 , 000 Ω = 33 k Ω
Bada R = kam wasted current, lekin bahut bada ho toh noise jeet jaata hai (section 6). Full trade-off ke liye Pull-up Resistor Sizing & Ohm's Law dekho.
Yeh topic iska kyun use karta hai: pull resistor value choose karna kuch nahi hai sirf is equation ke siwa.
Definition Impedance aur Hi-Z
Impedance resistance ka general cousin hai — phir se "current flow karna kitna mushkil hai". High-impedance (Hi-Z ) ka matlab hai resistance itna enormous ki almost koi current flow hi nahi karta — practically wire disconnected hai.
Picture yeh hai: ek pipe mein ek valve itna tight band ki koi paani nahi hilt. Pipe wahan hai , lekin electrically aise hai jaise aapne use kaat diya.
Intuition Hi-Z kyun matter karta hai
Parent note mein do uses hain:
Ek input pin deliberately near-Hi-Z hota hai taaki woh jo measure kar raha hai use disturb na kare.
Ek open-drain output wire ko chhor sakta hai (Hi-Z ho sakta hai) taaki doosra device use drive kar sake — aise shared buses kaam karte hain jaise I²C .
Khatre ki baat: ek Hi-Z pin jisme kuch bhi connected nahi hai woh floating hai (agla section).
Intuition Floating ki picture
Ek Hi-Z input pin jo koi charge hold nahi karti woh ek jhule ki tarah hai jo hawaon mein hang kar rahi ho — sabse chhoti si breeze (paas ki wires ka electrical noise, mains hum, aapki ungli) use upar ya neeche nudge kar deti hai. Ise padho aur aapko ek random 1 ya 0 milega.
Definition Pull-up / Pull-down resistor
Ek weak (large, ≈ 10 –50 k Ω ) resistor jo gently ek floating pin ko ek known height se tie karta hai:
Pull-up → resistor to V D D → idle reads HIGH (1) .
Pull-down → resistor to GN D → idle reads LOW (0) .
Intuition "Weak" = large resistance kyun
"Weak" ka matlab hai yeh pin ko sirf itna firmly hold karta hai ki noise ko beat kar sake, lekin itna loosely ki koi bhi real driver use instantly override kar sake. Ek soft rubber band, steel cable nahi. Jab ek strong output (kuch ohms) ek 33 k Ω pull-up se fight karta hai, strong side hazaron se ek ke antar se jeet jaata hai — exact numbers ke liye Switch Debouncing aur parent ki divider argument dekho.
Yeh topic iska kyun use karta hai: yeh "#1 beginner bug" ka fix hai — ek button jo press hone par read hota hai jab chhua nahi gaya ho.
Ek signal active-LOW hota hai jab interesting event use 0 par drive karta hai, aur uska idle/resting state 1 hota hai. Standard button wiring active-LOW hai: pull-up idle = HIGH = 1, press karne se pin GN D se connect ho jaata hai = LOW = 0.
Picture yeh hai: "alarm" wire ka ceiling se gir ke floor par jaana hai, upar uthna nahi.
Yeh topic iska kyun use karta hai: kyunki internal pull-ups common hain aur grounding electrically clean hai, real hardware "pressed = 0" read karta hai, jo beginners ko surprise karta hai. Isko naam dene se surprise door ho jaata hai.
Definition Rising / falling edge
Ek edge woh pal hai jab wire ka level change hota hai:
Rising edge : 0 → 1 (upar jump karta hai).
Falling edge : 1 → 0 (neeche gir jaata hai).
Ek edge time mein ek event hai, steady state nahi.
Picture yeh hai: time ke against plot ki gayi wire ki height ek staircase jaisi dikhti hai. Vertical step edge hai — jump ka woh instant.
Intuition Hum level ki bajaye edge ki kyun parwah karte hain
Ek button press ek transition hai, ek event jo ek baar hota hai. Hum ek press par ek baar react karna chahte hain, isliye hum falling edge (active-LOW) dekhte hain. Level dekhna ("while LOW") puri time jab tak button hold karo tab tak baar baar react karta rahega.
Yeh topic iska kyun use karta hai: interrupts edges par fire karte hain. "Edge" ka concept nahi, toh "interrupt on pin change" ka concept bhi nahi.
Definition Interrupt aur ISR
Ek interrupt hardware ka CPU ko uske current kaam se ek dam kheench lena hai jis pal ek chosen event (jaise falling edge) hota hai. Woh special function jisme woh jump karta hai ISR = Interrupt Service Routine hai.
Intuition Polling vs interrupt
Polling : CPU ek second mein laakhon baar poochta hai "abhi badla? abhi badla?" — exhausting, aur yeh ek fast pulse ko blink kar ke miss bhi kar sakta hai.
Interrupt : CPU doosra kaam karta hai; wire kandhe par tap karti hai jis pal woh change hoti hai.
Donon styles ki depth mein comparison Polling vs Interrupt-Driven I/O par karo aur ISRs ko achhe se design karo Interrupts & ISR Design ke saath.
Yeh topic iska kyun use karta hai: note ka poora "interrupt on pin change" wala half yahi idea hai. Rule "ISR chhota rakho, flag clear karo" — yeh sab yahaan se aata hai.
volatile ek keyword hai jo aap ek aisi variable par lagate ho jo ISR aur main code ke beech shared hoti hai. Yeh compiler ko batata hai: "yeh value tumhari peethe peeche change ho sakti hai — hamesha isse memory se fresh re-read karo, kabhi cache mat karo."
Imagine karo tumne ek number whiteboard par likha, phir use memory se recite karte rahe. Agar ek chhupa dost (ISR) quietly whiteboard change kar de, toh tumhe pata hi nahi chalega — tum apni stale memory se recite kar rahe ho. volatile tumhe har baar whiteboard dekhne par majboor karta hai. Details volatile & Memory-Mapped Registers par hain.
Yeh topic iska kyun use karta hai: iske bina, ek optimized build shared flag ko cache karta hai aur main loop kabhi ISR ka update nahi dekhta — parent ka "debug mein kaam karta hai, -O2 ke saath toot jaata hai" wala bug.
Right side cover karo aur parent note padhne se pehle har ek ka jawaab do:
Voltage kya hai, ek picture mein? Wire ke electrical push ki height , ground (floor) ke relative measure ki gayi.
GN D ka kya matlab hai aur uski voltage kya hai?Ground — agreed zero-height reference, 0 V ke roop mein define kiya gaya.
V D D kya represent karta hai?Chip ki supply voltage — top rail / ceiling (jaise 3.3 V ya 5 V).
HIGH aur LOW kaunsi logic values aur kaunsi heights se correspond karte hain? HIGH = logic 1 = V D D ke paas; LOW = logic 0 = GN D ke paas.
Input pin aur output pin mein kya fark hai? Output wire ko ek chosen level par drive (push) karta hai; input wire ko sense (feel) karta hai bina use force kiye.
Ohm's Law aur uska rearranged form batao jo topic use karta hai. V = I ⋅ R , rearranged to I = V / R .
3.3 V pin ke liye 100 µA capped ho toh kaunsi pull-up value milegi? R ≥ 3.3/ ( 100 × 1 0 − 6 ) = 33 k Ω .
High-impedance (Hi-Z) ka kya matlab hai? Resistance itni badi ki essentially koi current flow nahi karta — wire disconnected act karti hai.
Floating pin kya hai aur yeh bura kyun hai? Ek undriven input jo noise pick up karta hai aur random 1 ya 0 read karta hai.
Pull-up vs pull-down: dono kaunsa idle level dete hain? Pull-up → idle HIGH (1); pull-down → idle LOW (0).
Button ke liye "active-LOW" ka kya matlab hai? Idle 1 read karta hai; press event pin ko 0 par drive karta hai.
Rising edge aur falling edge define karo. Rising = 0 → 1 ; falling = 1 → 0 — woh instant jab level change hota hai.
ISR kya hai? Interrupt Service Routine — woh function jisme CPU jump karta hai jab interrupt fire hota hai.
ISR-shared flag volatile kyun hona chahiye? Taaki compiler ise har baar memory se re-read kare na ki stale copy cache kare.