mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC16F887 - LCD Toshiba 20x4 Zeichen - Assembler


Autor: Pascal K. (zerb)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: stephan_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es fehlt z.B. die Definition von Port B und Port E als Output (wird mit 
dem TRISB- und TRISE-Register gemacht):
    CRLF TRISB
    CRLS TRISE

Der R/W-Pin muss für Control-Bytes auch noch gesetzt werden:
    bcf controlport, lcd_rs     ; Steuerbyte: RS = 0
    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):
  movlw  b'00110000'      ; 8-bit-interface
  call  out8_control

  movlw  b'00110000'      ; 8-bit-interface
  call  out8_control

  movlw  b'00110000'      ; 8-bit-interface
  call   out8_control

  movlw  b'00100000'      ; 4-bit-interface
  call   out8_control

  movlw  b'00101000'      ; 4-bit / 2-zeilig / 5x8
  call  out4_control

  movlw  b'00000110'      ; cursor increase, display shifted
  call  out4_control

  movlw  b'00001100'      ; display on
  call  out4_control

;  movlw  b'00001000'      ; display off
;  call  out4_control

  movlw  b'00000001'      ; löschen, cursor home 
  call  out4_control

Da ist die Reihenfolge anders!!!

Gruss S.

Autor: Pascal K. (zerb)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: stephan_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast recht -> Tippfehler :(

entweder:

    clrf TRISB

oder

    movlw b'00000000'
    movwf TRISB

Gruss S.

Autor: Pascal K. (zerb)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Pascal K. (zerb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Pascal K. (zerb)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Pascal K. (zerb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir den niemand weiterhelfen ? :(

Gruß Pascal

Autor: Pascal K. (zerb)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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!

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]
  • [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.