Forum: Mikrocontroller und Digitale Elektronik Zustand am Port-Pin ändert sich beim "einlesen"


von Mira (Gast)


Lesenswert?

Guten Abend,

ich hab eine Frage bezüglich dem Einlesen eines Pins. Vorab muss ich 
gestehen, dass ich in Sachen µC noch nicht wirklich fit bin.

Ich möchte die DevID des PIC18F4550 auslesen. Die benötigte Clk als auch 
die Befehle (Data) generiere ich über folgende Anweisung:
1
...
2
int x;
3
  x = (int)data[3];
4
  switch ((int)data[1])
5
  {
6
   ...
7
   case 93:
8
          switch ((int)data[2])
9
    {
10
         ...
11
               case 6: TRISBbits.TRISB6 = 0; Delay10KTCYx(10); LATBbits.LATB6 = x; break;
12
               case 7: TRISBbits.TRISB7 = 0; Delay10KTCYx(10); LATBbits.LATB7 = x; break;
13
               default: break;
14
           }
wobei RB6 für die clk und RB7 für data genutzt wird. Das funktioniert 
soweit auch alles.

Nun möchte ich wie in "Flash Microcontroller Programming Specification" 
(E9D6C43d01) beschrieben, über folgende Funktion die empfangenden Daten 
auslesen:
1
 
2
3
switch ((int)data[1]) 
4
  {
5
   ...
6
   case 7: TRISBbits.TRISB7 = 1; Delay10KTCYx(10); data[0] =PORTBbits.RB7; break;
7
   }
8
...

Mein Problem: sobald ich diese Anweisung ausführe, springt der Pegel an 
diesem Pin auf high. Meine Frage: ist der Lesebefehl evt falsch?

Ich würde mich freuen, wenn mir jemand weiterhelfen könnte.

von Lehrmann M. (ubimbo)


Lesenswert?

Hallo,

also:

Mira schrieb:
> ich hab eine Frage bezüglich dem Einlesen eines Pins.

Mira schrieb:
> Ich möchte die DevID des PIC18F4550 auslesen.

Ich kapier noch nicht ganz was du vor hast. Taster oder DevID?
Du willst doch nicht den Clk per Taster erzeugen oder ? Ich steh noch 
auf de m Schlauch.

Mira schrieb:
> Nun möchte ich wie in "Flash Microcontroller Programming Specification"
> (E9D6C43d01) beschrieben, über folgende Funktion die empfangenden Daten
> auslesen:
>
>
> switch ((int)data[1])
>   {
>    ...
>    case 7: TRISBbits.TRISB7 = 1; Delay10KTCYx(10); data[0] =PORTBbits.RB7; 
break;
>    }
> ...
>
>
> Mein Problem: sobald ich diese Anweisung ausführe, springt der Pegel an
> diesem Pin auf high. Meine Frage: ist der Lesebefehl evt falsch?

Vielleicht werden da Daten / Clk ausgegeben? Hast du mal ein Oszi 
drangehalten oder wie bemerkst du, dass der Pin high wird ?

Interessehalber noch: Was um Gottes Willen willst du mit der DevID ?

Was noch hilfreich wäre: Configbits, GESAMTER QUELLCODE und die 
Schaltung.

Das bekommen wir schon noch hin.

von Mira (Gast)


Lesenswert?

:)

Im Grunde möchte ich zum testen die Device ID eines DUTS (in diesem Fall 
einem PIC18F4550) über einen Steuerpic (ebenfalls ein PIC18F4550) 
auslesen. Dazu erzeuge ich über das Setzen zwei beliebiger Pins - in dem 
Fall RB6 und RB7 - sowohl die clk als auch die benötigten Anweisungen.

Bsp:
set table pointer (Addr[21:16])
um diese Anweisung an den PIC zu senden gehe ich wie folgt vor:

1. MCLR auf high setzen um das DUT in den Programmiermodus zu versetzen
2. die Anweisung set table pointer (Addr[21:16]) erzeugen:

   a) 0000 4-Bit Command
      - RB7 (data) auf hig setzen
      - RB6 (clk) auf high setzen
      - RB6 auf low setzen
      - RB6 auf high setzen
      - RB6 auf low setzen
      - RB6 auf high setzen
      - RB6 auf low setzen
      - RB6 auf high setzen
      - RB6 auf low setzen
      - anschließend wie gefordert die clk zwei "Takte" auf low belassen

   b) MOVLW Adrr : 11111100 01110000
      - RB7 high
      - RB6 high
      - RB6 low
      ....

Somit generiere ich die geforderten Anweisungen alleine über das Setzen 
der Pins. So zumindest der Plan.

Um nun die zurückgelieferten Werte -in diesem Fall eben die DevID- auf 
dem PC wieder auszugeben, schalte ich nach der Anweisung: 1001 00000000 
den Pin RB7 auf Eingang. (Den benutze Code habe ich oben ja bereits 
gepostet). Sobald ich die Prozedur durchlaufe setzt er mir den Pin auf 
high und liefert mir als Ergebnis eine 1. Nachgemessen hab ich das ganze 
mit einem Multimeter - Oszi hab ich im Augenblick nicht zur Hand.

Meine Configs:
1
#pragma config PLLDIV   = 5       // (20 MHz input)
2
#pragma config CPUDIV   = OSC1_PLL2
3
#pragma config USBDIV   = 2       // Clock source from 96MHz PLL/2
4
#pragma config FOSC     = HSPLL_HS
5
//#pragma config FCMEN    = OFF
6
#pragma config IESO     = OFF
7
#pragma config PWRT     = ON
8
#pragma config BOR      = OFF
9
//#pragma config BORV     = 3
10
#pragma config VREGEN   = ON
11
#pragma config WDT      = OFF
12
#pragma config WDTPS    = 32768
13
#pragma config MCLRE    = OFF
14
#pragma config LPT1OSC  = OFF
15
#pragma config PBADEN   = OFF
16
#pragma config CCP2MX   = ON
17
#pragma config STVREN   = ON
18
#pragma config LVP      = OFF
19
//#pragma config ICPRT    = OFF     // Dedicated In-Circuit Debug/Programming
20
#pragma config XINST    = OFF       // Extended Instruction Set
21
#pragma config CP0      = OFF
22
#pragma config CP1      = OFF
23
#pragma config CP2      = OFF
24
//#pragma config CP3      = OFF
25
#pragma config CPB      = OFF
26
#pragma config CPD      = OFF
27
#pragma config WRT0     = OFF
28
#pragma config WRT1     = OFF
29
#pragma config WRT2     = OFF
30
//#pragma config WRT3     = OFF
31
#pragma config WRTB     = OFF       // Boot Block Write Protection
32
#pragma config WRTC     = OFF
33
#pragma config WRTD     = OFF
34
#pragma config EBTR0    = OFF
35
#pragma config EBTR1    = OFF
36
#pragma config EBTR2    = OFF
37
//#pragma config EBTR3    = OFF
38
#pragma config EBTRB    = OFF

Ich weiss, das ich das Ganze über diverse Routinen umsetzen könnte - ich 
möchte jedoch diese Routinen alleine über das "Toggeln" der I/O 
Leitungen erzeugen.

mfG Mira

von Mira (Gast)


Lesenswert?

Noch eine Anmerkung: Ich bekomme als DevID1 und DevID2 folgendes 
geliefert: 1111 1111 - was definitiv falsch ist, da DevID1 = 06h und 
DevID2 = 12h lauten müsste.

von Anja (Gast)


Lesenswert?

Hallo,

Mira schrieb:
> 1. MCLR auf high setzen um das DUT in den Programmiermodus zu versetzen

Du weißt aber schon daß High für MCLR beim Programmieren zwischen VDD+4V 
(z.B. 9,5V) und +12,5V liegen muß?

Es sei denn du aktivierst und verwendest den LVP-Modus
(#pragma config LVP      = ON)
Da brauchst Du aber noch RB5 zum programmieren.

Gruß Anja

von Mira (Gast)


Lesenswert?

@Anja - vielen Dank für den Tipp.  Gruß Mira

von Lehrmann M. (ubimbo)


Lesenswert?

Hallo,

Mira schrieb:
> Den benutze Code habe ich oben ja bereits
> gepostet).

Ich weiß ich hätt ihn doch gerne noch ganz gesehen. Ich muss bei 
sovielen "..." soviel denken =)

MCLR sollte erfahrungsgemäß deutlich größer 10V sein. Von LVP würde ich 
dir erstmal abraten.

Den PowerUpTimer hast du auch beim anderen PIC beachtet? Nicht, dass der 
gleich lossendet obwohl sich der ZielPIC noch in POR befindet.

Die Configs sehen eigentlich super aus. Wenn ich mich recht entsinne 
hast du jetzt 48 MHz intern.

Wäre cool wenn du nochmal den ganzen Code hättest. Würde unglaublich 
helfen.

Mira schrieb:
> Ich weiss, das ich das Ganze über diverse Routinen umsetzen könnte - ich
> möchte jedoch diese Routinen alleine über das "Toggeln" der I/O
> Leitungen erzeugen.

Man kann's so machen =)

von Mira (Gast)


Lesenswert?

@Michael hier der Code:
1
/*********************************************************************
2
 * FileName:        user.c
3
 * Dependencies:    See INCLUDES section below
4
 * Processor:       PIC18
5
 * Compiler:        C18 2.30.01+
6
 * Company:         Microchip Technology, Inc.
7
 *
8
 * modified by sprut
9
 *
10
 ********************************************************************/
11
12
/** I N C L U D E S **********************************************************/
13
#include <p18cxxx.h>
14
#include <usart.h>
15
#include "system\typedefs.h"
16
#include "system\usb\usb.h"
17
#include "io_cfg.h"             // I/O pin mapping
18
#include "user\user.h"
19
#include "lcd.h"
20
21
22
/** Configuration ********************************************************/
23
#pragma config PLLDIV   = 5       // (20 MHz input)
24
#pragma config CPUDIV   = OSC1_PLL2
25
#pragma config USBDIV   = 2       // Clock source from 96MHz PLL/2
26
#pragma config FOSC     = HSPLL_HS
27
//#pragma config FCMEN    = OFF
28
#pragma config IESO     = OFF
29
#pragma config PWRT     = ON
30
#pragma config BOR      = OFF
31
//#pragma config BORV     = 3
32
#pragma config VREGEN   = ON
33
#pragma config WDT      = OFF
34
#pragma config WDTPS    = 32768
35
#pragma config MCLRE    = OFF
36
#pragma config LPT1OSC  = OFF
37
#pragma config PBADEN   = OFF
38
#pragma config CCP2MX   = ON
39
#pragma config STVREN   = ON
40
#pragma config LVP      = OFF
41
//#pragma config ICPRT    = OFF     // Dedicated In-Circuit Debug/Programming
42
#pragma config XINST    = OFF       // Extended Instruction Set
43
#pragma config CP0      = OFF
44
#pragma config CP1      = OFF
45
#pragma config CP2      = OFF
46
//#pragma config CP3      = OFF
47
#pragma config CPB      = OFF
48
#pragma config CPD      = OFF
49
#pragma config WRT0     = OFF
50
#pragma config WRT1     = OFF
51
#pragma config WRT2     = OFF
52
//#pragma config WRT3     = OFF
53
#pragma config WRTB     = OFF       // Boot Block Write Protection
54
#pragma config WRTC     = OFF
55
#pragma config WRTD     = OFF
56
#pragma config EBTR0    = OFF
57
#pragma config EBTR1    = OFF
58
#pragma config EBTR2    = OFF
59
//#pragma config EBTR3    = OFF
60
#pragma config EBTRB    = OFF
61
62
63
64
65
/** V A R I A B L E S ********************************************************/
66
// hier die variablen definieren...
67
#pragma udata
68
byte data[20];   // bis 64bytes möglich, oder dann descriptor(?) ändern
69
BYTE _data[1];
70
typedef unsigned char T_Bitvar;
71
72
typedef struct
73
{
74
    unsigned bit0:1;
75
    unsigned bit1:1;
76
    unsigned bit2:1;
77
    unsigned bit3:1;
78
    unsigned bit4:1;
79
    unsigned bit5:1;
80
    unsigned bit6:1;
81
    unsigned bit7:1;
82
} T_Bitvar;
83
84
T_Bitvar bitvar1[1]; 
85
86
87
88
89
/** D E C L A R A T I O N S **************************************************/
90
// hier persönliche initialisierungen definieren...
91
#pragma code
92
void UserInit(void) {
93
     LATB &= 0x00;
94
     TRISB = 0x00;
95
      //LCD_Init();
96
     ADCON1 &= 0x0F;
97
}//end UserInit
98
99
100
void setpin (void)
101
{
102
  // data[1] = port
103
  // data[2] = pin
104
  // data[3] = level
105
106
  int x;
107
  x = (int)data[3];
108
  switch ((int)data[1])
109
  {
110
   case 92: 
111
           //LATA &= 0x00;
112
           //TRISA = 0x00;
113
           switch ((int)data[2])
114
       {
115
               case 3: TRISAbits.TRISA3 = 0; Delay10KTCYx(10); LATAbits.LATA3 = x; break;
116
               case 4: TRISAbits.TRISA4 = 0; Delay10KTCYx(10); LATAbits.LATA4 = x; break;
117
               case 5: TRISAbits.TRISA5 = 0; Delay10KTCYx(10); LATAbits.LATA5 = x; break;
118
               case 6: TRISAbits.TRISA6 = 0; Delay10KTCYx(10); LATAbits.LATA6 = x; break;
119
           }
120
   break;//end port a
121
122
     case 93: 
123
      //LATB &= 0x00;
124
          //TRISB = 0x00;
125
          switch ((int)data[2])
126
       {
127
         case 0: TRISBbits.TRISB0 = 0; Delay10KTCYx(10); LATBbits.LATB0 = x; break;
128
               case 1: TRISBbits.TRISB1 = 0; Delay10KTCYx(10); LATBbits.LATB1 = x; break;
129
               case 2: TRISBbits.TRISB2 = 0; Delay10KTCYx(10); LATBbits.LATB2 = x; break;
130
               case 3: TRISBbits.TRISB3 = 0; Delay10KTCYx(10); LATBbits.LATB3 = x; break;
131
               case 4: TRISBbits.TRISB4 = 0; Delay10KTCYx(10); LATBbits.LATB4 = x; break;
132
               case 5: TRISBbits.TRISB5 = 0; Delay10KTCYx(10); LATBbits.LATB5 = x; break;
133
               case 6: TRISBbits.TRISB6 = 0; Delay10KTCYx(10); LATBbits.LATB6 = x; break;
134
               case 7: TRISBbits.TRISB7 = 0; Delay10KTCYx(10); LATBbits.LATB7 = x; break;
135
               default: break;
136
           }
137
     break;// end port b
138
   case 94: 
139
         //LATC &= 0x00;
140
         //TRISC = 0x00; 
141
         switch ((int)data[2])
142
       {
143
               case 1: TRISCbits.TRISC1 = 0; Delay10KTCYx(10); LATCbits.LATC1 = x; break;
144
               case 2: TRISCbits.TRISC2 = 0; Delay10KTCYx(10); LATCbits.LATC2 = x; break;
145
               case 6: TRISCbits.TRISC6 = 0; Delay10KTCYx(10); LATCbits.LATC6 = x; break;
146
               case 7: TRISCbits.TRISC7 = 0; Delay10KTCYx(10); LATCbits.LATC7 = x; break;
147
               break;
148
           }
149
     break;// end port c
150
     case 95: 
151
         //LATD &= 0x00;
152
         //TRISD = 0x00; 
153
         switch ((int)data[2])
154
       {
155
               case 0: TRISDbits.TRISD0 = 0; Delay10KTCYx(10); LATDbits.LATD0 = x; break;
156
               case 1: TRISDbits.TRISD1 = 0; Delay10KTCYx(10); LATDbits.LATD1 = x; break;
157
               case 2: TRISDbits.TRISD2 = 0; Delay10KTCYx(10); LATDbits.LATD2 = x; break;
158
               case 3: TRISDbits.TRISD3 = 0; Delay10KTCYx(10); LATDbits.LATD3 = x; break;
159
               case 4: TRISDbits.TRISD4 = 0; Delay10KTCYx(10); LATDbits.LATD4 = x; break;
160
               case 5: TRISDbits.TRISD5 = 0; Delay10KTCYx(10); LATDbits.LATD5 = x; break;
161
               case 6: TRISDbits.TRISD6 = 0; Delay10KTCYx(10); LATDbits.LATD6 = x; break;
162
               case 7: TRISDbits.TRISD7 = 0; Delay10KTCYx(10); LATDbits.LATD7 = x; break;
163
               break;
164
           }
165
     break;// end port d
166
     case 96: 
167
        //LATE &= 0x00;
168
        //TRISE = 0x00;
169
        switch ((int)data[2])
170
       {
171
               case 0: TRISEbits.TRISE0 = 0; Delay10KTCYx(10); LATEbits.LATE0 = x; break;
172
               case 1: TRISEbits.TRISE1 = 0; Delay10KTCYx(10); LATEbits.LATE1 = x; break;
173
               case 2: TRISEbits.TRISE2 = 0; Delay10KTCYx(10); LATEbits.LATE2 = x; break;
174
               break;           }
175
     break;// end port e
176
  }
177
}
178
179
void setport (void)
180
{
181
  //data[1] = port
182
  //data[2]-[9] = bitfolge
183
  
184
  int bit0;
185
  int bit1;
186
  int bit2;
187
  int bit3;
188
  int bit4;
189
  int bit5;
190
  int bit6;
191
  int bit7;
192
  
193
  bit0 = (int)data[2];
194
  bit1 = (int)data[3];
195
  bit2 = (int)data[4];
196
  bit3 = (int)data[5];
197
  bit4 = (int)data[6];
198
  bit5 = (int)data[7];
199
  bit6 = (int)data[8];
200
  bit7 = (int)data[9];
201
202
  switch ((int)data[1])
203
  {
204
     case 92:  
205
     break;
206
   case 93:  LATB &= 0x00;
207
               TRISB = 0x00;
208
               LATBbits.LATB0 = bit0;
209
         LATBbits.LATB1 = bit1;
210
          LATBbits.LATB2 = bit2;
211
         LATBbits.LATB3 = bit3;
212
         LATBbits.LATB4 = bit4;
213
         LATBbits.LATB5 = bit5;
214
          LATBbits.LATB6 = bit6;
215
          LATBbits.LATB7 = bit7; 
216
     break;
217
   case 94:  
218
     break;
219
     case 95:  LATD &= 0x00;
220
               TRISD = 0x00;
221
         LATDbits.LATD0 = bit0;
222
         LATDbits.LATD1 = bit1;
223
          LATDbits.LATD2 = bit2;
224
         LATDbits.LATD3 = bit3;
225
         LATDbits.LATD4 = bit4;
226
         LATDbits.LATD5 = bit5;
227
          LATDbits.LATD6 = bit6;
228
          LATDbits.LATD7 = bit7;
229
     break;
230
     case 96:  LATE &= 0x00;
231
               TRISE = 0x00;
232
               LATEbits.LATE0 = bit0;
233
         LATEbits.LATE1 = bit1;
234
          LATEbits.LATE2 = bit2;;
235
     break;
236
  }
237
}
238
239
240
241
void getport (void)
242
{
243
  // data[1] = Port
244
245
  switch ((int)data[1]){ 
246
         case 92:  TRISA = 0xFF;
247
                   Delay10KTCYx(100);
248
                   data[0] = PORTA;
249
                   break;
250
       case 93:  TRISB = 0xFF;
251
                   Delay10KTCYx(100);
252
                   data[0] = PORTB;
253
                   break;
254
       case 94:  TRISC = 0xFF;
255
           Delay10KTCYx(100);
256
                   data[0] = PORTC;
257
                   break;
258
         case 95:  TRISD = 0xFF;
259
           Delay10KTCYx(100);
260
                   data[0] = PORTD;
261
                   break;
262
         case 96:  TRISE = 0xFF;
263
           Delay10KTCYx(100);
264
                   data[0] = PORTE;
265
                   break;
266
  }
267
}
268
269
void getpin (void)
270
{
271
  // data[1] = port
272
  // data[2] = Pin
273
274
switch ((int)data[1]) 
275
  {
276
    case 92:  //TRISA = 0xFF;
277
              switch ((int)data[2]){   
278
              case 0: TRISAbits.TRISA0 = 1; Delay10KTCYx(10); data[0] =PORTAbits.RA0; break;
279
              case 1: TRISAbits.TRISA1 = 1; Delay10KTCYx(10); data[0] =PORTAbits.RA1; break;
280
              case 2: TRISAbits.TRISA2 = 1; Delay10KTCYx(10); data[0] =PORTAbits.RA2; break;
281
              case 3: TRISAbits.TRISA3 = 1; Delay10KTCYx(10); data[0] =PORTAbits.RA3; break;
282
              case 4: TRISAbits.TRISA4 = 1; Delay10KTCYx(10); data[0] =PORTAbits.RA4; break;
283
              case 5: TRISAbits.TRISA5 = 1; Delay10KTCYx(10); data[0] =PORTAbits.RA5; break;
284
              case 6: TRISAbits.TRISA6 = 1; Delay10KTCYx(10); data[0] =PORTAbits.RA6; break;
285
              }
286
     break;
287
   case 93: //PORTB = 0;
288
              //TRISB = 0xFF;
289
              switch ((int)data[2]){
290
              case 0: TRISBbits.TRISB0 = 1; Delay10KTCYx(10); data[0] =PORTBbits.RB0; break;
291
              case 1: TRISBbits.TRISB1 = 1; Delay10KTCYx(10); data[0] =PORTBbits.RB1; break;
292
              case 2: TRISBbits.TRISB2 = 1; Delay10KTCYx(10); data[0] =PORTBbits.RB2; break;
293
              case 3: TRISBbits.TRISB3 = 1; Delay10KTCYx(10); data[0] =PORTBbits.RB3; break;
294
              case 4: TRISBbits.TRISB4 = 1; Delay10KTCYx(10); data[0] =PORTBbits.RB4; break;
295
              case 5: TRISBbits.TRISB5 = 1; Delay10KTCYx(10); data[0] =PORTBbits.RB5; break;
296
              case 6: TRISBbits.TRISB6 = 1; Delay10KTCYx(10); data[0] =PORTBbits.RB6; break;
297
              case 7: TRISBbits.TRISB7 = 1; Delay10KTCYx(10); data[0] =PORTBbits.RB7; break;
298
              }
299
     break;
300
   case 94: //TRISC = 0xFF;
301
              switch ((int)data[2]){
302
              case 0: TRISCbits.TRISC0 = 1; Delay10KTCYx(10); data[0] =PORTCbits.RC0; break;
303
              case 1: TRISCbits.TRISC1 = 1; Delay10KTCYx(10); data[0] =PORTCbits.RC1; break;
304
              case 2: TRISCbits.TRISC2 = 1; Delay10KTCYx(10); data[0] =PORTCbits.RC2; break;
305
              case 6: TRISCbits.TRISC6 = 1; Delay10KTCYx(10); data[0] =PORTCbits.RC6; break;
306
              case 7: TRISCbits.TRISC7 = 1; Delay10KTCYx(10); data[0] =PORTCbits.RC7; break;
307
              }
308
     break;
309
     case 95: //TRISD = 0xFF;
310
              switch ((int)data[2]){
311
              case 0: TRISDbits.TRISD0 = 1; Delay10KTCYx(10); data[0] =PORTDbits.RD0; break;
312
              case 1: TRISDbits.TRISD1 = 1; Delay10KTCYx(10); data[0] =PORTDbits.RD1; break;
313
              case 2: TRISDbits.TRISD2 = 1; Delay10KTCYx(10); data[0] =PORTDbits.RD2; break;
314
              case 3: TRISDbits.TRISD3 = 1; Delay10KTCYx(10); data[0] =PORTDbits.RD3; break;
315
              case 4: TRISDbits.TRISD4 = 1; Delay10KTCYx(10); data[0] =PORTDbits.RD4; break;
316
              case 5: TRISDbits.TRISD5 = 1; Delay10KTCYx(10); data[0] =PORTDbits.RD5; break;
317
              case 6: TRISDbits.TRISD6 = 1; Delay10KTCYx(10); data[0] =PORTDbits.RD6; break;
318
              case 7: TRISDbits.TRISD7 = 1; Delay10KTCYx(10); data[0] =PORTDbits.RD7; break;
319
              }
320
     break;
321
     case 96: //TRISE = 0xFF;
322
              switch ((int)data[2]){
323
              case 0: TRISEbits.TRISE0 = 1; Delay10KTCYx(10); data[0] =PORTEbits.RE0; break;
324
              case 1: TRISEbits.TRISE1 = 1; Delay10KTCYx(10); data[0] =PORTEbits.RE1; break;
325
              case 2: TRISEbits.TRISE2 = 1; Delay10KTCYx(10); data[0] =PORTEbits.RE2; break;
326
              }              
327
     break;
328
  }
329
330
}
331
332
void pause(void)
333
{
334
  Delay10KTCYx(10);
335
}
336
337
338
/** " M A I N " - P R O G R A M ********************************************/
339
340
void ProcessIO(void) {
341
    if(USBGenRead(data,20)) {
342
    switch ((int)data[0]) {                    // entscheidet anhand des ersten Bytes um welchen fall 
343
      case 0:  pause();
344
                    break;
345
      case 1: setpin();                      // port, pin, zustand
346
                    break;
347
      case 2: setport();
348
          break;                         // port, bitfolge
349
      case 3: getpin(); 
350
                    if(!mUSBGenTxIsBusy())
351
              USBGenWrite(data,1);
352
                    break;                         // pin, port
353
            case 4: getport();
354
          if(!mUSBGenTxIsBusy())
355
            USBGenWrite(data,1);       // port             
356
          break;
357
            case 5: getpin();
358
          if(!mUSBGenTxIsBusy())
359
            USBGenWrite(data,1);       // port             
360
          break;
361
    }
362
  }
363
}//end ProcessIO

Ich hab die LVP-Variante versucht - musste aber feststellen, dass er das 
gleiche wie zuvor macht. Irgendetwas läuft da falsch ....

von Mira (Gast)


Lesenswert?

Ich noch mal :) ... Ich hab jetzt mal die internen Pull-Ups von PortB 
ausgeschaltet - und siehe da, er zieht den Pin beim einlesen nicht mehr 
auf high.

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.