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