Sida 1 av 1

Löda leds och knappar till MCU

Postat: 12 juli 2009, 11:52:27
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?

Re: Löda leds och knappar till MCU

Postat: 12 juli 2009, 12:04:41
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...

Re: Löda leds och knappar till MCU

Postat: 12 juli 2009, 12:17:34
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 Ω.

Re: Löda leds och knappar till MCU

Postat: 12 juli 2009, 12:26:18
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)?

Re: Löda leds och knappar till MCU

Postat: 12 juli 2009, 12:30:13
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).

Re: Löda leds och knappar till MCU

Postat: 12 juli 2009, 12:43:14
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).

Re: Löda leds och knappar till MCU

Postat: 12 juli 2009, 12:44:19
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

Re: Löda leds och knappar till MCU

Postat: 12 juli 2009, 13:16:35
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:

Re: Löda leds och knappar till MCU

Postat: 12 juli 2009, 13:24:13
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.

Re: Löda leds och knappar till MCU

Postat: 12 juli 2009, 13:30:53
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.

Re: Löda leds och knappar till MCU

Postat: 12 juli 2009, 13:35:35
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...

Re: Löda leds och knappar till MCU

Postat: 12 juli 2009, 13:50:51
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å)

Re: Löda leds och knappar till MCU

Postat: 12 juli 2009, 14:04:46
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?

Re: Löda leds och knappar till MCU

Postat: 12 juli 2009, 14:09:30
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).

Re: Löda leds och knappar till MCU

Postat: 12 juli 2009, 14:10:43
av sica06
Ja, precis. Tänkte från första interrupten.

Tack för hjälpen!