Interupts op het Mega Paneel
Datum: Sun 15 February 2015
Samenvatting: Nu het Mega Paneel in principe werkt, is interupt gebruik aan de beurt.
De losse onderdelen werken en de direkte programmering kan worden gebruikt. Dus is het nu tijd om er interupts bij te programmeren.
Aller eerst de basis, die ik ook voor de Uno met de 8 Led's heb gebruikt. Het voordeel van de Mega Paneel is nu wel, dat ik bij alle benodigde poorten alle pinnen op uitgang kan zetten. Een eenvoudige regel is voldoende (DDRx=0xFF;), zonder uitzonderingen met AND en OR instructies. Dit is het eerste programma in de Broncode. Het omzetten op zich is niet moeilijk geweest. De PORTC die bij de Uno met de analoge pinnen zijn verbonden en daar de adres-lijnen besturen, die worden hier bij de Mega ook gebruikt voor de adres-lijnen. Een toeval die nu goed van pas komt. De Control-lijnen moeten echter wel aangepast worden. Bij de Uno gaan deze via PORTB (de laagste bits), bij de Mega gaan ze echter ook via PORTC (hier de hoogste bits).
Alleen de aansturing van de Clock van het Paneel heeft wat logische bewerkingen (rond bit4) nodig, anders wordt er geen nieuwe data op het paneel getoond.
Net als bij de Uno 8 Leds, wordt hier met de interupt de 3 adres-lijnen met 1 verhoogd. In de loop()-functie loopt een teller de 8bits waardes af die worden gestuurd naar de Leds, Displays en de RGB-lijnen van het Paneel.
Het resultaat is dat de Leds dezelfde waarde aangeven, de Displays hetzelfde teken en op het Paneel per 8 regels dezelfde kleuren blokken tonen.
Broncode:
[1: Interupts op het Mega Paneel]
1: De broncode van Interupts op het Mega Paneel
(Sun 15 February 2015)
Nu het Mega Paneel in principe werkt, is interupt gebruik aan de beurt.
Deze broncode heeft 52 regels met programma-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
|
//
// Mega Paneel Interupt Program 1
//
void setup()
{ // Set some pins To Output
DDRC = 0xFF; // All Output
PORTC = B00100000; // Latch
DDRA = 0xFF; // All Output
DDRL = 0xFF; // All Output
PORTL = 0xFF;
InitTimer();
}
void loop()
{
for (int qq=0; qq<=255; qq=qq+1)
{ PORTL = qq;
PORTA = qq;
PORTC = PORTC | B00010000; // Clk High
PORTC = PORTC & B11101111; // Clk Low
delay(100);
}
}
//==========================================================================================
//== ==
//==========================================================================================
volatile byte RowCount = 0;
void InitTimer()
{ // Initialize Timer1
cli(); // Disable Interrupts
// Timer Counter Control Registers 1A & 1B
TCCR1A = 0; // Make all bits of this register to 0
TCCR1B = 0; // Make all bits of this register to 0
OCR1A = 635; // set Output Compare Register 1 to the desired timer count
TCCR1B = TCCR1B | B00001000; // turn on CTC mode (WGM12 = bit 3 - Waveform Generation Mode)
TCCR1B = TCCR1B | B00000010; // Set the Prescaler (CS12 CS11 CS10 = bit 2..0 - Clock Select)
TIMSK1 = TIMSK1 | B00000010; // set Timer Interupt MaSK 1 to compare interrupt
// (OCIE1A = bit 1 - Output Compare match Interrupt Enable 1A)
sei(); // Enable Interrupts
}
ISR(TIMER1_COMPA_vect)
// De Interrupt Service Routine
{ // Select the Row.
PORTC = ( PORTC & B11111000 ) | RowCount; // Set the pin-nr's to the RowCounter
RowCount = (RowCount + 1) & 7;
|
Broncode:
[1: Interupts op het Mega Paneel]
|
Afbeeldingen
1/2: paneel02_interupt_1.jpg.
2/2: paneel02_interupt_2.jpg.
|
De aansluitingen van Interupts Megapaneel
De basis-aansluitingen van de Mega-Paneel
Arduino Mega
|
|
Pwr USB
|
?
|
|
|
|
|
?
|
|
|
|
aref
|
|
|
|
gnd
|
Gnd's
|
|
?
|
d13
|
|
|
ioreff
|
d12
|
|
Reset
|
reset
|
d11
|
|
|
+3.3v
|
d10
|
|
+5V
|
+5v
|
d9
|
|
Gnd's
|
gnd
|
d8
|
|
Gnd's
|
gnd
|
|
|
|
Vin
|
d7
|
|
|
|
d6
|
|
|
a0
|
d5
|
|
|
a1
|
d4
|
|
|
a2
|
d3
|
|
|
a3
|
d2
|
|
|
a4
|
d1
|
Tx
|
|
a5
|
d0
|
Rx
|
|
a6
|
|
|
|
a7
|
d14
|
|
|
|
d15
|
|
|
a8
|
d16
|
|
|
a9
|
d17
|
|
|
a10
|
d18
|
Tx1 Midi Out
|
|
a11
|
d19
|
Rx1 Midi In
|
|
a12
|
d20
|
|
|
a13
|
d21
|
|
|
a14
|
/~\
|
|
|
a15
|
\_/
|
|
Onderconnector
|
|
d22 | d23
|
|
R1 |A2
|
d24 | d25
|
A3| G1
|
B1 |A4
|
d26 | d27
|
A5| R2
|
G2 |A6
|
d28 | d29
|
A7| B2
|
|
|
|
|
Oe Led & Display |C7
|
d30 | d31
|
C6| Oe Paneel
|
Latch Paneel |C5
|
d32 | d33
|
C4| Clock Paneel
|
|C3
|
d34 | d35
|
C2| C (A2)
|
B (A1) |C1
|
d36 | d37
|
C0| A (A0)
|
|
|
|
|
|
d39 | d39
|
|
|
d40 | d41
|
|
|
|
|
|
Led Display |L7
|
d42 | d43
|
L6| Led Display
|
Led Display |L5
|
d44 | d45
|
L4| Led Display
|
Led Display |L3
|
d46 | d47
|
L2| Led Display
|
Led Display |L1
|
d48 | d49
|
L0| Led Display
|
|
|
|
|
|
d50 | d51
|
|
|
d52 | d53
|
|
|