www.mikrocontroller.net

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


Autor: Florian Z. (floz)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,
um meinen Thread von letzter Woche nochmal aufzugreifen, also vielleicht 
bin ich ja echt doof (kann ich eigentlich ausschließen! ;-)) aber mein 
LCD Display geht immer noch nicht, kein Lebenszeichen und langsam nervt 
es mich...
Ich habe zuerst versucht den Code von Lothar zum Laufen zu bringen, aber 
das ging so gar nicht, deshalb habe ich mich dann dafür entschieden 
einen eigenen (auf Basis von Lothars) zu schreiben, aber auch dieser 
bleibt erfolglos.
Kann mir bitte Einer/Eine helfen? Wäre total nett, weil ich nämlich 
langsam Verzweifel.
Im Anhang meinen Code..vielleicht nützt es ja etwas,
schon mal danke.

Gruß

Flo

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber holla:
> if rising_edge(clk) and clk = '1' then
Was ist denn das?
Sieh dir mal die Funktion rising_edge() im Quelltext an.


Was sagt denn die Simulation?
Klappt es dort?
Gib es zu: du hast das nicht simuliert!
Denn...
> einen eigenen (auf Basis von Lothars) zu schreiben
Das ist eine mächtig lange Sensitiv-Liste:
FSM: process ( zaehler1, zaehler2, zaehler3,zaehler4 ,reset, current_state, clk )
und abgesehen vom clk sind die meisten Signale unnötig...

Dafür fehlt durch die ungünstige Vermischung von getaktetem und 
kombinatorischem Prozess ein Signal
FSM: process ( zaehler1, zaehler2, zaehler3,zaehler4 ,reset, current_state, clk )  -- viel zuviel... und doch zu wenig: zaehler_gesamt fehlt!!!
variable Next_state : state_typ;
begin
   if rising_edge(clk) and clk = '1' then -- getaktet
   :
   end if;
   if zaehler_gesamt = 53999 then
      current_state <= next_state after 20ns; -- kombinatorisch, aber nicht in Sensitivliste
   end if;
end process;

Sowas lässt sich nicht synthetisieren:
      current_state <= next_state after 20ns; -- kombinatorisch
Denn es gibt keine einstellbaren Verzögerungsgleider in einem FPGA.


Wozu das Herumjonglieren mit Variablen für deine Zustände?
  
variable Next_state : state_typ;

begin
  if rising_edge(clk) and clk = '1' then 
    next_state := current_state; 
    case current_state is

>  also vielleicht bin ich ja echt doof (kann ich eigentlich ausschließen!
>  ;-))
Muss nicht unbedingt sein... ;-)
Aber: hast du schonmal die einfacheren Geschichten wie z.B. ein 
komplexeres Lauflicht durcherxerziert und verstanden?

Die Simulation ist der Debugger der Hardware. Du wirst hier ohne 
Simulation garantiert nur sehr sehr beschwerlich zum Erfolg kommen...

Autor: Florian Z. (floz)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vorneweg, doch ich habe das Simuliert, es laufen auch alle States durch 
und es werden Daten aus dem Speicher gelesen und 
geschrieben....faszienierend nicht war?!

So zu deinen Anmerkungen:

Was ist mit meiner rising_edge Funktion, bzw welche meinst du denn? Die 
oben mit den Zählern oder die in der State-Machine??? Aber beide 
arbeiten.
Dass Sachen mit 20ns nicht Synthesierbar sind, ist mir bewusst, aber es 
war so ein Verzweiflungsding, um es mal zu testen.
Das Herumjongliere mit den Variablen, habe ich bei meinem VHDL Prof zum 
Thema FSM abgeschrieben.
Ja einfachere Projekte, Lauflicht, auch schon einen Drehgeber mit 
Links/rechts erkennung habe ich gemacht, auch schon einen Sigma-Delta 
Modulator 1. Ordung habe ich lauffähig bekommen, also dachte ich (und 
die Arbeit) jetzt ist der Display dran.

Anbei sende ich mein Simulationsergebnis, zum Beweis, dass ich wirklich 
simuliere ;-)
Danke schonmal wieder für die Hilfe...aber es ist ja noch nicht ganz 
durchgestanden ;-)

Gruß

Florian

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Denn es gibt keine einstellbaren Verzögerungsglieder in einem FPGA.
Aha ;-)
Und was sind die IODELAYs im Virtex 4 ?!?

Duke

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian Z. schrieb:
> meinem VHDL Prof zum
> Thema FSM abgeschrieben
Ganz gefährlich.

Das was ich an der Hochschule zum Thema VHDL hatte, habe ich kurz in der 
Praxis probiert, um dann festzustellen, das davon so gut wie nix zu 
synthetisieren geht.

Duke

Autor: Florian Z. (floz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja,
das habe ich auch schon festgestellt, dass die Hochschulen, ein Leben im 
Simulator haben, aber dennoch kann man ja die eine oder andere Zeile 
abschreiben, um einen richtigen start zu finden, wenn das alles ist an 
wissen das man zur verfügung hat muss man damit das Arbeiten beginnen.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian Z. schrieb:
> vorneweg, doch ich habe das Simuliert, es laufen auch alle States durch
> und es werden Daten aus dem Speicher gelesen und
> geschrieben....faszienierend nicht war?!
Ja.
Denn deine Simultaion ist falsch, weil deine Sensitivliste falsch ist.
Du hast aber "Glück", dass es trotzdem funktioniert (in der Simulation), 
denn der Prozess wird ja ständig durch den clk aufgerufen. Nur bekommst 
du auf dem Signal current_state dadurch einen (scheinbaren) Takt 
Latency...

> Das Herumjongliere mit den Variablen, habe ich bei meinem VHDL Prof zum
> Thema FSM abgeschrieben.
Böse (und vor allem unnötige) Sache, das...
In einer 1-Prozess-FSM wird der Folgezustand direkt auf das 
Zustandssignal zugewiesen. Da braucht es keine "Zwischenvariable".

> Was ist mit meiner rising_edge Funktion
Wenn du mal nachsiehst, was in der rising_edge() drinsteht, dann findest 
du sofort heraus, dass dort die Abfrage nach "and clk='1'" schon 
integriert ist. Such dort im Package std_logic_1164 mal nach der 
Funktion rising_edge(): 
http://optimal.vlsi.uwaterloo.ca/NEW/std_logic_1164_vhd.htm

> Duke Scarring schrieb:
>> Lothar Miller schrieb:
>>> Denn es gibt keine einstellbaren Verzögerungsglieder in einem FPGA.
>> Aha ;-)
>> Und was sind die IODELAYs im Virtex 4 ?!?
In einem FPGA... ;-)
Die IO-Zellen zählen für mich schon wegen der schlechten Zugänglichkeit 
und der schlechten Skalierbarkeit zur Aussenwelt. Zudem haben wir es 
hier mit einem S3 zu tun...

Autor: Florian Z. (floz)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

so ich habe nun mal meinen Code abgeändert, danke für den tip mit der 
rising_edge, dass wusste ich noch nicht, hier also nun der Abgeänderte 
Code und die neue Simulations, wenn einer noch was sieht, oder der 
Meinung ist, nun müsste es gehen nur Posten,
danke schon mal für alle die Hilfe, Tips, Tricks

Autor: Florian Z. (floz)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch die Simulation, die wollte gerade nicht ;-)

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist jetzt (ohne Witz) eine asynchrone FSM.
Die funktioniert nur in der Simulation...

Denn die Sensitivliste ist schon wieder unvollständig:
    when s3 => if zaehler4 = 6 then   
                    ort <=  ort + 1 ;
ort fehlt in der Liste....

Es bringt aber nichts, das reinzumachen, denn das hier ist die 
klassische kombinatorische Schleife: Sobald im Zustand s3 der 
zaehler4 gleich 6 ist, zählt ort mit irrsinniger Geschwindigkeit 
hoch:
http://www.lothar-miller.de/s9y/categories/36-Komb...
Lustigerweise merkt das die Synthese nicht mal unbedingt...

Autor: Florian Z. (floz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Lothar,
macht er aber laut meiner Simulation nicht, schau dir mal das Bild an...
Ich habe immer bei S4 einmal datenlesen, also klappt das doch oder habe 
ich da was falsch verstanden?
Also vom Abruf der Hex-Zahlen passt es genau zum 
Initialisierungsbeispiel meines LCDs.
Wie löse ich denn das Problem, wenn es eines ist, mit der 
Kombinatorischen Schleifen? Soll ich jetzt wieder die Clock dazu 
schalten, damit wird es wenigstens wieder Synchron, oder?
Danke für all die Hilfe und Erklärungen

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian Z. schrieb:
> macht er aber laut meiner Simulation nicht
Sag ich doch. Die Simulation ist falsch, weil die Sensitivliste 
unvollständig ist: ort fehlt.

Zur vereinfachten Darstellung:
signal cnt : unsigned (3 downto 0) := "0000";
process (clk) begin
  cnt <= cnt+1;
end process;
Simulier das mal: es sieht aus wie ein Zähler, der mit jeder 
Taktflanke hochgezählt wird.

Florian Z. schrieb:
> Kombinatorischen Schleifen? Soll ich jetzt wieder die Clock dazu
> schalten, damit wird es wenigstens wieder Synchron, oder?
Ja. Aber dann brauchst du nur clk in der Senslist...

Autor: Florian Z. (floz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also alles raus aus der Sensitivlist und clk rein, dann wirds was mit 
dem Display, verstehe ich das dann so richtig?
Und als Abfrage mach ich das  " if rising_edge (clk) then
                                      -- dann die states--"

na da bin ich ja mal gespannt ob das vor meiner Mittagspause noch was 
wird.
schon mal danke und ich melde mich wieder!

Autor: Florian Z. (floz)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

also entweder mag mich mein Display einfach nicht, oder ich mach noch 
was grundlegendes Falsch ;-)
Also hier nochmal der Überarbeitete und abgeänderte Quellcode...
Vielleicht kann mir noch jemand einen Tip geben, oder ach langsam weiß 
ich nicht mehr weiter.
Danke schon mal an alle, die mir helfen...
Flo

Autor: Duke Scarring (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das nächste Mal bitte die Testbench gleich mitliefern.

Wie schnell ist denn Dein Systemtakt?
Hast Du ein Datenblatt/Timingdiagramm von dem Displaychip?

Duke

Autor: Florian Z. (floz)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Morgen Zusammen,
nach einer Kurzen nacht, aber ohne erfolge bin ich wieder auf der 
Arbeit,
klar habe ich Datenblätter für den Display, sind beide im Anhang.
Beim Dokument EA_dog-m finde ich nur die Seiten 6 und 7 interessant, ich 
habe übrigens den EA DOGM162 und im Dokument st7036 ist die Seite 54, 
das ist die mit dem Timing interessant...in diesem Dokument sind auch 
ein C-Programmierbeispiel, aber ich kann ja nicht "wait 20ns " 
schreiben...
ok, ich hoffe es hilft, weiter.
Ach ja mein Systemtakt sind 50MHz.
Danke schon mal wieder vorneweg für eure tolle Hilfe, ich hoffe ich 
bekomm das ding demnächst zum laufen, sonst trete ich es in die Tonne.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian Z. schrieb:
> ich hoffe ich bekomm das ding demnächst zum laufen,
Warum nimmst du nicht meine Beschreibung aus dem 
Beitrag "Re: EA DOG-M initialisieren" und machst die 
4-Bit-Ansteuerung einfach raus?

Ich würde einfach mal das ändern:
entity LCD_Controller is
    Port ( -- Signale an LCD
           :
           lcd_db : out  STD_LOGIC_VECTOR(7 downto 0);
:
:
type lcdbus_t is (IDLE, LOADDATA, BUSY);
signal lcdbus : lcdbus_t := BUSY;
:
:
   -- Buszugriff
   process begin
      wait until rising_edge(clk);
      case lcdbus is
         when IDLE =>
                     lcdidle <= '1';
                     lcd_e   <= '0';
                     if (lcdstart='1') then
                        lcdidle <= '0';
                        lcdbus <= LOADDATA;
                     end if;
                    
         when LOADDATA =>    
                     lcd_db <= lcddata;
                     lcd_rs <= lcdrs;
                     pulse_e <= 0;
                     lcdbus  <= BUSY;
                     waitbusy <= 0;
                     
          when BUSY =>
                     if(pulse_e=63 and oneus='1') then 
                        if (waitbusy<shorttime) then 
                           waitbusy <= waitbusy+1; 
                        else
                           lcdbus <= IDLE;
                        end if;
                     end if;
      end case;  
:

BTW: Welche Leitungen vom Display hast du denn alle angeschlossen?

Autor: Florian Z. (floz)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
also die Änderungen, die du mir da jetzt beschrieben hast, hatte ich bis 
auf ein paar kleinigkeiten schon versucht, aber mein Display macht so 
gar nichts... es leuchtet Grün ;-) , dass ist schon alles, aber ich 
hoffe, dass da noch mehr geht.
Auch mit deinen Änderungen passiert da nichts.
Wie ich es angeschlossen habe, so wie es auf seite 4 im EA_dog-m 
Datenblatt  für 8 Bit 3,3 V erklärt ist. Und Anbei sende ich dir dann 
meinen Schaltplan, wie es auf meinem Board verbaut ist, da liegt nämlich 
noch ein bisschen mehr rum... ;-) Ist ein Kleines Projekt von mir.
Aber es will nicht und ich bekomm das kotzen...
danke für eure tolle Hilfe, ich hoffe ich bekomm das ding demnächst zum 
laufen.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian Z. schrieb:
> Und Anbei sende ich dir dann
> meinen Schaltplan, wie es auf meinem Board verbaut ist,
Derzeit hast du über R18 und R21 einen Kurzschluss zwischen 3V3 und 
GND... :-o

Welchen Pegel hat PSB?
Welchen hat Reset?

Autor: Florian Z. (floz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Lothar,
also der Kurzschluss bleibt aus,weil R21 nicht bestückt ist, also klappt 
das doch, zu den Pegeln Reset = 3,3 V und PSB hat 2,4 V ...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian Z. schrieb:
> und PSB hat 2,4 V ...
Das sollte laut DB aber ziemlich genau 3,3V sein.
Denn dorthin gehört für den 8-Bit Modus der Pin angeschlossen...  :-o

Autor: Florian Z. (floz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann werd ich mir jetzt mal die Lötstellen nochmal genau anschauen, 
nicht dass da eine kalte dabei ist...ich hoffe es ist da was 
mechanisches, sonst weiß ich nicht mehr weiter.

Autor: Florian Z. (floz)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So alle Pins nochmal nachgelötet aber es bleiben 2,5V genau so wie an 
VDD,
da stimmt wohl was mit meiner 3,3V Versorgung nicht aber ich finde den 
Fehler nicht, hab gerade die ganze Platine abgesucht, im Anhang sende 
ich dir mal die ganze Platine mit, wenn du ein Target hast, kann ich es 
dir auch als Target file geben, vielleicht findest du ja den Fehler.
Ein dickes Dankeschön!

Autor: Duke Scarring (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Also viel passt da ja nicht zusammen:

1. Es fehlen die 40 ms Pause nach dem Power on 
(st7036_init_by_instruction.png)
  (ist evtl. zu verschmerzen, weil der FPGA auch seine Zeit braucht, 
aber sicher ist sicher...)

2. Es wiederholt sich die Initialiierungs- und Ausgabesequenz alle Nase 
lang (laut Simulation)

3. Man erkennt (leider nicht sehr gut) im Timing-Diagramm 
(st7036_timing_diagram.png) das E(nable) ein wichitges Signal ist. Vor 
der steigenden Flanke müssen RS und R/W gesetzt werden und vor der 
fallenden Flanke auch entsprechend die Daten. Bei Dir wackelt E in der 
Simulation gar nicht und die Daten werden auch viel später erst gesetzt.
Siehe auch die Pinbeschreibung (st7036_pin_functions.png).

4. Für die Initialisirung müssen RS=0 und R/W=0 gesetzt werden 
(ea_dogm163_init_3_3V.png). Das stimmt bei Dir nicht (simulation.png)


Das einzige was zu stimmen scheint ist die Initialisierungssequenz 
(ea_dogm163_init_3_3V.png), aber ohne Enable wird Dein Display nicht 
viel machen...

Duke

Autor: Florian Z. (floz)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich dachte man muss das mit dem Timing nicht so genau nehmen weil ja nur 
min. Werte angegeben sind, und ich bin bei mir überall in den min werten 
drinnen, ok, das mit dem e(nable) hab ich irgendwie übersehen. Die 40ms 
Pause für den Controller brauche ich nicht, da das display, auf einem 
Externen Board sitzt, und es dort lange genug Spannung bekommt.
Ich habe noch ein wenig an meinem Code geschrieben, kann mal noch jemand 
drüber schauen, besser bekomm ich die Timings nicht hin, ich bin echt am 
verzweifeln.
Danke schon mal für eure tolle Unterstützung!

Autor: Duke Scarring (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Florian Z. schrieb:
> Timing nicht so genau nehmen

Naja. Kann man als Bastler machen. Aber vielleicht willst Du ja mal 
Ingenieur werden?!

Also nochmal langsam: Du hast 50 MHz Systemtakt, also 20 ns Zykluszeit.

Enable muß (lt. Seite 54) tEWH = 200 ns = 10 Takte high sein und tEWL = 
150 ns = 8 Takte low sein.
Ob Du Schreiben oder Lesen (R/W) willst und welches Register (RS) muss 
tAW6 = 20 ns = 1 Takt vor der steigenden Flange von Enable gesetzt 
werden.
Die zu schreibenden Daten müssen tDS6 = 100 ns = 5 Takte vor der 
fallenden Flanke von Enable anliegen. Da Enable ja 10 Takte high sein 
muß, kannst Du die Daten auch gleich mit RS und R/W ausgeben, einen Takt 
warten und Enable für 10 Takte hochziehen.

Ich hab keine Ahnung, was Du in Deinem Code vermurkst hast, aber ich 
habe mal ein paar Timing-Checks in die Testbench eingebaut. (@all: 
Verbesserungsvorschläge um das eleganter/übersichtlicher zu schreiben 
sind gerne willkommen.)

Vielleicht hilft Dir das weiter.

Duke

Autor: Florian Z. (floz)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
so ich habe nun mal alle Timings überarbeitet und sie alle angepasst,
weil ich ja Ingenieur werden will ;-)
Jetzt sieht es in der Simulation ganz gut aus, aber leider nicht auf 
meiner Hardware, die Leuchtet nämlich immer noch nur grün!
Kann nochmal bitte jemand reinschauen, ob er/sie noch was findet.
Danke für die tolle Hilfe.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian Z. schrieb:
> Kann nochmal bitte jemand reinschauen, ob er/sie noch was findet.
Funktioniert deine Hardware?
Hast du die Sache mit den 3,3V == 2,4V schon erledigt?

Autor: Duke Scarring (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab die Testbench nochmal erweitert. Jetzt sieht man, ob und wohin 
geschrieben/gelesen wird:
# ** Note: write       to instruction register: 84 (T)
#    Time: 11880100 ns  Iteration: 2  Instance: /lcd_daten_tb
# ** Note: write       to instruction register: 69 (E)
#    Time: 12959920 ns  Iteration: 2  Instance: /lcd_daten_tb
# ** Note: write       to instruction register: 83 (S)
#    Time: 14040160 ns  Iteration: 2  Instance: /lcd_daten_tb
# ** Note: write       to instruction register: 84 (T)
#    Time: 15119980 ns  Iteration: 2  Instance: /lcd_daten_tb

Wenn Du "TEST" ins Instruction- statt ins Datenregister schreibst, ist 
das sicher auch nicht sehr hilfreich.

Duke

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achja: Warum veränderst Du die Breite der RS und R/W-Impulse? Solltest 
Di nicht eher die Wartezeiten zwischen den Zugriffen (lt. Datenblatt) 
variieren?

DUke

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian Z. schrieb:
> so ich habe nun mal alle Timings überarbeitet und sie alle angepasst,
> weil ich ja Ingenieur werden will ;-)
Ich bin da (als fertiger Ing.) nicht so streng mit den Timings. Denn ich 
würde gefühlt erst die Daten und die Steuersignale stabil anlegen, und 
dann den Enable-Puls bringen. Denn es tut garantiert nicht weh, wenn 
die Setupzeit tDS6 länger ist...

Und den Chip-Select CSB könntest du doch auch dauernd auf low lassen...

Autor: Florian Z. (floz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So Hallo,

also ich habe die Hardware nochmal durchgeschaut, und man kann ihn auch 
mit den 2,5 betreiben, weil ich finde beim besten willen nicht den Punkt 
an dem die Spannung abfällt. Aber es sollte trotzdem Funktionieren.
Weiter zu den Timings, soll ich jetzt weiter an der Perfektion arbeiten 
oder einfach alle Signale passend anstehen lassen und dann Enable auf 1 
setzen, also quasi
R/W auf 1
RS auf 0
CSB auf 0
Daten da
und danach Enable auf 1
oder das Timing wie es im Handbuch steht.
Wer meint was? Ich hättte jetzt einfach nur gerne einen laufenden 
Display, damit da mal was geht und ich ein Erfolgserlebnis habe...
Danke für die Hilfe

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian Z. schrieb:
> Aber es sollte trotzdem Funktionieren.
Wenn du nicht mal sicher bist, dass deine Hardware i.O. ist, dann suchst 
du derzeit an der falschen Stelle. Aus deinem Schaltplan geht klar 
hervor, dass über diese beiden Widerstände R18 oder R21 entweder 0V oder 
3,3V an den Pin angelegt werden. R21 ist nicht bestückt. Wenn also 
logischerweise R18 bestückt ist, und am RSB nur 3,3V sind, passt schon 
deine Versorgungsspannung nicht.

Oder: mir schwant Übles... Ist R18 etwa auch nicht bestückt? Und RSB 
daher einfach offen?

Autor: Florian Z. (floz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, da kann ich dich beruhigen,
r18 ist bestückt. Aber ich mach mich jetzt nochmal mechanisch auf die 
suche nach einem Fehler und melde mich wieder, wenn ich weiß, dass die 
Hardware 100% geht.
Danke aber für all euere Hilfe
CU
flo

Autor: Florian Z. (floz)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,
so nach langer Schaltplan suche reaktiviere ich den Thread, denn habe 
ich einen Hardwarefehler gefunden und ihn behoben.
Nun Funktioniert die Hardware so wie sie soll, und ich habe auch 
nochnmal an meinem Code und den Timings gebastelt, aber leider sehe ich 
immer noch nichts auf meinem Display, bitte helft mir, ich bin am 
Verzweifeln.
Anbei den Code und die TB
thx
Flo

Autor: Florian Z. (floz)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Und für alle die es noch Interessiert, hier mein Simulationsergebnis ;-)

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine Testbench (siehe oben) sagt zu Deinem Code:
# ** Note: read        to data        register: 0 (
#    Time: 50001880 ns  Iteration: 2  Instance: /lcd_daten_tb
# ** Note: read        to data        register: 57 (9)
#    Time: 50766280 ns  Iteration: 2  Instance: /lcd_daten_tb
# ** Note: read        to data        register: 57 (9)
#    Time: 51845800 ns  Iteration: 2  Instance: /lcd_daten_tb
# ** Note: read        to data        register: 20 ()
#    Time: 52926100 ns  Iteration: 2  Instance: /lcd_daten_tb
# ** Note: read        to data        register: 85 (U)
#    Time: 54006400 ns  Iteration: 2  Instance: /lcd_daten_tb
# ** Note: read        to data        register: 109 (m)
#    Time: 55086700 ns  Iteration: 2  Instance: /lcd_daten_tb
# ** Note: read        to data        register: 120 (x)
#    Time: 56167 us  Iteration: 2  Instance: /lcd_daten_tb
# ** Note: read        to data        register: 15 ()
#    Time: 57246520 ns  Iteration: 2  Instance: /lcd_daten_tb

Und read to data register sieht für mich nicht nach
write to command register aus...

Duke

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.