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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.