Beste mensen,
Ik probeer softwarematig te PWM-en op een AVR microcontroller. Ik gebruik een 8bit helderheidsinstelling. Mijn globale idee hiervoor is als volgt:
br = helderheid
Loop continu:
Doe 'aan'-loop br aantal keer
Doe 'uit'-loop 256-br aantal keer
Is de helderheid dan 0, dan wordt alleen de uit-loop gerunned en is de led dus uit. Dit werkt, maar het probleem is dat er vanaf helderheidsniveau br=40 niet te zien is dat de led nog helderder wordt voor hogere br. De led wordt dan niet helderder. De hogere br waardes zijn dus eigenlijk zinloos.
Ligt dit aan mij, doe ik iets principieel fout, of is het zo omdat de led niet zo snel uit kan doven oid?
Mijn assembly is als volgt:
PWM_MAIN:
; br = brightness
ldi r16, br ; r16 = brightness
nop
PWM_ON:
tst r16 ; r16 = 0?
breq PWM_ON_RDY ; yes, on state is done
out PORTC, r1
dec r16
rjmp PWM_ON
PWM_ON_RDY:
ser r16
subi r16, br ; r16 = 256-brightness
PWM_OFF:
tst r16 ; r16 = 0?
breq PWM_OFF_RDY ; yes, off-state is done
out PORTC, r0
dec r16 ; r16-1
rjmp PWM_OFF
PWM_OFF_RDY:
rjmp PWM_MAINAlvast bedankt voor het meedenken.
Groeten,
Simon
edit: topic misschien iets te snel geplaatst.. Ik kan natuurlijk mijn code vergelijken met een normaal gePWM-ed ledje en dan kijken of er verschil is..
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
De fout ligt niet bij jouw software, maar bij de LED en bij het menselijk oog.
Knoop maar eens een High-Efficiency LED via een weerstand aan een labvoeding. Bij kleine stromen (0 ... 5mA) is een duidelijk verschil in helderheid te merken. Ga je hoger (5 ... 10mA), dan merk je er minder en minder van. En boven 10mA merk je er helemaal niets meer van.
Ook het omgevingslicht speelt een rol.
Ok bedankt pros voor je antwoord!
Ik had 't moeten weten
Veel dingen in de natuur werken logaritmisch. Met gehoor is dit zo, waarschijnlijk dan ook met zicht.
Nu een slim stukje code verzinnen wat hier rekening mee houdt 
WilToyo
Maak me niet gek, ik ben al gek.
Hang er maar eens een scoop aan, dan zie precies wat er gebeurd. Een scoop is veel representatiever dan een led en het blote oog.
Mja, niet aanwezig hier
Kan het morgen wel doen, maar ik geloof het nu eigenlijk wel.
Het gaat om het effect en nu zal ik het zo om moeten bouwen dat het op de een of andere manier vloeiend voor het oog lijkt te gaan.
benleentje
Golden Member
Ik had hier precies hetzelfde resultaat. Ik gebruikte een een timer van 0 tot 255. Maar bij 15 zag ik al haast geen verschil meer.
Later er een motor driver de L298 aan gehangen en dan zie je dat de motor er wel heel mooi mee te regelen is.
Het ligt wel heel erg veel aan het type LED heb ik gemerkt. Sommige leds zijn tot niveau 50 wel te onderscheiden.
Het logaritmische gedoe waar ik het over had, laat ik er dus ook uit. Ik ga er RGBleds mee aansturen en het mengen van de kleuren zal dan maar een beetje trial and error worden.
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Je kan toch gewoon de pulstijd verdubbelen, telkens je een stapje hoger gaat? Dus, op een mogelijke reeks van 0 tot 255: 1, 2, 4, 8, 16, enz...
Daarnaast helpt het ook, als je de serieweerstand niet te klein neemt. Dat die gekozen moet worden in functie van de LED, spreekt voor zich. Ik heb hier nog ergens blauwe LED's liggen, die al flink oplichten bij een stroom van 2mA (nee, geen nulletje vergeten).