PIC-styrd LED-matris
Re: PIC-styrd LED-matris
Jag hoppade över att lära mig assembler och gick direkt på C (som jag använt lite i windows tidigare). Det har jag inte ångrat en sekund kan jag säga! Din elfalänk pekar fel. Antar att det är den här: 73-344-18 ? Det där PICC Lite som följer med (och är gratis) har jag inte provat eftersom jag kört med PIC18 men det är säkert roligare än att tugga assembler.
Re: PIC-styrd LED-matris
Så nu har jag fått ihop ett program som fungerar. Kanske inte så elegant kod men den gör det den ska. Jag snyggade till koden lite för att den skulle bli enklare att följa, det kan ha smugit sig in några fel,(exempelvis så insåg jag plötsligt att "end" stod mitt i koden någonstans).
Ett par problem återstår dock. Den PIC jag använt (16F690) har bara 17 st output-pinnar, och jag vill nog styra en större matris än den klarar av på egen hand. Som jag förstått det så finns två alternativ:
1) En annan PIC med fler output-pinnar
2) Skiftesregister
Vad säger ni? Jag antar att jag inte kan använda något av min nuvarande kod om jag ska köra med skiftesregister. Men det oroar mig inte så mycket då jag nästan är säker på att få mer tid och pengar till projektet nu när jag kan visa min chef vad som är möjligt.
Ett annat problem är att jag behöver mer ström till mina lysdioder. Har ni något bra tips på hur jag kan få PICen att istället för att själv lysa upp LEDarna, styra vilka LED's som får ström från en extern källa. (Om jag fattat rätt så kan min PIC få ut ca 25 mA. Jag får inte ut så mycket ur min, kan tänka mig att det beror på flera anledningar, men även om det gjorde det så måste strömmen många gånger fördela sig på ett stort antal dioder som alla vill ha 20 mA var.)
En tredje grej. Av flera olika anledningar kan jag inte använda vilka LEDs som helst. De jag provat som fungerar bäst och jag med största sannolikhet kommer att använda i min färdiga produkt är någon av dessa tre: Grön 1200mcd 70°, Blå 2000mcd 40° eller Blå 600mcd 70°
Jag behöver alltså ljusstarka LEDs med hög strålningsvinkel. Jag hade gärna blandat röda och blåa (eller gröna) LEDs men jag hittar inga röda som har samma "Forward Voltage" som de blå och gröna. Om inte frammåtspänningen matchar så kommer väl bara de röda LEDarna lysa om det det är både röda och blå i ett plan som ska lysa? Tips?
Tack
/Filip
Kod: Markera allt
radix hex
include "P16F690.INC"
__config _CP_OFF & _WDT_OFF & _BOR_ON & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF
errorlevel -302
org 0 ;Här börjar programmet
goto INITIAL
org 4 ;Hit kommer man om falggan är "triggad"
goto INTERRUPT
;----------Lite variabler-------------------------------------------------------------------------------------
;Variablernas ändelser a,b och c står för portarna på PIC'en. Det är 7 anoder (7 plan) och 14 katoder (pelare).
;Port C 0-6 styr de sju planen (anoderna) och överiga portar styr pelarna (katoderna). Tänk på att LED-strukturen
;inte är kubisk utan har Zinkbände-struktur http://en.wikipedia.org/wiki/Sphalerite (med röda och icke-röda LEDs)
;-----------------------------------------------------------------------------------------------------------------
INITIAL
count equ 20 ;variabler till delay-looparna
count2 equ 21
plan1a equ 22 ;Här kommar alla bitar ställas så att rätt A-portar är höga när plan 1 ska blinka till
plan2a equ 23 ;Här kommar alla bitar ställas så att rätt A-portar är höga när plan 2 ska blinka till
plan3a equ 24 ;etc...
plan4a equ 25
plan5a equ 26
plan6a equ 27
plan7a equ 28
plan1b equ 29 ;Här kommar alla bitar ställas så att rätt B-portar är höga när plan 1 ska blinka till
plan2b equ 2A ;etc...
plan3b equ 2B
plan4b equ 2C
plan5b equ 2D
plan6b equ 2E
plan7b equ 2F
plan1c equ 30
plan2c equ 31
plan3c equ 32
plan4c equ 33
plan5c equ 34
plan6c equ 35
plan7c equ 36
sreg equ 37 ;Har koll på hur många gågner använder tryckt på knappen
;--------Rensar lite minne---------------------------------------------------
clrf PORTA
clrf PORTB
clrf PORTC
clrf sreg
clrf plan
clrf plan2
clrf plan1a
clrf plan1b
clrf plan1c
clrf plan2a
clrf plan2b
clrf plan2c
clrf plan3a
clrf plan3b
clrf plan3c
clrf plan4a
clrf plan4b
clrf plan4c
clrf plan5a
clrf plan5b
clrf plan5c
clrf plan6a
clrf plan6b
clrf plan6c
clrf plan7a
clrf plan7b
movlw b'00000001'
movwf plan7c ;Någon LED ska slysa när PIC'en startas
;-------------Sätter Special function register-------------------------------------------------
bsf STATUS,RP1 ;Bank 2
clrf ANSEL ;digital I/O
clrf ANSELH ;digital I/O
bsf STATUS,RP0
bcf STATUS,RP1 ;Bank 1
bcf INTCON,RABIF ;Interrupt-flaggan är nere
bsf INTCON,GIE ;"Enable all unmasked interrupts"
bsf INTCON,RABIE ;"Enable RB port change interrupt"
bsf IOCA,3 ;"Detect interrupts on port RA3", denna port går att jorda genom att tycka på en knapp
clrf TRISA
clrf TRISB
clrf TRISC ;alla portar är output utom RA3 som inte går att ändra
bcf STATUS,RP0 ;Bank 0
bsf STATUS,C ;Sätter carryn
goto MAINLLOP
;---------------------Programmet----------------------------------------------------------------
;Sju delar, där varje del lyser upp (blinkar) rätt LEDs i ett plan. Det finns totalt sju plan.
;SHORTDELAY räknar ner från 255 för att uppehålla blinkningen i lika många klockcykler (trycknappen fungerade bättre då).
;----------------------------------------------------------------------------------------------------
MAINLOOP
movf plan1a,0 ;in med bitarna från plan1a i arbetsminnet
movwf PORTA ;sätt rätt pinnar i port A
call SHORTDELAY ;vänta lite
movf plan1b,0 ;gör samma sak för port B
movwf PORTB
call SHORTDELAY ;vänta
movf plan1c,0
movwf PORTC ;och för port C, här bestämms vilken plan som kan lysa då alla anoder (plan) finns i port C
call SHORTDELAY
clrf PORTC ;sätt alla pinnar i port C låga, detta släckar alla LEDs då alla anoder finns i port C
call SHORTDELAY
movf plan2a,0 ;gör likadant för nästa plan i LED-stukturen...
movwf PORTA
call SHORTDELAY
movf plan2b,0
movwf PORTB
call SHORTDELAY
movf plan2c,0
movwf PORTC ;plan 2
call SHORTDELAY
clrf PORTC
call SHORTDELAY
movf plan3a,0 ;och nästa plan...
movwf PORTA
call SHORTDELAY
movf plan3b,0
movwf PORTB
call SHORTDELAY
movf plan3c,0
movwf PORTC ;plan 3
call SHORTDELAY
clrf PORTC
call SHORTDELAY
movf plan4a,0
movwf PORTA
call SHORTDELAY
movf plan4b,0
movwf PORTB
call SHORTDELAY
movf plan4c,0
movwf PORTC ;plan 4
call SHORTDELAY
clrf PORTC
call SHORTDELAY
movf plan5a,0
movwf PORTA
call SHORTDELAY
movf plan5b,0
movwf PORTB
call SHORTDELAY
movf plan5c,0
movwf PORTC ;plan 5
call SHORTDELAY
clrf PORTC
call SHORTDELAY
movf plan6a,0
movwf PORTA
call SHORTDELAY
movf plan6b,0
movwf PORTB
call SHORTDELAY
movf plan6c,0
movwf PORTC ;plan 6
call SHORTDELAY
clrf PORTC
call SHORTDELAY
movf plan7a,0
movwf PORTA
call SHORTDELAY
movf plan7b,0
movwf PORTB
call SHORTDELAY
movf plan7c,0
movwf PORTC ;plan 7
call SHORTDELAY
clrf PORTC
call SHORTDELAY
goto MAINLOOP ;Loopa detta tills någon trycker på knappen och flaggan höjs, då hoppar programmet högst upp till org 4 -> goto INTERRUPT
;---------------När man tycker på knappen---------------------------------------------
INTERRUPT
clrf PORTC ;börjar med att släcka allt genom att ta alla anoder till låg
call DELAY ;lite väntetid så användaren hinner släppa knappen
call DELAY
call DELAY
bsf PORTC,1 ;lite blinkningar i nedersta planet för att visa att något händer och snart kommer en ny mode
bcf PORTA,0
call DELAY
bcf PORTC,1
call DELAY
bsf PORTC,1
call DELAY
bcf PORTC,1
rlf sreg,1 ;flyttar alla bitar i sreg ett steg åt vänster, eftersom carryn är satt så sätts den 0'te biten. Varje gång användaren
;trycker på kanppen så flyttas biten ett steg åt vänster med Wrap around från 7'de biten till 0'te
btfsc sreg,0 ;letar reda på var i sreg biten är satt och skickar till rätt mode
goto MODE0
btfsc sreg,1
goto MODE1
btfsc sreg,2
goto MODE2
btfsc sreg,3
goto MODE3
btfsc sreg,4
goto MODE4
btfsc sreg,5
goto MODE5
btfsc sreg,6
goto MODE6
btfsc sreg,7
goto MODE7
goto INTERRUPT ;efter mode sju kommer INTERUPT gå två varv innan den går till mode0 (pga carry)
;----------------------;Standard Delayloopar, fulhack?!--------------------------------------------------
DELAY
movlw 0xff
movwf count
movwf count2
DELAYLOOP
decfsz count,f
goto DELAYLOOP
decfsz count2,f
goto DELAYLOOP
return
SHORTDELAY
movlw 0xff
movwf count
BOUNCESHORT
decfsz count,f
goto BOUNCESHORT
return
;---------------------------Åtta olika modes för LED-strukturen----------------------------------------
;Varje gång användaren trycker på knappen så byter LED-strukturen till nästa mode. Efter den åttonde (MODE7) moden börjar den om med en första MODE0.
;Koden i alla moder är identiskt, det är bara värderna på variablerna som skijer sig åt. Efter detta så är koden slut, inte så mycket mer att se dvs.
;---------------------------------------------------------------------------------------------------------
MODE0 ;Tänder alla LEDs i stukturen
movlw b'00000000' ;in med en noll i arbets minnet
movwf plan1a ;in med samma nollor i variablen plan1a
movlw b'00000000' ;etc...
movwf plan1b
movlw b'00000010' ;plan 1
movwf plan1c
movlw b'00000000'
movwf plan2a
movlw b'00000000'
movwf plan2b
movlw b'00000100' ;plan 2
movwf plan2c
movlw b'00000000'
movwf plan3a
movlw b'00000000'
movwf plan3b
movlw b'00001000' ;plan 3
movwf plan3c
movlw b'00000000'
movwf plan4a
movlw b'00000000'
movwf plan4b
movlw b'00010000' ;plan 4
movwf plan4c
movlw b'00000000'
movwf plan5a
movlw b'00000000'
movwf plan5b
movlw b'00100000' ;plan 5
movwf plan5c
movlw b'00000000'
movwf plan6a
movlw b'00000000'
movwf plan6b
movlw b'01000000' ;plan 6
movwf plan6c
movlw b'00000000'
movwf plan7a
movlw b'00000000'
movwf plan7b
movlw b'10000000' ;plan 7
movwf plan7c
bcf INTCON,0 ;tar ner flaggan
retfie ;nu är INTERUPT-sekvensen klar, redo för ny flagga, tillbaka till MAINLOOP
MODE1 ;"Nearest neighbours" de två olika slags fyllda tetraedriska hålrum som finns i Zinblende
movlw b'11111111'
movwf plan1a
movlw b'11111111'
movwf plan1b
movlw b'00000011' ;plan 1
movwf plan1c
movlw b'11111111'
movwf plan2a
movlw b'01111111'
movwf plan2b
movlw b'00000101' ;plan 2
movwf plan2c
movlw b'11111111'
movwf plan3a
movlw b'00111111'
movwf plan3b
movlw b'00001000' ;plan 3
movwf plan3c
movlw b'11111111'
movwf plan4a
movlw b'01111111'
movwf plan4b
movlw b'00010001' ;plan 4
movwf plan4c
movlw b'11111111'
movwf plan5a
movlw b'11011111'
movwf plan5b
movlw b'00100001' ;plan 5
movwf plan5c
movlw b'11111010'
movwf plan6a
movlw b'11011111'
movwf plan6b
movlw b'01000001' ;plan 6
movwf plan6c
movlw b'11111111'
movwf plan7a
movlw b'11011111'
movwf plan7b
movlw b'10000001' ;plan 7
movwf plan7c
bcf INTCON,0
retfie
MODE2 ;Miller index (001)A -plan (röda LEDs)
movlw b'11111111'
movwf plan1a
movlw b'11111111'
movwf plan1b
movlw b'00000011' ;plan 1
movwf plan1c
movlw b'11111111'
movwf plan2a
movlw b'11111111'
movwf plan2b
movlw b'00000101' ;plan 2
movwf plan2c
movlw b'11011111'
movwf plan3a
movlw b'11111111'
movwf plan3b
movlw b'00001000' ;plan 3
movwf plan3c
movlw b'11111111'
movwf plan4a
movlw b'01111111'
movwf plan4b
movlw b'00010001' ;plan 4
movwf plan4c
movlw b'11111011'
movwf plan5a
movlw b'10111111'
movwf plan5b
movlw b'00100001' ;plan 5
movwf plan5c
movlw b'11111111'
movwf plan6a
movlw b'11011111'
movwf plan6b
movlw b'01000001' ;plan 6
movwf plan6c
movlw b'11111110'
movwf plan7a
movlw b'11101111'
movwf plan7b
movlw b'10000001' ;plan 7
movwf plan7c
bcf INTCON,0
retfie
MODE3 ;Miller index (111)A -plan (röda LEDs)
movlw b'11111111'
movwf plan1a
movlw b'11111111'
movwf plan1b
movlw b'00000011' ;plan 1
movwf plan1c
movlw b'11111111'
movwf plan2a
movlw b'11111111'
movwf plan2b
movlw b'00000101' ;plan 2
movwf plan2c
movlw b'11111111'
movwf plan3a
movlw b'10101111'
movwf plan3b
movlw b'00001000' ;plan 3
movwf plan3c
movlw b'11111111'
movwf plan4a
movlw b'01011111'
movwf plan4b
movlw b'00010001' ;plan 4
movwf plan4c
movlw b'11011010'
movwf plan5a
movlw b'11111111'
movwf plan5b
movlw b'00100001' ;plan 5
movwf plan5c
movlw b'11111111'
movwf plan6a
movlw b'11111111'
movwf plan6b
movlw b'01000001' ;plan 6
movwf plan6c
movlw b'11111111'
movwf plan7a
movlw b'11111111'
movwf plan7b
movlw b'10000001' ;plan 7
movwf plan7c
bcf INTCON,0
retfie
MODE4 ;Miller index (111)B plane (icke-röda LEDs)
movlw b'11111111'
movwf plan1a
movlw b'11111111'
movwf plan1b
movlw b'00000011' ;plan 1
movwf plan1c
movlw b'11111111'
movwf plan2a
movlw b'11111111'
movwf plan2b
movlw b'00000101' ;plan 2
movwf plan2c
movlw b'11111111'
movwf plan3a
movlw b'01011111'
movwf plan3b
movlw b'00001001' ;plan 3
movwf plan3c
movlw b'11011010'
movwf plan4a
movlw b'11111111'
movwf plan4b
movlw b'00010001' ;plan 4
movwf plan4c
movlw b'11101101'
movwf plan5a
movlw b'11111111'
movwf plan5b
movlw b'00100001' ;plan 5
movwf plan5c
movlw b'11111111'
movwf plan6a
movlw b'11111111'
movwf plan6b
movlw b'01000001' ;plan 6
movwf plan6c
movlw b'11111111'
movwf plan7a
movlw b'11111111'
movwf plan7b
movlw b'10000001' ;plan 7
movwf plan7c
bcf INTCON,0
retfie
MODE5 ;FCC enhetscell cell, röda LEDs
movlw b'11111111'
movwf plan1a
movlw b'11111111'
movwf plan1b
movlw b'00000011' ;plan 1
movwf plan1c
movlw b'11111111'
movwf plan2a
movlw b'11111111'
movwf plan2b
movlw b'00000101' ;plan 2
movwf plan2c
movlw b'11111011'
movwf plan3a
movlw b'10111111'
movwf plan3b
movlw b'00001001' ;plan 3
movwf plan3c
movlw b'11111111'
movwf plan4a
movlw b'01011111'
movwf plan4b
movlw b'00010001' ;plan 4
movwf plan4c
movlw b'11011010'
movwf plan5a
movlw b'10101111'
movwf plan5b
movlw b'00100000' ;plan 5
movwf plan5c
movlw b'11111111'
movwf plan6a
movlw b'01011111'
movwf plan6b
movlw b'01000001' ;plan 6
movwf plan6c
movlw b'11111011'
movwf plan7a
movlw b'10111111'
movwf plan7b
movlw b'10000001' ;plan 7
movwf plan7c
bcf INTCON,0
retfie
MODE6 ;Miller index (110) plan
movlw b'11111111'
movwf plan1a
movlw b'11111111'
movwf plan1b
movlw b'00000011' ;plan 1
movwf plan1c
movlw b'11111111'
movwf plan2a
movlw b'11111111'
movwf plan2b
movlw b'00000101' ;plan 2
movwf plan2c
movlw b'11111111'
movwf plan3a
movlw b'11111111'
movwf plan3b
movlw b'00001001' ;plan 3
movwf plan3c
movlw b'11111111'
movwf plan4a
movlw b'11111111'
movwf plan4b
movlw b'00010001' ;plan 4
movwf plan4c
movlw b'00000000'
movwf plan5a
movlw b'00000000'
movwf plan5b
movlw b'00100000' ;plan 5
movwf plan5c
movlw b'11111111'
movwf plan6a
movlw b'11111111'
movwf plan6b
movlw b'01000001' ;plan 6
movwf plan6c
movlw b'11111111'
movwf plan7a
movlw b'11111111'
movwf plan7b
movlw b'10000001' ;plan 7
movwf plan7c
bcf INTCON,0
retfie
MODE7 ;Alla icke-röda LEDs
movlw b'11101101'
movwf plan1a
movlw b'01011111'
movwf plan1b
movlw b'00000011' ;plan 1
movwf plan1c
movlw b'11011010'
movwf plan2a
movlw b'11111111'
movwf plan2b
movlw b'00000101' ;plan 2
movwf plan2c
movlw b'11101101'
movwf plan3a
movlw b'01011111'
movwf plan3b
movlw b'00001001' ;plan 3
movwf plan3c
movlw b'11011010'
movwf plan4a
movlw b'11111111'
movwf plan4b
movlw b'00010001' ;plan 4
movwf plan4c
movlw b'11101101'
movwf plan5a
movlw b'01011111'
movwf plan5b
movlw b'00100001' ;plan 5
movwf plan5c
movlw b'11011010'
movwf plan6a
movlw b'11111111'
movwf plan6b
movlw b'01000000' ;plan 6
movwf plan6c
movlw b'11101101'
movwf plan7a
movlw b'01011111'
movwf plan7b
movlw b'10000001' ;plan 7
movwf plan7c
bcf INTCON,0
retfie
end
1) En annan PIC med fler output-pinnar
2) Skiftesregister
Vad säger ni? Jag antar att jag inte kan använda något av min nuvarande kod om jag ska köra med skiftesregister. Men det oroar mig inte så mycket då jag nästan är säker på att få mer tid och pengar till projektet nu när jag kan visa min chef vad som är möjligt.
Ett annat problem är att jag behöver mer ström till mina lysdioder. Har ni något bra tips på hur jag kan få PICen att istället för att själv lysa upp LEDarna, styra vilka LED's som får ström från en extern källa. (Om jag fattat rätt så kan min PIC få ut ca 25 mA. Jag får inte ut så mycket ur min, kan tänka mig att det beror på flera anledningar, men även om det gjorde det så måste strömmen många gånger fördela sig på ett stort antal dioder som alla vill ha 20 mA var.)
En tredje grej. Av flera olika anledningar kan jag inte använda vilka LEDs som helst. De jag provat som fungerar bäst och jag med största sannolikhet kommer att använda i min färdiga produkt är någon av dessa tre: Grön 1200mcd 70°, Blå 2000mcd 40° eller Blå 600mcd 70°
Jag behöver alltså ljusstarka LEDs med hög strålningsvinkel. Jag hade gärna blandat röda och blåa (eller gröna) LEDs men jag hittar inga röda som har samma "Forward Voltage" som de blå och gröna. Om inte frammåtspänningen matchar så kommer väl bara de röda LEDarna lysa om det det är både röda och blå i ett plan som ska lysa? Tips?
Tack
/Filip
Re: PIC-styrd LED-matris
Ursäkta om tabbar och annat i koden blev lite fult, det hände en del oväntade saker när jag klippte in koden från Anteckningar. Hoppas den går att följa ändå.
Re: PIC-styrd LED-matris
Allegro har kombinerade skiftergister och drivare. Typ gamla UCN58xx-kretsar i modern variant.
Om du har en koppling som är beroende på parallellkopplade LED med lika spänningsfall, så är det felkopplat. Varje LED (eller kedja med seriekopplade LED) skall ha eget förkopplingsmotstånd. Då påverkar inte små variationer i spänningfall. Stora variationer (t.ex olika färger som alltid har olika spänningsfall) kan man kompensera för med olika motstånd.
Om du har en koppling som är beroende på parallellkopplade LED med lika spänningsfall, så är det felkopplat. Varje LED (eller kedja med seriekopplade LED) skall ha eget förkopplingsmotstånd. Då påverkar inte små variationer i spänningfall. Stora variationer (t.ex olika färger som alltid har olika spänningsfall) kan man kompensera för med olika motstånd.
Re: PIC-styrd LED-matris
Ang drivningen, Själv använde jag mej av ULN2004, fast jag byggde ju bara i "ett plan", men det gjorde ju dessutom att jag kunde tända valfri lysdiod genom att lägga rätt pinnar höga på både X och Y-led istället för en låg och en hög. ..Det stora felet med ULN200x är ju att den bara har SJU drivstek *suck* vad var det för mufflon som kom på den brighta iden ? ..så då får man ta två kretsar, och ha sex steg över 
Ang pinnarna skulle jag valt en större pic, 16F877A är den jag använder absolut mest själv, nu är den iofs "ersatt" av 16F887 som är bättre på allt(?), men jag har en massa 877A liggandes så jag kör vidare på den.

Ang pinnarna skulle jag valt en större pic, 16F877A är den jag använder absolut mest själv, nu är den iofs "ersatt" av 16F887 som är bättre på allt(?), men jag har en massa 877A liggandes så jag kör vidare på den.
Re: PIC-styrd LED-matris
Då kan man använda ULN2804 istället. 8 drivare isf 7. UCN-drivarna är ungefär samma sak fast med möjlighet till serieingång modell skiftregister.
Re: PIC-styrd LED-matris
> Om jag fattat rätt så kan min PIC få ut ca 25 mA.
Det är normalt max för *EN* pinne.
Sedan finns det max för en hel port samt för hela kretsen. RTFM !
> men jag hittar inga röda som har samma "Forward Voltage" som de blå och gröna.
Självklart gör du inte det. Det finns inte.
> Om inte frammåtspänningen matchar så kommer väl bara de röda LEDarna lysa om det det är både röda och blå i ett plan som ska lysa?
Lite svårt att tolka din fråga, men en tokning är att du har gjort en riktig ful-koppling.
Olika Vf brukar "bara" göra att man får ha olika strömbegränsning eller olika pulslängder.
Det låter lite som om de är parallellkopplade...
Det är normalt max för *EN* pinne.
Sedan finns det max för en hel port samt för hela kretsen. RTFM !
> men jag hittar inga röda som har samma "Forward Voltage" som de blå och gröna.
Självklart gör du inte det. Det finns inte.
> Om inte frammåtspänningen matchar så kommer väl bara de röda LEDarna lysa om det det är både röda och blå i ett plan som ska lysa?
Lite svårt att tolka din fråga, men en tokning är att du har gjort en riktig ful-koppling.
Olika Vf brukar "bara" göra att man får ha olika strömbegränsning eller olika pulslängder.
Det låter lite som om de är parallellkopplade...
Re: PIC-styrd LED-matris
Egentligen är framspänningsfallet på dioden rätt ointressant en LED är styrd av strömmen och inget annat, framspänningsfallet finns angivet för att man ska kunna räkna enklare.
Har man ett labbagg. med variabel utspänning kan man med en multimeter med strömmätning enkelt kolla spänningsfallet genom att dra upp spänningen tills strömmen är 20mA eller vad nu dioden har. Det går även med en potentiometer men där får man vara öfrsiktig då spänningen snabbt ökar.
Har man ett labbagg. med variabel utspänning kan man med en multimeter med strömmätning enkelt kolla spänningsfallet genom att dra upp spänningen tills strömmen är 20mA eller vad nu dioden har. Det går även med en potentiometer men där får man vara öfrsiktig då spänningen snabbt ökar.
Re: PIC-styrd LED-matris
Read The Fucking Manual!...Läs i manualen för helvete!sodjan skrev:> Det är normalt max för *EN* pinne.
Sedan finns det max för en hel port samt för hela kretsen. RTFM !
Menar du databladet, eller finns det en manual som jag missat? I databladet står det:
"Maximum output current sourced by any I/O pin ........................... 25 mA". Eftersom jag inte kan det här så bra så säger mig inte texten speciellt mycket.
Jag kunde tänka mig att det var på det sättet. Visst kan jag en del om våglängd, energi och bandgap och sådana LEDs borde inte finnas, men jag blir förvånad över olika saker och ting varje dag. Exempelvis så forskas det en hel del på LED som bygger på punktdefekter (här är en länk till första artikeln jag hittade på området Point defect engineered Si sub-bandgap light-emitting diode, titeln säger ju en del men jag har faktiskt ingen aning om hur en sådan LED fungerar eller om de finns på marknaden.) Så så självklart tycker jag inte att det är.sodjan skrev:>Självklart gör du inte det. Det finns inte.
Ful-koppling...ful koppling. Definiera ful-koppling...eller nej, gör inte det förresten.sodjan skrev:Lite svårt att tolka din fråga, men en tokning är att du har gjort en riktig ful-koppling.
Olika Vf brukar "bara" göra att man får ha olika strömbegränsning eller olika pulslängder.
Det låter lite som om de är parallellkopplade...
Sodjan: Jag får inte ut så mycket från dina svar och du vekar mest störa dig på mina otydliga och dumma frågor. Jag är tacksam att du försökt hjälpa till, men du behöver inte fortsätta om du inte vill.
/Filip
Re: PIC-styrd LED-matris
Du har hittat rätt i manualen ja:
Fotnoten under säger nämligen:
Du har ju 24 pinnar totalt och med 25mA/st så kommer du då totalt upp i 600 mA men kretsen tål bara 200mA totalt. Betänk också att detta är listat under Absolute Maximum Ratings dvs det är inte lämpligt att köra "enligt" dessa.Maximum output current sunk by any I/O pin....................................................................................................25 mA
Maximum output current sourced by any I/O pin..............................................................................................25 mA
Maximum current sunk by PORTA, PORTB and PORTC (combined)............................................................200 mA
Maximum current sourced PORTA, PORTB and PORTC (combined)............................................................200 mA
Fotnoten under säger nämligen:
Sodjan menar inget illa så du kan ta det lugnt. Det han däremot menar är att läsa manualen noga under de punkter som kan tänkas vara intressanta, det är liksom inget roligt för vare sig han, mig eller någon annan att leta i manualen efter rena RTFM frågor. Däremot är det tillåtet att fråga om man inte hittar vad man söker. Sen kan man ju skriva det hela på olika snälla sätt ocksåNOTICE: Stresses above those listed under “Absolute Maximum Ratings” may cause permanent damage to the
device. This is a stress rating only and functional operation of the device at those or any other conditions above those
indicated in the operation listings of this specification is not implied. Exposure to maximum rating conditions for
extended periods may affect device reliability.

Re: PIC-styrd LED-matris
Japp, i detta fall är "manualen" = databladet. 
Nu är jag lite osäker på vilken processor du har, men om jag kollar i databladet för en
vanlig modell (16F690) så står allt det du frågar om under "Absolute Maximum Ratings"
i kapitel 17. Lite onödigt att kopiera texten här i forumet, men jag gör det i alla fall.
Det är även viktigt att notera vad som står på samma sida direkt under värderna :
Det är bara de gränser där Microchip garanterar att processorn inte tar *permanent* skada.
Det finns alltå ingen garanti att processorn *fungerar* för övrigt om man ligger på (eller överskrider) dessa nivåer !
Så är det alltid med "Absolute Maximum Ratings" oasvett vilken leverantör det handlar om...
För normalt bruk finns det en massa värden i resten av "ELECTRICAL SPECIFICATIONS".
Om man ligger och designar med/mot dessa gränsvärden så har man sannolikt tänkt fel från början.
Backa tillbaka lite och gör om designen så att du har bättre marginaler.
En "ful-koppling" med LEDs är t.ex att koppla flera LEDs parallellt med gemensamt
strömbegränsningsmotstånd. Med olika typer av LEDs (med olika Vf) så är det ju
uppenbart att det inte går, men det är inte att rekomendera även med "likadana"
LEDs heller, de är aldrig exekt lika. Seriekopplade LEDs är en helt annan sak.
Det var så jag tolkade det när du skrev "Om inte frammåtspänningen matchar så kommer
väl bara de röda LEDarna lysa". Du kan ju förtydliga vad du menar med det annars. Varför
skulle bara de röda lysa ??

Nu är jag lite osäker på vilken processor du har, men om jag kollar i databladet för en
vanlig modell (16F690) så står allt det du frågar om under "Absolute Maximum Ratings"
i kapitel 17. Lite onödigt att kopiera texten här i forumet, men jag gör det i alla fall.
Notera speciellt där det står "(combined)" ovan ! Lätt att missa...Total power dissipation(1) .......................................................................................800 mW
Maximum current out of VSS pin .............................................................................. 300 mA
Maximum current into VDD pin ................................................................................. 250 mA
Input clamp current, IIK (VI < 0 or VI > VDD).............................................................± 20 mA
Output clamp current, IOK (Vo < 0 or Vo >VDD)..........................................................± 20 mA
Maximum output current sunk by any I/O pin............................................................... 25 mA
Maximum output current sourced by any I/O pin .......................................................... 25 mA
Maximum current sunk by PORTA, PORTB and PORTC (combined) ................................... 200 mA
Maximum current sourced PORTA, PORTB and PORTC (combined).................................... 200 mA
Det är även viktigt att notera vad som står på samma sida direkt under värderna :
Med andra ord, det är *inte* värden som ska användas som design-värden !NOTICE: Stresses above those listed under “Absolute Maximum Ratings” may cause permanent
damage to the device. This is a stress rating only and functional operation of the device at those
or any other conditions above those indicated in the operation listings of this specification is not
implied. Exposure to maximum rating conditions for extended periods may affect device reliability.
Det är bara de gränser där Microchip garanterar att processorn inte tar *permanent* skada.
Det finns alltå ingen garanti att processorn *fungerar* för övrigt om man ligger på (eller överskrider) dessa nivåer !
Så är det alltid med "Absolute Maximum Ratings" oasvett vilken leverantör det handlar om...
För normalt bruk finns det en massa värden i resten av "ELECTRICAL SPECIFICATIONS".
Om man ligger och designar med/mot dessa gränsvärden så har man sannolikt tänkt fel från början.
Backa tillbaka lite och gör om designen så att du har bättre marginaler.
En "ful-koppling" med LEDs är t.ex att koppla flera LEDs parallellt med gemensamt
strömbegränsningsmotstånd. Med olika typer av LEDs (med olika Vf) så är det ju
uppenbart att det inte går, men det är inte att rekomendera även med "likadana"
LEDs heller, de är aldrig exekt lika. Seriekopplade LEDs är en helt annan sak.
Det var så jag tolkade det när du skrev "Om inte frammåtspänningen matchar så kommer
väl bara de röda LEDarna lysa". Du kan ju förtydliga vad du menar med det annars. Varför
skulle bara de röda lysa ??
Re: PIC-styrd LED-matris
Jag länkade rätt manual i mitt inlägg, kikade under include i den postade koden 

Re: PIC-styrd LED-matris
Just nu är min prototyp "ful-kopplad" då jag varit tvungen att blanda lysdioder hej vilt. Men prototypen är bara byggd för att jag ska ha något att öva programmering på. Till den slutgiltiga strukturen kan jag köpa vilka LEDs jag vill. I mitt nuvarande program lyser jag upp ett plan i taget (i 255 klockcykler) i detta plan delar alla LEDarna anod, vilken är kopplad till exempelvis port C0, men deras katoder är kopplade till var sin pinne (säg några A och B -portar). Ofta är det inte mer än 2-5 st lysdioder i varje plan som ingår i ett visst mönster och därmed lyser. Porten som är kopplad till planet i fråga (anod) är hög medan bara vissa A och B -portar (katoder) är låga och därmed lyser bara några LEDs i det planet upp. Men med lite mer kod kan jag lysa upp varje LED var för sig genom att bara ha en katod-port låg åt gången.sodjan skrev:En "ful-koppling" med LEDs är t.ex att koppla flera LEDs parallellt med gemensamt
strömbegränsningsmotstånd. Med olika typer av LEDs (med olika Vf) så är det ju
uppenbart att det inte går, men det är inte att rekomendera även med "likadana"
LEDs heller, de är aldrig exekt lika. Seriekopplade LEDs är en helt annan sak.
Alla LEDar delar katod med andra LEDar i planen över och under sig (men två LEDar i samma plan delar aldrig katod). Strömledarna i min struktur består av kraftig ståltråd som är bockad i ett siksak-mönster och symboliserar bindningarna mellan atomerna i strukturen. Jag kan omöjligt ha olika motstånd till varje LED, jag kan heller inte ha olika motstånd de röda och blå lysdioderna. Det är därför jag nu tänker ha blåa och gröna (med så gott som identiska värden) LEDs istället. Den ena färgen symboliserar atomslag 1 och den andra färgen atomslag 2 i min zinkbländestruktur (se den på wiki)
Så som jag tänkte var att röda lysdioder har en lägre tröskelspänning än de blå. Om jag nu parallellkopplar röda och blå lysdioder. Lägger en låg spänning över dioderna. Ökar spänningen till jag når de röda dioderna tröskelspänning. De börjar att lysa. Eftersom lysdiodernas ström-spänningskarakteristik ser ut som den gör så når jag aldrig upp till ett spänningsfall som gör att de blåa dioderna börjar lysa (även om jag vrider mer på ratten på spänningskuben), eftersom det är mycket lågt spänningsfall över de lysande röda dioderna. Det låga spänningsfallet gör att vi knappast kommer få högre spänningsfall än de röda diodernas tröskelspänning.sodjan skrev:Det var så jag tolkade det när du skrev "Om inte frammåtspänningen matchar så kommer väl bara de röda LEDarna lysa". Du kan ju förtydliga vad du menar med det annars. Varför
skulle bara de röda lysa ??
Det var så här jag tänkte, men jag är inte så haj på det här och det var länge sedan jag läste en kurs om dioder och p/n-övergågnar.
Om jag nu ändrar koden så att jag "tilltalar" en LED i taget. Jag måste ha identiska motstånd alla LEDar, jag har två olika typer av LEDar, och varje LED kan endast kopplas till två portat (en port till anod och en till katod). Det lät på dig innan som om det fanns utrymme i mjukvara för att kompensera för de identiska motstånden så att båda typerna av lysdioder lyser bra. Förstod jag rätt?
Re: PIC-styrd LED-matris
> ...i detta plan delar alla LEDarna anod, vilken är kopplad till exempelvis port C0, men deras katoder
> är kopplade till var sin pinne (säg några A och B -portar).
Var sitter strömbegränsningsmotstånden ?
Av ovanstående kan man tro att de saknas helt.
> ...Om jag nu parallellkopplar röda och blå lysdioder....
Gör inte det. I alla fall inte om de ska lysa samtidigt. Det fungerar inte.
Om de inte har individuella motstånd i varje "ben" i kopplingen. När jag
skriver "parallellkopplar" så menar jag att lysdioderna är direkt kopplade
till samma matning utan andra komponenter inblandade.
> Det lät på dig innan som om det fanns utrymme i mjukvara för att kompensera
> för de identiska motstånden så att båda typerna av lysdioder lyser bra.
Ja, förrutsatt att de inte är kopplade parallellt (alltså har gemensam
anslutning i båda ändar), utan har separata anslutningar.
> är kopplade till var sin pinne (säg några A och B -portar).
Var sitter strömbegränsningsmotstånden ?
Av ovanstående kan man tro att de saknas helt.
> ...Om jag nu parallellkopplar röda och blå lysdioder....
Gör inte det. I alla fall inte om de ska lysa samtidigt. Det fungerar inte.
Om de inte har individuella motstånd i varje "ben" i kopplingen. När jag
skriver "parallellkopplar" så menar jag att lysdioderna är direkt kopplade
till samma matning utan andra komponenter inblandade.
> Det lät på dig innan som om det fanns utrymme i mjukvara för att kompensera
> för de identiska motstånden så att båda typerna av lysdioder lyser bra.
Ja, förrutsatt att de inte är kopplade parallellt (alltså har gemensam
anslutning i båda ändar), utan har separata anslutningar.
Re: PIC-styrd LED-matris
Just nu sitter motstånden mellan porten och sladden som kontakterar ståltråden som alla anoder (i ett visst plan) är fästa i.sodjan skrev:> Var sitter strömbegränsningsmotstånden ?
Av ovanstående kan man tro att de saknas helt.
Att ha ett motstånd mellan den kraftiga ståltråden och anod-benet på lysdioden är en lösning. Det skulle faktiskt vara möjligt att göra på det sättet, men att löda det vet jag inte om jag klarar av. Jag ska se om jag kan hitta någon som är lite mer praktiskt lagd än jag.sodjan skrev: Om de inte har individuella motstånd i varje "ben" i kopplingen.
sodjan skrev:Ja, förrutsatt att de inte är kopplade parallellt (alltså har gemensam
anslutning i båda ändar), utan har separata anslutningar.
Nu kommer de ha gemensam anslutning i ena änden men inte i andra. Jag förstår inte riktigt vad mjukvaran skulle kunna göra (det finns ju bara två lägen på en out-put pinne). Hjälper det med olika långa "pulser", alltså att jag skulle tända blå dioder i x klockcykler och röda i y klockcykler?