Bastiaan
Bachelor of Engineering -- Microcontrollers AVR, PIC (asm, C), PC applicaties (C, C++), Webpages (HTML, CSS, PHP, SQL), Rail-infra engineer
Nightrider met glow (PWM), goedkoop, simpel en veelzijdig
Voor wie een nightrider licht wil met glow, zonder al teveel onderdelen, kosten en poespas, heb ik goed nieuws. Ik heb software geschreven waarmee je zowat iedere Atmel controller kan gebruiken om zowat elke variant van de nightrider te bouwen. De mogelijkheden van de nightrider schakeling zijn zeer divers waarbij de opbouw ervan geheel naar keus is van de bouwer ervan.
De schakeling kost qua onderdelen nog geen €10 (excl. led's).
FILMPJE!:
16 kanaals nightrider, 15 led's lange glow tail (avi, 416kb)
16 kanaals nightrider, 5 led's lange glow tail (avi, 257kb)
Mogelijkheden:
*Zelf kiezen van glow/staart lengte, van 0 tot 15 (afhankelijk van aantal gekozen kanalen)
*Zelf kiezen van "loop"-snelheid
*Zelf kiezen van eigen AVR
*Zelf kiezen van oscillator (indien AVR geen interne bezit), van 500kHz tot 6.5MHz
*Zelf kiezen tussen 3 tot 16 kanalen
*Zelf kiezen van iedere I/O pin op de controller als PWM kanaal
De mogelijkheden zijn hierdoor zeer divers wat zorgt dat de nighrider door vrijwel iedereen kan worden gemaakt.
Benodigdheden:
*Eén Atmel AVR
*Klein voedingscircuitje, bijv. een 7805 incl C'tjes
*3 tot 16 led's incl voorschakelweerstand
*AVR progger (bijv. deze), nodig om de software erin te zetten
*Indien de gekozen AVR geen interne osc mogelijkheid heeft is er nog een crystal nodig
Hier zie je het universele schema, waarbij je eigenlijk zelf nog alles moet kiezen, maar dat is juist het grote voordeel van deze schakeling.
Zoals je ziet weinig benodigdheden, en tevens veel vrijheid in de keuze van de onderdelen.
Ondanks dat vrijwel iedere AVR geschikt is moet deze toch aan een paar eisen voldoen:
-1700 bytes Flash geheugen (minimaal)
-128 bytes SRAM geheugen hebben (minimaal)
-EEPROM geheugen hebben
-1x 8-bits timer0 met timer overflow interupt mogelijkheid
-1x 16-bits timer1 met CTC interrupt mogelijkheid
Hieraan voldoen zeer veel typen, zoals: AT90S2313, ATmega8, ATmega8515, enz.
Software
De AVR is een microcontroller dus zonder software zal de schakeling niks doen. Aangezien de software afhankelijk is van de vele gebruikerskeuzes kan ik hier niet zomaar één hex filetje plaatsen, dat zouden er dan namelijk zeker zo'n 50 verschillende zijn. Wie de hex-file nodig heeft moet mij even een mailtje sturen (zie profile) met de volgende gegevens:
-AVR type
-gebruikte oscillator snelheid (ook als die intern is)
-Van ieder kanaal welke pin erbij hoort (poort en pinnummer)
Je krijgt dan van mij de hex file gemailt die speciaal voor jou schakeling is compiled. Deze kan je dan vervolgens in je AVR flashen en dan werkt je schakeling
De andere instellingen kun je vervolgens zelf doen door die in het EEPROM in te stellen, dat zijn de:
-snelheid
-glow/start lengte
Dat kan toch ook wel zonder microcontroller?!
Tuurlijk, maar dat kost heel wat meer, niet alleen qua geld maar ook qua tijd en ruimte. De PCB wordt groter omdat men minimaal 3 IC's nodig heeft ipv 1. Men moet gebruik maken van condensatoren, die zijn niet alleen prijzig, ze nemen eveneens veel ruimte in op je printje.
Ook wordt het schema complexer, en wat krijg je er voor terug? -> Helemaal niks extra want die schakeling zonder microcontroller is minder flexibel. Zo kan je achteraf niks meer wijzigen aan de staartlengte.
Op deze site zie je bijvoorbeeld een schema van een microcontrollerloze knightrider.
Vragen/opmerkingen:
Als je nog vragen hebt over iets dat onduidelijk is of wat dan ook dan kun je die in dit topic stellen. Andere reacties betreffende de schakeling zijn eveneens zeer welkom 
ps. ik geef graag de hex-code aan iedereen die het maar wil, maar voorlopig houd ik de broncode (geschreven in C) nog wel even voor mezelf. Roepen: "dan kan ik er iets van leren" mag wel, maar de code is behoorlijk ingewikkeld dus je moet al veel ervan kennen wil je er iets van snappen of uit kunnen halen. Om je een idee te geven, ik gebruik: interrupts, timers, array's, pointers, functies, headers, preprocessor directives, enz. enz.
[Bericht gewijzigd door Bastiaan op ]
RES
RES
RES
RES
Zo'n staart of nagloeien heet een trail.
Je kan dit ook doen zonder gebruik te maken van interrupts, timers, array's, pointers, functies, headers, preprocessor directives. Een paar tellers, thats all.
[Bericht gewijzigd door RES op ]
Bastiaan
Bachelor of Engineering -- Microcontrollers AVR, PIC (asm, C), PC applicaties (C, C++), Webpages (HTML, CSS, PHP, SQL), Rail-infra engineer
Op 25 december 2004 18:54:21 schreef RES:
Dat ziet er mooi uit, alleen klopt dat schema wel? Want ik zie geen current-drivers voor de LED's.
Het schema klopt wel, want waar heb je current-drivers voor nodig? Een ledje werkt op maximaal 20mA, en laat nou net een poort maximaal 20mA kunnen leveren 
Op 25 december 2004 18:55:36 schreef RES:
Je kan dit ook doen zonder gebruik te maken van interrupts, timers, array's, pointers, functies, headers, preprocessor directives. Een paar tellers, thats all.
Een PWM gestuurde tail? Dat lijkt me niet
De software die ik heb geschreven zorgt niet voor een normale staart maar voor een echt "glow" effect. Dat wil zeggen dat de led's volgend op de 'kop' niet allemaal even fel branden maar naarmate ze het einde van de staart naderen steeds minder fel worden. Dit wordt bereikt met softwarematige PWM.
Een staart van 5 led's heeft bijvoorbeeld de volgende PWM waarden voor die 5 ledjes: 215, 172, 129, 86, 43. Zo zie je dus dat de laatste led van de staart maar een heel klein beetje oplicht want hij brand maar 43/255.
En DAT kun je echt niet zonder al die poespas maken, zeker niet als je de software uitbreidbaar en flexibel wil maken.
Als je het helemaal correct wil maken zul je bij een nightrider met staart ook een "leading tail" moeten maken naast een "following tail". En dat doet mijn software eveneens.
Let btw ook even op het volgende: het maakt NIET uit in welke volgorde je de ledjes aansluit, van mij part sluit je led 1 t/m 4 omgekeerd aan op port B en led 8 t/m 10 normaal op port a, en led 5 t/m 7 weer omgekeerd op port c. Mijn software zet namelijk niet de waarde in 1x neer op een port maar behandelt elk kanaal apart, ongeacht de locatie van de led's tov een port. Daar zijn onder andere die array en pointers voor nodig.
[Bericht gewijzigd door Bastiaan op ]
Bastiaan
Bachelor of Engineering -- Microcontrollers AVR, PIC (asm, C), PC applicaties (C, C++), Webpages (HTML, CSS, PHP, SQL), Rail-infra engineer
Jeroen Boere
IF you can't convince them, then confuse them!
Knap stukje werk Bastiaan (zoals we van je gewend zijn
)
filmpjes zijn mooi, natuurlijk met blauwe LED's he 
Bastiaan
Bachelor of Engineering -- Microcontrollers AVR, PIC (asm, C), PC applicaties (C, C++), Webpages (HTML, CSS, PHP, SQL), Rail-infra engineer
Bedankt!
Ik hoop dat er veel mensen zijn die deze schakeling willen gaan maken en nog nooit of zelden met een microcontroller hebben gewerkt. Eenzelfde nightrider incl. glow zonder gebruik van microcontroller kost namelijk evenveel of zelf meer en zowat iedere elektrohobbiest kan dit maken.
Ik nodig ook Weardguy uit om deze schakeling eens te gaan proberen.
Ik hebooit eens een nightrider gemaak met 2 4017 ring counters, die waren nog wel een stuk goedkoper dan een AVR, maar toch een leuk dingetje. Ik had een analoge glow, nadeel: bij gebruik van andere leds moest alles opniew gemaakt worden
Bastiaan
Bachelor of Engineering -- Microcontrollers AVR, PIC (asm, C), PC applicaties (C, C++), Webpages (HTML, CSS, PHP, SQL), Rail-infra engineer
Op 26 december 2004 12:15:06 schreef Bertrix:
Ik hebooit eens een nightrider gemaak met 2 4017 ring counters, die waren nog wel een stuk goedkoper dan een AVR.
Maar er zijn nog meer onderdelen dan alleen een counter of een AVR. Jij moest namelijk condensatoren gebruiken en die zijn ook niet goedkoop, en hoe meer kanalen je hebt hoe duurder jou schakeling wordt.
Bij Conrad heb je zo'n nightrider bouwpakket te koop voor 10 ledjes, kost €12,95. Dan heb je nog geen glow, en het zijn zit je vast aan (maar) 10 ledjes. Mijn schakeling blijft onder de €10 zitten, en je kunt zelf kiezen tussen 3 tot 16 kanalen, zelfs achteraf als alles al is gesoldeerd.
Ik had een analoge glow, nadeel: bij gebruik van andere leds moest alles opniew gemaakt worden
En je kon de staart lengte niet wijzigen zonder de hele schakeling aan te passen. En je kon het aantal kanalen niet wijzigen zonder de hele schakeling aan te passen.
En je PCB was groter, ten eerste al vanwege 3 IC's tov 1 bij mijn schakeling, en vanwege de condensatoren die jij nodig had (grotere PCB kost trouwens ook meer).
Bastiaan
Bachelor of Engineering -- Microcontrollers AVR, PIC (asm, C), PC applicaties (C, C++), Webpages (HTML, CSS, PHP, SQL), Rail-infra engineer
Op 26 december 2004 13:16:42 schreef robint91:
hoe doe je die software pwm ?????
Om dat te begrijpen moet je wel snappen hoe PWM werkt, als je dat nog niet weet dan moet je dat eerst even opzoeken en bestuderen.
Eerst neem je een teller in je software die iedere xxx periode zichzelf 1 ophoogd, waarbij die xxx periode gelijk is aan (1/refresh_rate)/255. Die teller laat je continue van 0 tot 255 lopen. Dit zorgt voor de puls breedte.
Daarna controleer je telkens per kanaal of de PWM waarde ervan hoger of lager is dan de teller. Aan de hand van die uitkomst stuur je het ledje wel of niet aan.
Zo krijg je veel softwarematig PWM kanalen waarmee je heel mooi led's en dergelijke kunt dimmen.
weardguy
http://www.m-voorloop.nl --- Ik? Welnee! Ik zit nog lang niet achter de germaniums.
He, dit is idd, handig, ik snap er ook nog wat van.
Die timer0 zit op 8 bit (dat verklaart voor mij die 255 ) en die stel je in op een bepaalde waarde en daarmee bepaal je dus voor een deel de PWM waarde.
Dit is zeker interessant, ik ga hem ook zeker maken.
Evil Aedolon
ELEKTRONICA WIKI // Wiskunde is "hip" // http://www.physics2005.org/ 2005 Year of physics! // "In science there is only physics; all the rest is stamp collecting."
Mooi werk Bastiaan! Met name door de eenvoud.
Enig puntje van kritiek: Ik vind de reset niet zo netje geimplementeerd. Reden dat ik erover val, is dat ik heel veel ruzie met AVRs heb gehad waar de reset op een dergelijke manier werkte. Misschien type afhankelijk...
Bastiaan
Bachelor of Engineering -- Microcontrollers AVR, PIC (asm, C), PC applicaties (C, C++), Webpages (HTML, CSS, PHP, SQL), Rail-infra engineer
Op 26 december 2004 17:00:29 schreef Evil Aedolon:
En nu de hamvraag: Wat is het nut van zo een nightrider?
Ik zal het even vertalen voor de anderen, Aedolon bedoelt met deze vraag: "Joh wat leuk" 
Het is net een vrouw, hij zegt het ene maar bedoelt het andere 
Op 26 december 2004 17:08:26 schreef Marco69:
Mooi werk Bastiaan! Met name door de eenvoud.
Dankje, dat was het streven. De software is het mooiste van allemaal omdat je namelijk veel kan wijzigen zonder de echte hoofdcode te wijzigen (maar daar hebben jullie niet veel aan want je hebt de broncode niet)
Enig puntje van kritiek: Ik vind de reset niet zo netje geimplementeerd. Reden dat ik erover val, is dat ik heel veel ruzie met AVRs heb gehad waar de reset op een dergelijke manier werkte. Misschien type afhankelijk...
Dat vind ik interessant om te horen, kun je dat wat meer toelichten?
De reset is een low-active pin, dus die behoor je gewoonweg omhoog te trekken met een pull-up om hem inactive te maken. Jou probleem onstaat waarschijnlijk bij het inschakelen/opstarten, wanneer de spanning nog niet stabiel is geworden maar de controller al wel gaat werken omdat de reset treshold voltage reeds is bereikt, iets wat vreemd gedrag kan veroorzaken.
Alle AVR's hebben een delay ingebouwd dat ervoor zorgt dat ze na een extra tijd na de reset pas echt gaan werken (internal reset). Die extra tijd (Time out en Ttout in datasheet) kan bij "langzame voedingen" niet toereikend zijn. Een mogelijke oplossing is het toepassen van een condensator tussen de reset pin en gnd. Het gebruik van een BOD (Brown-out detector) helpt uiteraard ook.
Jonathan
"Theorie is alleen te rechtvaardigen als 'n vorm van praktijk. De praktijk staat niet terecht voor 't hooggerechtshof van de theorie" (Stephan Toulmin)
Evil Aedolon
ELEKTRONICA WIKI // Wiskunde is "hip" // http://www.physics2005.org/ 2005 Year of physics! // "In science there is only physics; all the rest is stamp collecting."
Op 26 december 2004 17:34:55 schreef Bastiaan:
[...]
Ik zal het even vertalen voor de anderen, Aedolon bedoelt met deze vraag: "Joh wat leuk"Het is net een vrouw, hij zegt het ene maar bedoelt het andere
Waarom zou ik een man zijn? Heb ik dat ooit gezegd dan?
Nee, deze keer bedoel ik echt "Wat is het nut?" Als een vrouw B zegt terwijl ze A bedoeld heeft dat eerder met jou te maken.
Kan je je skills niet gebruiken om vb een memorystick te maken (jaja zal wel traag enzo zijn maar het is een leuke oefening) en dan je nightrider op de één of andere manier gebruiken om weer te geven hoe "vol" de stick zit...
Bastiaan
Bachelor of Engineering -- Microcontrollers AVR, PIC (asm, C), PC applicaties (C, C++), Webpages (HTML, CSS, PHP, SQL), Rail-infra engineer
Op 26 december 2004 17:41:01 schreef Evil Aedolon:
...Nee, deze keer bedoel ik echt "Wat is het nut?"...
Het nut bestaat uit meerdere doelen en luid:
*Beginners/leken op het gebied van µC een duw in de rug geven zodat ze zien hoe leuk en makkelijk een controller eigenlijk wel niet is.
*Voldoen aan de grote vraag naar een nightrider met glow, waarbij die tevens toegankelijk is voor veel mensen.
*Laten zien dat je niet alleen met een teller IC en Ctjes een nightrider met glow kan maken, maar eveneens met een even dure en zelfs makkelijkere schakeling.
*Laten zien wat een vrijheid je wel niet hebt met een µC.
Meer doelen zullen er ongetwijfeld zijn, maar die weet ik nu ff niet meer 
Evil Aedolon
ELEKTRONICA WIKI // Wiskunde is "hip" // http://www.physics2005.org/ 2005 Year of physics! // "In science there is only physics; all the rest is stamp collecting."
Bastiaan
Bachelor of Engineering -- Microcontrollers AVR, PIC (asm, C), PC applicaties (C, C++), Webpages (HTML, CSS, PHP, SQL), Rail-infra engineer
Op 26 december 2004 17:49:49 schreef Evil Aedolon:
Wat was JOU doel? Vast niet één van die 3 dingen...
Ja Jonas, er bestaan ook mensen die wat doen voor anderen en niet alleen voor hun eigen hachie (hoe schrijf je dat?)
Alle doelen die ik daar heb staan waren MIJN doelen. Het was eveneens tijdverdrijf, ff oefenen met C code door optimalisatie enz. enz., en ik wilde ook wel zo'n glowrider voor mezelf 
Zou je nu geloven dat ik aan exact hetzelfde bezig ben? Ben ook software aan het schrijven om een nightrider te maken. Een vriend van me heeft er eentje nodig, en ik vind die tellers niet slecht, maar om een glow te krijgen moet je met elco's gaan knoeien, en die kan je dan niet instellen om de lengte te bepalen etc.
PWM is idd de beste manier, maar mijn versie zal opensource zijn, voor de PIC, en _wel_ met current-drivers werken zodat je meer stroom kan trekken. Ik ga ook voor meer dan 16 leds, en doe het met latches om meer leds te gebruiken dan poorten van de PIC 
In elk geval heel mooi gelukt projectje. Proficiat.
[edit]
EN het zal in assembler worden
[/edit]
RES
RES
Op 26 december 2004 17:00:29 schreef Evil Aedolon:
En nu de hamvraag: Wat is het nut van zo een nightrider?
A shadowy flight into the dangerous world of a man who does not exist. Michael Knight, A young loner on a crusade to champion the cause of the innocent, the helpless, the powerless, in a world of criminals who operate above the law.

