Ik heb mijn RGB LED schakeling af! Het is een klein schakelingetje geworden met een ATtiny11 microcontroller van Atmel. Deze controller is goedkoop ($2.20 bij futurlec), heeft geen klok nodig en heeft ruimte voor 512 coderegels, ruim voldoende voor een 3 kanaals PWM programmaatje (mijn programma gebruikt er 73, dus nog geen 15% en het kan nog kleiner). :)

Het schema

Het schema is simpel opgezet zodat iedereen het na kan bouwen. Het geinverteerde PWM signaal op de uitgangen van de microcontroller (geinverteerd in programma) wordt nogmaals geinverteerd en gebufferd door de transistoren. De weerstanden begrenzen de stroom naar de LED.

De source zet ik er vanmiddag als ik thuis ben ff bij zodat je het kan testen! Let wel op dat je de fusebits zo programmeert dat de interne RC oscillator wordt gebruikt, je kan evt. ook gewoon een kristal gebruiken, de pinnen zijn toch nog vrij!

De LED veranderd langzaam van kleur en doet er ongeveer 12 seconden over om weer terug te komen bij dezelfde kleur, dit kan veranderd worden in de software. Het programma begint met rood en gaat geleidelijk (via paars) naar blauw, dan naar groen en weer (via geel) terug naar rood. Als je snel kijkt lijkt de kleur niet te veranderen, maar als je een seconde of twee hebt gekeken blijf je kijken! :D

Bas edit: plaatje ver**** de layout

[Bericht gewijzigd door Bastiaan op ]

Dit heb je met JAL gemaakt neem ik aan, want 3 onafhankelijke PWM kanalen softwarematig maken met asm is geen makkie.

Nee hoor, gewoon assembler en het is niet echt moeilijk hoor! Gewoon je waardes vergelijken met de 8-bits timer en als ie kleiner of gelijk is pin uit en anders pin aan! Zo kan je dus met een 8515 32 PWM kanalen maken als je dat zou willen! :)

ziet er nie slecht uit :P
kan je filmpje maken van het eindresultaat misschien??

is het misschien mogelijk deze code in een atmega16 te pompen?? ik heb namelijk geen tiny hier liggen :(

Op 10 april 2003 15:23:17 schreef Ralph Benadski:
Nee hoor, gewoon assembler en het is niet echt moeilijk hoor! Gewoon je waardes vergelijken met de 8-bits timer en als ie kleiner of gelijk is pin uit en anders pin aan! Zo kan je dus met een 8515 32 PWM kanalen maken als je dat zou willen! :)

Maar is die 8 bit timer bij elke kanaal hetzelfde? Want in dat geval is het geen zuivere PWM omdat de teller niet op nul springt na een match.

De teller moet juist niet op 0 springen anders veranderd je frequentie en dat hoort niet bij PWM. Door te vergelijken met een klokje dat van 0 tot 255 en dan weer opnieuw telt krijg je dus softwarematige PWM.

Er zijn AVRs met meerdere PWM kanalen (hierbij hoef je alleen de waarde in een register te zetten), maar die zijn wat duurder en meestal groter.

Hier staat de source voor de ATtiny11, het is voor elke AVR makkelijk te gebruiken, let wel op waar de .org $xxx voor is (staat in de datasheet van de gebruikte AVR). Volgens mij hoeft er verder weinig tot niets veranderd te worden!

Op 10 april 2003 16:44:26 schreef Ralph Benadski:
De teller moet juist niet op 0 springen anders veranderd je frequentie en dat hoort niet bij PWM. Door te vergelijken met een klokje dat van 0 tot 255 en dan weer opnieuw telt krijg je dus softwarematige PWM.

Er zijn AVRs met meerdere PWM kanalen (hierbij hoef je alleen de waarde in een register te zetten), maar die zijn wat duurder en meestal groter.

Hier staat de source voor de ATtiny11, het is voor elke AVR makkelijk te gebruiken, let wel op waar de .org $xxx voor is (staat in de datasheet van de gebruikte AVR). Volgens mij hoeft er verder weinig tot niets veranderd te worden!

ik heb net een paar attiny11 besteld maar wil hem nu eigenlijk al wel proberen... maar dan moet ik het in een atmega16 pompen... alleen wat moet er dan veranderd worden en hoe moet ik het aansluiten op een atmega16??

ja sorry avr is helemaal nieuw voor mij
ik heb sinds vanmiddag mijn progger pas :D
met heel veel dank aan Rob Keij :D:D

vraagje... waarom zit bij die source van jou die .bat file er bij?? alleen jij hebt daar iets aan verder niemand aangezien ik niet denk dat iemand anders de dir's hetzelfde hebt als jij..

Ok, ik zal het proberen te veranderen voor een ATmega16

.include "tn11def.inc" wordt "m16def.inc", dit bestand bevat alle definitie files van elke AVR.

.equ SPD_VAL = 61 (1Mhz) wordt bij 4MHz 244

.org $003 wordt $012

.org $005 wordt $029

ldi temp, 2 wordt 1
out TIMSK, temp

Volgens mij moet het zo werken! Laat het ff horen als het goed is!

EDIT: Die bat file, jah, niet nodig eigenlijk, maar het staat wel interessant. :P

Op 10 april 2003 16:44:26 schreef Ralph Benadski:
De teller moet juist niet op 0 springen anders veranderd je frequentie en dat hoort niet bij PWM. Door te vergelijken met een klokje dat van 0 tot 255 en dan weer opnieuw telt krijg je dus softwarematige PWM.

Je hebt een teller die telt van 0 tot 255.
Stel dat jij hebt geprogrameerd dat die bij 100 zijn pinnen wisselt, dus van 1 naar 0 en 0 naar 1. Die teller moet bij die zogenaamde match weer naar 0 springen zodat er na exact weer 100 tellen een match optreed.

Reset je die teller niet dan krijg je dat de 1e match is na 100 tellen. De 2e na 255-100+100=255, dus ongeacht bij welke waarde de match optreed zal het altijd 255 tellen duren.

Dus de teller moet op 0 springen, maar als jij meerdere PWM's wil toepassen op 1 teller dan zal een match die bij de 150 moet optreden nooit voorkomen omdat je al na de 100 het reset.

Wat je wel kan doen is bij de huidige waarde 100 optellen en op die manier telkens dynamisch de nieuwe matchwaarde berekenen en op die manier dmv 1 teller meerdere PWM kanalen genereren.

Ik zal je source wel eens doornemen om te zien wat jij hebt gebruikt want ik ben benieuwd hoe het nou zit bij jouw toepassing.

Op 10 april 2003 14:13:08 schreef Ralph Benadski:
Bas edit: plaatje ver**** de layout

Oja, niet iedereen zit op 1152*864 te werken natuurlijk, sorry!

PWM met 10 mogelijkheden ipv 256:

0 1 2 3 4 5 6 7 8 9
- - _ _ _ _ _ _ _ _

vergelijkwaarde = 2, teller (0-9) telt door, 2 is de gewenste aan uit verhouding (2/10 per. = 20%)

- - - - - - - _ _ _

nu is de vergelijkwaarde 8, dus 8/10 = 80%

Zo doe ik het...

[Bericht gewijzigd door Benadski op ]

ok ik heb de code aangepast, alleen moet ik nu nog het schema hebben.. kan je mij daar misschien ook beetje mee helpen??
en wat ik het meeste nodig heb is hoe ik het aan moet sluiten om te proggen....

Op 10 april 2003 17:46:40 schreef ace:
ok ik heb de code aangepast, alleen moet ik nu nog het schema hebben.. kan je mij daar misschien ook beetje mee helpen??
en wat ik het meeste nodig heb is hoe ik het aan moet sluiten om te proggen....

Het schema staat er gewoon toch?!
En het schema om te proggen heb je van Rob gehad.

Dat klinkt fantastisch, ik heb zulke RGB LED's liggen en zou zo'n schakeling wel toe willen passen voor wat decoratieve doeleinden.

Komt dit programmatje ook op dit CO forum te staan?

Wat zijn de totale kosten van deze schakeling ongeveer?

Zo te zien aan de materialen ziet het er relatief voordelig uit om na te bouwen.

SWS

Op 10 april 2003 17:48:21 schreef Bastiaan:

[...]

Het schema staat er gewoon toch?!
En het schema om te proggen heb je van Rob gehad.

schema om te proggen wanneer heb ik dat gehad??
ik heb een progger gekregen ja maar ik weet niet hoe die aan te slutien, maar heb net de datasheet gevonden dus dat lukt wel
verder heb ik een schema nodig om de atmega16 aan te sluiten op de rgbled...
maar nu via die datasheet kom ik daar ook wel uit denk ik als tenminste alle outputs dezelfde naam hebben...

Op 10 april 2003 17:52:04 schreef Sweet Winter Smile:
Komt dit programmatje ook op dit CO forum te staan?

Het programmaatje staat er al. Kijk naar de post van Ralph ergens hierboven.

Op 10 april 2003 17:54:17 schreef ace:
[...]
schema om te proggen wanneer heb ik dat gehad??
ik heb een progger gekregen ja maar ik weet niet hoe die aan te slutien, maar heb net de datasheet gevonden dus dat lukt wel

Zat er dan geen blaadje bij je progger in dat zakkie?

Ralph -> Ik heb al gezien hoe jij dat doet. Je bepaalt de uitgangswaarde niet op een match maar op hoger of lager dan de teller en dan kan je het idd makkelijk doen. Zo kun je toch oneindig veel PWM kanalen maken op 1 teller?!

[Bericht gewijzigd door Bastiaan op ]

Ja, zo doe ik dat, simpel eigenlijk he? Kan je leuke dingen mee doen met LEDs! :)

Op 10 april 2003 17:55:12 schreef Bastiaan:

Zat er dan geen blaadje bij je progger in dat zakkie?

jawel maar daar staat alleen de pinout op
maar met die pinout heb ik al gevonden wat op welke pen moet

ok ik heb hem aangesloten maar hoe krijg ik die asm nu in de avr??
ponyprog kan geen asm lezen... tenminste ik kan niet vinden hoe :?

als ik met ponyprog iets wil uitlezen of schrijven krijg ik steeds de foutmelding device missing or unknown device :S

[Bericht gewijzigd door ace op ]

Op 10 april 2003 18:10:05 schreef Ralph Benadski:
Ja, zo doe ik dat, simpel eigenlijk he? Kan je leuke dingen mee doen met LEDs! :)

Nou, dat is idd erg makkelijk. Dat ik daar zelf nooit op ben gekomen. Het is zo makkelijk dat je niet zou denken dat het werkt.

Er is alleen wel een punt wat je niet moet vergeten maar waar jij in dit geval weinig mee te maken hebt. In jouw hoofdprogramma (main) doet die niks anders dan je PWM waarde vergelijken met de counter. In een normaal programma moet je controller nog veel meer doen en dan lukt deze opzet niet meer en moet je werken met interrupts die elke zoveel mS een routine aanroept die dit vergelijken overneemt. Hierbij heb je dan wel dat je niet meer 100% op de counter schakelt. Maar in jouw eenvoudige programma heb je daar geen last van en werkt het perfect.

Op 10 april 2003 18:43:47 schreef ace:
[...]
ok ik heb hem aangesloten maar hoe krijg ik die asm nu in de avr??
ponyprog kan geen asm lezen... tenminste ik kan niet vinden hoe :?

Je moet die asm eerst omzetten naar .hex Want je moet net zoals bij de PIC's hex code in je controller laden en niet de assembler.

Zorg trouwens tijdens het "proggen" wel dat je controller is aangesloten op een voeding want daar zorg je hardwareprogger niet voor (die heeft het zelfs ook zelf nodig)

[Bericht gewijzigd door Bastiaan op ]

Op 10 april 2003 18:46:34 schreef Bastiaan:

[...]

Je moet die asm eerst omzetten naar .hex Want je moet net zoals bij de PIC's hex code in je controller laden en niet de assembler.

Zorg trouwens tijdens het "proggen" wel dat je controller is aangesloten op een voeding want daar zorg je hardwareprogger niet voor (die heeft het zelfs ook zelf nodig)

ja dat wist ik al
maar ik kan al dingen in de avr proggen nu..
zat een instellinkje fout...
maar das nu opgelost, nu alleen de asm nog omzetten naar hex..

wat gebeurt er eigenlijk als je de asm gewoon opent met ponyprog en die erin pompt??
die heb ik namelijk net ingezet om te kijken of de software en de verbinding goed waren

[Bericht gewijzigd door ace op ]

Op 10 april 2003 18:50:43 schreef ace:

[...]

ja dat wist ik al
maar ik kan al dingen in de avr proggen nu..
zat een instellinkje fout...
maar das nu opgelost, nu alleen de asm nog omzetten naar hex..

wat gebeurt er eigenlijk als je de asm gewoon opent met ponyprog en die erin pompt??
die heb ik namelijk net ingezet om te kijken of de software en de verbinding goed waren

Dan weet je het toch nog niet lijkt mij, want Ponyprog progt gewoon die asm er dan in maar er hoort hex in te worden gestopt.

Je moet de hex file openen in Ponyprog!

Op 10 april 2003 18:56:35 schreef Bastiaan:

[...]

Dan weet je het toch nog niet lijkt mij, want Ponyprog progt gewoon die asm er dan in maar er hoort hex in te worden gestopt.

Je moet de hex file openen in Ponyprog!

die moet ik eerst compilen... ik ben nu avrstudio aan het downloaden..

maar als ik de asm er in stop en dan de avr uitlees zie ik de asm code weer dus het proggen lukt al :D

OK.

[Bericht gewijzigd door Bastiaan op ]

ok hij draait nu...
alleen is er een vaag ding... hij schokt heel erg.. hij loopt dus niet vloeiend..
hij springt van half naar vol ineens..
en omdat ik me rgb led niet kon vinden heb ik er 3 blauwe op geprikt..

ik denk dat je een fout gemaakt hebt met het proggen....

wat hij nu doet is
R vol aan
R en B halve kracht
B vol aan
B en G halve kracht
G aan
enzo

maar het moet zijn:
R aan
R aan en B komt op
R en B vol aan
R valt af B aan
B aan
B aan G komt op
B en G aan
B valt af G aan
G aan
G aan R komt op
G en R aan
G valt af R aan
begin

als je het op die manier doet verloopt hij wel goed volgens mij
alleen hoe te proggen weet ik niet :S

en zo als je leest werkt de source dus ook met een atmega16 :D

[Bericht gewijzigd door ace op ]

vaag..
net beetje mee zitten klote (rgb ledje erop enzo...) en nu doet hij niks meer :S
ik pak een andere avr en prog die, die doet het wel.. originele gepakt tzelfde geprogd niks..

gaan die dingen zo snel kapot??
ik heb iig geen sluiting gemaakt geen overstroom (tenzij 15ma teveel is)