Forum: Mikrocontroller und Digitale Elektronik MCLR funktioniert nicht als Input PIC18F23K22


von Karsten (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe hier das Problem, dass beim oben genannten PIC 18F23K22 der 
MCLR-Eingang (RE3) nicht als digitaler Eingang funktioniert.

Ich habe das Konfigurationsbit entsprechend gesetzt:

#pragma config MCLRE = INTMCLR  // MCLR Pin Enable bit (RE3 input pin 
enabled; MCLR disabled)

Trotzdem funktioniert mein Programm nur, wenn der Eingang offen ist. Es 
handelt sich bei dem Programm um eine Lichtsteuerung, die in einer 
Endlosschleife läuft und über den Servokanal eines RC-Empfängers 
gesteuert werden soll. Folglich sehe ich ganz gut, wenn das Programm 
stehen bleibt. Kein Licht = schlecht...
Weitere Pins habe ich allerdings nicht frei, ich muss die Auswertung des 
Empfängersignals über MCLR/RE3 machen. Der Pin wirkt jedenfalls sehr 
empfindlich, schon die Berührung des offenen Kabelendes mit einer 
Pinzette hat einen Reset bewirkt.

Einen anderen PIC kann ich zur Zeit nicht testen, das ist zu aufwändig, 
das alles wieder auseinander zu bauen.

Ich habe mal meinen Code angehängt, vielleicht findet ja jemand was. Die 
Routine zum Auswerten des Kanals habe ich allerdings noch gar nicht 
geschrieben, RE3 findet sich daher nicht im Code.

Schonmal vielen Dank
Karsten

von picfan (Gast)


Lesenswert?

hallo,
nach Deiner Beschreibung sieht es so aus als sei der MCLRE trotz 
richtiger Einstellung,aktiv.
Errata schon mal angeschaut? MFG

von Karsten (Gast)


Lesenswert?

picfan schrieb:
> hallo,
> nach Deiner Beschreibung sieht es so aus als sei der MCLRE trotz
> richtiger Einstellung,aktiv.
> Errata schon mal angeschaut? MFG

Hallo picfan,

ja, diesen Eindruck habe ich auch.
Die Errata kenne ich nicht, was ist das und wo gibt es die?
Ich denke, ich werde heute Nachmittag mal eine einfache Testschaltung 
mit einem anderen PIC aufbauen, vielleicht ergeben sich ja daraus 
Erkenntnisse.

von Volker S. (vloki)


Lesenswert?

Hallo Karsten,

außer dass der Watchdog aktiviert ist fällt mir jetzt erst mal nichts 
auf.
Es ist allerdings etwas seltsam, dass dein Programm so überhaupt läuft.

Deinem Code nach benutzt du MPLABX, aber welches Programmier-Tool und 
welche Funktion im Detail um dein Programm auf den Controller zu 
bringen?


PS: deine main Funktion sollte eigentlich so aussehen
1
void main(void){
2
    init();
3
    while(1){;}
4
}
Keine Übergabe-Parameter, kein return was auch immer.
Die Header <stdio.h> <stdlib.h> brauchst du auch nicht.
Das kommt alles nur von dem (falschen) Template in MPLABX.

Der Prozessorheader <p18f23k22.h> wird über <xc.h> automatisch hinzu 
gefügt.
Im allgemeinen wird <xc.h> als einziger System-Header eingebunden!

von Volker S. (vloki)


Lesenswert?

Karsten schrieb:
> Die Errata kenne ich nicht, was ist das und wo gibt es die?

In den Errata werden Fehler in den Datenblättern und der Hardware selber 
aufgelistet. Finden kann man die da, wo man auch das Datenblatt findet.

http://www.microchip.com/wwwproducts/Devices.aspx?product=PIC18F23K22
(Guckst du "Dokumentation & Software")

von Karsten (Gast)


Lesenswert?

Volker S. schrieb:
> Hallo Karsten,
>
> außer dass der Watchdog aktiviert ist fällt mir jetzt erst mal nichts
> auf.
> Es ist allerdings etwas seltsam, dass dein Programm so überhaupt läuft.
>
> Deinem Code nach benutzt du MPLABX, aber welches Programmier-Tool und
> welche Funktion im Detail um dein Programm auf den Controller zu
> bringen?

Hallo Volker,

danke für deine Hinweise. Das ist mein erstes C-Programm, daher bin ich 
mit dem Umgang noch nicht so sicher. Ich werde das mit den Headern 
ändern.

Das mit dem Watchdog wundert mich auch, werde ich natürlich auch ändern 
und dann nochmal testen. Vielleicht hängt das ja mit dem Fehler 
zusammen.

Meine Programmierumgebung ist, wie du schon richtig erkannt hast MPLAB 
X. Als Programmer verwende ich ein PICKit 3, mein Compiler ist der XC8 
(free).

Das Datenblatt, dass du mir verlinkt hast, enthält so wie ich das sehe 
keine Erratas. Habe sie in einem extra Dokument gefunden:
http://ww1.microchip.com/downloads/en/DeviceDoc/80512B.pdf

Mit dem MCLR ist wohl kein Fehler bekannt.

von Volker S. (vloki)


Lesenswert?

Karsten schrieb:
> Meine Programmierumgebung ist, wie du schon richtig erkannt hast MPLAB
> X. Als Programmer verwende ich ein PICKit 3, mein Compiler ist der XC8
> (free).

Meine Frage zielte mehr darauf ab, wie du das Programm auf den PIC 
bringst.
Mit welcher Funktion / Button ...



Karsten schrieb:
> Das Datenblatt, dass du mir verlinkt hast, e...
Ich habe dir doch gar kein Datenblatt verlinkt sondern eine Seite wo 
Datenblatt UND Errata zu finden sind. Die Errata sind nie in den 
Datenblättern enthalten sondern immer eigene Dokumente.

: Bearbeitet durch User
von Karsten (Gast)


Lesenswert?

Volker S. schrieb:
> Meine Frage zielte mehr darauf ab, wie du das Programm auf den PIC
> bringst.
> Mit welcher Funktion / Button ...

Zum Programmieren nehme ich immer den "Download-Pfeil", oben in der 
Mitte.
Gibt's da noch andere Möglichkeiten?
Die Spannungsversorgung mache ich übrigens über das PICKit.

Volker S. schrieb:
> Ich habe dir doch gar kein Datenblatt verlinkt sondern eine Seite wo
> Datenblatt UND Errata zu finden sind. Die Errata sind nie in den
> Datenblättern enthalten sondern immer eigene Dokumente.

Akzeptiert, bin doof und habe es jetzt auch gefunden... :)

von Volker S. (vloki)


Lesenswert?

Karsten schrieb:
> Zum Programmieren nehme ich immer den "Download-Pfeil", oben in der
> Mitte.

Ist zwar unwahrscheinlich, aber du hättest auch den Debug-Pfeil ganz 
rechts nehmen können. Das hätte dann zur Folge, dass sowohl deine 
Konfigurationen für MCLR als auch für den Watchdog überschrieben werden 
würden. Der Watchdog wird dann automatisch deaktiviert und der MCLR 
aktiviert ...

von Karsten (Gast)


Lesenswert?

So, mal ein kleines Update.
Ich habe heute im Code die main()-Funktion angepasst und den Watchdog 
abgeschaltet. Geändert hat das leider nichts.

Leider hatte ich keine Zeit, mal den anderen PIC zu testen, das hole ich 
dann morgen nach.

Auf jeden Fall schon einmal vielen Dank für die Hilfe!

Karsten

von Witkatz :. (wit)


Lesenswert?

1
#pragma config LVP = ON

Ich vermute, dass das aktivierte LVP den Pin RE3 für den 
Programmiermodus verwendet. Versuch es mal mit deaktiviertem LVP, wenn 
du es nicht benutzt.

von Volker S. (vloki)


Lesenswert?

An LVP habe ich auch schon gedacht, dann im Datenblatt nichts 
entsprechendes gefunden.
Jetzt habe ich noch mal nachgeschaut, und tatsächlich steht da unter

24.9 Single-Supply ICSP Programming
...
Note 3: While in Low-Voltage ICSP mode, MCLR
        is always enabled, regardless of the
        MCLRE bit, and the RE3 pin can no
        longer be used as a general purpose
        input.

von Karsten (Gast)


Lesenswert?

IHR SEID DIE GRÖSSTEN!

Danke Leute, LVP war der Schuldige!

Ich hoffe, bei den nächsten Projekten klappt das dann besser...

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.