Forum: Mikrocontroller und Digitale Elektronik PIC18F46K80 - Probleme mit Port-Konfiguration


von Karsten (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

als Einstiegsarbeit für spätere Projekte befasse ich mich gerade mit der 
Konfiguration des oben genannten PICs. Es ist mein erster "großer" PIC 
und die vielen Hardwarefunktionen überfordern mich da etwas. Vorerst 
plane ich hauptsächlich Bitschubserei, das Hautkriterium für die Auswahl 
war dabei 5V und viele Pins, der Rest war mir egal.

Einige Stolperfallen habe ich schon hinter mir, jetzt stehe ich aber vor 
dem Problem, dass Port C seltsame Dinge macht. Nämlich habe ich, um die 
digitalen Ein- und Ausgänge auszuprobieren ein kleines Programm 
geschrieben, bei dem jedem Taster an Port C eine LED an Port B 
zugewiesen ist. Bei Tastendruck soll die entsprechende LED leuchten. Das 
Programm hält dabei immer an, bis die nächste Taste gedrückt wird. Das 
funktioniert an allen Pins bis auf C4.
Drücke ich diesen Taster, leuchten die LEDs B4-B7 auf einmal auf.

Die Hardware habe ich geprüft, es gibt keine direkte Verbindung zwischen 
den Pins C4-C7, alle liegen über jeweils einen 1k-Widerstand auf Masse 
(also immer 2k zwischen zwei Pins), der Taster gibt dann Plus auf den 
Pin.
Das Verhalten ist auch über den Debugger nachzuvollziehen, alle vier 
Pins werden angesprochen, wenn ich High auf C4 gebe, bei den anderen Cs 
aber nicht.

Zur Hardware: Betriebsspannung liegt an allen vier Pins an 
(11,12,31,32), inklusive kleinem Kondensator. VDDcore liegt über einen 
10uF Elko an Masse, einen Keramik hatte ich leider nicht da. Der wird 
doch hoffentlich nicht schuld sein?

Ich habe auch mal das Programm angehängt, ich denke zwar, dass es sauber 
ist, aber vielleicht habe ich ja doch Mist gebaut. Ich gehe aber eher 
davon aus, dass ich im Datenblatt irgendeine notwendige Konfiguration 
übersehen habe.

Schonmal danke für eure Hilfe!

Grüße

Karsten

PS: Ich hoffe, der Post war nicht zu lang...

von Max H. (hartl192)


Lesenswert?

Karsten schrieb:
>    MOVLW D'0'
>    MOVWF ANCON0    ;Deaktivieren der Analogfunktion
>    MOVWF ANCON1
ADCON0 und 1 sind kein Teil der Access Bank.

Im Datenblatt in der "TABLE 11-5" findest du die Funktionen der 
einzelnen PINs. Versuch sie mal alle zu deaktivieren.

Funktioniert der Code wie er sollte, wenn du die Zeilen weglässt??
>    BTFSS PORTC,4
>    GOTO $-2
>    BSF LATB,4

Hast du mal die Spannung an den einzelnen PINs gemessen?


Versuch mal als Test diese Schleife, vllt. findest du was Interessantes 
heraus.
1
Marke:
2
    movff PORTC,LATB
3
    goto Marke

P.S. Ich würde mir angewöhnen Labels wie z.B. "Marke" mit Doppelpunkt am 
Ende zu schreiben. MPASM ist es egal ob er da ist oder nicht, bei vielen 
anderen Assemblern wie z.B. ASM16 (PIC24, dsPIC) ist er nötig.

: Bearbeitet durch User
von Karsten (Gast)


Lesenswert?

Hallo,

Danke für den Hinweis mit der Marke, werde ich versuchen mir 
anzugewöhnen.
Hinter dem GOTO schreibe ich aber anscheinend keines? Wäre schön 
gewesen, wenn die Marken in MPLAB einheitlich schwarz gewesen wären, 
auch in den Sprungbefehlen.

Egal, mein kleines Portproblem konnte ich auch lösen:

Nachdem ich das SSPM- und das EUSART-Modul ausgeschaltet hatte
    BCF SSPCON1, SSPEN
    BCF RCSTA1, SPEN
    BCF RCSTA2, SPEN
bestand mein Problem leider immer noch. Deine Testschleife hat mir 
übrigens sehr geholfen herauszufinden, dass C4 zwar der anfälligste Pin 
ist, alle anderen Pins oberhalb von C3 aber auch Probleme machen.

Ich habe mir dann die Hardware noch einmal angesehen und festgestellt, 
was für einen Bock ich da geschossen habe:
Da diese Pins auf der anderen Seite des Controllers liegen habe ich die 
Pulldown-Widerstände auch anders angeschlossen, nämlich auf die Kathode 
der LEDs an Port B. Dummerweise liegt diese gemeinsame Masse erst über 
einen 220Ohm Widerstand an Masse. Mein angebliches Masspotential für die 
digitalen Eingänge liegt also irgendwo zwischen 0 und 5V, und das hat 
den Port wohl durcheinander gebracht.
Aaargh!

Trotzdem vielen Dank für deine Hilfe!

Nur aus Interesse: Wofür ist eigentlich ADCON? Die Zuweisung der 
analogen Eingänge läuft doch über die ANCON-Register. Dachte ich 
zumindest.

von Max H. (hartl192)


Lesenswert?

Karsten schrieb:
> Nur aus Interesse: Wofür ist eigentlich ADCON?
Zum Konfigurieren das ADCs, genaueres im Datenblatt.

Ich habe einen Tippfehler gemacht und die ganze Zeit das ANCON gemeint.
Die ADCON sind in der ACCESS BANK,
die ANCON nicht


>    MOVLW D'0'
>    MOVWF ANCON0    ;Deaktivieren der Analogfunktion
>    MOVWF ANCON1
Das sollte dann so aussehen:
1
BANKSEL ANCON0
2
movlw 0x00
3
movwf ANCON0,BANKED
4
movwf ANCON1,BANKED
PORTC hat keine Analogeingänge, später wirst du mit für den Tipp aber 
dankbar sein. Ich habe mal eine halbe Stunde den Fehler gesucht, bis ich 
gesehen habe, dass ANCON nicht in der ACCESS BANK ist. Bei neueren PIC18 
mit "vielen" SFRs habn nicht mehr alle in der ACCESs BANK Platz.

: Bearbeitet durch User
von Karsten (Gast)


Lesenswert?

Ich bin dir jetzt schon dankbar!
Das mit den Bänken werde ich mir wohl noch genauer ansehen müssen...

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.