Forum: Mikrocontroller und Digitale Elektronik Drehkodierschalter auf RD0-3 im PIC18F458


von Ben_powun (Gast)


Lesenswert?

Hallo!

Ich arbeite erst seit kurzem mit µCs und stehe nun vor einem kleinen 
Problem.
Vor mir habe ich eine fertige Firmware für unsere intelligenten 
Vorschaltgeräte. Dabei ist im D register auf RD0/RD1/RD2/RD3 eine 
7-Segment Anzeige vorgesehen.

Allerdings sollen an diese Pins nun ein Drehkodierschalter angebracht 
werden und ich sollte das in der Firmware integrieren. Allerdings bin 
ich mir nicht ganz sicher was ich wie ändern soll, da ich die Schritte 
des alten Programmierers nicht wirklich nachvollziehen kann.

in lowinit.c:
1
   /* PORT D */
2
      /* clear LATD register */
3
         LATD = CLEAR_LATCH_REGISTER;
4
5
      /* RD0; 7-segment display A */
6
         DISPLAY_A_ON;        /* switch A input of 7-segment display on */
7
         TRISD &= 0xFE;       /* set port to output */
8
9
      /* RD1; 7-segment display B */
10
         DISPLAY_B_OFF;       /* switch B input of 7-segment display off */
11
         TRISD &= 0xFD;       /* set port to output */
12
13
      /* RD2; 7-segment display C */
14
         DISPLAY_C_OFF;       /* switch C input of 7-segment display off */
15
         TRISD &= 0xFB;       /* set port to output */
16
17
      /* RD3; 7-segment display D */
18
         DISPLAY_D_ON;        /* switch D input of 7-segment display on */
19
         TRISD &= 0xF7;       /* set port to output */
die defines aus der global.h:
1
#define DISPLAY_A_ON               LATD |= 0x01
2
#define DISPLAY_A_OFF              LATD &= 0xFE
3
4
#define DISPLAY_B_ON               LATD |= 0x02
5
#define DISPLAY_B_OFF              LATD &= 0xFD
6
7
#define DISPLAY_C_ON               LATD |= 0x04
8
#define DISPLAY_C_OFF              LATD &= 0xFB
9
10
#define DISPLAY_D_ON               LATD |= 0x08
11
#define DISPLAY_D_OFF              LATD &= 0xF7
Der Drehkodierschalter gibt dem Gerät eine eindeutige ID (1 - 16 bzw hex 
0 - F bzw bin 0000 - 1111) mit dem dann schlussendlich 16 Geräte im 
Bus-System betrieben werden können.

Durch bisschen recherchieren habe ich eine vage vorstellung was TRIS 
macht und denke um RD0-3 als Eingänge zu definieren reicht:
1
      /* Set RD 0-3 to input ( 0 = output | 1 = input ) */
2
         TRISD = 0x0F;        // 0000 1111

Aber der rest ist mir noch relativ schleierhaft.
Vlt kann mir jemand kurz einen Input in einfachen Worten geben, der 
meine Arbeit erleichtert.


Vielen Dank im Vorhinein!

MFG
-Ben

von Kein Name (Gast)


Lesenswert?

Puh!

Mein Tipp wäre, erst mal 3-4 Tage Zeit nehmen und die Beispiele aus 
http://www.sprut.de/electronic/pic durcharbeiten.

In Summe kommst du wohl besser bei weg, als wenn du sofort mit dem 
komplexen Programm anfängst.

-- Grüße und viel Erfolg bei der Sache!

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.