Hallo liebe Forumgemeinde ich habe folgendes Problem. Ich möchte mein LCD anhand einer einfachen LCD Initialisierung testen, nur leider reagiert dieses nicht und da für mich der Bereich LCD Neuland ist wäre ich für etwas Hilfe sehr dankbar! Zur Hardware: Es handelt sich um ein Großdisplay von Toshiba mit dem KS0066U Controller und wird mit negativer Kontrastspannung über eine Ladungspumpe gespeist. Somit wird mir die 1. und 3. Zeile mit Kästchen angezeigt und die Kontrasteinstellung funktioniert. Die Datenpins sind an PORTB des PICs angeschlossen, PORTE dient als Anschluss für E, R/W und RS. Als Taktquelle verwende ich einen externen 16MHz Quarz. Programmiert wird dies alles über die ICSP Schnittstelle, MPLAB und dem PICKit 2. Zur Software: Ich selbst sehe leider keinen Fehler oder wo sich der PIC verrennen könnte. Evtl. seht ihr ja mehr da ich solangsam nichtmehr weiter weiß. Im Anhang ist mein Code als .asm Datei. Schonmal vielen Dank an euch! Gruss Pascal
Es fehlt z.B. die Definition von Port B und Port E als Output (wird mit dem TRISB- und TRISE-Register gemacht):
1 | CRLF TRISB |
2 | CRLS TRISE |
Der R/W-Pin muss für Control-Bytes auch noch gesetzt werden:
1 | bcf controlport, lcd_rs ; Steuerbyte: RS = 0 |
2 | bcf controlport, lcd_rw ; schreiben: RW = 0 |
noch etwas: manche Displays brauchen eine längere Zeit zur Initialisierung, stelle mal den delay in CONTROL8BIT auf 50ms (ich habe so ein Display, das braucht tatsächlich >44 ms) Meine Initialisierung für den 16F886 sieht so aus (die Subs heissen etwas anders, der Name sagt aber wohl alles):
1 | movlw b'00110000' ; 8-bit-interface |
2 | call out8_control |
3 | |
4 | movlw b'00110000' ; 8-bit-interface |
5 | call out8_control |
6 | |
7 | movlw b'00110000' ; 8-bit-interface |
8 | call out8_control |
9 | |
10 | movlw b'00100000' ; 4-bit-interface |
11 | call out8_control |
12 | |
13 | movlw b'00101000' ; 4-bit / 2-zeilig / 5x8 |
14 | call out4_control |
15 | |
16 | movlw b'00000110' ; cursor increase, display shifted |
17 | call out4_control |
18 | |
19 | movlw b'00001100' ; display on |
20 | call out4_control |
21 | |
22 | ; movlw b'00001000' ; display off |
23 | ; call out4_control |
24 | |
25 | movlw b'00000001' ; löschen, cursor home |
26 | call out4_control |
Da ist die Reihenfolge anders!!! Gruss S.
Hallo, CRLF TRISB CRLS TRISE die beiden Befehle kenne ich überhaupt nicht! Ich kenne sie nur in dieser Ausführung: clrf TRISB clrf TRISE Habe nun mal einiges aus dem Code rausgeschmissen um es erstmal so zu probieren, siehe Anhang Danke, Gruss Pascal
Du hast recht -> Tippfehler :( entweder: clrf TRISB oder movlw b'00000000' movwf TRISB Gruss S.
So, habe nun mal den Gedanken mit dem LCD verworfen und dafür kommen nun ganz simple LEDs zum Einsatz. Muss mich damit mal mehr auseinandersetzen wenn ich auch mehr Zeit habe, habe aber nun folgendes Problem: Habe mir nun auf die schnelle eine LED Platine gebastelt. Also 8 LEDs belegen nun den PORTD, mit einer einfachen Ausgabe konnte ich diese auch ansprechen und dies funktionierte auch! ;) Nun möchte ich eben diese Anzeige dafür nutzen das mir der Schaltabstand eines analogen Sensors der über einen MAX11600 (A/D-Wandler) an der I2C Schnittstelle hängt angezeigt wird. LED1=1cm LED2=2cm usw. Habe die Kennlinie vom Sensor aufgenommen um somit die Ausgangsspannungen für die verschiedenen Schaltabstände zu erreichen. Nun aber meine Frage: Ich habe ja eine Speicherzelle als RDATA festgelegt, wie kann ich nun diesen digitalen Wert, den ich ja nicht kenne anhand meiner Spannungen (Sensor) abfragen lassen ? Ich hatte da mal etwas wegen einem DDW (Digitals Daten Wort) gehört ? Der Code steht soweit bis eben auf diese Abfrageschleife. Wäre für Hilfe wie immer dankbar und das jemand sich mal den Code anschauen könnte :) Gruss Pascal
Habe nun folgendes zwecks Spannung in DDW (8bit): 8-Bit Wandlung = 256 U Fullscale = 100 % Messspannung = 8cm = 4,5/5V U Ausgangsspannung = Ausgangsspannung Sensor = 1-8cm = 0-5V dann könnte ich doch dies so berechnen: 1). U LSB = U Fullscale / 256 = 19,53 mV 2). Bsp. für 1cm = 455 mV DDW = U Ausgangsspannung / U LSB = 23,29 => 23 => 17hex Jetzt berechne ich eben all diese 8 Werte und füge die in eine Abfrageschleife ein ? Danke Gruß Pascal
So habe jetzt mal etwas herumgebastelt und möchte wissen ob die Abfrageschleife so funktioniert wie ich es mir vorgestellt habe und ob die Kommunikation zwischen I2C -> MAX -> PIC -> LEDs so geht ? Zu der Abfrage Also je höher die Spannung=Abstand desto mehr (+1 weitere LED) leuchtet dazu auf. Im Anhang der Code, für jeden Tipp & Hilfe bin ich sehr dankbar!
Kann mir den niemand weiterhelfen ? :( Gruß Pascal
Ich bin am verzweifeln! Ich weiß nicht was ich falsch mache! Selbst jetzt bekomme ich sogar den Fehler das er "Init" nicht erkennt und meint es sei "illegal"... Wäre so dankbar wenn mir jemand mit dem Code helfen könnte!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.