Arduino Projekten

Fri 19-Apr-24
03:05:04


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

paneel02_interupt_1.jpg
1/2: paneel02_interupt_1.jpg.
paneel02_interupt_2.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