Löda leds och knappar till MCU

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
sica06
Inlägg: 83
Blev medlem: 31 augusti 2008, 17:31:50
Ort: Karlskrona

Löda leds och knappar till MCU

Inlägg av sica06 »

Hej,

Har tänkt att använda externa knappar och leds till min AVR-P28-ATmega88.
Har aldrig lödat tidigare, men någon gång måste ju vara den första =)

Är varken extremt el-kunnig eller MCU-kunnig så därför har jag några frågor.
- Kan jag använda VCC (pin 7) som 5v källa till led och GROUND (pin 8) från led?
- Kan rent av använda vilken pinne som helst på MCU:n som strömkälla förutsatt att jag kan sätta Output på den?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Löda leds och knappar till MCU

Inlägg av sodjan »

> - Kan jag använda VCC (pin 7) som 5v källa till led och GROUND (pin 8) från led?

Nja, varken av dessa pinnar är ju strömkällor i sig. De måste matas från
någon annan spänningskälla. Däremot kan AVR och annat matas från
*samma* spänningskälla, om det är det du försöker säga...

> - Kan rent av använda vilken pinne som helst på MCU:n som strömkälla förutsatt att jag kan sätta Output på den?

Ja, så länge du inte överskrider specen för I/O pinnar enligt databladet.
Det är ju precis det man gör då man kopplar en LED till en I/O pinne...
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Löda leds och knappar till MCU

Inlägg av jesse »

Om du vill kunna styra LED med processorns utgångar så kopplar du t.ex. LED-ens anod (+) till en utgång via ett lämpligt motstånd. Katoden kopplar du sedan till GND. Då ska det fungera. Då kommer den att lysa om du aktiverar utgången och skickar ut en "etta". Skickar du ut "nolla" så släcks dioden.

Ska du ha många LED som styrs av var sin utgång på processorn ska du alltså koppla ett motstånd för varje LED. Alla katoder kopplas sedan till GND. Jag kollade på bilden på din AVR-P28 och den verkar ju fixa matningsspänningen.

Beräkning av motstånd för LED:

R=U/I.

U är matningsspänningen, I = önskad ström i Ampere, R = motstånd i ohm. Vanligt är att man vill ha ca 20 mA eller något lägre. Antag att matningen är satt till 5 volt. Det ger R=5/0.020 = 250 Ω
Tag närmaste högre värde som går att köpa, t.ex. 270 Ω.
sica06
Inlägg: 83
Blev medlem: 31 augusti 2008, 17:31:50
Ort: Karlskrona

Re: Löda leds och knappar till MCU

Inlägg av sica06 »

OK, då är jag med. Vill bara kontrollera att jag har förstått det rätt att "utgångarna" kan kopplas till MCU:ns GND (pin nr 8 i mitt fall)?

Resp. leds "utgångar" som ska till GND, borde kunna sammankopplas i en sladd som går till GND?

Undrar också en annan sak som gäller interrupts:
- Gällande Pin Change Interrupt, är det så att MCU:n inte vet vilken pinne som har aktiverat ett interrupt (sånär som på vilket register PCMSK0/1/2)?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Löda leds och knappar till MCU

Inlägg av sodjan »

> LED-ens anod (+) till en utgång via ett lämpligt motstånd. Katoden kopplar du sedan till GND.

Av olika orsaker så är det bättre att koppla LED'ens katod till I/O pinnen och
anoden via ett motstånd till "plus". Visst, den kommer att tändas vid "0" på
pinnen och tvärtom, men det är ju inget problem.

> Vanligt är att man vill ha ca 20 mA eller något lägre...

Det beror ju väldigt mycket på vad som är syftet !

Om den ska *lysa upp*, ja visst, men ska den bara *synas* så
är det väldigt onödigt att köra 20 mA (eller något lägre). De flesta
LEDs syns helt OK redan vid ett par mA, och det förenklar det hela
på många sätt. Jag brukar köra med ca 1 kohm generellt till LEDs om
inte annan för att det ofta finns tillhanda och risken att väldigt liten
att man överbelaster något även om man använder flera LEDs. Det
finns inte heller någon anledning att räkna på det eftersom jag vet att
det har god marginal både för LED'en och för processorn.

I många motståndssatser så brukar det vara fler av t.ex 1 kohm just
därför att det är ett vanligt värde till mycket.

> Vill bara kontrollera att jag har förstått det rätt att "utgångarna" kan kopplas till MCU:ns GND (pin nr 8 i mitt fall)?

Vilka "utgångar" ? Du ska inte koppla en I/O pinne (om det är det du menar med
en "utgång") *direkt* till GND i alla fall !

> Resp. leds "utgångar" som ska till GND, borde kunna sammankopplas i en sladd som går till GND?

:-) vad är skillnaden ??

> är det så att MCU:n inte vet vilken pinne som har aktiverat ett interrupt

Jag har inte kollat AVR speciellt, men m bara en PCMSK bit är satt så måste det ju
vara den. Annars får du nog kolla de aktuella bitarna själv (i koden).
sica06
Inlägg: 83
Blev medlem: 31 augusti 2008, 17:31:50
Ort: Karlskrona

Re: Löda leds och knappar till MCU

Inlägg av sica06 »

>Vilka "utgångar" ? Du ska inte koppla en I/O pinne (om det är det du menar med
en "utgång") *direkt* till GND i alla fall !

- Led:ns katoder.
Det jag vill vara säker på är bara att sladdar/kabel/wires från led:ns katod kan kopplas till MCU:ns GND, samt att dessa sladdar/kabel/wires kan kopplas ihop till en sladd/kabel/wire som går till GND (istället för att flera sladdar/kabel/wires-ändar går till GND).
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Re: Löda leds och knappar till MCU

Inlägg av MicaelKarlsson »

"Jag brukar köra med ca 1 kohm generellt till LEDs om
inte annan för att det ofta finns tillhanda och risken att väldigt liten
att man överbelaster något även om man använder flera LEDs."


Bra råd!!

För Mega88 är det max 200mA som gäller enligt databladet: http://www.atmel.com/dyn/resources/prod ... oc2545.pdf se sidan 302
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Löda leds och knappar till MCU

Inlägg av jesse »

>Gällande Pin Change Interrupt...

hm.. det varierar mellan olika processorer. Det går att utläsa av databladet, som man måste läsa noga om man ska kunna förstå något. "External interrupts" börjar på sidan 80. På sid 82 kan man läsa att du först väljer vilken grupp av I/O du ska aktivera, du kan alltså ha tre olika PIN_CHANGE interrupts. Om du bara aktiverar en pinne i varje grupp med PCMSKn ( "PCINT23..16 pins are enabled individually by the PCMSK2 Register." ) så vet du att det bara gäller just den pinnen och ingen annan. Men om du vill kunna känna av flera pinnar samtidigt inom samma grupp måste du i själva interruptrutinen kolla vilken pinne som ändrats, t.ex. genom att läsa in porten och jämföra med tidigare lagrat värde

(hoppsan nu kraschade min webbläsare, bäst att avsluta det här nu) :roll:
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Löda leds och knappar till MCU

Inlägg av sodjan »

> Det jag vill vara säker på är bara att sladdar/kabel/wires från led:ns katod kan kopplas till MCU:ns GND,

Nja, det är fel sätt att se på det och att uttrycka det.
Katoderna kopplas igentligen inte till *processorns* GND, utan till den GND
som din spänningsmatning har (dit sannolikt även GND på processorn är
kopplad, men det är en annan sak, så att säga). Som sagt, du rör till
det lite och gör det lite svårare än vad det är genom att hänga upp
dig på processorn. GND är GND och många olika saker kan kopplas dit.

> ...samt att dessa sladdar/kabel/wires kan kopplas ihop till en sladd/kabel/wire
> som går till GND (istället för att flera sladdar/kabel/wires-ändar går till GND).

Som sagt, vad är skillnaden ? Ingen alls !
GND är GND oavsett hur du kopplar.
(Vi bortser från sådant som jordslingor och dyligt vilket
kan ha betydelse i analoga kretsar då man ofta vill dra alla
jordledningar till en gemensam punkt.)

Jesse, ah, OK. ja PCMKSn register har en egen interrupt vektor ser jag
nu. Nu är det ju som du säger olika I/O pinnar för varje PCMSKn register
så man kan inte ta vilka tre pinnar som helst, det måste vara en ur varje
register, vilket kanske inte är optimalt i den aktuella kopplingen eller hur
I/O portarna används för övrigt.
sica06
Inlägg: 83
Blev medlem: 31 augusti 2008, 17:31:50
Ort: Karlskrona

Re: Löda leds och knappar till MCU

Inlägg av sica06 »

>Men om du vill kunna känna av flera pinnar samtidigt inom samma grupp måste du i själva interruptrutinen kolla vilken pinne som ändrats, t.ex. genom att läsa in porten och jämföra med tidigare lagrat värde

Har läst i databladet om detta och misstänkte mycket riktigt detta.
Detta, att använda flera pinnar i PCMSK-register, har ju säkert gjorts tidigare av ganska många. Något tips på hur jag bör lösa det för att ta reda på vilken av pinnarna som orsakat interruptet? Utan att använda polling, som jag tror det kallas när man via hårdvaran "lyssnar" på ev. ändringar, kan jag själv inte komma på något omedelbart.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Löda leds och knappar till MCU

Inlägg av sodjan »

Polla behöver du inte göra, det är ju just därför du använder interrupt-on-change.
Men du behöver spara I/O registren vad varje interrupt-on-change för att
ha något att jämföra med vid *nästa* interrupt-on-change. Eller i alla fall
de aktuella bitarna som du vill kolla/bevaka. XOR är en trevig operation
för att kolla vilka bitar som har ändrats...
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Löda leds och knappar till MCU

Inlägg av jesse »

Jag har gjort så att när interrupt sker så läser jag in porten omedelbart i början av själva interruptrutinen.
Sen jämför jag värdet jag får med ett lagrat värde från förra interupten. Det gör jag med EOR i assembler, dvs bitvis exklusive eller (vet inte hur den operatorn ser ut i C)
Då får du en ettställd bit för den pinne som ändrat värde och du kan t.ex. göra olika saker beroende på vilken
bit som satts. Du sparar det nya inlästa värdet från porten att jämföra med till nästa gång.

Vill du läsa mer detaljerat så kolla här.


Detta fungerar vid långsamma förlopp som t.ex. knapptryckningar. ( det tar ett antal klockcykler att utföra interruptet, ändringarna får inte vara snabbare än så)
sica06
Inlägg: 83
Blev medlem: 31 augusti 2008, 17:31:50
Ort: Karlskrona

Re: Löda leds och knappar till MCU

Inlägg av sica06 »

OK, tror jag förstår.
Du menar:
- Jag sparar värdet från PINC innan en interrupt. Vid en interrupt så hinner jag avläsa ett nytt värde på PINC som jag EOR:ar med det gamla, på så vis kan jag peka ut porten?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Löda leds och knappar till MCU

Inlägg av sodjan »

> Jag sparar värdet från PINC innan en interrupt.

Nej. Vid *varje* interrupt (i slutet av, sannolikt).

> Vid en interrupt så hinner jag avläsa ett nytt värde på PINC

Vid *nästa* interrupt (i början av).
sica06
Inlägg: 83
Blev medlem: 31 augusti 2008, 17:31:50
Ort: Karlskrona

Re: Löda leds och knappar till MCU

Inlägg av sica06 »

Ja, precis. Tänkte från första interrupten.

Tack för hjälpen!
Skriv svar