ArSid - Arduino Sid Synthesizer

Sat 23-Mar-19
22:31:01




Titelscherm

Datum: Sat 18 June 2016
Samenvatting: Een Titelscherm voor de ArSid.
 Soort Artikel: Software
Status: Afgerond



[Tekst] [Afbeeldingen] [Aansluitingen] [Broncodes]
titelscherm_1-ontwerp.jpg
1/4: titelscherm_1-ontwerp.jpg.
titelscherm_2-eigentekens.jpg
2/4: titelscherm_2-eigentekens.jpg.
titelscherm_3-fadeing.jpg
3/4: titelscherm_3-fadeing.jpg.
titelscherm_4-nootjes.jpg
4/4: titelscherm_4-nootjes.jpg.
[Tekst] [Afbeeldingen] [Aansluitingen] [Broncodes]

Met een beperkt display van 4 regels en 20 tekens, is voor een korte naam nog een leuk titelscherm te maken. Deze wordt dan getoond elke keer dat de ArSid wordt aangezet. Natuurlijk kan met de standaard Lcd tekens simpel het woord "ArSid" op het scherm worden geschreven. Maar voor dit projekt wil ik er toch wat meer in stoppen dan standaard letters.

Met 8 zelf te defini-eren tekens is er meer te halen uit het display. Elk teken van het display bestaat uit 5*8 puntjes. Door nu elk teken in twee helften te verdelen, ontstaat er een display met een resolutie van 20*8 punten. En daar moet een titel-naam in komen.

Zoals de foto's laat zien, is er eerst een ontwerp gemaakt op ruitjes papier ... althans, dit is het eind-ontwerp uit diverse pogingen. Theoretisch zouden er 3 letters (elk 5 punten breed) kunnen worden getoond, maar de "i" is niet breed en de standaard "r" kan smaller. De overige letters kunnen 4 punten breed worden. Met een punt tussenruimte kan het complete woord "ArSid" toch worden getoond. Veel meer zit er niet in.

Een woord in het groot is al heel wat, echter er zit nog meer mogelijkheden in. Zoals het woord in-faden en uit-faden, bijvoorbeeld door de eigen tekens alleen een andere inhoud te geven? Theoretisch is het mogelijk. Her-defini-eren van eigen tekens heb ik al gedaan met de eerste Lcd-test.

Het programma.

Hier is alleen de functie opgenomen. Het moment van het programmeren van het titelscherm ligt tussen het voltooien van de Latches en het ontwerpen van de Decoder. De (uiteindelijke) I/O-routines voor de Decoder zullen er heel anders uitzien dan die voor de Latches zijn. Een reden om deze I/O-routines hier geheel weg te laten. De bedoelde routines hebben de volgende functienamen:

  • Write_Lcdback(kleurbyte);
  • Lcd_Out(nr,byte);

Maar er is kans dat het aantal Lcd-routines nog worden uitgebreid. De uiteindelijke titelscherm-functie komt dan in de tweede listing te staan.

De functie zelf is standaard geschreven. Geen ingewikkelde lussen. De tekens die naar het display moeten, staan in de array IntroChars[] en de definities van de diverse fading-standen van deze tekens zelf staan in een andere array EigenChar[][]. Ook de volgorde van de fading staan in een aparte array, fadeing[] genaamd.

Dan is het nog een questie van de tekens rechtstreeks naar het display schrijven, met de nodige Delay()'s er tussen in.

Wat er niet in het papieren ontwerp staat, zijn twee eigen tekens van muzieknootjes, die één voor één dwars door het titelscherm op het display worden gezet, een extra speelsigheidje.

Daarna faden de grote letters weer uit en blijven de muzieknootjes over.

Het infaden en uitfaden.

Er is eerst het oorspronkelijke ontwerp (getekend in het zwart) van eigen teken definities geprobeerd. Echter het moment dat echt alle puntjes van een teken moeten omschakelen (lees: aan- en uitgezet moeten worden), geeft dit op het gehele display een storende flikkering.

Om deze reden is een tweede set van eigen tekens (in het blauw) getekend, die alleen maar teken-puntjes aanzetten, of uitzetten. Dit resulteert in een rustige titelscherm.

Vertraging in het display.

Wat de foto's ook tonen, is OF een vertraging van het Lcd-Display zelf, OF een traagheid van mijn camera. Het moment dat de muzieknootjes moeten verdwijnen, is het volgende scherm alweer zichtbaar (in dit geval die van de "Latch Check". 


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

Afbeeldingen

titelscherm_1-ontwerp.jpg
1/4: titelscherm_1-ontwerp.jpg.
titelscherm_2-eigentekens.jpg
2/4: titelscherm_2-eigentekens.jpg.
titelscherm_3-fadeing.jpg
3/4: titelscherm_3-fadeing.jpg.
titelscherm_4-nootjes.jpg
4/4: titelscherm_4-nootjes.jpg.

[Tekst] [Afbeeldingen] [Aansluitingen] [Broncodes]
Broncode: [1: Titelscherm]

1: De broncode van Titelscherm

(Sat 18 June 2016) Een Titelscherm voor de ArSid.

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
/****************************************************************************
    ArSid Titelscherm

    Een Titelscherm
    Nodig: Schakelaars
           Lcd (Rgb Backlight)
           Control-Potmeters
           Aansturing ledRij
           Latches (en Decoder)

*****************************************************************************/


//
// Overige variabelen, procedures en functies.
//

// ===================================================================

void Arsid_Intro()
{ // Toon een Intro op het Scherm
  const int delaytime = 150;
  const byte IntroChars[80]   = { 2,1,1,2, 0,0,0,0, 0,2,1,1, 2,0,2,0, 0,0,0,2 ,
                                  3,0,0,3, 0,3,1,0, 0,2,0,0, 3,0,3,0, 3,0,0,3 ,
                                  3,2,2,3, 0,2,0,2, 0,1,2,2, 0,0,2,0, 0,2,2,3 ,
                                  1,0,0,1, 0,1,0,0, 0,0,1,1, 0,0,1,0, 0,1,1,1
                                };
  const byte EigenChar[6][32] = { // Bitmap set 0
                                  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                                  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                                  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                                  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                                , // Bitmap set 1
                                  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                                  0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
                                  0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,
                                  0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00
                                , // Bitmap set 2
                                  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                                  0x0A,0x04,0x0A,0x00,0x00,0x00,0x00,0x00,
                                  0x00,0x00,0x00,0x00,0x0A,0x04,0x0A,0x00,
                                  0x0A,0x04,0x0A,0x00,0x0A,0x04,0x0A,0x00
                                , // Bitmap set 3
                                  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                                  0x0A,0x15,0x0A,0x00,0x00,0x00,0x00,0x00,
                                  0x00,0x00,0x00,0x00,0x0A,0x15,0x0A,0x00,
                                  0x0A,0x15,0x0A,0x00,0x0A,0x15,0x0A,0x00
                                , // Bitmap set 4
                                  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                                  0x0E,0x1F,0x0E,0x00,0x00,0x00,0x00,0x00,
                                  0x00,0x00,0x00,0x00,0x0E,0x1F,0x0E,0x00,
                                  0x0E,0x1F,0x0E,0x00,0x0E,0x1F,0x0E,0x00
                                , // Bitmap set 5
                                  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                                  0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,
                                  0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F,0x00,
                                  0x1F,0x1F,0x1F,0x00,0x1F,0x1F,0x1F,0x00
                                };
  const byte fadeing[13]      = {1,1,2,3,4,5,5,4,3,2,1,0,0};

  // Reset Alle Eigen Chars
  Lcd_Out(0,0b01000000);
  for (byte qq=0; qq<64; qq=qq+1)
      { Lcd_Out(1,0);
      }
  // Schrijf TitelChars op Scherm
  Lcd_Out(0,0b10000000);
  for (byte qq=0; qq<80; qq=qq+1)
      { Lcd_Out(1,IntroChars[qq]);
      }
  // Bitmap Noot 6
  Lcd_Out(0,0b01110000);  // = $70
  Lcd_Out(1,0b00000000);
  Lcd_Out(1,0b00000100);
  Lcd_Out(1,0b00000110);
  Lcd_Out(1,0b00000101);
  Lcd_Out(1,0b00000100);
  Lcd_Out(1,0b00001000);
  Lcd_Out(1,0b00011100);
  Lcd_Out(1,0b00001000);
  // Bitmap Noot 7
  Lcd_Out(0,0b01111000);  // = $78
  Lcd_Out(1,0b00000100);
  Lcd_Out(1,0b00000110);
  Lcd_Out(1,0b00000101);
  Lcd_Out(1,0b00000100);
  Lcd_Out(1,0b00001000);
  Lcd_Out(1,0b00011100);
  Lcd_Out(1,0b00001000);
  Lcd_Out(1,0b00000000);
  // Schrijf de Bitmaps voor een goede fading.
  for (byte ww=0; ww<sizeof(fadeing); ww=ww+1)
      { Lcd_Out(0,0b01000000);
        byte wwfade = fadeing[ww];
        for (byte qq=0; qq<4*8; qq=qq+1)
            { Lcd_Out(1,EigenChar[wwfade][qq]);
            }
        delay(delaytime);
        Write_Lcdback(0x05);
        if (wwfade==5)
           { // Bij volledige volheid, Schrijf versie-nummer en Muzieknootjes
/*
             // Versienummer
             delay(delaytime);
             Lcd_Out(0,0b11000000 + 26);
             Lcd_Out(1,'v');
             Lcd_Out(1,'0');
             Lcd_Out(1,'.');
             Lcd_Out(1,'0');
*/

             // Schrijf Muzieknootjes
             delay(delaytime);
             Lcd_Out(0,0b11000000 + 21);
             Lcd_Out(1,7);
             delay(delaytime);
             Lcd_Out(0,0b11000000 + 16);
             Lcd_Out(1,6);
             delay(delaytime);
             Lcd_Out(0,0b11000000 + 33);
             Lcd_Out(1,7);
             delay(delaytime);
             delay(delaytime);
             Lcd_Out(0,0b10000000 +  5);
             Lcd_Out(1,6);
             delay(delaytime);
             Lcd_Out(0,0b10000000 +  28);
             Lcd_Out(1,7);
             delay(delaytime);
           }
        if (wwfade>=2)
           { // Wis het Versie-nummer weer
             Lcd_Out(0,0b11000000 + 26);
             Lcd_Out(1,' ');
             Lcd_Out(1,' ');
             Lcd_Out(1,' ');
             Lcd_Out(1,' ');
           }
      }

  // Wis de Muzieknootjes weer
  delay(delaytime);
  Lcd_Out(0,0b11000000 + 21);
  Lcd_Out(1,0);
  delay(delaytime);
  Lcd_Out(0,0b11000000 + 16);
  Lcd_Out(1,0);
  delay(delaytime);
  Lcd_Out(0,0b11000000 + 33);
  Lcd_Out(1,0);
  delay(delaytime);
  Lcd_Out(0,0b10000000 +  5);
  Lcd_Out(1,0);
  delay(delaytime);
  Lcd_Out(0,0b10000000 +  28);
  Lcd_Out(1,0);
  delay(delaytime);
  // Reset Alle Eigen Chars weer
  Lcd_Out(0,0b01000000);
  for (byte qq=0; qq<64; qq=qq+1)
      { Lcd_Out(1,0);
      }
  Lcd_Out(0,0b00000001);  delay(2);   // Clear Display
  Lcd_Out(0,0b10000000);    // GotoXY(0,0)
  delay(delaytime);
}



Broncode: [1: Titelscherm]
[Tekst] [Afbeeldingen] [Aansluitingen] [Broncodes]