16f887 Inputproblem

OP #3801101
Lesenswert?
• ▲
▼
Hallo Leute

Ich bin gerade dabei den 16f887 zu programmieren, jedoch so einach macht 
mir der Pic mein Leben nicht.

Die Pins 33-38 schalten mir keinen Ausgang durch, jedoch die Pins 39-40 
schon.

Wird der Pin 36 mit Spannung belegt, dann sind alle Ausgänge 0.

mein File:

#include <xc.h>
#pragma config1 |= 0b.1000.0000.1101.0100 //Seite 210/212
#pragma config CP = OFF         // FLASH Program Memory Code Protection
#pragma ANSEL |= 0b.0000.0000 //ANS7 - 0 Seite 39 //1 = Analog input, 0 
= Digital I/O
#pragma ANSELH |= 0b.--00.0000 //ANS13 - 8 Seite 39
#pragma PIE1 |= 0b.0000.0000 //PERIPHERAL INTERRUPT

Wisst ihr wo mein Problem ist?

liebe Grüße
Andreas
OP #3801144
Lesenswert?
• ▲
▼
Die 230V werden von Optokopplern in 5V umgesetzt
Die Eingangsspannung ist 4,5V.

/* File:   main.c
 * Author: andreas
 * Created on 01. September 2014, 11:07*/
#include <xc.h>
#include <stdio.h>//könnte man weglassen
#include <stdlib.h>//könnte man weglassen
#include  <pic16f887.h>



#pragma config1 |= 0b.1000.0000.1101.0100 //Seite 210/212
#pragma config CP = OFF         // FLASH Program Memory Code Protection
#pragma ANSEL |= 0b.0000.0000 //ANS7 - 0 Seite 39 //1 = Analog input, 0 
= Digital I/O
#pragma ANSELH |= 0b.--00.0000 //ANS13 - 8 Seite 39
#pragma PIE1 |= 0b.0000.0000 //PERIPHERAL INTERRUPT


void setPins()
{
    //0=Ausgang oder nicht definiert, 1=Eingang
    #define pin1 PORTEbits.RE3              //pin  1    not in use
        TRISEbits.TRISE3 = 0;
    #define ledErr PORTAbits.RA0            //pin  2
        TRISAbits.TRISA0 = 0;
    #define in230V_out_1 PORTAbits.RA1      //pin  3
        TRISAbits.TRISA1 = 1;
    #define in230V_out_2 PORTAbits.RA2      //pin  4
       TRISAbits.TRISA2 = 1;
    #define in230V_out_3 PORTAbits.RA3      //pin  5
       TRISAbits.TRISA3 = 1;
    #define in230V_out_4 PORTAbits.RA4      //pin  6
        TRISAbits.TRISA4 = 1;
    #define in24V_out_5 PORTAbits.RA5       //pin  7
        TRISAbits.TRISA5 = 1;
    #define in24V_out_6 PORTEbits.RE0       //pin  8
        TRISEbits.TRISE0 = 1;
    #define in24V_out_7 PORTEbits.RE1       //pin  9
        TRISEbits.TRISE1 = 1;
    #define in24V_out_8 PORTEbits.RE2       //pin 10
        TRISEbits.TRISE2 = 1;
//11= +
//12= -
    #define pin13 PORTAbits.RA7             //pin 13    not in use
        TRISAbits.TRISA7 = 0;
    #define pin14 PORTAbits.RA6             //pin 14    not in use
        TRISAbits.TRISA6 = 0;
    #define pin15 PORTCbits.RC0             //pin 15    not in use
        TRISCbits.TRISC0 = 0;
    #define okPin PORTCbits.RC1             //pin 16
        TRISCbits.TRISC1 = 1;
    #define out_1_in PORTCbits.RC2          //pin 17
        TRISCbits.TRISC2 = 0;
    #define out_2_in PORTCbits.RC3          //pin 18
        TRISCbits.TRISC3 = 0;
    #define out_3_in PORTDbits.RD0          //pin 19
        TRISDbits.TRISD0 = 0;
    #define out_4_in PORTDbits.RD1          //pin 20
        TRISDbits.TRISD1 = 0;
    //-------------------------------------------------
    #define out_4_out PORTDbits.RD2         //pin 21
        TRISDbits.TRISD2 = 0;
    #define out_3_out PORTDbits.RD3         //pin 22
        TRISDbits.TRISD3 = 0;
    #define out_2_out PORTCbits.RC4         //pin 23
        TRISCbits.TRISC4 = 0;
    #define out_1_out PORTCbits.RC5         //pin 24
        TRISCbits.TRISC5 = 0;
    #define pin25 PORTCbits.RC6             //pin 25    not in use
        TRISCbits.TRISC6 = 0;
    #define pin26 PORTCbits.RC7             //pin 26    not in use
        TRISCbits.TRISC7 = 0;
    #define pin27 PORTDbits.RD4             //pin 27    not in use
        TRISDbits.TRISD4 = 0;
    #define pin28 PORTDbits.RD5             //pin 28    not in use
        TRISDbits.TRISD5 = 0;
    #define pin29 PORTDbits.RD6             //pin 29    not in use
        TRISDbits.TRISD6 = 0;
    #define pin30 PORTDbits.RD7             //pin 30    not in use
        TRISDbits.TRISD7 = 0;
    //31 = -
    //32 = +
    #define in24V_in_8 PORTBbits.RB0  //pin 33
        TRISBbits.TRISB0 = 1;
    #define in24V_in_7 PORTBbits.RB1  //pin 34
        TRISBbits.TRISB1 = 1;
    #define in24V_in_6 PORTBbits.RB2  //pin 35
        TRISBbits.TRISB2 = 1;
    #define in24V_in_5 PORTBbits.RB3  //pin 36
        TRISBbits.TRISB3 = 1;
    #define in230V_in_4 PORTBbits.RB4  //pin 37
        TRISBbits.TRISB4 = 1;
    #define in230V_in_3 PORTBbits.RB5  //pin 38
        TRISBbits.TRISB5 = 1;
    #define in230V_in_2 PORTBbits.RB6  //pin 39
        TRISBbits.TRISB6 = 1;
    #define in230V_in_1 PORTBbits.RB7  //pin 40
        TRISBbits.TRISB7 = 1;
}

void controlPins()//normales durchrouten
{
    if(in230V_in_1 == 1)//Test bestanden
    {
        out_1_out = 1;
    }
    else
    {
        out_1_out = 0;
    }//----------------------------------
    if(in230V_in_2 == 1)//Test bestanden
    {
        out_2_out = 1;
    }
    else
    {
        out_2_out = 0;
    }//----------------------------------


    if(in230V_in_3 == 1)
    {
        out_3_out = 1;
    }
    else
    {
        out_3_out = 0;
    }//----------------------------------
    if(in230V_in_4 == 1)
    {
        out_4_out = 1;
    }
    else
    {
        out_4_out = 0;
    }//----------------------------------
//#######################################
    if(in24V_in_5 == 1)
    {
        out_1_out = 1;
    }
    else
    {
        out_1_out = 0;
    }//----------------------------------
    if(in24V_in_6 == 1)
    {
        out_2_out = 1;
    }
    else
    {
        out_2_out = 0;
    }//----------------------------------
    if(in24V_in_7 == 1)
    {
        out_3_out = 1;
    }
    else
    {
        out_3_out = 0;
    }//----------------------------------
    if(in24V_in_8 == 1)
    {
        out_4_out = 1;
    }
    else
    {
        out_4_out = 0;
    }//----------------------------------

    (okPin == 1) ? ledErr = 1 : ledErr = 0;//Test bestanden
}

int main(int argc, char** argv) {
    setPins();
    while(1)
    {
        INTF = 0;// Clear Interrupt Flag
        INTE = 0;// Enable external interrupt
        GIE = 0;// Enable Global Interrupt

        controlPins();
    }
    return (0);
}
OP #3802948
Lesenswert?
• ▲
▼
meine derzeitige Config

#pragma config1 |= 0b.1100.0000.0000.0100 //Seite 212

in der main:
    ANSEL = 0;//Analogeingänge abschalten
    ANSELH = 0;//Analogeingänge abschalten
    C1ON = 0;//comparator C1 abschalten PIN36
    C2ON = 0;//comparator C2 abschalten PIN36
    INTF = 0;// Clear Interrupt Flag
    INTE = 0;// Enable external interrupt
    GIE = 0;// Enable Global Interrupt
    PIE1 = 0;//Timer1 interupt
#3802950
Lesenswert?
• ▲
▼
Konfiguration?
> #pragma config1 |= 0b.1001.0000.1101.0100

Kann der Compiler keine Symbolischen Namen für die Einzelnen Config-Bits 
auflösen - aus der 0/1-Wurst kann man nichts rauslesen.
Na egal.

RB3 ist auch ein Comperatoreingang. Weiss jetzt nicht ob der mit 
ANSEL/ANSELH auch deaktiviert wird, aber schalte die Comperatoren 
sicheheitshalber aus mit:
CM1CON0 = 0;
CM2CON0 = 0;

(dass hat sich jetzt überschnitten - also hinfällig)....
OP #3802958
Lesenswert?
• ▲
▼
Hilft leider nicht.
Ich schlte meine 4 Ausgänge ein, jedoch beim drücken des RB3 sind alle 
aus.

meine Config:

#pragma config1 |= 0b.1100.0000.0000.0100 //Seite 212
#pragma config2 |= 0b.1111.1110.1111.1111 //Seite 213

ANSEL = 0;//Analogeingänge abschalten
    ANSELH = 0;//Analogeingänge abschalten
    C1ON = 0;//comparator C1 abschalten PIN36
    C2ON = 0;//comparator C2 abschalten PIN36
    INTF = 0;// Clear Interrupt Flag
    INTE = 0;// Enable external interrupt
    GIE = 0;// Enable Global Interrupt
    PIE1 = 0;//Timer1 interupt
    CM1CON0 = 0;
    CM2CON0 = 0;
#3803273
Lesenswert?
• ▲
▼
Siehe Datenblatt DS30292C Kapitel 12 "SPECIAL FEATURES OF THE CPU" und 
dort "REGISTER 12-1: CONFIGURATION WORD (ADDRESS 2007h)" auf Seite 120.

Dieser PIC hat nur ein Config Word. Was Du mit Deinen beiden #pragmas 
konfiguriert hast, ist nicht ersichtlich.

RB3 hat PGM als zweite Funktion, welches den Prozessor in den Low 
Voltage Programming Mode schaltet. Mit Bit 7 im Config Word schaltest Du 
das ab.

Überprüfe nochmal Dein Config Word. Dein Code passt irgendwie nicht zum 
Chip.

fchk

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.