Uhr.vhd


1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4
5
entity sekunden_takt is
6
generic (teiler : positive := 50000000);
7
-- generic (teiler : positive := 20);
8
9
port (
10
    clock : in std_logic;    -- Systemclock Pin
11
    takt  : out std_logic
12
    );
13
end sekunden_takt;
14
15
architecture sekunden_takt_rtl of sekunden_takt is
16
  signal zaehler : integer range 0 to teiler := 0;
17
  type states is (one, two);
18
  signal state : states;
19
begin
20
   -- Teilt die Taktfrequenz von 50 MHz durch 50.000.000 = 1 Hz
21
   process (clock)
22
   begin
23
    if rising_edge(clock)
24
    then
25
      case state is
26
        when one =>    if zaehler < teiler/2
27
                  then 
28
                    takt <= '1';
29
                    zaehler <= zaehler + 1;
30
                  else
31
                    state <= two;
32
                  end if;
33
        when two =>    if zaehler > 0
34
                  then
35
                    takt <= '0';
36
                    zaehler <= zaehler - 1;
37
                  else
38
                    state <= one;
39
                  end if;
40
      end case;
41
      end if;
42
    end process;
43
end sekunden_takt_rtl;    
44
45
library ieee;
46
use ieee.std_logic_1164.all;
47
use ieee.numeric_std.all;
48
49
entity taktgenerator is
50
51
port (
52
    clock          : in  std_logic;  -- Systemclock Pin
53
    takt              : in   std_logic;  -- Sekundentakt
54
    sekunden_ziffer0  : out std_logic_vector(3 downto 0);
55
    sekunden_ziffer1  : out std_logic_vector(3 downto 0);
56
    minuten_ziffer0   : out std_logic_vector(3 downto 0);
57
    minuten_ziffer1   : out std_logic_vector(3 downto 0);
58
    stunden_ziffer0   : out std_logic_vector(3 downto 0);
59
    stunden_ziffer1   : out std_logic_vector(3 downto 0)  
60
    );
61
    
62
end taktgenerator;
63
64
architecture taktgenerator_rtl of taktgenerator is
65
  subtype ziffer is unsigned(3 downto 0);
66
   type doppel_ziffer is array(1 downto 0) of ziffer;
67
  signal sekunden_neu, minuten_neu, stunden_neu : doppel_ziffer := (others => (others => '0'));
68
  signal takt_alt : std_logic := '0';
69
70
begin
71
  
72
   -- Ziffernweises Increment der Sekunden
73
   process (clock)
74
   begin
75
    if rising_edge(clock)
76
    then
77
      takt_alt <= takt;
78
      -- Positive Taktflanke
79
      if takt_alt = '0' and takt = '1'
80
      then             
81
        if sekunden_neu(0) < 9
82
        then
83
          sekunden_neu(0) <= sekunden_neu(0) + 1;
84
        else 
85
          sekunden_neu(0) <= (others => '0');
86
          if sekunden_neu(1) < 5
87
          then
88
            sekunden_neu(1) <= sekunden_neu(1) + 1;
89
          else
90
            sekunden_neu(1) <= (others => '0');
91
            if minuten_neu(0) < 9
92
            then
93
              minuten_neu(0) <= minuten_neu(0) + 1;
94
            else
95
              minuten_neu(0) <= (others => '0');
96
              if minuten_neu(1) < 5
97
              then
98
                minuten_neu(1) <= minuten_neu(1) + 1;
99
              else
100
                minuten_neu(1) <= (others => '0');
101
                if stunden_neu(0) < 3
102
                then
103
                  stunden_neu(0) <= stunden_neu(0) + 1;
104
                else
105
                  stunden_neu(0) <= (others => '0');
106
                  if stunden_neu(1) < 2
107
                  then
108
                    stunden_neu(1) <= stunden_neu(1) + 1;
109
                  else
110
                    stunden_neu(1) <= (others => '0');
111
                  end if; -- if stunden_neu(1)
112
                end if; -- if stunden_neu(0)
113
              end if; -- if minuten_neu(1)
114
            end if; -- if minuten_neu(0)
115
          end if; -- if sekunden_neu(1)
116
        end if; -- if sekunden_neu(0)        
117
      end if; -- if takt_alt = '0'
118
    end if; -- if rising_edge
119
   end process;
120
  
121
   
122
   -- Ziffernweise Ausgabe an die Anzeige
123
   sekunden_ziffer0 <= std_logic_vector(sekunden_neu(0));
124
   sekunden_ziffer1 <= std_logic_vector(sekunden_neu(1));
125
   minuten_ziffer0  <= std_logic_vector(minuten_neu(0));
126
   minuten_ziffer1  <= std_logic_vector(minuten_neu(1));
127
   stunden_ziffer0  <= std_logic_vector(stunden_neu(0));
128
   stunden_ziffer1  <= std_logic_vector(stunden_neu(1));
129
end taktgenerator_rtl;
130
131
132
      
133
library ieee;
134
use ieee.std_logic_1164.all;
135
use ieee.numeric_std.all;
136
      
137
entity anzeige is       
138
port (
139
    clock      : in std_logic;    -- Systemclock Pin
140
    lcd_data   : out std_logic_vector(7 downto 0);
141
    lcd_enable  : out std_logic;
142
    lcd_rs     : out std_logic;
143
    lcd_rw     : out std_logic;
144
    led         : out std_logic_vector(7 downto 0)
145
    );
146
    
147
end anzeige;
148
149
architecture anzeige_rtl of anzeige is
150
151
  component sekunden_takt is
152
  port
153
  (
154
    clock : in std_logic;
155
    takt  : out std_logic
156
  );
157
  end component sekunden_takt;
158
159
  component taktgenerator is
160
  port
161
  (    
162
    clock          : in  std_logic;  -- Systemclock Pin
163
    sekunden_ziffer0  : out std_logic_vector(3 downto 0);
164
    sekunden_ziffer1  : out std_logic_vector(3 downto 0);
165
    minuten_ziffer0   : out std_logic_vector(3 downto 0);
166
    minuten_ziffer1   : out std_logic_vector(3 downto 0);
167
    stunden_ziffer0   : out std_logic_vector(3 downto 0);
168
    stunden_ziffer1   : out std_logic_vector(3 downto 0);
169
    takt              : in  std_logic -- Sekundentakt
170
  );
171
  end component taktgenerator;
172
  
173
  subtype ziffer is std_logic_vector(3 downto 0);
174
   type ziffern is array(5 downto 0) of ziffer;
175
  signal lcd_anzeige : ziffern;
176
  
177
  type states is (power_on, configure, output);
178
  signal state : states;
179
  type power_on_states is (one, two, three, four, five, six, seven);
180
  signal power_on_state : power_on_states;
181
  type configuration_states is (ten_a, ten_b, eleven_a, eleven_b, twelf_a, twelf_b, thirteen, fourteen);
182
  signal configuration_state : configuration_states;
183
  type output_states is (fifteen_a, fifteen_b, sixteen_a, sixteen_b, 
184
             seventeen_a, seventeen_b, eightteen_a, eightteen_b, 
185
             nineteen_a, nineteen_b, twenty_a, twenty_b, one_a, one_b, one_c, one_d, one_e, one_f, one_g, one_h,
186
             one_i, one_j, twenty_one_a, twenty_one_b, twenty_two_a, twenty_two_b, twenty_three, twenty_four);
187
  signal output_state : output_states;
188
  -- Power-On Delay
189
  signal delay : integer range 10000000 downto 0 := 750000;
190
  signal takt : std_logic := '0';
191
  signal takt_alt : std_logic := '0';
192
  
193
  ------------------------------------------------------------------------
194
  -- Function Declaration
195
  ------------------------------------------------------------------------
196
  function conv_ASCII(char:character) return STD_LOGIC_VECTOR is
197
  -- Returns the ASCII code of the character argument
198
    variable ASCII:std_logic_vector(7 downto 0);
199
  begin
200
    if char=' ' then ASCII:=X"20";
201
    elsif char='!' then ASCII:=X"21";
202
  --   elsif char='"' then ASCII:=X"22";   -- forbidden character
203
    elsif char='#' then ASCII:=X"23";
204
    elsif char='$' then ASCII:=X"24";
205
    elsif char='%' then ASCII:=X"25";
206
    elsif char='&' then ASCII:=X"26";
207
    elsif char=''' then ASCII:=X"27";
208
    elsif char='(' then ASCII:=X"28";
209
    elsif char=')' then ASCII:=X"29";
210
    elsif char='*' then ASCII:=X"2A";
211
    elsif char='+' then ASCII:=X"2B";
212
    elsif char=',' then ASCII:=X"2C";
213
    elsif char='-' then ASCII:=X"2D";
214
    elsif char='.' then ASCII:=X"2E";
215
    elsif char='/' then ASCII:=X"2F";
216
    elsif char='0' then ASCII:=X"30";
217
    elsif char='1' then ASCII:=X"31";
218
    elsif char='2' then ASCII:=X"32";
219
    elsif char='3' then ASCII:=X"33";
220
    elsif char='4' then ASCII:=X"34";
221
    elsif char='5' then ASCII:=X"35";
222
    elsif char='6' then ASCII:=X"36";
223
    elsif char='7' then ASCII:=X"37";
224
    elsif char='8' then ASCII:=X"38";
225
    elsif char='9' then ASCII:=X"39";
226
    elsif char=':' then ASCII:=X"3A";
227
    elsif char=';' then ASCII:=X"3B";
228
    elsif char='<' then ASCII:=X"3C";
229
    elsif char='=' then ASCII:=X"3D";
230
    elsif char='>' then ASCII:=X"3E";
231
    elsif char='?' then ASCII:=X"3F";
232
    elsif char='@' then ASCII:=X"40";
233
    elsif char='A' then ASCII:=X"41";
234
    elsif char='B' then ASCII:=X"42";
235
    elsif char='C' then ASCII:=X"43";
236
    elsif char='D' then ASCII:=X"44";
237
    elsif char='E' then ASCII:=X"45";
238
    elsif char='F' then ASCII:=X"46";
239
    elsif char='G' then ASCII:=X"47";
240
    elsif char='H' then ASCII:=X"48";
241
    elsif char='I' then ASCII:=X"49";
242
    elsif char='J' then ASCII:=X"4A";
243
    elsif char='K' then ASCII:=X"4B";
244
    elsif char='L' then ASCII:=X"4C";
245
    elsif char='M' then ASCII:=X"4D";
246
    elsif char='N' then ASCII:=X"4E";
247
    elsif char='O' then ASCII:=X"4F";
248
    elsif char='P' then ASCII:=X"50";
249
    elsif char='Q' then ASCII:=X"51";
250
    elsif char='R' then ASCII:=X"52";
251
    elsif char='S' then ASCII:=X"53";
252
    elsif char='T' then ASCII:=X"54";
253
    elsif char='U' then ASCII:=X"55";
254
    elsif char='V' then ASCII:=X"56";
255
    elsif char='W' then ASCII:=X"57";
256
    elsif char='X' then ASCII:=X"58";
257
    elsif char='Y' then ASCII:=X"59";
258
    elsif char='Z' then ASCII:=X"5A";
259
    elsif char='[' then ASCII:=X"5B";
260
    elsif char='\' then ASCII:=X"5C";
261
    elsif char=']' then ASCII:=X"5D";
262
    elsif char='^' then ASCII:=X"5E";
263
    elsif char='_' then ASCII:=X"5F";
264
    elsif char='`' then ASCII:=X"60";
265
    elsif char='a' then ASCII:=X"61";
266
    elsif char='b' then ASCII:=X"62";
267
    elsif char='c' then ASCII:=X"63";
268
    elsif char='d' then ASCII:=X"64";
269
    elsif char='e' then ASCII:=X"65";
270
    elsif char='f' then ASCII:=X"66";
271
    elsif char='g' then ASCII:=X"67";
272
    elsif char='h' then ASCII:=X"68";
273
    elsif char='i' then ASCII:=X"69";
274
    elsif char='j' then ASCII:=X"6A";
275
    elsif char='k' then ASCII:=X"6B";
276
    elsif char='l' then ASCII:=X"6C";
277
    elsif char='m' then ASCII:=X"6D";
278
    elsif char='n' then ASCII:=X"6E";
279
    elsif char='o' then ASCII:=X"6F";
280
    elsif char='p' then ASCII:=X"70";
281
    elsif char='q' then ASCII:=X"71";
282
    elsif char='r' then ASCII:=X"72";
283
    elsif char='s' then ASCII:=X"73";
284
    elsif char='t' then ASCII:=X"74";
285
    elsif char='u' then ASCII:=X"75";
286
    elsif char='v' then ASCII:=X"76";
287
    elsif char='w' then ASCII:=X"77";
288
    elsif char='x' then ASCII:=X"78";
289
    elsif char='y' then ASCII:=X"79";
290
    elsif char='z' then ASCII:=X"7A";
291
    elsif char='{' then ASCII:=X"7B";
292
  -- elsif char='|' then ASCII:=X"7C";  
293
      -- ASCII := x"00", this character is used as text message end mark
294
    elsif char='}' then ASCII:=X"7D";
295
    elsif char='~' then ASCII:=X"7E";
296
  -- elsif char='<-' then ASCII:=X"7F"; -- non printable character
297
    else ASCII:=X"00";
298
    end if;
299
    return ASCII;
300
  end;
301
  
302
  
303
begin
304
305
  takt_in_sekunden : sekunden_takt
306
  port map
307
  (
308
    clock => clock,
309
    takt  => takt
310
  );
311
  
312
313
314
  taktung : taktgenerator
315
  port map
316
  (
317
    clock           => clock,  -- clock Entity clock = Systemclock
318
    takt              => takt,
319
    sekunden_ziffer0   => lcd_anzeige(0),
320
    sekunden_ziffer1   => lcd_anzeige(1),
321
    minuten_ziffer0   => lcd_anzeige(2),
322
    minuten_ziffer1   => lcd_anzeige(3),
323
    stunden_ziffer0   => lcd_anzeige(4),
324
    stunden_ziffer1   => lcd_anzeige(5)
325
  );
326
  
327
  -- Zur Kontrolle
328
  process (clock)
329
  begin
330
    if rising_edge(clock)
331
    then
332
      -- Nutze die Sekunden zur Ansteuerung der LEDs
333
      led(3 downto 0) <= lcd_anzeige(0);
334
      led(7 downto 4) <= lcd_anzeige(1);
335
    end if;
336
  end process;
337
338
  
339
  process (clock)
340
  begin
341
    if rising_edge(clock)
342
    then
343
       case state is
344
        when power_on =>
345
          case power_on_state is
346
              
347
              ----------------------- Power-On Initialisierung 8-Bit-Modus -----------------
348
                -- Siehe User Guide, Seite 54, Power-On Initialisierung
349
                ---------------------------------------------------------------------------------
350
                  when one =>     -- Warte mindestens 15 ms nach dem Einschalten des Boards
351
                              -- 750.000 Taktzyklen bei 50 MHz
352
                              lcd_enable <= '0';
353
                              lcd_rs <= '0';
354
                              lcd_rw <= '0';
355
                            
356
                              if delay > 0
357
                              then
358
                                delay <= delay - 1;
359
                              else
360
                                     delay <= 12;
361
                                power_on_state <= two;
362
                              end if;
363
                  when two =>      lcd_enable <= '1';
364
                              lcd_rs <= '0';
365
                              lcd_data <= "00110000";
366
                              -- Warte mindestens 230 ns = 12 Taktzyklen bei 50 MHz
367
                              if delay > 0
368
                              then
369
                                delay <= delay - 1;
370
                              else
371
                                delay <= 205000;
372
                                power_on_state <= three;
373
                              end if;
374
                  when three =>      -- Warte midestens 4,1 ms = 205.000 Taktzyklen
375
                              lcd_enable <= '0';
376
                              if delay > 0
377
                              then
378
                                delay <= delay - 1;
379
                              else
380
                                delay <= 12;
381
                                power_on_state <= four;
382
                              end if;
383
                  when four =>      lcd_enable <= '1';
384
                              lcd_rs <= '0';
385
                              lcd_data <= "00110000";
386
                              -- Warte mindestens 230 ns = 12 Taktzyklen bei 50 MHz
387
                              if delay > 0
388
                              then
389
                                delay <= delay - 1;
390
                              else
391
                                delay <= 5000;
392
                                power_on_state <= five;
393
                              end if;
394
                  when five =>    -- Warte mindestens 100 us = 5000 Taktzyklen bei 50 MHz
395
                              lcd_enable <= '0';
396
                              if delay > 0
397
                              then
398
                                delay <= delay - 1;
399
                              else
400
                                delay <= 12;
401
                                power_on_state <= six;
402
                              end if;
403
                  when six =>     lcd_enable <= '1';
404
                              lcd_rs <= '0';
405
                              lcd_data <= "00110000";
406
                              -- Warte mindestens 230 ns = 12 Taktzyklen bei 50 MHz
407
                              if delay > 0
408
                              then
409
                                delay <= delay - 1;
410
                              else
411
                                delay <= 2000;
412
                                power_on_state <= seven;
413
                              end if;
414
                  when seven =>    lcd_enable <= '0';
415
                              -- Warte mindestens 40 us = 2000 Taktzyklen bei 50 MHz
416
                              if delay > 0
417
                              then
418
                                delay <= delay - 1;
419
                              else
420
                                state <= configure;
421
                              end if;
422
                  
423
              end case;
424
      
425
              
426
        when configure =>
427
          
428
            case configuration_state is
429
                  ----------------------- Display Configuration ------------------
430
                  -- Siehe User Guide, Seite 54, Display Configuration
431
                  ----------------------------------------------------------------
432
                  when ten_a =>      -- Function Set Command
433
                              lcd_enable <= '1';
434
                              lcd_rs <= '0';
435
                              lcd_rw <= '0';
436
                              lcd_data <= "00101000";
437
                              delay <= 2000;
438
                              configuration_state <= ten_b;
439
                  when ten_b =>    if delay > 0
440
                              then
441
                                delay <= delay - 1;
442
                              else
443
                                configuration_state <= eleven_a;
444
                              end if;
445
                  when eleven_a =>  -- Entry Mode Set Command (Increment the address pointer)
446
                              lcd_enable <= '1';
447
                              lcd_rs <= '0';
448
                              lcd_rw <= '0';
449
                              lcd_data <= "00000110";
450
                              delay <= 2000;
451
                              configuration_state <= eleven_b;
452
                  when eleven_b =>  if delay > 0
453
                              then
454
                                delay <= delay - 1;
455
                              else
456
                                configuration_state <= twelf_a;
457
                              end if;
458
                  when twelf_a =>  -- Display On (Disable cursor and blinking)
459
                              lcd_enable <= '1';
460
                              lcd_rs <= '0';
461
                              lcd_rw <= '0';
462
                              lcd_data <= "00001100";
463
                              delay <= 2000;
464
                              configuration_state <= twelf_b;
465
                  when twelf_b =>   if delay > 0
466
                              then
467
                                delay <= delay - 1;
468
                              else
469
                                configuration_state <= thirteen;
470
                              end if;
471
                  when thirteen =>  -- Clear Display Command
472
                              lcd_enable <= '1';
473
                              lcd_rs <= '0';
474
                              lcd_rw <= '0';
475
                              lcd_data <= "00000001";
476
                              delay <= 82000;
477
                              configuration_state <= fourteen;
478
                  when fourteen =>  -- Warte mindestens 1,64 ms = 82.000 Taktzyklen bei 50 MHz
479
                              lcd_enable <= '0';
480
                              if delay > 0
481
                              then
482
                                delay <= delay - 1;
483
                              else
484
                                state <= output;
485
                              end if;
486
            end case;
487
            
488
            
489
        when output =>
490
          
491
              case output_state is
492
                             
493
                  -------------------- Writing Data 8-Bit-Modus --------------------------
494
                  -- Siehe User Guide, Seite 54, Writing Data to the Display
495
                  ----------------- Von links nach rechts Schreiben ----------------------
496
                  when fifteen_a =>  -- Set DD RAM Address = 00
497
                              lcd_enable <= '1';
498
                              lcd_rs <= '0';
499
                              lcd_rw <= '0';
500
                              lcd_data(7) <= '1';
501
                              lcd_data(6 downto 0) <= "0000000";
502
                              delay <= 2000;
503
                              output_state <= fifteen_b;
504
                  when fifteen_b => -- Warte mindestens 40 us = 2.000 Taktzyklen by 50 MHz
505
                              lcd_enable <= '0';
506
                              if delay > 0
507
                              then
508
                                delay <= delay - 1;
509
                              else
510
                                output_state <= one_a;
511
                              end if;
512
                  ----------------- Schreibe "Time" ---------------------------
513
                  ------------------ T -----------------------
514
                  when one_a =>    lcd_enable <= '1';
515
                              lcd_rs <= '1';
516
                              lcd_rw <= '0';
517
                              lcd_data(7 downto 4) <= "0101";
518
                              lcd_data(3 downto 0) <= "0100";
519
                              delay <= 2000;
520
                              output_state <= one_b;
521
                  when one_b =>     -- Warte mindestens 40 us = 2.000 Taktzyklen by 50 MHz
522
                              lcd_enable <= '0';
523
                              if delay > 0
524
                              then
525
                                delay <= delay - 1;
526
                              else
527
                                output_state <= one_c;
528
                              end if;
529
                  ------------------ I --------------------------------
530
                  when one_c =>    lcd_enable <= '1';
531
                              lcd_rs <= '1';
532
                              lcd_rw <= '0';
533
                              lcd_data(7 downto 4) <= "0100";
534
                              lcd_data(3 downto 0) <= "1001";
535
                              delay <= 2000;
536
                              output_state <= one_d;
537
                  when one_d =>     -- Warte mindestens 40 us = 2.000 Taktzyklen by 50 MHz
538
                              lcd_enable <= '0';
539
                              if delay > 0
540
                              then
541
                                delay <= delay - 1;
542
                              else
543
                                output_state <= one_e;
544
                              end if;
545
                  ----------------- M ----------------------
546
                  when one_e =>    lcd_enable <= '1';
547
                              lcd_rs <= '1';
548
                              lcd_rw <= '0';
549
                              lcd_data(7 downto 4) <= "0100";
550
                              lcd_data(3 downto 0) <= "1101";
551
                              delay <= 2000;
552
                              output_state <= one_f;
553
                  when one_f =>     -- Warte mindestens 40 us = 2.000 Taktzyklen by 50 MHz
554
                              lcd_enable <= '0';
555
                              if delay > 0
556
                              then
557
                                delay <= delay - 1;
558
                              else
559
                                output_state <= one_g;
560
                              end if;
561
                  ----------------- E ----------------------
562
                  when one_g =>    lcd_enable <= '1';
563
                              lcd_rs <= '1';
564
                              lcd_rw <= '0';
565
                              lcd_data(7 downto 4) <= "0100";
566
                              lcd_data(3 downto 0) <= "0101";
567
                              delay <= 2000;
568
                              output_state <= one_h;
569
                  when one_h =>     -- Warte mindestens 40 us = 2.000 Taktzyklen by 50 MHz
570
                              lcd_enable <= '0';
571
                              if delay > 0
572
                              then
573
                                delay <= delay - 1;
574
                              else
575
                                output_state <= one_i;
576
                              end if;
577
                  ---------- Schreibe Leerzeichen -------------------
578
                  when one_i =>    lcd_enable <= '1';
579
                              lcd_rs <= '1';
580
                              lcd_rw <= '0';
581
                              lcd_data(7 downto 4) <= "0010";
582
                              lcd_data(3 downto 0) <= "0000";
583
                              delay <= 2000;
584
                              output_state <= one_j;
585
                  when one_j =>     -- Warte mindestens 40 us = 2.000 Taktzyklen by 50 MHz
586
                              lcd_enable <= '0';
587
                              if delay > 0
588
                              then
589
                                delay <= delay - 1;
590
                              else
591
                                output_state <= sixteen_a;
592
                              end if;
593
                  ----------------- Schreibe Stunden --------------------------
594
                  ----------------- Schreibe Zehner-Stelle --------------------
595
                  when sixteen_a =>  -- Write Data to DD RAM
596
                              lcd_enable <= '1';
597
                              lcd_rs <= '1';
598
                              lcd_rw <= '0';
599
                              lcd_data(7 downto 4) <= "0011";
600
                              lcd_data(3 downto 0) <= lcd_anzeige(5);
601
                              delay <= 2000;
602
                              output_state <= sixteen_b;
603
                  when sixteen_b => -- Warte mindestens 40 us = 2.000 Taktzyklen by 50 MHz
604
                              lcd_enable <= '0';
605
                              if delay > 0
606
                              then
607
                                delay <= delay - 1;
608
                              else
609
                                output_state <= seventeen_a;
610
                              end if;
611
                  ----------------- Schreibe Einser-Stelle ----------------------------
612
                  when seventeen_a =>  -- Write Data to DD RAM
613
                              lcd_enable <= '1';
614
                              lcd_rs <= '1';
615
                              lcd_rw <= '0';
616
                              lcd_data(7 downto 4) <= "0011";
617
                              lcd_data(3 downto 0) <= lcd_anzeige(4);
618
                              delay <= 2000;
619
                              output_state <= seventeen_b;
620
                  when seventeen_b => -- Warte mindestens 40 us = 2.000 Taktzyklen by 50 MHz
621
                              lcd_enable <= '0';
622
                              if delay > 0
623
                              then
624
                                delay <= delay - 1;
625
                              else
626
                                output_state <= eightteen_a;
627
                              end if;
628
                  ----------------- Schreibe Doppelpunkt ---------------------
629
                  when eightteen_a => -- Write Data to DD RAM
630
                              lcd_enable <= '1';
631
                              lcd_rs <= '1';
632
                              lcd_rw <= '0';
633
                              lcd_data(7 downto 4) <= "0011";
634
                              lcd_data(3 downto 0) <= "1010";
635
                              delay <= 2000;
636
                              output_state <= eightteen_b;
637
                  when eightteen_b =>  -- Warte mindestens 40 us = 2.000 Taktzyklen by 50 MHz
638
                              lcd_enable <= '0';
639
                              if delay > 0
640
                              then
641
                                delay <= delay - 1;
642
                              else
643
                                output_state <= nineteen_a;
644
                              end if;
645
                  ----------------- Schreibe Minuten -------------------------
646
                  when nineteen_a =>  -- Write Data to DD RAM
647
                              lcd_enable <= '1';
648
                              lcd_rs <= '1';
649
                              lcd_rw <= '0';
650
                              lcd_data(7 downto 4) <= "0011";
651
                              lcd_data(3 downto 0) <= lcd_anzeige(3);
652
                              delay <= 2000;
653
                              output_state <= nineteen_b;
654
                  when nineteen_b =>  -- Warte mindestens 40 us = 2.000 Taktzyklen by 50 MHz
655
                              lcd_enable <= '0';
656
                              if delay > 0
657
                              then
658
                                delay <= delay - 1;
659
                              else
660
                                output_state <= twenty_a;
661
                              end if;
662
                  when twenty_a =>   -- Write Data to DD RAM
663
                              lcd_enable <= '1';
664
                              lcd_rs <= '1';
665
                              lcd_rw <= '0';
666
                              lcd_data(7 downto 4) <= "0011";
667
                              lcd_data(3 downto 0) <= lcd_anzeige(2);
668
                              delay <= 2000;
669
                              output_state <= twenty_b;
670
                  when twenty_b =>  -- Warte mindestens 40 us = 2.000 Taktzyklen by 50 MHz
671
                              lcd_enable <= '0';
672
                              if delay > 0
673
                              then
674
                                delay <= delay - 1;
675
                              else
676
                                output_state <= twenty_one_a;
677
                              end if;
678
                  ----------------- Schreibe Doppelpunkt -------------------            
679
                  when twenty_one_a =>-- Write Data to DD RAM
680
                              lcd_enable <= '1';
681
                              lcd_rs <= '1';
682
                              lcd_rw <= '0';
683
                              lcd_data(7 downto 4) <= "0011";
684
                              lcd_data(3 downto 0) <= "1010";
685
                              delay <= 2000;
686
                              output_state <= twenty_one_b;  
687
                  when twenty_one_b =>  -- Warte mindestens 40 us = 2.000 Taktzyklen by 50 MHz
688
                              lcd_enable <= '0';
689
                              if delay > 0
690
                              then
691
                                delay <= delay - 1;
692
                              else
693
                                output_state <= twenty_two_a;
694
                              end if;
695
                  ----------------- Schreibe Sekunden ----------------------
696
                  when twenty_two_a =>-- Write Data to DD RAM
697
                              lcd_enable <= '1';
698
                              lcd_rs <= '1';
699
                              lcd_rw <= '0';
700
                              lcd_data(7 downto 4) <= "0011";
701
                              lcd_data(3 downto 0) <= lcd_anzeige(1);
702
                              delay <= 2000;
703
                              output_state <= twenty_two_b;
704
                  when twenty_two_b =>  -- Warte mindestens 40 us = 2.000 Taktzyklen by 50 MHz
705
                              lcd_enable <= '0';
706
                              if delay > 0
707
                              then
708
                                delay <= delay - 1;
709
                              else
710
                                output_state <= twenty_three;
711
                              end if;
712
                  when twenty_three=>-- Write Data to DD RAM
713
                              lcd_enable <= '1';
714
                              lcd_rs <= '1';
715
                              lcd_rw <= '0';
716
                              lcd_data(7 downto 4) <= "0011";
717
                              lcd_data(3 downto 0) <= lcd_anzeige(0);
718
                              delay <= 10000000;
719
                              output_state <= twenty_four;
720
                  when twenty_four =>  lcd_enable <= '0';
721
                              if delay > 0
722
                              then
723
                                delay <= delay - 1;
724
                              else
725
                                output_state <= fifteen_a;
726
                              end if;
727
                                                        
728
--                                takt_alt <= takt;
729
--                                -- Positive Flanke
730
--                                if takt_alt = '0' and takt = '1'
731
--                                then                                
732
--                                  output_state <= fifteen_a;
733
--                                end if;
734
                      
735
          end case; -- output_state
736
      end case; -- state
737
    end if;
738
  end process;
739
  
740
end anzeige_rtl;