Forum: Mikrocontroller und Digitale Elektronik Frage zum PIC C-Tutorial - Pullupwiderstände


von wulga (Gast)


Lesenswert?

Ich arbeite gerade ein Tutorial durch. Es geht darum auf Tastendruck 
eine LED-Reihe der Reihe nach weiterzuschalten. Der Programmablauf ist 
auch völlig klar, aber eine Frage zur Aktivierung der Pullupwiderstände 
hätte ich.

Hier mal ein Codefragment:
1
INTCON2bits.RBPU = 0;    // enable PORTB internal pullups
2
WPUBbits.WPUB0 = 1;    // enable pull up on RB0

Zuersteinmal die Frage, kann jemand die kryptischen Bezeichnungen 
INTCON2bits.RBPU und WPUBbits.WPUB0 entschlüsseln?

Und nun meine Frage, warum aktiviere ich in der ersten Zeile die 
internen Pullups bei PortB und muss dann nochmal den Pullup beim Pin B0 
aktivieren? Gibts da ein Schaltbild oder eine gute Erklärung dafür?

von lucifer (Gast)


Lesenswert?

In MPLAB kannst du so ein einzelnes Bit adressieren.
REGISTERNAMEbits.BITNAME.
Und ich nehme an, mit dem ersten Bit aktivierst du die Pull ups 
generell, mit dem zweiten sagst du, welchen Pin du hochziehen willst.

von Volker S. (vloki)


Lesenswert?

> Zuersteinmal die Frage, kann jemand die kryptischen Bezeichnungen
> INTCON2bits.RBPU und WPUBbits.WPUB0 entschlüsseln?
>
> Und nun meine Frage, warum aktiviere ich in der ersten Zeile die
> internen Pullups bei PortB und muss dann nochmal den Pullup beim Pin B0
> aktivieren? Gibts da ein Schaltbild oder eine gute Erklärung dafür?

ALLE deine Fragen werden im Data Sheet sehr ausführlich beantwortet.
(Suche z.B. einfach mal nach INTCON2 und WPUB ;-)

PS: MPLAB ist eine IDE. <REGISTERNAMEbits.BITNAME> hat aber was mit 
deinem C-Compiler zu tun. Ist leider nirgends vernünftig dokumentiert.
Am besten schaust du in das Header File für deinen PIC und googlest nach 
"C Bitfelder"

<edit> Die Definition für das Bitfeld im Header ist vermutlich 
gleichzeitig noch eine Union und bietet dir so mehrere Namen für das 
selbe Bit. Da RBPU low-aktiv ist müsste da noch so was wie NOT_RBPU 
sein. Wäre hier sinnvoller ...
(INTCON2bits.NOT_RBPU = 0)

: Bearbeitet durch User
von Michael S. (rbs_phoenix)


Lesenswert?

wulga schrieb:
> Zuersteinmal die Frage, kann jemand die kryptischen Bezeichnungen
> INTCON2bits.RBPU und WPUBbits.WPUB0 entschlüsseln?

INTerrupt CONtrol 2 Register, bit RB (PortB) Pull Up enable
Weak PullUp port B, bit Weak PullUp portB0

Vor dem Gebrauch einer uCs sollte man unbedingt das Datenblatt und die 
Errata laden und angucken. Eine Suche im Datenblatt (PDF -> STRG+F) 
hätte es dir verraten.

von Noch einer (Gast)


Lesenswert?

> warum aktiviere ich in der ersten Zeile ... und muss dann nochmal

Typisches PIC Problem. Die behalten alle Register aus früheren Pics bei 
und packen dann für die neuen Features zusätzliche Register dazu. Da 
kommen dann Sachen raus, die man nicht wirklich als Sinnvoll bezeichnen 
kann.

von Klaus (Gast)


Lesenswert?

Volker SchK schrieb:
> Ist leider nirgends vernünftig dokumentiert.

Zeig doch den kompletten Code

#define nirgends "MPLAB® XC8 C Compiler User’s Guide"

> The names of the structures that hold the bit-fields will typically
> be those of the corresponding register followed by bits. ...

MfG Klaus

von Volker S. (vloki)


Lesenswert?

Klaus schrieb:
> #define nirgends "MPLAB® XC8 C Compiler User’s Guide"

Tatsächlich, ich war nur zu blöd es zu finden ;-)

Sogar bei meinem geliebten C18 unter "Processor-Specific Header Files"

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.