Forum: Mikrocontroller und Digitale Elektronik IO-Problem mit PIC18F2550


von Oli M. (h2obrain)


Lesenswert?

Hallo zusammen!

Ich habe jetzt schon stundenlang versucht ein LCD-display (HD4478, Typ 
LM086ALN) zum Laufen zu bringen und scheitere schon bei der 
Grundlegensten.

Zur Kommunikation benutze ich den PORTB(0-6).
Ich schaffs nicht dem Teil beizubringen, die PORTS auf 0 Volt zu 
"sinken".

Zur Programmierung nutze ich SDCC/GPASM.
Folgendes habe ich konfiguriert (in dieser Reihenfolge) :
  - PBADEN hab ich gecleared
  - ADCON1 = 0b01011011 (AD0-3 aktiviert)
  - !RBPU gesetzt (PORTB-Pullups deaktiviert)
  - TRISB = 0
  - PORTB = 0


Mit einem PIC16F690 at alles ohne Probleme funktioniert. Ich habe auch 
Beispiele für ähnliche PICs wie den 2550er gefunden..

Ich habe einfach mal einen PIN mit dem Ampère-Meter kurzgeschlossen und 
einen Strom vom .1mA (ev. 10kOhm Pullup) gemessen. Laut Datenblatt soll 
es möglich sein, bis zu 25mA (tot.max 100mA oder so) pro PIN zu 
sinken/sourcen. Funktioniert aber anscheinend nicht :(


Kann mir jemand einen Tipp geben wo der Wurm liegt?


Grüsse Oli

von Stefan (Gast)


Lesenswert?

Benutze das LATB register zum löschen.
ADCON0 auch setzten. Und versuche mal CMCON = 7

von holger (Gast)


Lesenswert?

>Zur Kommunikation benutze ich den PORTB(0-6).
>  - ADCON1 = 0b01011011 (AD0-3 aktiviert)

Tja, selber ins Knie geschossen.
So kannst du nur PORTB(4-6) für das LCD verwenden.
Vier Pins reichen für eine Ansteuerung aber nicht.

>Zur Programmierung nutze ich SDCC/GPASM.

Man kann sich auch anders quälen. Nimm den C18 von Microchip.

>Benutze das LATB register

Richtig, ersetze PORTB durch LATB.

>Ich habe einfach mal einen PIN mit dem Ampère-Meter kurzgeschlossen und
>einen Strom vom .1mA (ev. 10kOhm Pullup) gemessen. Laut Datenblatt soll
>es möglich sein, bis zu 25mA (tot.max 100mA oder so) pro PIN zu
>sinken/sourcen. Funktioniert aber anscheinend nicht :(

Sach mal hast du ein Ei am wandern? Das machst du nie wieder.
Damit kannst du dir den Port zerschiessen.

von mexman (Gast)


Lesenswert?

> Ich habe einfach mal einen PIN mit dem Ampère-Meter kurzgeschlossen und
> einen Strom vom .1mA (ev. 10kOhm Pullup) gemessen. Laut Datenblatt soll

Mutig! Nach + oder nach -?

Was ich gerne vergesse, ist die Ports vom Analogbetrieb 
(Ursprungszustand) wegzuschalten, aber wenn es mit PIC16F690 
funktioniert dann ist es DAS nicht.

Aber genau das bedeutet doch, dass es noch irgendeine 
Portinitialisierung ist, die fehlt.
Das aber ist mit Sicherheit im Datenbuch beschrieben.

SDCC/GPASM kenne ich nicht. MPASM wuerde ich bei einem solchen Problem 
mal bis an die Portausgabe laufen lassen und an der Stelle alle Bits, 
die irgendeinen EInfluss auf den Port haben, ansehen.
Das gute an den Microchip Datenbuechern ist ja, dass in den Kapiteln die 
die Ports betreffen immer genau auf die Einstellbytes verwiesen wird, 
die diese Ports beeinflussen

Gruss

Michael

von Oli M. (h2obrain)


Lesenswert?

Stefan schrieb:
> Benutze das LATB register zum löschen.
> ADCON0 auch setzten. Und versuche mal CMCON = 7

die anderen ad-register (zb. adcon0) haben, laut datenblatt, nichts mit 
portb zu tun... (habe ich aber konfiguriert, aber momentan nicht zhd.)

was ist CMCON? hab' ich im datenblatt nicht gefunden, dieses 
register(?)...

das mit dem latb versteh' ich nicht.. muss ich latb=0 machen um einen 
pin runter-zu-ziehen (sinken) und portb=1 um einen pin hoch-zu-ziehen 
(sourcen)?

LATB = 0 hab isch schon versucht, hat aber nichts gebracht.. (ist das 
nicht dazu da um den (port-) treiber eingang für irgendwelche "komische" 
(schwyzerdütsch) operationen zu gebrauchen?)

von Oli M. (h2obrain)


Lesenswert?

holger schrieb:
> Tja, selber ins Knie geschossen.
> So kannst du nur PORTB(4-6) für das LCD verwenden.
> Vier Pins reichen für eine Ansteuerung aber nicht.
AD0-3 sind "glaubs" die ports PORTA 0-3, sollten also die PORTB0-6 nicht 
beeinträchtigen

>>Zur Programmierung nutze ich SDCC/GPASM.
>
> Man kann sich auch anders quälen. Nimm den C18 von Microchip.
kann gut sein, dass es an SDCC liegt.. werde also mal HI-Tech C18 
ausprobieren..


>>Benutze das LATB register
>
> Richtig, ersetze PORTB durch LATB.
das hat nicht wirklich was gebracht.. (vllt. war der cooch-pegel zu 
hoch, werd's nochmals testen :)


>>Ich habe einfach mal einen PIN mit dem Ampère-Meter kurzgeschlossen und
>>einen Strom vom .1mA (ev. 10kOhm Pullup) gemessen. Laut Datenblatt soll
>>es möglich sein, bis zu 25mA (tot.max 100mA oder so) pro PIN zu
>>sinken/sourcen. Funktioniert aber anscheinend nicht :(
>
> Sach mal hast du ein Ei am wandern? Das machst du nie wieder.
> Damit kannst du dir den Port zerschiessen.
wenn nichts funktioniert, wird man erfinderisch. immerhin hat meine 
annahme gestimmt, ein ganz normaler 10kOhm pullup...

von Oli M. (h2obrain)


Lesenswert?

mexman schrieb:
>> Ich habe einfach mal einen PIN mit dem Ampère-Meter kurzgeschlossen und
>> einen Strom vom .1mA (ev. 10kOhm Pullup) gemessen. Laut Datenblatt soll
>
> Mutig! Nach + oder nach -?
nach -


> Was ich gerne vergesse, ist die Ports vom Analogbetrieb
> (Ursprungszustand) wegzuschalten, aber wenn es mit PIC16F690
> funktioniert dann ist es DAS nicht.
ich würde das gerne mal mit einem anderen pic18 austesten, hab momentan 
aber nur den 2550 zur hand

> Aber genau das bedeutet doch, dass es noch irgendeine
> Portinitialisierung ist, die fehlt.
das denke ich auch.. werde einfach nicht schlau aus dem zeugs!

> Das aber ist mit Sicherheit im Datenbuch beschrieben.
hab' nichts gefunden :(

> SDCC/GPASM kenne ich nicht. MPASM wuerde ich bei einem solchen Problem
> mal bis an die Portausgabe laufen lassen und an der Stelle alle Bits,
> die irgendeinen EInfluss auf den Port haben, ansehen.
> Das gute an den Microchip Datenbuechern ist ja, dass in den Kapiteln die
> die Ports betreffen immer genau auf die Einstellbytes verwiesen wird,
> die diese Ports beeinflussen
ich hab das programm bis zu PORTB = 0 und/oder LATB=0 laufen gelassen 
und nachgemessen.. ein teil der ports war auf 1.7 volts (ca.) 
(gefährlich) der rest auf 4.7V (max-out) oder 0V.. ich kann sonst noch 
ne genaue auflistung der verbindungen (2550<->LCD) und deren spannungen 
liefern. 0V sollten jedoch meiner meinuung nach zu erreichen sein

von Oli M. (h2obrain)


Lesenswert?

Vielen Dank für euere Antworten bisher. Leider seh das Problem ich immer 
noch nicht. :(

Gruss Oli

von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Schau mal ob das Programm im Anhang bei dir
läuft.

8MHz Takt
RS = RB2
EN = RB3
D4 = RB4
D5 = RB5
D6 = RB6
D7 = RB7

von Oli M. (h2obrain)


Lesenswert?

Hey Stefan!

Danke für dein Programm. Hat leider auch nicht funktioniert.

Wenn das programm läuft, sind RB2 und RB5 High.. RB3 ist Low.. die 
restlichen Pins sind floating (VDD=4.5V, floating = 0.2-4.0 Volt)!!!

von Stefan (Gast)


Lesenswert?

Dann ist dein µC im Eimer. Oder deine
Schaltung stimmt nicht. Das Programm
läuft einwandfrei.

von Oli M. (h2obrain)


Lesenswert?

hmpf! schade..

Könnte es nicht evtl. am Pickit2 oder so liegen? :)

Das heisst, ich hab grad' 4 pic18f2550 kaputt gemacht :(

von Lehrmann M. (ubimbo)


Lesenswert?

Oli Meier schrieb:
> hmpf! schade..
>
> Könnte es nicht evtl. am Pickit2 oder so liegen? :)
>
> Das heisst, ich hab grad' 4 pic18f2550 kaputt gemacht :(

4 PIC kaputt gemacht. WIE ???

von Oli M. (h2obrain)


Lesenswert?

Keine Ahnung.. Hab nur das LCD angeschlossen.

Mein blinkled-Testprogramm (timer0, latb1) läuft allerdings ohne 
Probleme.

von Oli M. (h2obrain)


Lesenswert?

Das LCD hab ich übrigens an einem LEEREN Pickit 28-Pin Demo-Board 
angeschlossen, könnte das evtl. die Probleme verursachen?

von Oli M. (h2obrain)


Lesenswert?

Juhuu!!

Es funktioniert endlich. Das Problem war RB5/LVP (.

Das LVP-Bit im CONFIG4L-Register musste gecleared werden (ist 
anscheinend std.mässig gesetzt)


RB5/KBI1/PGM
  Single-Supply Programming mode entry (ICSPTM). Enabled by LVP
  Configuration bit; all other pin functions disabled.

Note 1: High-Voltage Programming is always
        available, regardless of the state of the
        LVP bit, by applying VIHH to the MCLR pin.
     2: While in Low-Voltage ICSP Programming
        mode, the RB5 pin can no longer be used
        as a general purpose I/O pin and should
        be held low during normal operation.
     3: When using Low-Voltage ICSP Program-
        ming (LVP) and the pull-ups on PORTB
        are enabled, bit 5 in the TRISB register
        must be cleared to disable the pull-up on
        RB5 and ensure the proper operation of
        the device.
     4: If the device Master Clear is disabled,
        verify that either of the following is done to
        ensure proper entry into ICSP mode:
           a) disable Low-Voltage Programming
              (CONFIG4L<2> = 0); or
           b) make certain that RB5/KBI1/PGM
              is held low during entry into ICSP.

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.