Minsta switch frekvens på LED-array???

Lysdioder, Optiska sensorer, Fiberoptik, Displayer, Lasrar, Optiska kopplare
Användarvisningsbild
Jeppsson
EF Sponsor
Inlägg: 810
Blev medlem: 3 oktober 2005, 18:00:43
Ort: Karlskrona

Minsta switch frekvens på LED-array???

Inlägg av Jeppsson »

Jag har en liten LED-array (6 x 4) som jag har kopplat till en PIC och skall switcha dem.
Jag tänder 4 LEDs åt gången som sitter i en kolunm, vilket innebär att jag har 6 rader som tänds en åt gången efter varandra.

Nu vill jag switcha dessa med så lågfast frekvens som möjligt utan att de blinkar för männskliga ögat och ändå kunda ändra deras ljusstyrka genom att ändra duty cycle.

Anledningen till varför jag vill ha en lågfastfrekvens är för att det är viktigt att tiden är lika lång oberoende av ljusstyrka på LED och att det skall vara strömsnålt (Kommer troligtvis att köras på batteri!). Samt att imellan switchningarna så kommer PICen att göra andra grejor i processorn.

Tanken är att man skall kunna välja tre olika ljusstyrker på LED-arrayn de är enligt följande: Lyser starkt, Normal och Svagt!

/

Jeppsson
Användarvisningsbild
baron3d
EF Sponsor
Inlägg: 1353
Blev medlem: 1 oktober 2005, 23:58:43
Ort: Torestorp

Inlägg av baron3d »

En "gammal" TV blinkar i 50HZ
Själv tycker jag att lägsta frekvens bör vara 60Hz.
Användarvisningsbild
Jeppsson
EF Sponsor
Inlägg: 810
Blev medlem: 3 oktober 2005, 18:00:43
Ort: Karlskrona

Inlägg av Jeppsson »

60Hz låter rimligt men om man kör ner duty cycle till bara 10% kommer man att uppfatta LEDen som att den bara lyser svagare och att den inte blinkar?
Användarvisningsbild
baron3d
EF Sponsor
Inlägg: 1353
Blev medlem: 1 oktober 2005, 23:58:43
Ort: Torestorp

Inlägg av baron3d »

Pulstiden betyder inget. Har provat ner till 0,1% pulsvidd.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Frekvensen där man upplever blinkandet som störande är även
till viss del beroende på hur "snabbt" det som blinkar är.

T.ex en vanlig glödlampa (som är rellativt långsam) är OK för
de flesta även vid 50 Hz. För LED däremot (som är väldigt snabb
i jämförelse) måste man upp längre. Allt mellan 60 och 100 Hz
anges beroende på vem man frågar.

Men, det intressanta i *ditt* fall, är att *strömförbrukningen* har väldigt
lite med multiplexfrekvensen att göra. Genomsnittsförbrukningen
blir densamma oavsett hur snabbt/långsamt du växlar diod(er).

*Pulsbredden* (dutycycle) däremot påverkar både upplevd ljusstyrka och
strömförbruknigen direkt. Och den (pulsbredden) är i princip oberoende av
multiplexfrekvensen...

Det ända som vore intressant var om du tänkte lägga processorn
i "sleep" mellan varje byte av diod(er), men det lät inte så.

Betydligt viktigre är att välja s.k högeffektiva LED's som ger bra med
ljus redan vid en eller ett par mA.

Om vi säger 100 Hz och 6 rader, så behöver du byta rad med 600 Hz, eller
att varje rad kommer att vara "on" under ca 1.6 ms. Sedan skall dioderna
släckas efter ett variabel tid mellan 0 och 1.6 ms beroende på vilken
ljusstyrka som önskas.

Eftersom du bara vill ha tre ljusstyrkor blir det ingen avancerad matematik.

Du kan t.ex ha alternativen 1.6/0, 1.0/0.6, 0.4/1.2 (tänd/släckt). Sedan
räknar man om detta till timer värden och kör. Timer ISR'en får sedan
hålla redan på vilken rad och vilen "fas" (tänd eller släckt) som den just
passerade tiden var avsedd för, samt vilket nytt värde som timern ska
laddas med.
Användarvisningsbild
Jeppsson
EF Sponsor
Inlägg: 810
Blev medlem: 3 oktober 2005, 18:00:43
Ort: Karlskrona

Inlägg av Jeppsson »

Tackar så mycket för all hjälp om någon har något mer att tilllägga så är det välkommet...

Självklart kan man lägga processorn i "sleep mode" under delar av tiden, vet inte än hur processorkrävande uträkningarna mellan tända arrayn kommer att vara...


En annan fråga som jag har inom detta projektet är angående PIC Assembler programmering.

Kan man på något sätt förvara och ändra i en variabel vilket ben man vill skriva ut på? Något liknande mitt exempel nedan?

Variabelen heter "ben" i mitt exempel.

Kod: Markera allt

movlw   h'00'     ;Skriv ut på kolumn 1 som ligger på RA0
call       print
movlw   h'03'     ;Skrivut på kolumn 2 som ligger på RA3
call       print
movlw   h'02'     ;Skrivut på kolumn 3 som ligger på RA2
call       print
movlw   h'01'     ;Skrivut på kolumn 4 som ligger på RA1
call       print
osv...

Annan kod

; *** Subrutinen Print ***
print
movwf  ben
bsf      PORTA,ben
"delay rutin"
bcf      PORTA,ben
"delay rutin"
return
Jag har problem att få detta att fungera... Är det någon som kan hjälpa mig med en bra lösning eller har andra förslag på hur jag kan göra detta med så lite kod som möjligt?

/

Jeppsson
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

Väldigt länge sedan jag använde PIC men jag tror inte du kan använda en variabel för att välja bit i bsf.

Edit: Använd iorwf istället, men då får du adressera RA0 som 1, RA1 som 2, RA2 som 4 och RA3 som 8.

/Johan
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

Om man går ett steg längre med användandet av iorwf så kan det bli så här.
Otestad kod för Pic16.

Kod: Markera allt

	movlw	1 ;Första benet längst till höger
	movwf	Ben
	movlw	6 ;6st ben
	movwf	Counter

Loopa:

	movf	Ben,w
	iorwf	PORTA ;Sätt utgång till 1

	"delay rutin" 

	comf	Ben,w
	andwf	PORTA ;Sätt utgång till 0

	"delay rutin" 

	bcf	STATUS,C ;Clear Carry
	rlf	Ben ;Välj nästa ben

	decfsz	Counter
	goto	Loopa
sodjan, En glödlampa som drivs med 50Hz växelström blinkar med 100Hz.


[EDIT] Och nu kommer sodjan svara att han inte syftade på en 230V-glödlampa med 50Hz växelström utan en glödlampa med en blinkfrekvens på 50Hz.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Ingenstans där en "literal" är parameter till en instruktion kan en "variabel" användas istället. T.ex för BCF/BSF. Bitnummer lagras fast i instruktionen
vid assembleringen. Går att komma runt med t.ex olika OR/AND instruktioner
som Chribbe76 föreslår.

Exakt hur beror lite på vilket "problem" som det ska lösa.

OK, 100 Hz då... :-)
Användarvisningsbild
Jeppsson
EF Sponsor
Inlägg: 810
Blev medlem: 3 oktober 2005, 18:00:43
Ort: Karlskrona

Inlägg av Jeppsson »

Appro på duty cycle...

Om jag kör med en LED som vill har 20mA vid normal användning och 5 volt så blir serie motståndet på 25 ohm.

Sen med tanke på att jag kommer att switch fram 6 rader så kommer aldrig duty cyclen att komma upp på 100% för den enskillde LEDen. Kan man då istället köra med ett lägre motsånd för att få LEDen att lysa starkare utan att förstöra den?

Men en helt annan sak är att PICen inte kan lämna mer än 25mA per ben!? :?
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

Ja, man kan ha lägre resistans för att få högre ljus-styrka men 25 Ohm måste vara felräknat?
Hur mycket mer ström en lysdiod tål är olika, 4X max ström klarar nog alla lysdioder.
Jag tror att medel-strömmen bör ligga en bra bit under led'ens specade max-ström när man muxar, typ 15mA istället för 20mA.

Tänk på att ett fel i programmet/hängning kan bränna dina lysdioder (jodå, det har jag provat).

Om du skaffar bra lysdioder (kan vara svårt att veta vilka som är bra) så behövs det inte mer än en medel-ström på 5mA för hyffsat starkt ljus.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Men en helt annan sak är att PICen inte kan lämna mer än 25mA per ben!?

Om jag inte minns fel så finns det även ett max per 8-bits port som
jag tror är lägre än 8x25 mA. Jag är lite osäker här, men kolla
databladet...
Användarvisningsbild
Jeppsson
EF Sponsor
Inlägg: 810
Blev medlem: 3 oktober 2005, 18:00:43
Ort: Karlskrona

Inlägg av Jeppsson »

Chribbe76 skrev:Ja, man kan ha lägre resistans för att få högre ljus-styrka men 25 Ohm måste vara felräknat?
Självklart så menar jag 250 ohm glömde en nolla :oops:

Det kommer att vara röda ytmonterade 0805 LEDar som jag skall använda i arrayn, troligtvis så köper jag dem från Elfa då jag skall ha lite andra grejor från dem oxå...

Men vilka LEDar som jag skall köpa är än inte bestämt, kom gärna med förslag! (Finns inte så många att välja på)
Användarvisningsbild
Jeppsson
EF Sponsor
Inlägg: 810
Blev medlem: 3 oktober 2005, 18:00:43
Ort: Karlskrona

Inlägg av Jeppsson »

Jag har nog inte nämnt det men det är en PIC16F648A som jag kommer att kör med.

En dump från databladet.
Bild

Med tanke på att jag bara matar 4 LEDar (max 4 * 25 = 100mA) åt gången och väljer kolumn via en transistor så borde jag inte kunna komma upp i skadliga värde för PICen (max 200mA för både PORTA och PORTB samtidigt).
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Jeppsson skrev:Det kommer att vara röda ytmonterade 0805 LEDar som jag skall använda i arrayn, troligtvis så köper jag dem från Elfa då jag skall ha lite andra grejor från dem oxå...

Men vilka LEDar som jag skall köpa är än inte bestämt, kom gärna med förslag! (Finns inte så många att välja på)
Bra val med ytmonterade LED! :)
Då slipper du nämligen misstaget att du köper "högintensiva" (hålmonterade) lysdioder, vilket oftast innebär att de har väldigt smal strålningsvnkel. Detta vill du ju inte ha om du bygger en array som ska visa grafik som du vill att folk ska se. Ytmonterade lysdioder har nämligen oftast stor strålningsvikel, de flesta kan man se lysa tydligt rakt från sidan! Iom den höga strålningsvinkeln så följer det att de har mycket lägre ljusintensitet (mätt i mCd). Bli inte lurad av detta, det totala ljusflödet är nog så stort ändå jämört med en hålmonterad superduper-intensiv LED.

Appropå switchfrekvens. 60 Hz tycker jag är i minsta laget. 100 Hz är bekvämt att titta på. Tänk på att periferiseendet är mycket känsligare för flimmer än vad direktseendet är!
Skriv svar