Forum: Mikrocontroller und Digitale Elektronik PIC16F690 init vom LCD funzt nich


von koma (Gast)


Angehängte Dateien:

Lesenswert?

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

von Thomas M. (thomas1123) Benutzerseite


Lesenswert?

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

von koma (Gast)


Lesenswert?

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.

von koma (Gast)


Lesenswert?

achso btw hab die codes von sprut als vorlage genommen, mfg

von Thomas M. (thomas1123) Benutzerseite


Angehängte Dateien:

Lesenswert?

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

von koma (Gast)


Lesenswert?

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

von koma (Gast)


Lesenswert?

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...

von Dummy (Gast)


Lesenswert?

Der Fehler könnte ja auch bei der Hardware liegen.
Muss ja nicht der Code sein.

von Oliver G. (michigan)


Angehängte Dateien:

Lesenswert?

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?

von holger (Gast)


Lesenswert?

>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.

von Oliver G. (michigan)


Lesenswert?

Super Danke für die schnelle Antwort mal sehn ob es daran liegt!

ausprobieren....

THX Michigan

von koma (Gast)


Lesenswert?

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.

von holger (Gast)


Lesenswert?

>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 ?

von koma (Gast)


Angehängte Dateien:

Lesenswert?

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

von koma (Gast)


Lesenswert?

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?

von holger (Gast)


Lesenswert?

>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.

von koma (Gast)


Lesenswert?

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

von holger (Gast)


Lesenswert?

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.

von koma (Gast)


Lesenswert?

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

von holger (Gast)


Lesenswert?

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.

von koma (Gast)


Lesenswert?

okay danke für die schnelle antwort, ich werd mal wieder ein bisschen 
rumprobieren und später von mir hören lassen. mfg

von koma (Gast)


Lesenswert?

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

von Andreas K. (a-k)


Lesenswert?

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.

von koma (Gast)


Lesenswert?

ohman ich bin ein trottel, wie konnte ich das nur vergessen...

von koma (Gast)


Lesenswert?

hab jetzt erstmal _INTOSC eingestellt und wie sollte es anders sein, es 
funktioniert immernoch nicht. langsam verzweifel ich.

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
Noch kein Account? Hier anmelden.