ArSid - Arduino Sid Synthesizer

Thu 12-Dec-19
22:25:41




LedRij

Datum: Sun 06 March 2016
Samenvatting: Het aansturen van de rij met RGB-Led's
 Soort Artikel: Electro
Status: Afgerond



[Tekst] [Afbeeldingen] [Aansluitingen] [Broncodes]
ledrij_1-ledschema.jpg
1/9: ledrij_1-ledschema.jpg.
ledrij_2-bovenplaat.jpg
2/9: ledrij_2-bovenplaat.jpg.
ledrij_3-connector.jpg
3/9: ledrij_3-connector.jpg.
ledrij_4-opzet1.jpg
4/9: ledrij_4-opzet1.jpg.
ledrij_5-opzet1.jpg
5/9: ledrij_5-opzet1.jpg.
ledrij_6-schema1.jpg
6/9: ledrij_6-schema1.jpg.
Meer
[Tekst] [Afbeeldingen] [Aansluitingen] [Broncodes]

In de bovenplaat zijn 19 RGB-Led's gelijmd. Er is ook een aansturing nodig om deze rij aan te kunnen sturen.

Vanwege de databus/ adresbus structuur in de ArSid is het geen optie om de Led's rechtstreeks aan te sturen met de Mega. Niet alleen vanwege de stroom die de Led's gaan gebruiken, maar ook vanwege het grote aantal aansluitingen. In totaal zijn er 19 Led's (16 om op het ritme mee te laten lopen en 3 (rechts) voor extra informatie, zoals start/ stop). Met elke Led 3 kleuren geven dit 57 aansluitingen + 19 gemeenschappelijke aansluitingen. Dus totaal 76 aansluitingen met een draadjes.

De Mega heeft 54 "digitale" aansluitingen, dit zou 54 Led's rechtstreeks kunnen aansturen. Maar dan blijft er niets over om andere hardware aan te sturen. Er is dus een andere oplossing nodig voor deze hoeveelheid aan Led's.

Bij een adresbus/ databus constructie kunnen de Led's ook per 8 stuks op een register IC worden aangesloten. Dit gaat dan 11 IC's (negen keer 74hct574 en twee keer 74hct138) kosten. Een hoeveelheid waar geen ruimte voor is.

Led's kunnen echter heel makkelijk in een matrix worden aangesluiten en gemultiplexed worden aangestuurd. Een truuk die nog steeds met 7-segments Led-displays wordt gedaan. Dan wordt dit aantal aansluitingen verminderd tot 3 (voor de kleuren) + 19 (gemeenschappelijke) = 22 aansluitingen. Op zich is dit aantal te overzien ... maar ... 19 Led's multiplexen kan ten koste gaan van de helderheid, elke Led brand immers maar 1/19ste deel (= 5.2%) van de tijd.

Besloten is om het multiplexen te beperken tot 8 Led's. Elke Led brandt dan 1/8ste deel (= 12.5%) van de tijd. Hierdoor vermeerdert wel het aantal RGB-aansluitingen tot een 3-voud. Qua aansluitingen komt dit ook beter uit, want dat aantal wordt dan 9 RGB + 8 gemeenschappelijke aansluitingen, bij elkaar 17 aansluitingen. Nog beter te overzien. Het multiplexen zal via interupt gestuurde software moeten gebeuren.

Solderen van de Led's in de bovenplaat.

Op de Led's in de bovenplaat zijn eerst per groepje van 4 een stukje veraboard gesoldeerd. Dit geeft als voordelen dat het makkelijker te solderen is en dat aansluitdraden steviger vastzitten. Twee stukken regenboog flatkabel (8-polig en 9-polig) zijn op het veraboard gesoldeerd. En daarna is het met tie-wraps vastgemaakt aan de trekontlasting strip.

Draad KleurRij = Kathode Kolom = Anode Draad Kleur
 Zwart 0 - 8 - G   Zwart
 Bruin 1 - 9 - H  R0 - Rood 01234567 Bruin  
 Rood 2 - A - I  B0 - Blauw 01234567 Rood  
 Oranje 3 - B - J  G0 - Groen 01234567 Oranje  
 Geel 4 - C  R8 - Rood 89ABCDEF Geel  
 Groen 5 - D  B8 - Blauw 89ABCDEF Groen  
 Blauw 6 - E  G8 - Groen 89ABCDEF Blauw  
 Paars 7 - F  RG - Rood GHIJ  Paars  
Grijs  BG - Blauw GHIJ  Grijs  
Wit  GG - Groen GHIJ  Wit  

Op het andere eind van de stukken regenboog flatkabel zijn print connectors gesoldeerd. Via een breadboard is al getest dat alle Led's het doen en dat de geplande aansturing kan worden, zoals is uitgedacht.

Schema van de enkele aansturing - opzet 1.

Maar eerst moet er een aansturing worden ontworpen. Vanwege de kleuren Led's is er vanuit gegaan dat dit deel niet met de standaard 5V kan worden gevoed. Een reden om de voedingsprint uit te rusten met een gecombineerde 12V/ 5V aansluiting in het digitale circuit. Om vooruit te lopen op het schema, dit vermoeden klopt, de spanningsval over twee transistoren en de Led geeft te weinig speelruimte voor de serie-weerstand.

De aansturing bevat uiteindelijk transistoren, voor zowel de RGB-lijnen (de 12V maakt transistoren noodzakelijk om de spanning te overbruggen), als voor de gemeenschappelijke aansluitingen (de stromen maakt transistoren noodzakelijk om de stromen te kunnen leveren).

Maar eerst een aansturing ontwerpen voor 1 Led. Wanneer deze werkt, is het een questie van de aantallen uitbreiden tot het benodigde aantal.

Een verdere eis zal de ruimte in de Arsid worden. Deze is niet ongelimiteerd. Ruimte voor veel extra IC's zal er daarom niet wezen, een decoder-IC (74hct138) zou net kunnen, maar inverter-IC's (74hct04) nemen te veel ruimte in.

En wellicht zal er ook nog gestapeld moeten worden. Dingen om nu al rekening mee te houden.

Opbouwen van deze elektronica - opzet 1.

En daar komt mijn Arduino Uno boord weer goed van pas. Op het stukje breadboard is een eerste opzet opgebouwd, daarna is deze ge-fine-tuned. Het uiteindelijke resultaat staat op de foto's.

De potmeters op mijn Uno boord zijn gebruikt om de kleuren en de gemeenschappelijke aansluiting aan en uit te kunnen zetten.

Op de foto is ook te zien dat de voedingsprint van de ArSid is gebruikt om te +12V te leveren aan deze ene (wit brandende) Led (zowel het rode, als het groene, als het blauwe deel brandt).

Elke kleur aansluiting is laag-aktief en elke gemeenschappelijke aansluiting is hoog-aktief.

Test programma.

Het Uno-programma is eenvoudig. Zet eerst de benodigde poorten op Output. Lees daarna de potmeters uit en reken dit om (hier: delen door 512). Stuur dit resultaat naar de Led aansturing via een eigen functie. De (1-x) berekening daarin is nodig om de poort met software te inverteren. In de uiteindelijke hardware is ook geen ruimte voor extra inverter-IC's.

Schema en opbouwen van een betere enkele aansturing - opzet 2.

Hoewel de eerste opzet wel functioneerd, geeft het geen voldoening om elke gemeenschappelijke aansluiting (via de BC547B) vanuit de Mega aan te sturen. Dit zou resulteren in 3 aanstuur IC's (74hct574 (elk 20pins)) (want er zijn 17 aansluitingen) en het risico om meer dan 1 gemeenschappelijke aansluiting aktief te maken.

Vanwege het laatste argument om elke keer maar 1 gemeenschappelijke aansluting aktief te laten zijn, is besloten om deze via een decoder IC (74hct138) aan te sturen. Dit resulteert in maar 2 aanstuur IC's (74hct574). Een gevolg van de decoder is dat er een extra inverter funktie bij moet komen. Dit is in het schema gebouwd rond de extra transistor (BC557B).

Deze opzet is op een grotere breadboard opgebouwd en op functie getest (zie foto's). Met 1 Led werkt het uitstekend.

Elke kleur aansluiting is laag-aktief. Ook elke gemeenschappelijke aansluiting is laag-aktief, geschikt om vanuit een decoder (74hct138) aan te kunnen sturen.

Tot zover de aansturing van 1 enkele RGB-Led. Voor de complete aansturingsprint verwijs ik naar het eigen stuk hierover: "Aansturing". 


[Tekst] [Afbeeldingen] [Aansluitingen] [Broncodes]

Afbeeldingen

ledrij_1-ledschema.jpg
1/9: ledrij_1-ledschema.jpg.
ledrij_2-bovenplaat.jpg
2/9: ledrij_2-bovenplaat.jpg.
ledrij_3-connector.jpg
3/9: ledrij_3-connector.jpg.
ledrij_4-opzet1.jpg
4/9: ledrij_4-opzet1.jpg.
ledrij_5-opzet1.jpg
5/9: ledrij_5-opzet1.jpg.
ledrij_6-schema1.jpg
6/9: ledrij_6-schema1.jpg.
ledrij_7-opzet2.jpg
7/9: ledrij_7-opzet2.jpg.
ledrij_8-opzet2.jpg
8/9: ledrij_8-opzet2.jpg.
ledrij_9-schema2.jpg
9/9: ledrij_9-schema2.jpg.

[Tekst] [Afbeeldingen] [Aansluitingen] [Broncodes]

De aansluitingen van LedRij

Het aansturen van 1 enkele RGB-Led. Met de potmeters is deze aan/ uit te zetten.

Arduino Uno

Pwr USB ?
 
?
aref
gnd Gnd's (4x)
? d13
ioreff d12
reset d11 Blauw
+3.3v d10 Groen
+5v d9 Rood
Gnd's (4x) gnd d8
Gnd's (4x) gnd
Vin d7 Led aan/ uit
d6
Led aan/ uit (potmeter 1) a0 d5
a1 d4
a2 d3
Rood  (potmeter 4) a3 d2
Groen (potmeter 5) a4 d1
Blauw (potmeter 6) a5 d0



[Tekst] [Afbeeldingen] [Aansluitingen] [Broncodes]
Broncode: [1: 1 enkele RGB Led]

1: De broncode van 1 enkele RGB Led

(Sun 21 February 2016) Het aansturen van 1 enkele RGB-Led. Met de potmeters is deze aan/ uit te zetten.

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
// RGB-Led in een Matrix
// Tup/ Tun Test.

byte led1  =  7;
byte lpot  =  0;  // Potmeter 6 = A5

byte rood  =  9;
byte rpot  =  0;  // Potmeter 1 = A0

byte groen = 10;
byte gpot  =  0;  // Potmeter 2 = A1

byte blauw = 11;
byte bpot  =  0;  // Potmeter 3 = A2


// the setup function runs once when you press reset or power the board
void setup()
{ // initialize alles als output.
  pinMode(led1 , OUTPUT);
  pinMode(rood , OUTPUT);
  pinMode(groen, OUTPUT);
  pinMode(blauw, OUTPUT);
}

// the loop function runs over and over again forever
void loop()
{ // Lees alle potmeters
  lpot = analogRead(5) / 512;
  rpot = analogRead(0) / 512;
  gpot = analogRead(1) / 512;
  bpot = analogRead(2) / 512;

  // Stuur waardes naar de RGB-Led
  led(lpot,rpot,gpot,bpot);
}

void led (byte l, byte r, byte g, byte b)
{
  digitalWrite(led1 ,   l);  // Zet Led   aan/ Uit

  digitalWrite(rood , 1-r);  // Zet Rood  aan/ uit
  digitalWrite(groen, 1-g);  // Zet Groen aan/ uit
  digitalWrite(blauw, 1-b);  // Zet Blauw aan/ uit
}


Broncode: [1: 1 enkele RGB Led]
[Tekst] [Afbeeldingen] [Aansluitingen] [Broncodes]