Hallo leute,
ich probier seit gewisser zeit mein lcd displaytech 162d mitm pic16f690
zum laufen zu bringen. weil ich den pic nur dafür nehme wollt ichs mal
mit 8bit probieren, liegt dort evtl der fehler? scheinbar geht der code
bis zu einer gewissen zeile, denn es werden alle kästchen der ersten
zeile schwarz angezeigt und dann erlöschen sie, weiter passiert aber
nix. könnt ihr eventuell mal einen blick auf meinen code setzen und mir
weiterhelfen? ich verzweifle sonst noch...danke schonmal für alle
antworten.
mfg koma
hör auf mit ASM uznd fang mit C an da quälst du dich nicht so und dir
kann leichter geholfen werden
www.htsoft.com
ich beschäftige mich auch hauptsächlich mit dem pic 16f690 und würde dir
gerne zur hand gehen aber ich kann leider dieses schreckliche pic-asm
nicht
wenn es fragen zum prinzip(wann muss welcher pin auf high oder low) sind
kann ich dir auch gerne behilflich sein
ich wollte aber extra mit asm anfangen um erstma zu verstehen wie das so
hinhaut. find ich ehrlichgesagt auch besser als gleich mit c
rumzuhantieren.
trotzdem danke für deine antwort, die pins sollten eigentlich so
stimmen, aber evtl hab ich ja was übersehen oder was falsch abgeändert.
welcher controller is drauf?
ist am display der rs pin auf low?
wenn ja dann musst du nach jedem befehl eine warteschleife einhalten
in der pdf(anhang) is die intialisirung recht gut erklärt
das lcd hat einen KS0070B controller drauf. rs is low. in deinem anhang
ist die initialisierung etwas anders, als in dem datenblatt zu meinem
lcd, ich werd die mal probieren und auch mit mehr warteschleifen. danke
erstmal
also, es funktioniert immernoch nicht. hab die initialisierungs-sequenz
so umgesetzt, wie sie in der pdf steht. auch mit jeweils genug
wartezeiten nach jedem befehl. was mich verwundert ist, dass die
sequenzen von deinem pdf und meinem datenblatt zum selben controller
unterschiedlich sind.
könnte der fehler sonst irgendwo im code liegen? ich dreh nochmal durch
hier...
Hallo Ich hab das gleiche Problem bekomme mein LCD nicht initialisiert!
Ich schreibe allerdings in C.
Hab ein LCD 162C von Reichelt.
- nach dem Anlegen der Betriebsspannung muss eine Zeit von mindestens
ca.
15ms gewartet werden, um dem seine eigene Initialisierung zu geben
- 0x30 ins Steuerregister schreiben (RS = 0)
- mindestens 4.1ms warten
- 0x30 ins Steuerregister schreiben (RS = 0)
- mindestens 100μs warten
- 0x30 ins Steuerregister schreiben (RS = 0)
- Mit dem Konfigurier-Befehl 0x30 das Display konfigurieren (8-Bit, 1
oder
2 Zeilen, 5x7 Format)
- mit den restlichen Konfigurierbefehlen die Konfiguration
vervollständigen: Display ein/aus, Cursor
Frage: 1.) Was muß mit dem Enable machen bei der Initialisierung?
2.) Worauf muß ich hier besonders achten?
>Frage: 1.) Was muß mit dem Enable machen bei der Initialisierung?> 2.) Worauf muß ich hier besonders achten?
Das steht ganz deutlich in den Timing Diagrammen.
Freundlicherweise sind darüber auch gleich die
Mindestzeiten angegeben. Wenn man die Reihenfolge
penibel einhält, dann klappts auch mit dem Display.
hallo, nochmal ich. also ich hab jetzt nochmal meine hardware überprüft
und das programm auch nochmal. ich kann keinen fehler erkennen aber es
läuft nicht. muss ich noch irgendwas bei der pin konfiguration beachten?
hab die pins auf digital i/o gestellt. bitte helft mir weiter.
>muss ich noch irgendwas bei der pin konfiguration beachten?>hab die pins auf digital i/o gestellt. bitte helft mir weiter.
AD Eingänge UND Komparatoren abgeschaltet ?
die sind ja ansich laut register summary nachm reset eh aus, aber ja ich
hab sie nochmal ausdrücklich ausgeschalten. leider ohne erfolg. hier
nochmal mein code, evtl fällt euch ja ein fehler auf, den ich übersehen
habe? mfg und danke
könnte das eventuell am brennen liegen? ich nehm zum programm schreiben
das mitgelieferte PICkit2 programm, weil ich es mitm MPLAB direkt nich
hinkriege. ich hab mal gelesen, dass ein i/o pin (normalerweise RB3,
PortB bit3) blockiert wird, wenn LV-programming enabled ist. beim 16f690
gibts den zwar nich aber hat das auswirkungen auf andere?
>beim 16f690 gibts den zwar nich aber hat das auswirkungen auf andere?
PORTB6 und PORTB7 werden bei der ISP Programmierung benötigt.
Vieleicht blockiert dein Prommer dir die LCD-RW Leitung an
PORTB6. Zieh den Prommer doch mal ab, oder leg LCD-RW auf
PORTB3.
Ansonsten könntest du mal auf den Busy-Check
verzichten und einfach nach jedem Byte ca.
100us warten.
also ich verwende ja kein in-system-programmer, sondern setz den pic
jedesmal auf das kit zum programmieren. deswegen schließ ich das jetzt
mal aus. aber ich dachte da gibts nochn unterschied zwischen 12v und 5v
brennen.
naja ich werds mal mit mehr wartezeiten probieren, vielleicht hilft das
ja
Ich hab mal ein wenig rumprobiert.
; __CONFIG (_CP_OFF & _PWRTE_ON & _WDT_OFF)
Kein Oscillator angegeben. Also trag ihn ein.
__CONFIG (_CP_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC)
; org 0005h ; reset vector
Nicht gut. Adresse 5 ist NICHT der Reset Vektor.
org 0000h ; reset vector
Das eigentliche Problem dürfte das hier sein ;)
movlw B'00100000' ; 4 function set, 4-bit 1-zeilig, 5x7
Display auf 4 Bit Modus eingestellt obwohl 8 Bit Anschluss.
movlw B'00110000' ; 4 function set, 8-bit 1-zeilig, 5x7
So könnte es gehen.
hey, danke erstmal für deine bemühungen.
das mit den 4bit ist noch ein überbleibsel aus vorhergegangenen
versuchen, weil das mit 8bit nich gefunzt hat. ich habs jetzt wieder
umgestellt und auch den oszillator eingetragen..
zum reset vector:
hatte ganz zuanfang auch den 0000h genommen, weil ichs überall so
gefunden hatte, nur meckert mein MPLAB rum, wenn ich das projekt bauen
(build :) will.
von wegen:
Error - section '.org_0' can not fit the absolute section. Section
'.org_0' start=0x00000000, length=0x00000116
BUILD FAILED
deswegen hatte ich den auf 0005h geändert, dann gings.
was hat das zu bedeuten?
mfg
Das kommt wenn man mit Linkerdatei arbeitet.
Darin steht meist folgendes:
LIBPATH .
CODEPAGE NAME=vectors START=0x0 END=0x4 PROTECTED
CODEPAGE NAME=page0 START=0x5 END=0x7FF
...
Die Adressen 0 bis 4 (vectors) sind gesperrt.
Du kannst tatsächlich erst ab Adresse 5 (page0)
deinen Code beginnen. Dann lass das org 0005h halt drin.
mal ne etwas komische frage. ich hab jetzt schön öfter gesehen, dass die
microcontroller mit externem oszillator betrieben werden. ich mache das
nicht, stellt das ein problem dar? mfg
Hängt davon ab, wie genau der Takt sein muss. Wenn du für diverse
Schnittstellen (UART,CAN,...) präzises Timing benötigst, oder eine
Uhrzeit mitführst, dann wärs mit Quarz schon besser.