Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

LED Matrix met Arduino

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben voor school bezig met mijn profielwerkstuk over beeldschermtechnologieën en om de werking van een LCD scherm (passieve matrix) aan te tonen, wil ik dit als het ware namaken met een LED matrix.

Uiteraard heb ik het nodige aan onderzoek gedaan en de Arduino (Freeduino) heb ik inmiddels. Ik ben echter de draad een beetje aan het kwijt raken hoe ik dit nu verder moet aanpakken.

Het is me duidelijk dat ik een matrix van LEDjes moet maken van 6x6 (36 LEDjes) waarbij de 6 rijen en 6 kolommen zijn aansloten op 12 digitale I/O's van de Arduino. Om een LED op te laten branden gooi je dan de output in een rij op HIGH en de output in een kolom op LOW. Hoe dit verder allemaal verbonden moet worden ben ik wel uit, maar hoe het verder moet weet ik even niet precies. Mijn vraag is namelijk of het mogelijk is met Arduino alle 36 LEDjes binnen 20ms (50 Hz zodat er minimale flikkering optreedt) één keer aan te zetten, of dat ik dit anders moet aanpakken. Dit zou betekenen dat een LEDje binnen 20ms/36 = 0,55ms aangezet zou moeten kunnen worden.

Naast deze manier zie ik eigenlijk geen andere mogelijkheid, want wanneer ik meerdere LEDjes echt tegelijk zou aanzetten, krijg ik het probleem dat diagonale lijnen sowieso al niet getoond kunnen worden, omdat er dan LEDs gaan branden die ik helemaal niet wil laten branden. (Ik wil trouwens niet met een shiftregister (geloof dat het zo heet) werken, omdat dan de uitleg van een matrix voor mijn gevoel een beetje verloren gaat.)

Ik hoop dat iemand me weer even op weg kan helpen, dus alle tips/uitleg zijn welkom! (Mochten er andere denkfouten in mijn verhaal staan, laat het a.u.b. ook weten)

  • StapelPanda
  • Registratie: Februari 2005
  • Laatst online: 19-11 11:29

StapelPanda

PB0MV

Ik werk zelf het meeste met PIC's. Maar wat jij zegt is zeer simpel te doen, ik zou zelf alleen voor een 8 * 8 matrix gaan omdat die los verkrijgbaar zijn. En een Byte/Poort 8 bits heeft, ik weet niet of de arduino 16 IO poorten over heeft. Waarschijnlijk ga je met RGB werken, dus laat maar

Nu zijn er 2 mogelijkheden voor het aansturen:
1 een rij per keer aan sturen ( kost minder rekentijd, maar wel meer soldeerwerk omdat er transistoren of een ULN2803 tussen de Kolommen en de IO moet)
1 ledje per keer aan sturen ( kost meer rekentijd maar wel direct op de arduino aan te sluiten)

Nu draait een Uc als de arduino minimaal op 4 mhz, dit betekend dat hij 4000000 instructies per seconde kan doen. Met 0.55 milliseconden zit je nog steeds op 2200 instructies per ledje.

[ Voor 63% gewijzigd door StapelPanda op 13-01-2009 16:27 ]


  • 0fbe
  • Registratie: Januari 2004
  • Laatst online: 20-11 15:16
Je kan toch per rij of kolom scannen. Hoef je nog maar 20ms/6 te halen... Gewoon een rij HIGH zetten en dan tegelijk een hele kolom aan waardes die je wilt halen d'r in knallen...

  • StapelPanda
  • Registratie: Februari 2005
  • Laatst online: 19-11 11:29

StapelPanda

PB0MV

timcooijmans schreef op dinsdag 13 januari 2009 @ 16:26:
Je kan toch per rij of kolom scannen. Hoef je nog maar 20ms/6 te halen... Gewoon een rij HIGH zetten en dan tegelijk een hele kolom aan waardes die je wilt halen d'r in knallen...
Kan de arduino dan 6 * 20ma = 120ma Sourcen?

  • Atlas
  • Registratie: Mei 2002
  • Niet online

Atlas

Ik flits niet meer terug!

Gieltjev schreef op dinsdag 13 januari 2009 @ 16:28:
[...]

Kan de arduino dan 6 * 20ma = 120ma Sourcen?
Transistor anyone? :)
Je wilt die leds niet direct aan je Atmel hangen. Die trekt dat gewoonweg niet.

Join the dark side, we have cookies :)
You need only two tools. WD-40 and duct tape. If it doesn't move and it should, use WD-40. If it moves and shouldn't, use the tape.


  • 0fbe
  • Registratie: Januari 2004
  • Laatst online: 20-11 15:16
Gieltjev schreef op dinsdag 13 januari 2009 @ 16:28:
[...]

Kan de arduino dan 6 * 20ma = 120ma Sourcen?
Nee een Atmel8 kan (uit m'n hoofd) 40mA sourcen. Maar met een paar transistors zoals bijvoorbeeld hier: Schema moet dat zo op te lossen zijn....

Als je dat niet doet. En je maakt een foutje in je aansturing/code brand je Atmel meteen door...

[ Voor 11% gewijzigd door 0fbe op 13-01-2009 16:37 ]


  • StapelPanda
  • Registratie: Februari 2005
  • Laatst online: 19-11 11:29

StapelPanda

PB0MV

Atlas schreef op dinsdag 13 januari 2009 @ 16:30:
[...]


Transistor anyone? :)
Je wilt die leds niet direct aan je Atmel hangen. Die trekt dat gewoonweg niet.
Paar berichten hierboven heb ik dat idd ook al aangegeven.
Summary
Microcontroller ATmega168
Operating Voltage 5V
Input Voltage (recommended) 7-12 V
Input Voltage (limits) 6-20 V
Digital I/O Pins 14 (of which 6 provide PWM output)
Analog Input Pins 6
DC Current per I/O Pin 40 mA
DC Current for 3.3V Pin 50 mA
Flash Memory 16 KB (of which 2 KB used by bootloader)
SRAM 1 KB
EEPROM 512 bytes
Clock Speed 16 MHz
Meestal is een ledje 20 ma, zou dus kunnen door 1 ledje per keer aan te sturen.

Met PIC's kan dit zeker, ook nooit last gehad van doorbranders, lucky me :)

[ Voor 3% gewijzigd door StapelPanda op 13-01-2009 16:39 ]


Verwijderd

Topicstarter
Bedankt voor de reacties heren.

Als ik jullie reacties zo lees, zet het me weer aan het denken en begin me afvragen of het niet gewoon mogelijk is om de ledjes een voor een binnen 20 ms aan te kunnen zetten. Het kan dat ik hier weer een denkfout bega, maar op die manier wordt er in ieder geval nooit meer dan 20mA van de Arduino gevraagd.

  • 0fbe
  • Registratie: Januari 2004
  • Laatst online: 20-11 15:16
Verwijderd schreef op dinsdag 13 januari 2009 @ 16:41:
Bedankt voor de reacties heren.

Als ik jullie reacties zo lees, zet het me weer aan het denken en begin me afvragen of het niet gewoon mogelijk is om de ledjes een voor een binnen 20 ms aan te kunnen zetten. Het kan dat ik hier weer een denkfout bega, maar op die manier wordt er in ieder geval nooit meer dan 20mA van de Arduino gevraagd.
En wat als je de aansturing fout doet en een rij aanstuurt maar vergeet om alle pinnen behalve één hoog te zetten? Dan source je opeens 120mA en brand je I/O poort door...

Verwijderd

Topicstarter
Dan zal ik sowieso erg voorzichtig moeten zijn met het uitvoeren van codes en ze driedubbel moeten controleren. Maar ik zit nog steeds met de vraag of het me nu wel of niet gaat lukken om binnen die 20ms alle 6 de rijen i.c.m. met de juiste kolom aan kan zetten om zo de LEDjes een voor een aan te zetten.

(Ik begin nu trouwens weer te twijfelen, maar om de stroomkring rond te maken moet ik toch op een rij de output op HIGH zetten en bij een kolom de output op LOW (in Arduino-taal)?)

  • 0fbe
  • Registratie: Januari 2004
  • Laatst online: 20-11 15:16
Verwijderd schreef op dinsdag 13 januari 2009 @ 16:56:
Dan zal ik sowieso erg voorzichtig moeten zijn met het uitvoeren van codes en ze driedubbel moeten controleren. Maar ik zit nog steeds met de vraag of het me nu wel of niet gaat lukken om binnen die 20ms alle 6 de rijen i.c.m. met de juiste kolom aan kan zetten om zo de LEDjes een voor een aan te zetten.

(Ik begin nu trouwens weer te twijfelen, maar om de stroomkring rond te maken moet ik toch op een rij de output op HIGH zetten en bij een kolom de output op LOW (in Arduino-taal)?)
Je hebt CPU-tijd genoeg om per LED aan te sturen. Naast het vermogen vraag ik me af of je uberhaupt wel goed beeld zult krijgen. Die 20mA is gebaseerd op een duty-cycle van 100% Als je maar 1/36e van de tijd de LED's aan stuurt met 20mA zullen ze veel donkerder zijn voor het menselijk oog. Misschien moet je daar ook rekening mee houden...

Om een LED in je array te sturen stuur je de Anode kant van de array hoog (=HIGH) en de Kathode kant laag (=LOW)

  • memphis
  • Registratie: Oktober 2000
  • Laatst online: 23:28

memphis

48k was toen meer dan genoeg.

[HOWTO] LED kubus 5*5*5 met 74HC595

Een topic die je misschien verder kan helpen.

Er zijn mensen die mij een GOD vinden


  • naftebakje
  • Registratie: Februari 2002
  • Laatst online: 20-11 15:08
Verwijderd schreef op dinsdag 13 januari 2009 @ 16:08:
..Ik wil trouwens niet met een shiftregister (geloof dat het zo heet) werken, omdat dan de uitleg van een matrix voor mijn gevoel een beetje verloren gaat...
Misschien interessant om te weten dan dat héél veel (zoniet alle) LCD schermen op dergelijke manier worden aangestuurd. Boven- of onderaan wordt een rij pixels de panel ingestuurd, en aan beide zijkanten zit een schuifregister dat een na een de beeldlijnen selecteert.

Als je het dan toch aan wil tonen hoe het werkt, zorg dan dat je correct bent (volledige horizontale lijnen insturen, en deze verticaal met een schuifregister selecteren), en dat je em ook aan lage snelheid kan laten werken (elke seconde de volgende lijn aansturen). Lage snelheid om het uit te leggen, en dan snelheid opdraaien om aan te tonen dat het idd zo werkt.

Als de boer zijn koeien kust, zijn ze jarig wees gerust. Varkens op een landingsbaan, leiden nooit een lang bestaan. Als de boer zich met stront wast, zijn zijn hersens aangetast. Als het hooi is in de schuur, zit het wijf bij den gebuur.


  • mace
  • Registratie: Juni 2003
  • Laatst online: 20:29

mace

Sapere Aude

Charlieplexing iets voor jou?

  • Sphere-
  • Registratie: November 2003
  • Laatst online: 28-08 19:53
timcooijmans schreef op dinsdag 13 januari 2009 @ 16:35:
[...]
Als je dat niet doet. En je maakt een foutje in je aansturing/code brand je Atmel meteen door...
mwa... dat valt ook nog wel mee hoor, die dingen zijn afaik intern begrensd. In de datasheet staat het volgende (ATmega168, welke de freeduino gebruikt):
3. Although each I/O port can sink more than the test conditions (20 mA at VCC = 5V, 10 mA at VCC = 3V) under steady state
conditions (non-transient), the following must be observed:
ATmega48/88/168:
1] The sum of all IOL, for ports C0 - C5, ADC7, ADC6 should not exceed 100 mA.
2] The sum of all IOL, for ports B0 - B5, D5 - D7, XTAL1, XTAL2 should not exceed 100 mA.
3] The sum of all IOL, for ports D0 - D4, RESET should not exceed 100 mA.
If IOL exceeds the test condition, VOL may exceed the related specification. Pins are not guaranteed to sink current greater
than the listed test condition.
4. Although each I/O port can source more than the test conditions (20 mA at VCC = 5V, 10 mA at VCC = 3V) under steady state
conditions (non-transient), the following must be observed:
ATmega48/88/168:
1] The sum of all IOH, for ports C0 - C5, D0- D4, ADC7, RESET should not exceed 150 mA.
2] The sum of all IOH, for ports B0 - B5, D5 - D7, ADC6, XTAL1, XTAL2 should not exceed 150 mA.
If IIOH exceeds the test condition, VOH may exceed the related specification. Pins are not guaranteed to source current
greater than the listed test condition.

Verwijderd

Topicstarter
Nogmaals bedankt voor de reacties.
Dit ben ik inderdaad al eens tegengekomen tijdens mijn zoektocht naar antwoorden op het wereldwijde web :+, maar helaas komt deze werking niet echt overeen met die van LCD schermen.
naftebakje schreef op dinsdag 13 januari 2009 @ 19:39:
[...]
Misschien interessant om te weten dan dat héél veel (zoniet alle) LCD schermen op dergelijke manier worden aangestuurd. Boven- of onderaan wordt een rij pixels de panel ingestuurd, en aan beide zijkanten zit een schuifregister dat een na een de beeldlijnen selecteert.

Als je het dan toch aan wil tonen hoe het werkt, zorg dan dat je correct bent (volledige horizontale lijnen insturen, en deze verticaal met een schuifregister selecteren), en dat je em ook aan lage snelheid kan laten werken (elke seconde de volgende lijn aansturen). Lage snelheid om het uit te leggen, en dan snelheid opdraaien om aan te tonen dat het idd zo werkt.
Ik snap inderdaad dat het in echte LCD schermen uiteraard met schuifregisters zal gebeuren, maar ik wilde de werking van een matrix eigenlijk op de meest simpele manier laten zien. Ik zal me in ieder geval toch eens in de wondere wereld der schuifregisters verdiepen, aangezien het laatste wat je zegt inderdaad wel mooi zou zijn en misschien de werking nog duidelijker maakt!

(Oja, ik neem aan dat je met "en aan beide zijkanten zit een schuifregister dat een na een de beeldlijnen selecteert" bedoelt, dat er een schuifregister voor de rijen en een voor de kolommen is?)

[ Voor 6% gewijzigd door Verwijderd op 13-01-2009 20:10 ]

Pagina: 1