Gast
#57972
Nachdem ich ja so ziemlich alle Hürden genommen habe, um überhaupt mit dem ATmega16 klarzukommen, stehe ich schon wieder vor dem nächsten Problem. Ich möchte ein Text auf einem VFD-Display anzeigen lassen. Leider gibt es für mein Display kein Datenblatt M202SD01BA. Ich habe daher etwas gesucht und ein ähnliches gefunden. -> http://mitglied.lycos.de/projectsilence/m202sd08gk.pdf Die Beschaltung wird dann auch genauso sein, denke ich. Ich kann auch den Selbsttest laufen lassen. Allerdings kann ich den seriellen Modus nicht nutzen, da ich nicht weiss, welche Brücken ich wie löten muss. Aber das ist auch erst einmal egal, da ich den parallel ansprechen will. Aber nun zum eigentlichen Problem: Der Selbsttest läuft. Es ist ja nicht so kompliziert einfach nur ein Bit an- und abzuschalten. Aber sonst bekomme ich nichts auf dem Display zu sehen. Hier mal der Auszug aus meinem Code: .equ vfd_data = portc .equ vfd_ctrl = portd .equ vfd_wr_bit = 7 ;low active .equ vfd_sel_bit = 5 ;low active .equ vfd_test_bit = 4 ;low active .equ vfd_in = pind .equ vfd_busy_bit = 6 -> CUT <- rcall vfd_init rcall vfd_test -> CUT <- vfd_init: ldi r16,0b11111111 ;PortC auf Ausgang out ddrc,r16 ;setzen ldi r16,0b10110000 ;PortD auf Eingang/Ausgang out ddrd,r16 ;setzen cbi vfd_ctrl,vfd_wr_bit ;schreiben deaktivieren sbi vfd_ctrl,vfd_test_bit ;Display-Test beenden (low active) ret vfd_write: rcall vfd_enable ;Display aktivieren rcall vfd_waitbusy ;warten bis bereit ldi r16,'A' out vfd_data,r16 nop nop nop cbi vfd_ctrl,vfd_sel_bit ;Display anwählen (low active) nop nop nop sbi vfd_ctrl,vfd_wr_bit ;schreiben nop nop nop cbi vfd_ctrl,vfd_wr_bit ;schreiben beenden nop nop nop sbi vfd_ctrl,vfd_sel_bit ;Display abwählen (low active) ret vfd_waitbusy: sbic vfd_in,vfd_busy_bit rjmp vfd_waitbusy ret Etwas verwirren tut mich auch die Dokumentation. Das Timig-Diagramm sollte eigentlich alles anzeigen, was man braucht. Allerdings widerspricht sich das mit den Textpassagen ("The data or control command is to be written in at the rising edge of /WR(0->1), when /SEL= low "0".". Also muss /WR zu eins werden und die Daten werden übernommen. Im Timingdiagramm steht allerdings was von low. Aber ich habe schon beide Kombinationen probiert. Auf alle Fälle erscheint nach dem Displaytest nichts auf dem Display. Auch ein verlängern der Timings brachte nichts. Und 50ns, die mindestens anliegen soillen sind ja bei 8MHz schnell vorbei.