www.mikrocontroller.net

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


Autor: Michael S. (michas)
Datum:

Bewertung
0 lesenswert
nicht 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:
;                                               *
;     Pinbelegung                               *
;----------------------------------             *
;    PORTA:   0   Ausg Rel_a                    *
;             1   Ausg Rel_b                    *
;             2   Ausg C                        *
;             3   Eing                          *
;             4   Ausg A/X                      *
;             5   Ausg B/Y                      *
;    PORTC:  0  Ausg LED                        *
;        1  Eing C                              *
;        2  Eing B                              *
;        3  Eing A                              *
;        4  Eing Y                              *
;        5  Eing X                              *
;                                               *   
;                                               *
;******************************************************************************

     LIST      p=16F684             ; Prozessor definieren
     #INCLUDE <P16F684.INC>         ; Variablen für Prozessor

  #define Rel_a PORTA,0      ; Labels definieren
  #define Rel_b PORTA,1
  #define A_C PORTA,2
  #define A_AX PORTA,4
  #define A_BY PORTA,5
  #define LED PORTC,0
  #define E_C PORTC,1
  #define E_B PORTC,2
  #define E_A PORTC,3
  #define E_Y PORTC,4
  #define E_X PORTC,5
  #define M_AX Merker,0
  #define M_BY Merker,1
  #define M_C Merker,2
  #define M_LED Merker,3
  #define M_Rel_a Merker,4
  #define M_Rel_b Merker,5

;------------------------------------------------------------------------------
;
; CONFIGURATION
;
;------------------------------------------------------------------------------
;
   __CONFIG    _CP_OFF & _CPD_OFF & _BOD_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _FCMEN_OFF & _IESO_OFF
;
  
; 
;
;------------------------------------------------------------------------------

; Variablen definieren
    CBLOCK 0x20 ; 
        
        Merker    
        loops 
        loops2 
    
    ENDC

;------------------------------------------------------------------------------
; RESET VECTOR
;------------------------------------------------------------------------------

RESET
         ORG     0x0000           ; processor reset vector
      
      CALL  Init
      BANKSEL PORTA
      BCF    Rel_a      ;Rel_a löschen
      BCF    Rel_b      ;Rel_b löschen
      BANKSEL PORTC
      BCF    LED        ;LED löschen
      CLRF  Merker      ;Merker löschen      
      GOTO    START           ; Beginn Programm



;------------------------------------------------------------------------------
; INIT
;------------------------------------------------------------------------------



Init
    
    BCF STATUS,RP0   ;Bank 0
    CLRF PORTA    ;Init PORTA
    MOVLW 07h     ;Set RA<2:0> to
    MOVWF CMCON0   ;digital I/O
    BSF STATUS,RP0   ;Bank 1
    CLRF ANSEL     ;digital I/O
    MOVLW B'00001000' ;Set RA<0-5> as outputs / 3 as input
    MOVWF TRISA 
    BCF STATUS,RP0   ;Bank 0

    BANKSEL PORTC   ;
    CLRF PORTC     ;Init PORTC
    MOVLW 07h     ;Set RC<4,1:0> to
    MOVWF CMCON0   ;digital I/O
    BANKSEL ANSEL  ;
    CLRF ANSEL     ;digital I/O
    MOVLW B'00111110' ;Set RC<1-5> as inputs / 0 as output
    MOVWF TRISC 
    BCF STATUS,RP0   ;Bank 0

    
  RETURN

;------------------------------------------------------------------------------
; MAIN PROGRAM
;------------------------------------------------------------------------------

START

  
    BTFSC E_A  ;wenn 0 überspringe nächsten Befehl
    BSF LED    ;LED an      
    BTFSS E_A   ;wenn 1 überspringe nächsten Befehl
    BCF LED    ;LED aus
   
     
    


    GOTO START

  END

Vielen Dank

Autor: Michael Roek (mexman) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Benutz mal anstelle von LED versuchsweise Rel_a im MAIN PROGRAM.

Gruss

Michael

Autor: Stampede (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael S. (michas)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Michael S. (michas)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael S. (michas)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.