Forum: Mikrocontroller und Digitale Elektronik PIC10F202 GP2 Input Problem


von Markus (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

Ich möchte die Pins GP0 und GP1 als Ausgänge, und die Pins GP2 und GP3 
eines PIC10F202 als Eingänge schalten. Die Eingänge habe ich noch 
zusätzlich mit 2 PullUp Widerständen beschalten. Komisch ist, dass sich 
der IC mit dem Taster an GP3 perfekt schalten lässt, ich bei GP2 aber 
einen Kurzschluss erhalte :/

Im Datenblatt habe ich natürlich schon gelesen, dass GP2 auch noch 
mehrere andere Funktionen hat, welche auch das TRIS-Register 
überschreiben, die habe ich soweit allerdings deaktiviert. Oder nicht?

Ich verwende MPLABX 2.00 und den XC8 Compiler.
Vielen Dank für eure Hilfe! :)

LG Markus
1
/* 
2
 * File:   main.c
3
 * Author: Markus
4
 *
5
 * Created on 26. April 2014, 00:08
6
 */
7
#include <pic10f202.h>
8
#include <plib.h>
9
#include <stdlib.h>
10
#include <xc.h>
11
12
#pragma config OSC = IntRC, MCLRE = OFF, WDTE = OFF, CP = OFF
13
14
15
//Flags
16
unsigned char rowOn = 1;
17
unsigned char stopLightOn = 1;
18
unsigned char stopLightBlinking = 0;
19
20
unsigned int ms = 0;
21
unsigned char ms2 = 0;
22
23
unsigned char buttonOld = 0;
24
unsigned char button = 0;
25
unsigned char pressed = 0;
26
27
void main(void)
28
{
29
    OSCCAL = 0b01111110; //max frequency;GP2/T0CKI/COUT applied to GP2
30
    OPTION = 0b11000101; //WakeUp on PinChange OFF; WeakPullUps OFF; TMR0 internal CLK; undefined; PS to TMR0; PS 1:64
31
    TMR0 = 131; //8ms to OF
32
    TRISGPIO = 0b00001100;
33
    GP0 = 0;
34
    GP1 = 1;
35
36
    while(1)
37
    {
38
        
39
        if(TMR0 < 131) //Overflow detected
40
        {
41
            ms2 = ms2 + 8;
42
            
43
            buttonOld = button;
44
            button = GP3; //0 wenn pressed
45
46
            if((buttonOld != 0) && (button == 0)) //started pressing button
47
            {
48
                ms = 0;
49
                pressed = 1;
50
            }
51
            else if((buttonOld == 0) && (button == 0)) //continue pressing
52
            {
53
                ms = ms+8;
54
            }
55
            else if((buttonOld == 0) && (button != 0) && (pressed == 1)) // stopped pressing
56
            {
57
                
58
                if(ms < 3000)
59
                {
60
                    if(rowOn == 1)
61
                        rowOn = 0;
62
                    else
63
                        rowOn = 1;
64
                }
65
                else if(ms < 6000)
66
                {
67
                    if(stopLightOn == 1)
68
                        stopLightOn = 0;
69
                    else
70
                        stopLightOn = 1;
71
                    
72
                    stopLightBlinking = 0;
73
                }
74
                else
75
                {
76
                    stopLightBlinking = 1;
77
                }
78
79
                pressed = 0;
80
81
82
            }
83
84
            TMR0 = 131;
85
        }
86
87
        if(rowOn != 0) //middle LED row
88
        {
89
            GP1 = 1;
90
        }
91
        else
92
        {
93
            GP1 = 0;
94
        }
95
96
        if(stopLightOn != 0) //break light
97
        {
98
            if(GP2 == 0) //BREAK
99
            {
100
                if(stopLightBlinking == 1)
101
                {
102
                    if(ms2 > 200)
103
                    {
104
                        if(GP0 == 1)
105
                            GP0 = 0;
106
                        else
107
                            GP0 = 1;
108
109
                        ms2 = 0;
110
                    }
111
                }
112
                else
113
                {
114
                    GP0 = 1;
115
                }
116
            }
117
            
118
        }
119
        else
120
        {
121
            GP0 = 0;
122
        }
123
    }
124
}

von Max H. (hartl192)


Lesenswert?

GP3 ist Input Only, den kann man gar nicht als Ausgang verwenden. Hast 
du einen Hardwarefehler (Lötbrücke) oder dass dein Programmer MCLR/GP3 
aktiv auf High zieht schon ausgeschlossen?

von Markus (Gast)


Lesenswert?

Hi Max,

GP2&3 werden auch als Eingänge verwendet :) GP3 funktioniert auch 
problemlos, nur bei GP2 bekomme ich einen Kurzschluss. Ich programmiere 
den IC und steck in dann ohne programmer zu Schaltung (bereits prof. 
geätzt) dazu, der hat also keinen Einfluss auf die Funktion des ICs.
Programmiergerät ist ein PICkit 2.
Danke für deine Hilfe! :) konntest mir letztens auch schon helfen.

Lg Markus

von hagi (Gast)


Lesenswert?

Unter Kurzschluß vermute ich einmal eine Verbindung zwischen VCC und 
GND.

Da gibt es eigentlich nur zwei Möglichkeiten:
 Lötbrücke an R7 (Überbrückt den Widerstand)
 Lötbrücke am PIC und verbindet Pin2 mit Pin3.

von Max H. (hartl192)


Lesenswert?

Markus schrieb:
> GP3 funktioniert auch
> problemlos, nur bei GP2 bekomme
Sry, ich habe irgendwie die ganze Zeit an GP3 gedacht.
Ich sehe im PIC nur Gründe, wieso der GP2 Output sein könnte: TRSBIT 
gelöscht, als FOSC/4 out konfiguriert. Die hast du beide richtig 
eingestellt. Comparator output hat nur der PIC10F204/206. Man könnte ja 
nur mal zur Sicherheit das CMCON0bits.COUTEN setzen.
Ist es sicher kein Hardware Fehler? Miss mal im Spannungslosen zustand 
den Widerstand zwischen GP2 und Vcc.

: Bearbeitet durch User
von Markus (Gast)


Lesenswert?

hagi schrieb:
> Unter Kurzschluß vermute ich einmal eine Verbindung zwischen VCC
> und
> GND.
>
> Da gibt es eigentlich nur zwei Möglichkeiten:
>  Lötbrücke an R7 (Überbrückt den Widerstand)
>  Lötbrücke am PIC und verbindet Pin2 mit Pin3.

Hab beides nochmal überprüft und das ist es offenbar nicht :/

Max H. schrieb:
> Comparator output hat nur der PIC10F204/206. Man könnte ja
> nur mal zur Sicherheit das CMCON0bits.COUTEN setzen.

Fehler: undefined identifier, geht leider nicht.
in der PIC10F202.h findet man zu einem Comparator auch keine einzige 
Zeile.

Max H. schrieb:
> Miss mal im Spannungslosen zustand
> den Widerstand zwischen GP2 und Vcc

da messe ich 6kOhm? Was sagt das aus?

Vielen Dank!
LG Markus

von Markus (Gast)


Lesenswert?

Sonst noch jemand Ideen?

Danke!
Markus

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.