Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Datumbereik

Onderwerpen

AND

Subforum

Topicstarter

Topicstatus

20 topics - Pagina 1 van 1

[Discussie] Arduino-topic

04-02 22:25 discussie 8255
Arduino discussietopicDit is het 1e discussietopic over Arduino. Je kan hier je eigen codes plaatsen, en de codes van anderen overnemen. Je kan ook een foute code neerzetten, en aan de anderen vragen wat er fout aan is als je er zelf niet uitkomt. Deze topicstart is nog in bewerking, er komt af en toe wat bij. Hiervoor heb ik toestemming van Oscar the GrouchIndexDe Startpost bestaat uit een aantal onderdelen. (klikbaar)Boards/Arduino ControllersSoftware WindowsSoftware MAC OS XArduino UitbreidenAparte Hardware (onderdelen)LinksDe verschillende typen Arduino controllersEr zijn een aantal verschillende soorten Arduino controllers. Een opsomming van de verschillende soorten vind je hieronder:
Arduino UNO
De huidige standaard Arduino controller, opvolger van de Arduino Duemilanove. Dit is de controller bij uitstek om mee te beginnen. Sluit het met een USB kabel aan op je PC en je kan aan de slag.
Arduino Mega
Heb je niet voldoende aan de Arduino Duemilanove, dan kan overstappen naar de Arduino Mega. De Arduino Mega bevat een Atmega 1280 chip en heeft veel meer I/O beschikbaar.

Arduino Mini
De Arduino Mini is een mini versie van de Arduino Duemilanove. De processor is hetzelfde, alleen zijn er een aantal onderdelen niet aanwezig, zoals het USB aansluit gedeelte, de stroomregelaar en de expansie headers. Om de Arduino Mini te programmeren heb je een USB <--> Serial Convertor nodig

Arduino Nano
Dit is een ook mini versie van de Arduino Duemilanove, maar bevat wel het USB stuk, en is dus direct klaar voor gebruik. Deze is met name geschikt voor het gebruik op breadbords. Prik het in het breadbord en je kan aan de slag.


Klonen
Omdat het Arduino platform open source is zijn er veel klonen van te verkrijgen. Een aantal bekende klonen zijn: Dit kopje komt binnenkort weer terug.

Software WindowsDit is voor Windows. Mac:link Linux: link
De software moet je downloaden van de arduino-site, of via deze directe link.
Je moet wel een Arduino-board, en een USB-kabel hebben om het te kunnen gebruiken.
Als je eenmaal de software hebt gedownload, moet je de drivers downloaden. Dat kan via deze link.

Daarna moet je het board aansluiten via de USB-kabel. Hij kan de driver niet vinden. Klik op 'nee, niet door Windows Update zoeken', en ga naar Apparaatbeheer. Je ziet hier een onbekend apparaat, klik erop, en zorg dat hij drivers gaat installeren. Klik op: 'Ik heb een installatiebron' en selcteer de map van de drivers. Dan gaat hij de map doorzoeken, en hij gaat de drivers als het goed is installeren. NB: Houd apparaatbeheer open!
Open Arduino. Daarvoor moet je eerst het gedownloade zip-bestand uitpakken, en in die map arduino aanklikken. Je kan dan van alles openen in: 'File>Examples>...>...

De volgende stap is natuurlijk een simpele code uploaden naar het board. We starten daarvoor de code: 'File>Examples>Digital>Blink' Je moet weten via welke COM-poort dat gaat. Om te weten welke poort: Kijk in apparaatbeheer onder Ports, en zoek naar USB Serial Port. Daarachter staat welke COM-poort het is.

Dit moet je daarna instellen in Arduino. Ga naar 'Tools>Serial Port' En selecteer de com-poort die in apparaatbeheer stond. Je moet ALTIJD compileren, als dat een positief resultaat geeft klik je op 'Upload to board'
Je wacht even, en als het goed is gaat een lichtje knipperen; 1 sec. aan, 1 sec. uit.

Daarna kan je op deze site extra commando's bekijken, maar die bespreek ik ook in Standaard Codes, en Geavanceerde codes.Software MAC OS XDeze guide is voor MAC OS X 10.3.9 of later.
De software moet je downloaden van de arduino-site, of via deze directe link.
Je moet wel een Arduino-board, en een USB-kabel hebben om het te kunnen gebruiken.
Als je eenmaal de software hebt gedownload, moet je de drivers downloaden. Drivers: linkArduino uitbreidenWil eens kijken welke mogelijkheden er allemaal zijn om je arduino van meer poorten te voorzien zonder gelijk een Arduino Mega te kopen voor de hoofdprijs. Gelukkig zijn er een aantal mogelijkheden, kant en klaar of gewoon componenten. Nu is dat laatste natuurlijk leuker om zelf iets in elkaar te zetten en is vaak ook nog goedkoper dan een kant en klaar product te kopen.

Multiplexer en Demultiplexer CMOS
Dit kan bijvoorbeeld met een CMOS 4051, deze chip heeft 8 kanalen. Om zo een chip aan te sturen heb je 1 analoog nodig en 3 digitale pinnen om de juiste kanaal te selecteren. Als je er dus 1 aansluit offer je dus 4 pinnen op maar je krijgt er 8 voor terug. Maar je kan er meerder aan elkaar hangen. In de bron word een voorbeeld gegeven van negen 4051 chips, ze zijn daarmee instaat om met 1 analoog en 3 digitale pinnen 64 nieuw digitale/analoog I/O creëren. Dat geeft ze dus meer pinnen dan de arduino mega standaard heeft en kosten fractie van de extra kosten wat een Mega met zich meebrengt. En je hebt meer I/O dan een mega.

Bron: http://www.arduino.cc/playground/Learning/4051
Kosten per chip: +- 0.25 - 0.50 euro

I2C poort expanders
De arduino heeft een I2C bus, er kunnen maximaal 8 I2C chip met zelfde adres range worden aangesloten.

De PCF8574 bijvoorbeeld, dit is een 8bit poort expander en heeft 8 poorten. Je zou dus 8 van deze chips aan de analoog pin 4 en 5 kunnen hangen, dan offer je twee 10bit analoog pin op maar krijgt daar 64 nieuwe 8bit poorten voor terug. Kosten is vrij hoog vergeleken met de 4051, maar nog steeds goedkoper dan een arduino mega en in totaal heb je meer I/O dan de Mega.

Als je de PCF8574 en de PCF8574A combineert kan je als het goed is 8 PCF8574 en 8 PCF8574A tegelijk aansluit wat je 128 nieuwe poorten geeft.



Bron: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1233786313/2
Kosten per chip: +- 2.25 euro

EZ-Expander Shield
Deze kan je kopen als kit of kant en klaar product. Voegt 16 nieuwe digitale pins toe, je moet daarvoor 3 digitale pins opofferen, je wint dus 13 digitale pinnen. Het werkt via twee shift registers.


Bron: http://nootropicdesign.com/ez-expander/
kosten kit: $12.95
Kant en klaar: $17.95Externe HardwareJe moet om echte dingen te kunnen doen met het Arduino-board, ook extra 'hardware' hebben. Bijv. Lampjes, andere 'boards'. Die ga ik hier in dit gedeelte bespreken.
Lampjes zijn het belangrijkst, om meerdere lampjes te kunnen laten branden. Je hebt ook aan-/uit-knopjes, en van alles. Je kan ze na een beetje goed zoeken wel ergens kopen.LinksEen paar links naar handige sites. Via DM kan je er meer sturen.Arduino-siteCloon van Arduino, je kan wel veel vindenAllemaal codes voor ArduinoVersie 2; door F.West98

Draadloos 1/0 signaal versturen

19-11-2015 discussie 10
Hey mensen,

Voor een hobby projectje zijn we aan het brainstormen.
Voor een vriend willen we 2 voet pedalen maken, voor het bedienen van 2 van de xbox controller knoppen.

We willen graag 2 input signalen van punt A naar punt B brengen.
Het gaat om een digitale input die alleen 1 of 0 kan zijn.

Met een kabel is dit super eenvoudig, pedaal met schakelaar en dan door bekabelen naar de controller.
Maar we willen het geheel draadloos maken, omdat een kabel aan je controller niet fijn speelt.

Omdat het gaat om gamen is de bedoeling dat het zo responsive mogelijk is.
Input lag moet zo minimaal mogelijk zijn.
We hebben na gedacht over 2 WifiDuino's op te zetten en deze met elkaar te laten communiceren.
Echt een out of the box oplossing hebben we niet kunnen vinden.

Ik ben vooral benieuwd of jullie suggesties hebben voor het idee. Of dat we een enorm simpele oplossing over het hoofd zien ofzo.

De ?C programmers Kroeg

31-05-2015 discussie 144
Via de EL Kroeg kwam de suggestie om een μCPU programmer kroeg te starten. Wat houdt dat in?μC is microProcessor, dus niet per sé de programmeertaal C. Stel je vraag over bugs, performance, optimalisatie, settings. Dit is de software-kroeg, van weerstandjes, torretjes en caps hebben we geen verstand (nou ja, ik niet) We hebben het hier over microProcessor talen. Dus geen Java, PHP, C#, Swift, en andere desktop-based talen. Daarvoor verwijs ik graag naar het Tweakers Programming forum zelf kan ik helpen met C/C++ maar er zijn ongetwijfeld tweakers die PiCbasic en Processing goed beheersen. Als je een vraag hebt, vertel danduidelijk je probleem en de omgeving, wat heb je al geprobeerd en toon zoveel mogelijk (relevante) code.gebruik de code tags voor code. Als je moet quoten, quote dan selectief. houdt het gezellig!

Micro-controller toegepast.

27-09-2012 discussie 12
Hallo, de bedoeling van dit topic is dat de deelnemers laten zien hoe ze de MC toepassen om bepaalde schakelingen te sturen.
Het is niet zozeer bedoeld om lappen codeteksten te plaatsen maar gewoon om met afbeeldingen, foto's en schema's te laten zien wat voor leuke dingen je met een micro kunt doen.
Leerzaam voor jezelf en anderen om dit in korte formuleringen te gieten, eventuele details kunnen dan altijd nog opgevraagd worden.

ADC0831
Onderstaande toont een ADC0831 die geschakeld staat als DVM(digitale voltmeter). De draad op Vin+(2) kun je gewoon zien als de plusdraad van een voltmeter, de micro zorgt ervoor dat de gemeten waarde in beeld komt. Net als bij een voltmeter heeft deze draad totaal geen invloed op de rest van de schakeling maar is wel uitermate makkelijk omdat er een 'voltagesweep' mee uitgevoerd kan worden. Dit houdt in dat alle mogelijke 16 spanningen in een tabel op het scherm kunnen worden weergegeven.

Weerstandsladder
R1-R9
Dit is een D/A-converter, op pin 4-7 kunnen 16 combinaties gezet worden van 0000 t/m 1111 corresponderend van 0 tot 3.1 volt in stapjes van 0.2V

LM538
Deze staat geschakeld als een spanningsvolger met versterking 1 en dient als buffer om de led aan te sturen.
Zonder deze buffer en indien de led direkt op de ladder wordt gezet dan zakt de uitgangsspanning van die ladder weg. De buffer voorkomt dit dus en houdt de maximale spanning van 3.1V mooi op peil.

Ok, een afbeeldingen gedownload met postimage zodat ze klein blijven. Door erop te klikken krijg je een volledige grootte te zien.
Het schema is gemaakt met LTSpice.





Een uitgebreide uitleg van de schakeling is hier te vinden incl. code in hoofdstuk 4
http://www.parallax.com/P...sicAnalogDigital-v1.4.pdf

Dus aarzel niet, laat zien waar je mee bezig bent

Microcontroller in combinatie met IR led

27-07-2012 discussie 60
Ik zou graag met 2 microcontrollers (16f84a), en een IR led (nog aan te schaffen) en een IR ontvanger (nog aan te schaffen) een soort simpele draadloze verbinding maken.

Dat wil zeggen, ik wil eerst gewoon graag dat ik een simpelweg één pin op de ene microchip via IR met de andere op hoog kan zetten, ik heb een boel gezocht naar IR tutorials e.d., maar ik kan niets vinden dat het goed vanaf de basis uitlegd.

Ik weet al behoorlijk wat van microcontrollers en algemene electronica, maar heb nog nooit met IR gewerkt, kan iemand mij op weg helpen?

Xbox besturing project feedback

06-05-2012 discussie 14
Ik ben bezig met het maken van een project dat zal bestaan uit een stuk hardware en software. Dit moet gehandicapte mensen in staat stellen Xbox 360 spellen te spelen. Het bestaat eigenlijk gewoon uit een microcontroller aangesloten op een computer via usb en aangesloten op de verbindingen van de buttons, joysticks en triggers van een Xbox 360 controller. Dit stelt de gebruiker in staat om allerlei middelen te gebruiken die aan te sluiten zijn op de computer om de Xbox te besturen (denk aan spraakbesturing, face tracking, vocal joysticks etc.).

Ik heb al een prototype gemaakt waarmee ik de Xbox kan besturen met een computer, maar ik wil het nu nog uitbreiden en ik zou dit graag goed (lees professioneel) aanpakken. Dit is ook de reden dat ik dit verhaal hier post, ik zou namelijk graag jullie ideeën horen zodat het uiteindelijke product (dat tegen kostprijs beschikbaar zal worden gesteld) zo goed mogelijk werkt en zo volledig mogelijk is.

Wat ik nu heb aan ideeën is als volgt:

Als microcontroller ga ik een 18f4550 gebruiken, deze is aangesloten op een computer via usb. De computer draait een programma dat de gebruiker in staat stelt allerlei verschillende inputs (denk aan muis bewegingen, toetsenborden, face tracking, een wii controller noem het maar op) te koppelen aan de inputs van een Xbox 360 controller. De microcontroller is verbonden aan een aangepaste Xbox controller (aangepast in de zin dat er een aansluiting voor een stekker die is aangesloten op de verschillende knoppen is toegevoegd) via een ribbon cable. Van de 18f4550 is dan PORTB verbonden aan de A, B, X, Y en de dpad knoppen. PORTD aan de rest van de digitale knoppen (de connect knop is nergens aan verbonden maar moet handmatig worden bediend). De 18f4550 heeft twee pwm poorten, deze worden door een weerstand en capacitor omgezet in simpele dacs voor de twee triggers. De analoge sticks worden aangestuurd door twee digitale potmeters, doormiddel van SPI met de 18f4550 verbonden.

Daarnaast moet het aantal ingangen nog worden uitgebreid (ze zijn namelijk nu al bijna op), zodat er tenminste 20 inputs zijn zodat de gebruiker speciale knoppen kan aansluiten die dan naar wens kunnen worden gekoppeld aan de verschillende inputs van de controller. De koppelingen moeten worden opgeslagen in het non-volitile deel van het geheugen van de chip, zodat de hardware ook zonder computer kan worden gebruikt als alleen deze koppeling nodig is. Naast de koppeling moet ook kunnen worden ingesteld of een input latching is of niet.

De lag moet natuurlijk zo klein mogelijk zijn, maar toen ik mijn prototype uitprobeerde was de lag zeker acceptabel, dus het is mogelijk.

Voor de software op de computer dacht ik eraan om als inputs waar je uit kunt kiezen (dus die je kunt koppelen aan je controller inputs) alle toetsen van je toetsenbord te nemen, de muis en standaard joysticks. Omdat alle andere input dan (al dan niet via software van derden) kan worden ingesteld toetsen na te bootsen, ofwel als een joystick werkt ofwel als muis kan dienen. Mijn software hoeft dan niet zelf voor de support van al deze verschillende input te zorgen. Ik ben met deze software ook al een heel eind.

Tot slot moet er ook nog support zijn voor macro’s, dus ik dacht eraan om wat extra eeprom geheugen toe te voegen waar deze in kunnen worden opgeslagen. Deze zijn dan ook zonder de computer te gebruiken (al moeten ze wel met behulp van de computer kunnen worden ingesteld, evenals de koppelingen van de inputs aan de controller inputs trouwens). Ik ben er nog niet helemaal uit hoe ik de timing van deze macro’s zal doen (ik zat aan interupts te denken, om de 1ms bijvoorbeeld, en dan de knoppen die niet in de macro voorkomen gewoon blijven pollen terwijl de macro wordt uitgevoerd).

Wat ik ook nog niet weet is of ik een voltage divider moet plaatsen tussen de 18f4550 outputs en de controller inputs, want die werken eigenlijk op een lager voltage, maar ik weet niet of ze ook op een hoger voltage kunnen werken.

Ik heb ook al wat nagedacht over de manier waarop de data is opgebouwd die via usb word verstuurd, maar dat zal ik later posten aangezien dit al heel wat informatie is.

Graag hoor ik wat jullie ervan vinden en wat beter kan of moet worden toegevoegd.

LED dot-matrix scherm aansturen

18-09-2011 discussie 18
Een kennis van mij kwam met wat leuks aanzetten, een groot LED dot-matrix scherm.
Vol met leuke hardware, 8x 7,5v 20A voedingen, 2 controllerbordjes en een heel stel LED modules:


(het bord is dubbelzijdig)

Dit is het controllerbord voor de ene helft:

Er zit op:
- I2C met GND, +5v en 2 com. pinnen, waarop een trage klok en een korte puls staan
- RS232 via max232, verstuurde geen data.
- RS422, werd gebruikt ter aansturing, geen zichtbaar signaal.
- RS485/TTL/Optical, waarbij de optical gebruikt wordt voor de aansturing van de panelen, en de RS485/TTL daarbij hetzelfde zichtbare signaal krijgt volgens de scoop.
- Ook nog een andere aansluiting, maar daarop kreeg ik geen signalen te zien.


Achterzijde van een LED module. Deze hebben elk een optical in en out, wat pinnen zonder connectie en aanduiding.

Wat ik al ontdekt heb is dat de modules geen ID hebben, ze werken als 1 groot schuifregister, want als ik module 1 en 2 omwissel, verplaatst ook de tekst. Het scherm start namelijk op met een bewegend streepjespatroon, en daarna de melding "NO RC" (no remote controller)

Op zich is het nog wat vroeg om jullie hulp al in te roepen alsof ik er niet uit kom, ik heb pas een klein avondje besteed om wat onderdelen te bestuderen, te demonteren en even te meten op de poortjes. Maar wellicht hebben jullie wat tips over het aansturen ervan, er zijn tenslotte eerder zulke projecten geweest

Ik zou bijv. nog niet echt weten wat voor data ze over de bus zouden gooien om elke led apart aan te sturen. En hoe ik dit min of meer kan achterhalen of herleiden. De output op een compoort van de PC aansluiten en kijken wat er voor data uit komt OID? Zit je nog wel met de baudrate die correct moet zijn.

Daarna kan ik bepalen hoe ik het wil aansturen, dit bordje aansturen via I2C met arduino of rs232 met de PC, of op de Arduino een ledje aansluiten waarmee ik direct het optische signaal kan sturen. Al heb ik nog geen doel ermee voor ogen, zie het meer als leerproject

[c] seriele communicatie microcontroller

12-03-2011 discussie 9
ik wil graag wat meer leren over de seriele verbinding, en dan in combinatie met microcontrollers.
Ik heb dus een boek gedownload, waar dit goed in uitgelegd is maar helaas lijkt de code niet te werken, dat wil zeggen dat ik niets terugkrijg in hyperterminal, terwijl ik dit wel verwacht.

Dit is de code:
code:
1 2 3 4 5 6 7 8 9 void main() { Soft_Uart_Init(PORTC, 0, 1, 9600, 0); for(;;) { Soft_Uart_Write("test bericht"); } }
(ik verwacht dus heel snel heel vaak test bericht te ontvangen)

Ik maak gebruik van een pic18f4520, die werkt op een 20mhz kristal. Ik heb uiteraard ook even geprobeerd om een led te laten knipperen om de opstelling te testen, maar dat werkt gewoon perfect.

Daarnaast lijkt de max232cpe+ die tussen de microcontroller en de computer hangt ook zijn werk te doen, want als ik R1out en T2in (die dus normaal op rc0 en rc1 zijn aangesloten) direct op elkaar aansluit krijg ik wel gewoon mijn signalen weer terug zoals verwacht. Ik heb het ook een keer geprobeerd door rb0 en rb1 te gebruiken, maar daarbij gebeurde ook niets.

Ik heb het programma geschreven in mikroC, waar ik de snelheid van het kristal ook op de juiste waarde heb ingesteld (bij de test met de led knipperde de led ook op de juiste snelheid). Ik weet niet of dit er toe doet, maar het geheel is gemaakt op een broadboard, en verbruikt volgens mijn voeding ca 0,01 tot 0,02A.

Is er iets wat ik nog over het hoofd heb gezien?

Baxandall toonregeling via pc met een microcontroller

07-03-2011 discussie 16
Beste tweakers,

Ik ben sinds vandaag nieuw op dit forum dus ik zal me een beetje kort voorstellen. Ik ben Gunther VG, ik woon in Kapellen, ben 19 jaar en volg Elektronica-ICT op het De Nayer Instituut te Sint-Katelijne-Waver. Ik zit daar tevens ook op kot.

Nu to the point, we krijgen dit semester een vak 'Project ICT 1', in dit vak is het de bedoeling per 2 of alleen een waardig project te ontwikkelen waarbij minstens een programmeerbaar component komt kijken. Nu dacht ik met een medestudent om Baxandall toonregeling te maken. Voor de gene die dit niet kennen staat er op de volgende site wel wat uitleg:
http://gilmore2.chem.northwestern.edu/projects/equal_prj.htm

Het gaat vooral over de passive 2-bank baxandall. Hiermee is het dus mogelijk om de treble en de bass te regelen van muziek. Omdat dit vrij simpel is hebben we er een extra bijgevoegd. Namelijk de 2 potentiometers te vervangen door digitale potentiometers (Dallas DS1866). Deze worden dan aangestuurd door een microcontroller (ADuC832) die op zijn beurt wordt aangestuurd door 2 eenvoudige sliders op de pc die gemaakt zijn in VBA.
Plaatje op imageshack (popups!)

Tot zover het idee, nu de uitwerking nog. We gaan in de loop van volgende week er mee beginnen, bestellen componeten etc.. Dus ik zal dit topic zeker nog updaten.

Mijn vraag voor nu al, heeft er misschien al iemand ervaring met deze toepassing, of iets soortgelijks? En heeft er iemand ervaring met de Dallas DS1866 potentiometer? Deze is namelijk logaritmisch, dus we zouden een voorschakelweerstand hier voor moeten gebruiken, omdat deze per stap 5db verandert. Dit is dus nogal redelijk veel voor geluid. En weet er iemand misschien een goed simulatiesoftwarepakket zodat we kunnen simuleren welke voorschakelweerstand we zullen moeten gebruiken?

De bedoeling van dit topic is grotendeels feedback van jullie (liefst opbouwende en geen nutteloze commentaar). En om mensen die hiervoor geïnteresseerd zijn ook verder te helpen.

Alvast bedankt.

[EiP]Codename: Rendez-Vous

19-12-2010 discussie 105

"We choose to go to the moon in this decade and do the other things. Not because they are easy, but because they are hard."
-- John F. Kennedy, 1962. Featured in the opening of "Fourth Rendez-Vous" during the Houston concert, 1986.
Wat gaan we doen?
Al lange tijd ben ik fan van de muziek en de shows van Jean Michel Jarre. Jarre staat bekend om zijn spectaculaire concerten en het gebruik van bijzondere en soms zelfgebouwde instrumenten (zoals de Theremin), en als lightjockey en soldeersnuiver kon ik het natuurlijk niet laten om een poging te doen om zijn populairste instrument na te bouwen:


(Foto van de harp van Jarre in Beijing, 2004, tijdens Second Rendez-Vous)

Ziet er vanuit het publiek gezien erg indrukwekkend uit, maar de harp is, zoals we straks zullen zien, redelijk simpel in constructie.

Wat is het precies?
Een laserharp is een instrument wat bespeeld wordt door met je handen door een laserstraal heen te breken. De meeste uitvoeringen (inclusief die van Jarre) hebben 8 snaren en kunnen van toonladder wisselen door middel van footswitches.

Sommige mensen beweren dat de harp van Jarre nep is. Ik kan je verzekeren dat het niet zo is, maar het wel op concerten voorgekomen is dat de harp het niet deed (en de lead dus op de achtergrond gespeeld werd). Bij de Oxygene Tour in de UK was dit bijvoorbeeld het geval. Echter in de grote concerten zoals Beijning, Place de La Défense en Houston werd alles live gespeeld.

Hier zijn wat filmpjes van het instrument in actie:
Second Rendez-Vous (Twelve Dreams of the Sun, Cairo, 2000)

Chronologie Part 3 (Akropolis 2001)

Oxygene 7 (Merzouga 2006)

Second Rendez-Vous (Beijing 2004)

Hoe werkt het?
Laserharpen werken op twee verschillende principes: Met frame en zonder frame. De harpen met frame zijn het eenvoudigst te bouwen (en die zijn dan ook het eerste door hobbyisten uitgevogeld), en bestaan uit een aantal losse lasers of één laser met beamsplitters, waarbij de stralen een set sensoren bovenin het frame raken. Sluit een aantal draden van de sensoren aan op een microcontroller, en genereer hiervanaf MIDI.

De frameloze harpen zijn het leukste, en zijn het indrukwekkendst voor het publiek om te zien. Echter ze zijn wel een grotere uitdaging om te bouwen, maar dat maakt het juist leuker. Hoe werkt een frameloze harp nou precies? Je kunt immers moeilijk sensoren op de maan gaan hangen ...

Wat er in een frameloze harp gebeurt is dat een laserstraal in een regelmatig patroon van links naar rechts scant, en op bepaalde punten stopt. Op die punten is de straal zichtbaar. Een lichtsensor pikt het gereflecteerde licht van de hand van de speler op,, en synchroon met de 'stop' momenten kan bepaald worden welke straal er precies onderbroken is (door bij te houden bij welk punt er gestopt is). Klinkt gecompliceerd, hier een stukje pseudocode om het uit te leggen:
code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 int straal_nummer = 0; void lichtsensor_interrupt(void) { speel_noot(straal_nummer); } void main(void) { while(1) { straal_nummer += 1; if(straal_nummer == 8) straal_nummer = 0; } }
Waarbij "straal_nummer" overeenkomt met de positie van de laser op dat moment.

Okee, we weten nu hoe het werkt, laten we eens wat gaan bouwen!
De eenvoudigste en meest straightforward manier om dit in elkaar te zetten is met een stappenmotor. Veel hobbyisten gebruiken galvo's, maar galvo's zijn betrekkelijk duur en hebben veel (analoge) stuurelektronica nodig om netjes het gewenste patroon te kunnen genereren. Om te experimenteren zijn steppers een makkelijk alternatief: Omdat je toch op vaste punten stopt kun je dit prima als (micro)steps uitvoeren. Plus steppers zijn in veel gevallen niet duur of zelfs gratis ergens uit te slopen, en omdat ze discreet aangestuurd worden heb je weinig poespas nodig om ze rechtstreeks aan een printerpoort of microcontroller te kunnen knopen.

Verder hebben we uiteraard nog een laser nodig. Struin eBay of Marktplaats af, het vermogen waar we naar zoeken is in het bereik van 50-100mW. Meer is beter, maar hou rekening met laserveiligheid.

Voor de lichtsensor kun je verschillende oplossingen bedenken. Stephen Hobley heeft een creatieve oplossing bedacht met een Wiimote, waarbij hij de ingebouwde licht-tracking functie gebruikt om de positie van de straal te bepalen. Dit gaat ook mijn eerste prototype worden, met een bestaande laserunit (ShowTec Shogun G-30) die ik al heb, en de Wiimote zel het voor de eerste keer alleen in software draaien. (Hier zal ik vanavond dan ook foto's en filmpjes van posten, nu is het immers nog niet donker. EDIT: Helaas kan ik vanavond niet bij de laser. Wiimote detectie heb ik al getest met een zaklamp en werkt prima zonder IR-filter, dan kunnen we morgen zien hoe dat op de laser uit gaat pakken.)

Voor de tweede versie heb ik de volgende simpele opzet in gedachten:


Het driverboard gaat bestaan uit een AVR development board. Nog even in twijfel of ik de AtMega16 of AtMega128 ervoor ga gebruiken (de eerste zal ongetwijfeld voldoen, maar spelen is altijd leuk ), en de volgende aansluitingen zullen er op komen:
* Power
* Sleutel voor laser
* MIDI in/out
* 3 x Footswitch (functie, up, down)

De footswitches zullen gebruikt worden om de harp aan en uit te zetten, en van toonladder te wisselen, en de MIDI in zal dezelfde functies hebben (bv. in het midden van een track de harp aan/uit te kunnen schakelen), en als alles fatsoenlijk getest is ga ik eens kijken of ik er kits (bouwpakketten) van kan maken.

Ben ik nou de enige?
Uiteraard ben ik niet de eerste of de enige hobbyist die dit geprobeerd heeft. Zelfs de eerste versie van de Jarre-harp heeft op een Windows-bak gedraaid. Dus bij deze nog een partij linkjes voor aspirerende of nieuwsgierige harp-bouwers:

Laser aansturen deel 4
Laser harp pagina van Andrew Kilpatrick
The Laser Harp Pages (Manuel Schulz)
Pagina van Stephen Hobley (zelfbouwer, maar verkoopt ook tekeningen)
Laser harp van Jarrelook

Update 27-2-2009
Het heeft een pokkelange tijd geduurd voordat de onderdelen binnen waren, anders was dit al veel eerder af geweest. De opbouw is redelijk straightforward: Een ATmega16 development board stuurt zowel de laser aan als het stuurbordje voor de stappenmotoren (ja, ik was lui, in plaats van mijn eigen code te kloppen...).

OMGOMGPICS!!!11111one

Goed, na 4 maanden, een hoop gezeik over eBay over stappenmotoren en bordjes en een hoop secondenlijm en Gaffa-tape was het dan eindelijk zover:



De hele setup, onbedraad. Links: 50mW lasermodule en stappenmotor, Midden: Stepper controller, rechts: AVR development board. Het geheel is in een dode Baystack 350-behuizing gebouwd, ik dacht eerst de PSU te gebruiken maar die bleek redelijk kapot (wat mogelijk ook de oorzaak van een dode Baystack zou kunnen zijn). Dus nu maar 2 adapters eraan gehangen (de steppers slikken 6V, de boards allemaal 5V)



De unit in actie. Nooit geweten dat je van een gesloopte switch zoveel lol kon beleven



En met het licht uit wordt het spektakel natuurlijk het leukste.

UPDATE - 5 november 2009

Na een tijdlang in de koelkast te hebben gestaan (mede door een verhuizing) zijn we weer een stapje verder, de boel is inmiddels voorzien van een 20kpps galvo-scanset, en er wordt een RGV lasersysteem ingebouwd (hierover meer later). Maar in ieder geval, tijd voor een paar nieuwe snaps





De hele setup, nieuwe grondplaat gemaakt met 20kpps galvo's, de module as-is. DAC via een cheapo Trust geluidskaartje met HE-Laserscan. De galvo's zijn snel genoeg en geven een prachtig strak stralenpatroon zonder te flikkeren, dus dat moet straks met de Wiimote prima op te vangen zijn.



Hier op de grond, om even een indruk te geven van de scanhoek.



En even een money-shot uiteraard ... het enige licht wat je hier op de foto ziet is trouwens van de laser (en een beetje van het laptopscherm). Ik wil niet weten hoeveel licht er straks van die 600mW RGV af gaat komen...

* Stoney3K is een beetje bang voor zwarte puntjes op zijn plafond als ie zijn harp uitzet





Hier heb ik de scanhoek gehalveerd (de shots boven staat ie op absoluut max), in staande houding krijg ik er met 7 stralen prima een hand tussen.

Still to do:
* Coden van detectie (misschien wordt dat vannacht wel een portie midnight-oil )
* Aansluiten van de Y-galvo, daar komen morgen de plugjes voor binnen, dan maak ik ook een paar ILDA test-pattern plaatjes.
* Alles fatsoenlijk vastschroeven, het blijft met Gaffa-tape wel aardig zitten maar het is natuurlijk maar een tijdelijke fix.
* Ombouwen naar RGV, de componenten hiervoor (300mW rood, 250mW Bluray en dichro's) zijn hiervoor nog onderweg.
* Opbouwen van de DAC-versterker en bouwen van blanking.
* Inbouwen in een netjes kastje.

RGB matrix

05-12-2010 discussie 16
Ik heb hier een aantal RGB matrixen liggen die ik wou aansturen. De meeste zullen zeggen geen probleem een schuifregister en je probleem is van de baan. Ik had graag de mogelijkheid om ze te dimmen. Nu kwam ik de TLC5940, maar bij nader inzien niet echt geschikt voor het aansturen van een RGB matrix. Ze zijn eerder geschikt voor het continu aansturen van een reeks leds en niet echt voor multiplexen.
Bij de displays van baco heeft Sprite het klaargekregen om er roodtinten aan toe te voegen met gewone schuifregisters.

Het idee zoals ik het voor ogen had:
Per matrix een print met een µC van Microchip en de matrix al multiplexend aan te sturen. Maar ik zou een "systeem" willen maken dat gemakkelijk uit te breiden is en daar loop ik dan weer tegenaan. De printen adresseren lijkt me niet echt een probleem. Met een 8-bit dipswitch kan je aangeven waar de matrix zich bevind. 4 bits voor aan te geven welke kolom en 4 bits om aan te geven in welke rij. Maar dan komt het probleem, hoe kan ik de matrixen snel van data voorzien en laten communiceren met elkaar?

Ik ben hier al een paar dagen aan het rondzoeken en Google een beetje verveeld, maar ik heb niet echt een oplossing gevonden. Bestaat deze niet of zie ik iets over het hoofd?

Schuifregister: MR en OE pin (74HC5959)

07-07-2010 discussie 21
Ik ben voor een projectje (lees: LED kubus ) schuifregisters in serie aan mekaar aan het knopen. Nu heb ik een paar vragen over hoe dit in zijn werk gaat.

Allereerst zal ik als ik registers in serie wil schakelen de datalijn moeten doorluseen van de output pin van het ene register naar de input van de volgende. De latch en klok lijnen moeten dan volgens mij gewoon parallel geschakeld worden.

In de datasheet van de 74HC595 zag ik dat ik de output pin aan kan zetten door de OE (output enable) pin naar GND te schakelen. Aangezien ik de datalijn van de registers wil gaan doorlussen zal ik dus volgens mij alle OE pinnen naar GND moeten schakelen.

In de datasheet staat ook dat de MR pin als die laag is alle uitgangen op '0' zet. Dit wil ik niet, dus volgens mij moet ik die pinnen allemaal naar Vcc schakelen.

En nou mijn vraag: In het ontwerp dat ik gebruik voor het project (medetweaker bedankt ) zijn de schuifregisters inderdaad zo aangesloten als ik hierboven schets. Met 1 uitzondering: BIj het eerste schuifregister zijn de OE pin en de MR pin niet aangesloten. Maar ik snap werkelijk niet waarom (als ik data wil gaan lussen zal OE toch zeker laag moeten zijn??). Wat mis ik? Of klopt het ontwerp gewoon niet?

En nog iets anders: Weet iemand of je met een Wisp648 (die heb ik) een PIC 16F648A kunt programmeren? AFAIK staat hij niet in de lijst, maar hij lijkt zo donders veel op de 16F628A dus... Zo ja, dan bestel ik die (i.v.m. met dubbel geheugen).

En hier het schema:

Aansluiten PIC 16F628A

26-06-2010 discussie 11
Ik ga binnenkort een ontwerp bouwen dat ik van iemand anders gekregen heb, nu zit er in het ontwerp een microcontroller, waarvan ik me afvraag of hij wel gaat werken als ik hem aansluit zoals aangegeven op het ontwerp. Op het ontwerp is hij als volgt aangesloten:

- Op pin 4 (geconfigureerd als mclr): +5V voeding met een 10K ohm pull up weerstand
- Op pin 5 (gnd) een draadje naar de min pool van de voeding
- Op pin 15-16 een extern kristal (20 MHz) + 2 parallel geschakelde 18 pF condensators
- pin 6 (RB0), pin 10 (RB4), pin 11 (RB5) en pin 12 (RB6) worden als gewone in / uitgangen gebruikt

Tot zover kan ik dat allemaal vatten, en klopt dat volgens mij ook met het datasheet.

Maar het gekke vind ik dat op pin 14 (vcc) dus helemaal niets zit, terwijl je AFAIK daar de +5V aan moet hangen.

Klopt mijn gedachtegang? Of pakt de microcontroller dan de voeding van de mclr pin ofzo?

Datasheet van de PIC: http://ww1.microchip.com/downloads/en/DeviceDoc/40044G.pdf

Edit: Hier een stukje van het ontwerp:

sterrenhemel PIC dilemma

30-05-2010 discussie 5
ik wil een sterrenhemel maken met moodlight:sterrenhemel wil ik gebruik maken van LED highpower 3w: aantal 2 tot ... 4. twinkel dmv PWM moodlght RGB led strip wordt aangestuurd met handcontrol later met tijdfunctie. Ook PWMmijn dilemma is het PIC (PWM) + software.
ik heb een eval kit (PIC45K20)van microchip met MPLAB. code taal van MPLAB is zo moeilijk en ik kom er gewoon niet uit. de reden dat ik dit probeer te doen is omdat ik 5 PIC16F727 hebt liggen.
ik kan niet eens op een eval kit code veranderen naar meerdere PWM outgang. laat gaan dat ik het later op een PIC16F727 gaan programmeren.
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#pragma code  
void main (void)
{
unsigned char brightness = 125; // = 0x7D
TRISDbits.TRISD6 = 0;
T2CON = 0b00000111;
PR2 = 249
CCPR1L = 0x7D;
CCP1CON = 0b01001100;
while(1)
 {
do
{
 brightness += 2;
CCPR1L = brightness;
PIR1bits.TMR2IF = 0
while (PIR1bits.TMR2IF == 0);
 } while (brightness < 250);
 Delay1KTCYx(63);
do
{
brightness -= 2;
 CCPR1L = brightness
PIR1bits.TMR2IF = 0;
while (PIR1bits.TMR2IF == 0);
} while (brightness > 1);
Delay1KTCYx(63);        };
}
Met arduino code is geen probleem
http://arduino.cc/en/Tutorial/Fading
izzy

Mijn dilemma is dus PIC programmeren. Arduino taal is lekker makkelijk maar MPLAB taal is niet te doen (voor mij).
Wat raden jullie mij aan??? Bij arduino blijven en aantal PWM poort beperken op 6. Of tog hardcore (mislukken) code met microchip.

Onderzoek:
http://www.circuitsonline.net/download/cat/8
Proton software: duur.
SourceBoost: ondersteund geen pickit3
MikroElektronika: duur.

Moodlight wil ik comi doen met DCF77 info: http://www.picbasic.nl/
maar code’s van hem kan ik niet toepassen met MPLAB.
of http://www.arduino.cc/playground/Code/Time

[C] Keil 8051

03-05-2010 discussie 17
Hallo,

Ik ben vandaag beginnen programmeren met keil, ik heb een voorbeeld programma gedownload die een LCD kan aansturen.

In het begin van het programma staat er :

#define LCDPORT P2

P2 is dus de poort waar de LCD op aangesloten is. P2 bestaat dus uit 8 bits. Nu is mijn LCD anders aangesloten dan als de maker van het programma zijn LCD.

De aansluiting veranderen op mijn microcontroller is geen optie.
Normaal zou ik in het programma zelf de adressering juist maken maar de maakt gebruik van nibble's en pointers en daar kan ik niet mee werken.

Kan je op een bepaalde manier programmeren dat
LCDPORT^0 niet naar P2^0 verwijst maar naar P2^1 en zo verder ?

ARM USB-Device Controller

16-03-2010 discussie 0
Voor mijn afstudeeropdracht heb ik een LPC1766 gekregen. Deze moet aangesloten kunnen worden op de PC via usb (zonder een FTDI chip).
Op deze ARM Cortex M3 zit een interne USB Device controller. Op blz 250 van de Datasheet staat de initialisatie procedure van de USB controller:
code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 The LPC17xx USB device controller initialization includes the following steps: 1. Enable the device controller by setting the PCUSB bit of PCONP. 2. Configure and enable the PLL and Clock Dividers to provide 48 MHz for usbclk and the desired frequency for cclk. For correct operation of synchronization logic in the device controller, the minimum cclk frequency is 18 MHz. For the procedure for determining the PLL setting and configuration, see Section 4-5.11 "Procedure for determining PLL0 settings". 3. Enable the device controller clocks by setting DEV_CLK_EN and AHB_CLK_EN bits in the USBClkCtrl register. Poll the respective clock bits in the USBClkSt register until they are set. 4. Enable the USB pin functions by writing to the corresponding PINSEL register. 5. Disable the pull-ups and pull-downs on the VBUS pin using the corresponding PINMODE register by putting the pin in the "pin has neither pull-up nor pull-down resistor enabled" mode. See Section 8-4 "Pin mode select register values". 6. Set USBEpIn and USBMaxPSize registers for EP0 and EP1, and wait until the EP_RLZED bit in USBDevIntSt is set so that EP0 and EP1 are realized. 7. Enable endpoint interrupts (Slave mode): - Clear all endpoint interrupts using USBEpIntClr. - Clear any device interrupts using USBDevIntClr. - Enable Slave mode for the desired endpoints by setting the corresponding bits in USBEpIntEn. - Set the priority of each enabled interrupt using USBEpIntPri. - Configure the desired interrupt mode using the SIE Set Mode command. - Enable device interrupts using USBDevIntEn (normally DEV_STAT, EP_SLOW, and possibly EP_FAST). 8. Configure the DMA (DMA mode): - Disable DMA operation for all endpoints using USBEpDMADis. - Clear any pending DMA requests using USBDMARClr. - Clear all DMA interrupts using USBEoTIntClr, USBNDDRIntClr, and USBSysErrIntClr. - Prepare the UDCA in system memory. - Write the desired address for the UDCA to USBUDCAH (for example 0x7FD0 0000). - Enable the desired endpoints for DMA operation using USBEpDMAEn. - Set EOT, DDR, and ERR bits in USBDMAIntEn. 9. Install USB interrupt handler in the NVIC by writing its address to the appropriate vector table location and enabling the USB interrupt in the NVIC. 10. Set default USB address to 0x0 and DEV_EN to 1 using the SIE Set Address command. A bus reset will also cause this to happen. 11. Set CON bit to 1 to make CONNECT active using the SIE Set Device Status command. The configuration of the endpoints varies depending on the software application. By default, all the endpoints are disabled except control endpoints EP0 and EP1. Additional endpoints are enabled and configured by software after a SET_CONFIGURATION or SET_INTERFACE device request is received from the host.
Na dit te volgen heb ik de volgende code geschreven:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
void usb_init()
{
    int EP[nrEP] = {0,1};

    LPC_SC->PCONP |= (1<<31); //Power-up USB interface
    pll1_init(); //Set PLL1 for USBCLK
    LPC_USB->USBClkCtrl |= (1<<4)|(1<<1); //Enable clock for USB
    LPC_PINCON->PINSEL1 |= (1<<28)|(1<<26); //SET USB+, USB-
    LPC_PINCON->PINSEL3 |= (2<<28)|(1<<4); //SET VBUS & USB_UP_LED
    LPC_PINCON->PINSEL4 |= (1<<18); //SET USB_CONNECT
    LPC_PINCON->PINMODE3 |= (2<<28); //VBUS has neither pull-up nor pull-down resistor enabled

    LPC_NVIC->ISER0 |= (1<<24);
    LPC_NVIC->ISER1 |= (1<<1);

    int i;
    for(i=0; i<nrEP-1; i++) //For all endpoints
    {
        LPC_USB->USBReEp |= (1<<EP[i]); //Realize endpoint
        LPC_USB->USBEpInd |= EP[i]; //Select endpoint
        LPC_USB->USBMaxPSize = 64; //Set maximum packet size of selected endpoint
    }

    while(!(LPC_USB->USBDevIntSt & (1<<8))); //wait until the EP_RLZED bit in USBDevIntSt is set so that EP0 and EP1 are realized
    LPC_USB->USBDevIntClr = (1<<8); //Clear EP_RLZED

    LPC_USB->USBEpIntClr = 0xFFFFFFFF; //Clear all endpoint interrupts
    LPC_USB->USBDevIntClr = 0x3FF; //Clear any device interrupts

    LPC_USB->USBEpIntEn = 0b11; //Enable EP interrupts 0,1
    LPC_USB->USBEpIntPri = 0b11; //Set EP0,1 to HIGH priority

/****************SET MODE COMMAND****************/
    LPC_USB->USBDevIntClr = (1<<4)|(1<<5); //Clear CCEMPTY, CDFULL interrupt
    LPC_USB->USBCmdCode = (CMD_COMMAND<<CMD_PHASE)|(SET_MODE<<CMD_WDATA); //Set Mode command
    while(!(LPC_USB->USBDevIntSt & (1<<4))); //While CCEMPTY is set
    LPC_USB->USBDevIntClr = (1<<4); //Clear CCEMPTY interrupt
    LPC_USB->USBCmdCode = (CMD_WRITE<<CMD_PHASE)|(1<<CMD_WDATA);
    while(!(LPC_USB->USBDevIntSt & (1<<4))); //While CCEMPTY is set
    LPC_USB->USBDevIntClr = (1<<4); //Clear CCEMPTY interrupt
/************************************************/

    LPC_USB->USBDevIntEn = 0b1110; //Enable device interrupts using USBDevIntEn (normally DEV_STAT, EP_SLOW, and possibly EP_FAST)

/**************SET ADDRESS COMMAND***************/
    LPC_USB->USBDevIntClr = (1<<4)|(1<<5); //Clear CCEMPTY, CDFULL interrupt
    LPC_USB->USBCmdCode = (CMD_COMMAND<<CMD_PHASE)|(SET_ADDRESS<<CMD_WDATA); //Set Mode command
    while(!(LPC_USB->USBDevIntSt & (1<<4))); //While CCEMPTY is set
    LPC_USB->USBDevIntClr = (1<<4); //Clear CCEMPTY interrupt
    LPC_USB->USBCmdCode = (CMD_WRITE<<CMD_PHASE)|(0b10000000<<CMD_WDATA);
    while(!(LPC_USB->USBDevIntSt & (1<<4))); //While CCEMPTY is set
    LPC_USB->USBDevIntClr = (1<<4); //Clear CCEMPTY interrupt
/************************************************/

/***************SET DEVICE COMMAND***************/
    LPC_USB->USBDevIntClr = (1<<4)|(1<<5); //Clear CCEMPTY, CDFULL interrupt
    LPC_USB->USBCmdCode = (CMD_COMMAND<<CMD_PHASE)|(SET_DEV_STATUS<<CMD_WDATA); //Set Mode command
    while(!(LPC_USB->USBDevIntSt & (1<<4))); //While CCEMPTY is set
    LPC_USB->USBDevIntClr = (1<<4); //Clear CCEMPTY interrupt
    LPC_USB->USBCmdCode = (CMD_WRITE<<CMD_PHASE)|(1<<CMD_WDATA);
    while(!(LPC_USB->USBDevIntSt & (1<<4))); //While CCEMPTY is set
    LPC_USB->USBDevIntClr = (1<<4); //Clear CCEMPTY interrupt
/************************************************/
}
Ik heb nu dus alleen Endpoints 0 en 1 in gebruik (Command endpoints). Zoals ik begrepen en gelezen heb (USB in a NutShell) begint de host altijd met zenden, de slave (in dit geval mijn microcontroller) dient de vragen van de host te beantwoorden. Nu is mijn vraag, hoe moet ik verder? Hoe ontvang ik het 'setup' pakketje die de host dient te sturen waar ik op kan antwoorden?

Heeft iemand ervaring met interne USB controllers?

[HowTo] Ledbar met 64 leds

09-03-2010 discussie 575

Een tijd terug heb ik samen met een vriend een ledbar in elkaar geknutselt met de intentie deze in te bouwen in m'n chieftec kast.
De ledbar bestaat uit 2 aparte printjes met 32 leds per print. Deze leds worden aangestuurd door middel van een controllerprintje met hierop een pic 16f628 microcontroller. Deze microcontroller regelt de 64 individuele 8 bits PWM kanalen op 75 hz. Dat betekent dat elke led individueel op een bepaalde intensiteit ingesteld kan worden (256 stapjes van uit tot vol aan).
Via de PC kan vervolgens serieel data verstuurd worden naar de microcontroller, die vervolgens de leds aanstuurd.

Hoewel ik de printjes in de zomervakantie al in elkaar heb gesoldeerd, heb ik nog geen tijd gehad om deze in te bouwen in m'n pc behuizing. Twee weken geleden heb ik eindelijk wat tijd kunnen vinden om het ding in m'n chieftec behuizing in te bouwen.

Dus... hier wat pics en filmpjes:

De controller print met de pic 16f628 @ 20 mhz (deze zit ingebouwd in een 3'5" slot). Een van de boxheaders wordt gebruikt om de data naar de leds te sturen, de andere is om de pic in-circuit te kunnen programmeren... dus geen gedoe met een losse programmer :


Een van de printjes met de ledbars erop (hier zitten 8 bit serial-in shiftregistertjes op):



Voorkant van de kast waar de ledbars zijn ingebouwd (ledbars zitten precies in de gleuven die in het deurtje zitten):



Weer de voorkant, maar nu met wat leds aan...



Achterkant van het deurtje (moet nog afgewerkt worden met een of andere plaat zodat je de prints niet meer ziet):



En uiteraard wat filmpjes om het geheel in werking te zien (het knipperen in de filmpjes komt door de refreshrate van de leds... hetzelfde effect als je met een camera je monitor filmt dus. irl zie je dat geknipper dus absoluut niet):
knightrider effect met afterglow (498 KB / DivX 5.0)
vu meter met afterglow (4182 KB / DivX 5.0)
vumeter met falloff en afterglow (6256 KB / DivX 5.0)

Ik heb jammergenoeg nog geen tijd gehad om er een fatsoenlijk stukje software voor te schrijven (de effecten uit de filmpjes komen van een snel in elkaar gehacked c++ console progseltje), maar ik hoop daar over een of twee maanden wat tijd voor te hebben, zodat ik een fatsoenlijk programma kan schrijven met plugin support etc. Er zijn namelijk zoveel leuke effecten om op die ledsbars weer te geven... (cpu/mem usage, network up/download speeds enz.)


edit (wat belangrijke info vanuit topic naar topicstart copy/pasted):


Kostprijs

Beetje lastig te bepalen, maar het zal iets in de volgende richting zijn:
8 euro voor de printplaten
5 euro voor de pic 16f628
12 euro voor de ledbars (8 ledbars van 8 leds per stuk)
1,50 euro voor de weerstanden
6 euro voor overig spul (74hct573 latch, max232, condensatoren, 20 mhz kristal, weerstandnetwerkje, box/pinheaders etc)
0 euro voor sub-d 9 pins printconnector, molex printconnector, kabeltjes etc (van oude apparatuur afgesloopt)

In totaal dus 32,50 euro (inclusief de programmer, die zit nl op de print)


Onderdelen

onderdelen controller print:
1x sub D printconnector, 9 pins female
1x molex printconnector, 4 pins male
1x ic max232 (of vergelijkbaar, bv st232)
4x condensator 0,1 uF
1x electrolytische condensator 22 uF
1x 10k Ohm weerstand
1x 1k Ohm weerstand
1x ic microchip pic 16f628, dip, 20mHz
1x kristal, 20 mHz
2x condensator 22 pF
1x boxheader 2x5 pins

onderdelen voor de progger:
(ook op de controller print, kan eraf gelaten worden als je de pic niet in circuit wilt programmeren)
1x 10k Ohm weerstandsnetwerk (1x4)
1x ic 74hct573
1x boxheader 2x5 pins

onderdelen led-prints (per print):
4x ic 74hc595 shiftregister (4094 kan evt ook wel, maar deze heeft een andere pinout!)
1x haakse pinheader, 5 pins
32x led (heb zelf gebruik gemaakt van ledbars met 8 leds per bar)
32x weerstand voor led


PIC Code

de code + binary voor de pic:
http://faq.tweakers.net/cme/64ledbar/ledbar.rar

Mocht iemand zover komen om iets werkends te produceren... het protocol is nogal simpel (gaat zeker aangepast worden, is nu redelijk brak namelijk). Als je een beetje bedreven bent met software schrijven, dan kan je iig iets maken om het aan te sturen. Hiervoor gebruik je de volgende settings voor de compoort:
115200 bps
8 data bits
no parity
1 stop bit
no flow control
Als je de poort geopend hebt in je software, moet je 65 bytes versturen.
De eerste byte moet altijd waarde 255 (0xff) hebben. Deze zorgt ervoor dat de "pointer" in de pic naar de eerste led wijst. Daarna stuur je 64 bytes, waarbij elke byte de intensiteit van een led voorstelt. (let op, je mag _geen_ 255 gebruiken als ledwaarde... alleen de waardes 0 t/m 254 dus).
Als je dat dan meerdere keren doet, kan je iets "bewegends" weergeven

De code is niet final oid. Heb er al een tijd niks meer aan gedaan, maar ik ga 'm binnenkort wel wat updaten (beter protocol etc).
Je kunt de .hex iig direct gebruiken om de pic te programmeren. De assembler code kun je met mplab (ide van microchip) assembleren.

Mensen die wat zicht hebben op pic assembler zien misschien wel iets wat niet helemaal klopt met de pwm... dat klopt Mocht iemand een oplossing hebben die het aantal cycles van de pwm routine niet vergroot , mail me maar...

De programmer op de print is afgeleid van de TLVP (trivial low voltage programmer).
Voor meer info + programma's die samenwerken hiermee zijn te vinden op http://www.finitesite.com/d3jsys/.


Printlayout / schema's

hier nog een picje vh controller printje...


Ledprint + Controllerprint Eagle .brd: http://faq.tweakers.net/cme/64ledbar/eagle_ledbarbrds.rar

Foto's van de print, met en zonder componenten
http://faq.tweakers.net/cme/64ledbar/ledbarpics.rar


Dat was het wel zo'n beetje... Hier kun je nu wel vooruit denk ik (mits je wat kennis van zaken hebt).

mzzls, Lonert


NB: de muismod die verderop in deze thread staan heeft nu zijn eigen topic:
[HowTo]RGB-led muismod met PIC

hulp bij assembly programma voor microcontroller

03-03-2010 discussie 26
ik volg een tutorial over het programeren van een 16f84a microcontroller, hier te vinden.

Maar ik kom er nog niet helemaal uit, ik heb geprobeerd een programma te schrijven waardoor een led normaal aan is, maar wanneer je een knop indrukt moet hij weer uit gaan, totdat je hem loslaat, dan hoort hij weer aan te gaan.

Ik heb nu dit ervoor geschreven:



;**********************************************************************
; This file is a basic code template for assembly code generation *
; on the PIC16F84A. This file contains the basic code *
; building blocks to build upon. *
; *
; Refer to the MPASM User's Guide for additional information on *
; features of the assembler (Document DS33014). *
; *
; Refer to the respective PIC data sheet for additional *
; information on the instruction set. *
; *
;**********************************************************************
; *
; Filename: xxx.asm *
; Date: *
; File Version: *
; *
; Author: *
; Company: *
; *
; *
;**********************************************************************
; *
; Files Required: P16F84A.INC *
; *
;**********************************************************************
; *
; Notes: *
; *
;**********************************************************************


list p=16F84A ; list directive to define processor
#include <p16F84A.inc> ; processor specific variable definitions

__CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _RC_OSC

; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.


;***** VARIABLE DEFINITIONS
STATUS equ 03h ;Address of the STATUS register
TRISA equ 85h ;Address of the tristate register for port A
PORTA equ 05h ;Address of Port A

;**********************************************************************
ORG 0x000 ; processor reset vector
goto main ; go to beginning of program

main

;****Set up the port****

bsf STATUS,5 ;Switch to Bank 1
movlw 01h ;Set the Port A pins:
movwf TRISA ;bit 1to output, bit 0 to input.
bcf STATUS,5 ;Switch back to Bank 0

Checkswitch
BTFSC PORTA,0
call Ledoff

Checkswitch2
BTFSS PORTA,0
call Ledon


goto Checkswitch

Ledon
ledaan movlw 02h ;Turn the LED on by first putting
movwf PORTA ;it into the w register and then ;on the port
return

Ledoff
leduit movlw 00h ;Turn the LED on by first putting
movwf PORTA ;it into the w register and then ;on the port
return

END ; directive 'end of program'



Ik heb het zo aangesloten:



Het schema kan lijkt mij al niet knoppen, doordat de pic geen stroom kan krijgen als de schakelaar uit staat, maar ik heb geen idee hoe je dit goed zou moeten aansluiten. Verder snapte ik ook niet helemaal op welke pin ik nu de schakelaar moest aansluiten (de ook niet echt trouwens), als iemand mij zou kunnen uitleggen hoe dit werkt zou ik dat heel fijn vinden

Sterrenhemel: programmeren "twinkel"

22-02-2010 discussie 9
hm, sinds kort bezig met een sterrenhemel (3 RGB kanalen, waarvan de RGB instelbaar is en dan de brightness per kanaal regelbaar is, zodat de kleur intact blijft)

Nu heb ik wat standaard effecten zoals faden van kanaal naar kanaal en rollen van kleuren, en wil nu nog een twinkel effect toevoegen.

Een random waarde tussen 0-255 kiezen en deze op de pwm uitgang gooien werkt opzich redelijk, maar oogt nogal trubbelig, ik denk dat ik de huidige pwm waarde op moet slaan, een nieuwe genereren en dan in een x aantal stappen hiernaart moet faden.

Op CO vond ik het volgende;
code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Do ___rseed = Timer0 'Random seed uit de timer halen Trood = Rnd(255) 'Willekeurige nieuwe kleur maken Tgroen = Rnd(255) Tblauw = Rnd(255) Diff = Trood - Rood 'Verschil tussen nieuwe en oude kleur Staprood = Diff / 40 'Faden in 40 stappen Diff = Tgroen - Groen Stapgroen = Diff / 40 Diff = Tblauw - Blauw Stapblauw = Diff / 40 For I = 1 To 40 Stop Timer0 'Zorgen dat de PWM niet kan onderbreken als ik de nieuwe waardes instel Rood = Rood + Staprood Groen = Groen + Stapgroen Blauw = Blauw + Stapblauw Start Timer0 Waitms 10 Next I Loop
Op zich is het idee prima, maar ik denk dat je al snel op negatieve waardes uitkomt en dus kleursprongen/intensiteit sprongen maakt.

Is er een simpeler beter algoritme, of zit ik gewoon in een verkeerde hoek te denken?

/edit:
In principe kan ik < of > wel gebruiken om op of neer te laten faden zonder problemen, maar ik heb het idee dat ik stomweg iets over het hoofd zie (plus het kost een bult aan sram om voor 12 pwm kanalen alles te onthouden, en dan nog de seriële buffers, booleans, tellers etc etc...)

[opnieuw] LED-driver met attiny13

01-12-2009 discussie 5
Na het vorige fiasco waar ik met een of ander vreemd hersenspinsel nieuwe natuurwetten uitvond, was ik nergens gekomen met mijn LED-driver, terwijl er wel LEDs liggen te verpieteren die op een fiets gebouwd moeten worden en fatsoenlijk gedimd moeten kunnen worden. Efficientie en constante lichtsterkte is belangrijk hier, want het geheel draait op een accu en LEDs hebben de neiging snel minder licht te geven bij een iets inzakkende spanning. Vandaar een buckconverter

Hiervoor gebruik ik dus een buck-converter met stroomsturing die je zelf kunt bouwen wanneer het eens nodig is om een vreemde LED aan te sturen.



en wat code (rudimentair)
code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 #include <avr/io.h> #include <stdio.h> #define PWMD 128 int ADC_read(char input) { int OUT; ADMUX = (0<<REFS0) | (0x07&input); // VCC ref and ADCx ADCSRA |= (1 << ADIF) | (1<<ADSC); // Clear ADIF and start single conversion while(!(ADCSRA & (1 << ADIF))); // wait for conversion done, ADIF flag active OUT = ADCL; // read out ADCL register OUT += (ADCH << 8); // read out ADCH register //return ADC; return OUT; } void Init_ADC( void ) { ADMUX = 2; // VCC voltager ref, ADC2 (PB4) as default input ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1);// Enable ADC, ADC prescaler /64 ADCSRA |= (1<<ADSC); // Start convertion while (ADCSRA & (1<<ADSC)); // Wait for conversion to complete ADCSRA = ADCSRA; // Clear ADC interrupt flag } int curval[5]; int curvall; int voltval; int power; int curset = 105; //set power using this value int main(void) { //ADC Init_ADC(); //setup PWM: we're running at 9.6MHz, so 5-bit will give us 300 kHz, 6-bit 150 kHz. TCCR0A = 0b00100011; //set OC0B at TOP, clear on match, fast PWM with TOP=OCRA OCR0A = PWMD; //6-bit; TCCR0B = 0b00001001; //clkio/1 OCR0B = 0; //initialize at 0 duty cycle DDRB = 1 << 1; while(1) { curval[0] = ADC_read(1); curval[1] = ADC_read(1); curval[2] = ADC_read(1); curval[3] = ADC_read(1); curval[4] = ADC_read(1); curvall = curval[0] + curval[1] + curval[2] + curval[3] + curval[4]; curvall /= 5; if(curvall > curset && OCR0B > 1) OCR0B--; if(curvall < curset && OCR0B < PWMD - 1) OCR0B++; } }
Een saaie buckconverter met componenten die je op een willekeurig moederbord kunt vinden. De inductor is vandaag een 68uH 1.3A exemplaar en ik draai hem op 75 kHz, de tiny13 kan prima 300 kHz PWMen met 32-staps resolutie.

Voor maximale efficientie wil je mosfets van een willekeurig moederbord gebruiken (die zijn lekker snel en hebben een lage aan-weerstand, dus zowel schakel- als stroomverliezen worden geminimaliseerd). Een inductor van een moederbord plukken kan, maar dan moet je wel op 300 of 600 kHz werken en je tiny13 flink ontkoppelen. In de praktijk zijn de verliezen te hoog bij deze toepassing om dit te proberen, en zijn inductortjes met een hoge inductiewaarde klein genoeg.

Er doet zich echter een vervelend fenomeen voor, waarbij ik me afvraag hoe ik dit het beste kan oplossen. Dat is dit:



Dit is de spanning die over de meetweerstand valt. Wat je ziet zijn een hele hoop curves - bij een constante duty cycle hoor je maar één zaagtand te zien, hier zijn het er een stuk of 10. Bij een ongefilterde meetingang is dit niet vreemd, maar ik heb een gigantisch gefilterde meetingang (bandbreedte van ~100 Hz), dus ik zou dit helemaal niet moeten zien. Bovendien helpt running-average-meting niet (zie code), er blijft een hoop gewiebel op de meetingang. Zelf vermoed ik dat de ADC een sample-and-hold heeft met een wel heel grote sample-condensator waardoor mijn 100k-adc-weerstand te weinig stroom kan leveren maar... wat denken jullie? Niet dat dit een probleem is ofzo, de stroom wordt heel netjes geregeld binnen een paar procent, maar het zou leuk zijn om dit ding echt heel clean te krijgen.
Resultaten per pagina: 25 | 50 | 100


Huawei Nexus 6P Apple iPad Pro WiFi FIFA 16 Samsung Galaxy S7 Fallout 4 Apple iPhone 6C Athom Homey LG G5

© 1998 - 2016 de Persgroep Online Services B.V. Tweakers vormt samen met o.a. Autotrack en Carsom.nl de Persgroep Online Services B.V. Hosting door True