Forum: FPGA, VHDL & Co. FPGA - Clear LCD Display


von Daniel (Gast)


Lesenswert?

Hallo,

ich bin ein blutiger Anfänger im Programmieren, vor allem beim Verilog / 
HDL.
Ich arbeite derzeit mit einem EBlocks2 Board und dem LCD Combo Board 
BL0114.

Ich habe auch einen Code geschrieben der soweit funktioniert, dass ein 
Zeichen ausgegeben wird, sofern ein Knopf gedrückt wird. Jedoch will das 
Clearen des Displays nicht funktionieren. Dafür setze ich LCD_RS auf 0 
damit ein Befehl geladen wird und lade dann den Wert 8'b000000001 ein.

1
always @ (posedge clk) begin
2
    count1 <= count1 + 1;
3
    case (state) 
4
      STATE00: begin
5
        if(TasterR) begin
6
          ResetF <= 1;
7
          LCD_RS <= 0;
8
          state <= STATE01;
9
        end
10
        else if (TasterN) begin
11
          ResetF <= 0;
12
          LCD_RS <= 1;
13
          state <= STATE01;
14
        end
15
      end
16
      
17
      STATE01: begin //LCD hat nur 4 Datenpins
18
        if(count1 == 11'h1 & !ResetF) begin
19
          RxD_data <= 4'b0010; //Erster Teil für das Zeichen "$"
20
          state <= STATE02;
21
        end
22
        else if(count1 == 11'h1 & ResetF) begin
23
          RxD_data <= 4'b0001; // Erster Teil für das clearen des Displays
24
          state <= STATE02;
25
        end
26
      end
27
    
28
      STATE02: begin
29
        if(count1 == 11'h32) begin
30
          LCD_E <= 1;      
31
          state <= STATE03;
32
        end
33
      end
34
      
35
      STATE03: begin
36
        if(count1 == 11'h64) begin      
37
          LCD_E <=0;
38
          state <= STATE04;
39
        end
40
      end
41
42
      STATE04: begin
43
        if(count1 == 11'h96 & !ResetF) begin      
44
          RxD_data <= 4'b0100; //Zweiter Teil für das Zeichen "$"
45
          state <= STATE05;
46
        end
47
        else if(count1 == 11'h96 & ResetF) begin
48
          RxD_data <= 4'b0000; // Zweiter Teil für das clearen des Displays
49
          state <= STATE05;
50
        end
51
      end
52
      
53
      STATE05: begin
54
        if(count1 == 11'hC8) begin    
55
          LCD_E <= 1;
56
          state <= STATE06;
57
        end
58
      end
59
      
60
      STATE06: begin
61
        if(count1 == 11'hFA) begin  
62
          LCD_E <= 0;
63
          state <= STATE07;
64
        end
65
      end
66
      
67
      STATE07: begin
68
        if(count1 == 11'h4E2) begin
69
          RxD_data <= 4'b0000;
70
          state <= STATE08;
71
        end  
72
      end
73
      
74
      STATE08: state <= STATE00;
75
      
76
      default: ;
77
  endcase
78
end
79
endmodule

Hat hier jemand einen Tipp für mich? Das wäre wirklich super!

Viele Grüße,
Daniel

von Jens (Gast)


Lesenswert?

In deinem State00 hast du zwei if Verzweigungen für die beiden Taster.
Der else Zweig der Abfragen ist aber nicht angegeben.
Das führt bei der Synthese zu Problemen. Dass dein Signal RS wirklich so 
gesetzt ist, ist meiner Meinung nach nicht sicher gestellt.
Hast du das mit dem Oszi mal angeschaut, dass auch alle Signale passen.
Was sagt dein Simulator dazu?

Gib mal die fehlenden Zweige an und versuche es nochmal.

Grüße, Jens

von Daniel (Gast)


Lesenswert?

Vielen Dank schonmal für die Rückmeldung! Das hatte davor schon 
funktioniert. Aber habe es sicherheitshalber verbessert.

Simulation hat funktioniert wie erwartet.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.