Forum: Mikrocontroller und Digitale Elektronik PIC 16F684 LED blinkt immer


von Michael S. (michas)


Lesenswert?

Hallo,

ich habe mein erstes Programm geschrieben. Jetzt habe ich ein Problem. 
Ich habe an einem Pic 16F684 unter anderem eine LED angeschlossen, die 
mir einen Zustand anzeigen soll. Diese blinkt aber immer oder ist aus.
Kann mir jemand helfen?

Mein Programm total abgespeckt:
1
;                                               *
2
;     Pinbelegung                               *
3
;----------------------------------             *
4
;    PORTA:   0   Ausg Rel_a                    *
5
;             1   Ausg Rel_b                    *
6
;             2   Ausg C                        *
7
;             3   Eing                          *
8
;             4   Ausg A/X                      *
9
;             5   Ausg B/Y                      *
10
;    PORTC:  0  Ausg LED                        *
11
;        1  Eing C                              *
12
;        2  Eing B                              *
13
;        3  Eing A                              *
14
;        4  Eing Y                              *
15
;        5  Eing X                              *
16
;                                               *   
17
;                                               *
18
;******************************************************************************
19
20
     LIST      p=16F684             ; Prozessor definieren
21
     #INCLUDE <P16F684.INC>         ; Variablen für Prozessor
22
23
  #define Rel_a PORTA,0      ; Labels definieren
24
  #define Rel_b PORTA,1
25
  #define A_C PORTA,2
26
  #define A_AX PORTA,4
27
  #define A_BY PORTA,5
28
  #define LED PORTC,0
29
  #define E_C PORTC,1
30
  #define E_B PORTC,2
31
  #define E_A PORTC,3
32
  #define E_Y PORTC,4
33
  #define E_X PORTC,5
34
  #define M_AX Merker,0
35
  #define M_BY Merker,1
36
  #define M_C Merker,2
37
  #define M_LED Merker,3
38
  #define M_Rel_a Merker,4
39
  #define M_Rel_b Merker,5
40
41
;------------------------------------------------------------------------------
42
;
43
; CONFIGURATION
44
;
45
;------------------------------------------------------------------------------
46
;
47
   __CONFIG    _CP_OFF & _CPD_OFF & _BOD_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _FCMEN_OFF & _IESO_OFF
48
;
49
  
50
; 
51
;
52
;------------------------------------------------------------------------------
53
54
; Variablen definieren
55
    CBLOCK 0x20 ; 
56
        
57
        Merker    
58
        loops 
59
        loops2 
60
    
61
    ENDC
62
63
;------------------------------------------------------------------------------
64
; RESET VECTOR
65
;------------------------------------------------------------------------------
66
67
RESET
68
         ORG     0x0000           ; processor reset vector
69
      
70
      CALL  Init
71
      BANKSEL PORTA
72
      BCF    Rel_a      ;Rel_a löschen
73
      BCF    Rel_b      ;Rel_b löschen
74
      BANKSEL PORTC
75
      BCF    LED        ;LED löschen
76
      CLRF  Merker      ;Merker löschen      
77
      GOTO    START           ; Beginn Programm
78
79
80
81
;------------------------------------------------------------------------------
82
; INIT
83
;------------------------------------------------------------------------------
84
85
86
87
Init
88
    
89
    BCF STATUS,RP0   ;Bank 0
90
    CLRF PORTA    ;Init PORTA
91
    MOVLW 07h     ;Set RA<2:0> to
92
    MOVWF CMCON0   ;digital I/O
93
    BSF STATUS,RP0   ;Bank 1
94
    CLRF ANSEL     ;digital I/O
95
    MOVLW B'00001000' ;Set RA<0-5> as outputs / 3 as input
96
    MOVWF TRISA 
97
    BCF STATUS,RP0   ;Bank 0
98
99
    BANKSEL PORTC   ;
100
    CLRF PORTC     ;Init PORTC
101
    MOVLW 07h     ;Set RC<4,1:0> to
102
    MOVWF CMCON0   ;digital I/O
103
    BANKSEL ANSEL  ;
104
    CLRF ANSEL     ;digital I/O
105
    MOVLW B'00111110' ;Set RC<1-5> as inputs / 0 as output
106
    MOVWF TRISC 
107
    BCF STATUS,RP0   ;Bank 0
108
109
    
110
  RETURN
111
112
;------------------------------------------------------------------------------
113
; MAIN PROGRAM
114
;------------------------------------------------------------------------------
115
116
START
117
118
  
119
    BTFSC E_A  ;wenn 0 überspringe nächsten Befehl
120
    BSF LED    ;LED an      
121
    BTFSS E_A   ;wenn 1 überspringe nächsten Befehl
122
    BCF LED    ;LED aus
123
   
124
     
125
    
126
127
128
    GOTO START
129
130
  END

Vielen Dank

von Michael R. (mexman) Benutzerseite


Lesenswert?

Benutz mal anstelle von LED versuchsweise Rel_a im MAIN PROGRAM.

Gruss

Michael

von Stampede (Gast)


Lesenswert?

Hi,

erstmal : LVP = OFF in die Config
Ich gehe mal davon aus, dass PORTC, 3 einen Pullup hat. Dann wird bei 
Tasterdruck die LED aus sein, sonst immer an. Ist das so gedacht?

In der Init werden manche Register (zB ANSEL) doppelt beschrieben.

Gruss,
Stampede

von Michael S. (michas)


Lesenswert?

Stampede schrieb:
> Ich gehe mal davon aus, dass PORTC, 3 einen Pullup hat.

Es ist ein Pullup vorhanden.

> Dann wird bei Tasterdruck die LED aus sein, sonst immer an. Ist das so
> gedacht?


Die Funktion sollte zum Testen so sein. Aber entweder ist die LED aus 
oder sie blinkt anstatt immer an zu sein.


michas

von Lehrmann M. (ubimbo)


Lesenswert?

Servus,

es hilft Anfängern eher nicht wenn man Programme zusammenkopiert.
Fang vernünftig auf www.sprut.de an. Da lernst du wie man das macht. 
Zusammenkopieren kann man dann, wenn man versteht, was das Listing 
konkret macht - was du (sei mir nicht böse) noch nicht verstanden 
hast...

von Michael S. (michas)


Lesenswert?

Lehrmann Michael schrieb:
> es hilft Anfängern eher nicht wenn man Programme zusammenkopiert.

Ich habe nur einige Programmstücke aus dem Datenblatt vom 16F684 
kopiert. Außerdem ist das Programm etwas länger und ich habe nur zur 
Fehlersuche den Rest gelöscht.
In der Simulation läuft das Programm auch komplett, nur in der Realität 
blinkt die LED.
Aber solche Kommentare helfen mir nicht wirklich weiter.

Gruß michas

von Michael S. (michas)


Lesenswert?

Hallo,

ich habe das Problem gelöst. Ein Kondi in der Stromversorgung war zu 
klein, deshalb ist die Spannung bei Belastung zusammengebrochen und der 
Pic ist neu gestartet.

Gruß michas

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.