Arduino Projekten

Thu 23-May-19
01:31:13




Schuine lijnen

Datum: Sat 22 February 2014
Samenvatting: De eerste experimenten met het aansturen van de losse punten gaat beginnen.


Allereerst zijn mijn twee RGB-Matrix Panelen mechanisch aan elkaar geschroefd met behulp van aluminium strippen. Helaas heb ik (nog) geen uitsparingen gemaakt voor de connectors. Dat moet later maar komen. Nu zitten de panelen wel vast aan elkaar en kunnen ze rechtop staan.

Ik heb een langere flatkabel gemaakt en een (soort van) stapelprintje voor op de arduino (waarom hebben de aansluitingen D8..D13 nu een net iets andere steek dan de andere aansluitingen). Dit printje voorkomt het elke keer uitzoeken hoe de verbindingen gelegd moeten worden.

Op dit printje is bovendien een 3-naar-8 decoder (c.q. demultiplexer = een 74HCT138, komt dit nummer bekend voor?) en 8 Led's gesoldeerd. De ingangen van dit IC gaan naar dezelfde pinnen als de aansluitingen A B en C van de panelen, de rij-selectie draden. Zelfs als de panelen uit zijn, brandt er altijd een Led op het printje.

Een eerste experiment voor de software toont op dit moment schuine gekleurde strepen. Het is acceptable met het oog, maar knippert lichtjes. De camera op 1/100sec sluitertijd toont nog wat zwarte strepen.

Wat wordt het doel? Er moeten 3 Analoge ingangen beschikbaar blijven en een interupt zal in de toekomst de afzonderlijke regels moeten aansturen vanuit de PaneelData array. Voorlopig zijn er diverse kleurtjes te zien op de individuele Led's. Tijd voor het volgende deel.

Dit programma moet nog ge-fine-tuned worden, hier en daar zijn ook wat beeld-geesten (= image-ghosting) te zien. Maar ik ben een fase verder.


Broncode: [1: Van schuiner Lijnen tot Interupt Sturing]

1: De broncode van Van schuiner Lijnen tot Interupt Sturing

(Sat 22 February 2014)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/*     ---------------------------------------------------------
 *     |  Experimentation Kit for Arduino Example Code         |
 *     |  RGBMatrix : RGB Matrix                               |
 *     ---------------------------------------------------------
 */


// Paneel Vars.
const byte MaxCol = 64;
volatile byte PaneelData [MaxCol][8];   // = [00]..[63]
volatile byte RowCount = 0;

//RGB Pin Definitions
const int a   = A0;  // Address A (A0)
const int b   = A1;  // Address B (A1)
const int c   = A2;  // Address C (A2)

const int r1  =  2;  // Red 1
const int g1  =  3;  // Green 1
const int b1  =  4;  // Blue 1

const int r2  =  5;  // Red 2
const int g2  =  6;  // Green 2
const int b2  =  7;  // Blue 2

const int clk =  8;  // Clock
const int oe  =  9;  // outEnable
const int lat = 10;  // Latch


void setup()
{
pinMode(a  , OUTPUT);   pinMode(b  , OUTPUT);   pinMode(c  , OUTPUT);   // Set a b c as outputs
pinMode(r1 , OUTPUT);   pinMode(g1 , OUTPUT);   pinMode(b1 , OUTPUT);   // Set rgb1  as outputs
pinMode(r2 , OUTPUT);   pinMode(g2 , OUTPUT);   pinMode(b2 , OUTPUT);   // Set rgb2  as outputs
pinMode(clk, OUTPUT);   pinMode(oe , OUTPUT);   pinMode(lat, OUTPUT);   // Set ctrls as outputs

ClrPan();
}

void loop()
{
  IntOneRow();
}



void ClrPan()     // Clear The Panel Content
{ for (byte ww=0; ww<8; ww=ww+1)
      { for (byte qq=0; qq<MaxCol; qq=qq+1)
            { byte q7 = qq & 7;
              byte pd = ( qq + ww ) & 7;
              PaneelData [qq][ww]=4 * (9 * pd );
            }
      }
}

void IntOneRow()    // Do One Row (in an Interupt)
{ for (byte rc=0; rc<MaxCol; rc=rc+1)
      {
        byte rgb = PaneelData[rc][RowCount] >>2;
        //-------------------------------------------------------------------------------------
        digitalWrite(r2 , rgb & 1);        rgb = rgb>>1;
        digitalWrite(g2 , rgb & 1);        rgb = rgb>>1;
        digitalWrite(b2 , rgb & 1);        rgb = rgb>>1;
        //-------------------------------------------------------------------------------------
        digitalWrite(r1 , rgb & 1);        rgb = rgb>>1;
        digitalWrite(g1 , rgb & 1);        rgb = rgb>>1;
        digitalWrite(b1 , rgb & 1);        rgb = rgb>>1;
        //-------------------------------------------------------------------------------------
        digitalWrite(clk, HIGH);
        digitalWrite(clk, LOW );
        //-------------------------------------------------------------------------------------
      }
  digitalWrite(oe , HIGH);
  if (RowCount & 1) == 0 )  { digitalWrite(a  , HIGH );  }  else { digitalWrite(a  , LOW );  }
  if (RowCount & 2) == 0 )  { digitalWrite(b  , HIGH );  }  else { digitalWrite(b  , LOW );  }
  if (RowCount & 4) == 0 )  { digitalWrite(c  , HIGH );  }  else { digitalWrite(c  , LOW );  }
  digitalWrite(lat, HIGH);
  digitalWrite(lat, LOW );
  digitalWrite(oe , LOW );
  //-------------------------------------------------------------------------------------
RowCount = ( RowCount+1 ) & 7;

// delay(250);
}



Broncode: [1: Van schuiner Lijnen tot Interupt Sturing]

Afbeeldingen

schuinlijn_1.jpg
1/7: schuinlijn_1.jpg.
schuinlijn_2.jpg
2/7: schuinlijn_2.jpg.
schuinlijn_3.jpg
3/7: schuinlijn_3.jpg.
schuinlijn_4.jpg
4/7: schuinlijn_4.jpg.
schuinlijn_5.jpg
5/7: schuinlijn_5.jpg.
schuinlijn_6.jpg
6/7: schuinlijn_6.jpg.
schuinlijn_7.jpg
7/7: schuinlijn_7.jpg.

De aansluitingen van Basis aansluitingen.

De basis-aansluitingen van de Arduino Library

Arduino Uno

Pwr USB ?
 
?
aref
gnd Gnd's (4x)
? d13
ioreff d12
reset d11
+3.3v d10 Latch
+5v d9 Oe
Gnd's (4x) gnd d8 Clock
Gnd's (4x) gnd
Vin d7 B2
d6 G2
A     (A0) a0 d5 R2
B     (A1) a1 d4 B1
C     (A2) a2 d3 G1
a3 d2 R1
a4 d1
a5 d0