- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: Problem mit Schaltun / Programmierung C / PIC18F25K22

  1. #11
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Anzeige

    E-Bike
    ist das so richtig ?

    (PORTCbits.RC5==1 && i == 0)

    ich hätte das wohl so geschrieben:
    if ((PORTCbits.RC5==1) && (i == 0))

    kann aber sein, dass es identisch ist. Ich steh da etwas auf Kriegsfuss mit "C"

    Siro

    - - - Aktualisiert - - -

    Liegen die Taster direkt an der positiven Versorgung ?
    Ich glaub das mag der PIC an den Eingängen nicht wirklich.
    Eigentlich könnte man die internen Pullups einschalten und die Taster sollten dann nach Masse schalten.
    Taste gedrückt = Low, nicht gedrückt = High durch den internen Pullup.
    Aber genau der Port C an dem die Tasten hängen hat keine Pullups.

    Wenn Du das LATC Register auf Low schaltest und dann einen Taster drückst, gibt es einen schönen Kurzschluss am Port.

    Deine Portbits stehen alle auf Output
    Muss da bei TRISC nicht was auf Input für die Tasten ?
    Geändert von Siro (28.09.2015 um 20:24 Uhr)

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    24.09.2015
    Beiträge
    8
    Ist beides richtig. Ich hab nur die kürzere Schreibweise

    Hab ich bereits korrigiert

    Hier mal die Aktualisierungen:

    Schaltbild:
    Bild hier  

    WolfHeader.h
    Code:
    // PIC18F25K22 Configuration Bit Settings
    
    // 'C' source line config statements
    
    #include <xc.h>
    
    // #pragma config statements should precede project file includes.
    // Use project enums instead of #define for ON and OFF.
    
    // CONFIG1H
    #pragma config FOSC = INTIO7    // Oscillator Selection bits (Internal oscillator block, CLKOUT function on OSC2)
    #pragma config PLLCFG = OFF     // 4X PLL Enable (Oscillator used directly)
    #pragma config PRICLKEN = ON    // Primary clock enable bit (Primary clock enabled)
    #pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
    #pragma config IESO = OFF       // Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled)
    
    // CONFIG2L
    #pragma config PWRTEN = OFF     // Power-up Timer Enable bit (Power up timer disabled)
    #pragma config BOREN = OFF      // Brown-out Reset Enable bits (Brown-out Reset disabled in hardware and software)
    #pragma config BORV = 190       // Brown Out Reset Voltage bits (VBOR set to 1.90 V nominal)
    
    // CONFIG2H
    #pragma config WDTEN = OFF      // Watchdog Timer Enable bits (Watch dog timer is always disabled. SWDTEN has no effect.)
    #pragma config WDTPS = 32768    // Watchdog Timer Postscale Select bits (1:32768)
    
    // CONFIG3H
    #pragma config CCP2MX = PORTC1  // CCP2 MUX bit (CCP2 input/output is multiplexed with RC1)
    #pragma config PBADEN = ON      // PORTB A/D Enable bit (PORTB<5:0> pins are configured as analog input channels on Reset)
    #pragma config CCP3MX = PORTB5  // P3A/CCP3 Mux bit (P3A/CCP3 input/output is multiplexed with RB5)
    #pragma config HFOFST = ON      // HFINTOSC Fast Start-up (HFINTOSC output and ready status are not delayed by the oscillator stable status)
    #pragma config T3CMX = PORTC0   // Timer3 Clock input mux bit (T3CKI is on RC0)
    #pragma config P2BMX = PORTB5   // ECCP2 B output mux bit (P2B is on RB5)
    #pragma config MCLRE = INTMCLR  // MCLR Pin Enable bit (RE3 input pin enabled; MCLR disabled)
    
    // CONFIG4L
    #pragma config STVREN = ON      // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
    #pragma config LVP = ON         // Single-Supply ICSP Enable bit (Single-Supply ICSP enabled if MCLRE is also 1)
    #pragma config XINST = OFF      // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))
    
    // CONFIG5L
    #pragma config CP0 = OFF        // Code Protection Block 0 (Block 0 (000800-001FFFh) not code-protected)
    #pragma config CP1 = OFF        // Code Protection Block 1 (Block 1 (002000-003FFFh) not code-protected)
    #pragma config CP2 = OFF        // Code Protection Block 2 (Block 2 (004000-005FFFh) not code-protected)
    #pragma config CP3 = OFF        // Code Protection Block 3 (Block 3 (006000-007FFFh) not code-protected)
    
    // CONFIG5H
    #pragma config CPB = OFF        // Boot Block Code Protection bit (Boot block (000000-0007FFh) not code-protected)
    #pragma config CPD = OFF        // Data EEPROM Code Protection bit (Data EEPROM not code-protected)
    
    // CONFIG6L
    #pragma config WRT0 = OFF       // Write Protection Block 0 (Block 0 (000800-001FFFh) not write-protected)
    #pragma config WRT1 = OFF       // Write Protection Block 1 (Block 1 (002000-003FFFh) not write-protected)
    #pragma config WRT2 = OFF       // Write Protection Block 2 (Block 2 (004000-005FFFh) not write-protected)
    #pragma config WRT3 = OFF       // Write Protection Block 3 (Block 3 (006000-007FFFh) not write-protected)
    
    // CONFIG6H
    #pragma config WRTC = OFF       // Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) not write-protected)
    #pragma config WRTB = OFF       // Boot Block Write Protection bit (Boot Block (000000-0007FFh) not write-protected)
    #pragma config WRTD = OFF       // Data EEPROM Write Protection bit (Data EEPROM not write-protected)
    
    // CONFIG7L
    #pragma config EBTR0 = OFF      // Table Read Protection Block 0 (Block 0 (000800-001FFFh) not protected from table reads executed in other blocks)
    #pragma config EBTR1 = OFF      // Table Read Protection Block 1 (Block 1 (002000-003FFFh) not protected from table reads executed in other blocks)
    #pragma config EBTR2 = OFF      // Table Read Protection Block 2 (Block 2 (004000-005FFFh) not protected from table reads executed in other blocks)
    #pragma config EBTR3 = OFF      // Table Read Protection Block 3 (Block 3 (006000-007FFFh) not protected from table reads executed in other blocks)
    
    // CONFIG7H
    #pragma config EBTRB = OFF      // Boot Block Table Read Protection bit (Boot Block (000000-0007FFh) not protected from table reads executed in other blocks)
    
    
    #define _XTAL_FREQ 16000000
    Wolf.c
    Code:
    /*
     * File:   Wolf.c
     * Author: raphael.doll
     *
     * Created on 18. September 2015, 11:06
     */
    
    
    //#include <xc.h>
    #include "WolfHeader.h"
    
    int irFunction (int); //Steuerung IR Strahler
    int ventKFunction (int); // Steuerung Kopf Ventilator
    int videoFunction (int); //Steuerung Video
    int lefzenFunction (int); // Steuerung Servo Lefzen
    
    void main(void) {
        ANSELC = 0b00000000;
        
        TRISA = 0b00; //Alles als Ausgang
        TRISB = 0x00; //Alles als Ausgang
        TRISC = 0b11111110; //Alles als Eingang, PORT C0 als Ausgang
        TRISE = 0x00; //Alles als Ausgang
        
        LATAbits.LATA2 = 1;
        LATCbits.LATC0 = 0; //RC0 fest auf 0!
        
        OSCCON = 0b01110000;
        
        
        //Startvariablen für Steuerung
        int ohrStatus = 0; //Servo Ohren Status / kommt noch
        int naseStatus = 0; //Servo Nasen Status / kommt noch
        int lefzenStatus = 0; //Servo Lefzen Status / kommt noch
        int videoStatus = 0; //Status Video 
        /* 0=Video von lokaler Kamera
         * 1=Video von Funkempfänger + Einstellung Channel 1
         * 2=Video von Funkempfänger + Einstellung Channel 2
         * 3=Video von Funkempfänger + Einstellung Channel 3
        */
        int irStatus = 0; //Status IR Strahler für Nachtsicht / 0 = Aus, 1 = An
        int ventKStatus = 0; //Status Kopfventilator / 0 = Aus, 1 = An
        
        while (1) //Main While Schleife
        {
            irStatus = irFunction (irStatus);
            ventKStatus = ventKFunction(ventKStatus);
            videoStatus = videoFunction(videoStatus);
            lefzenStatus = lefzenFunction(lefzenStatus);
        }
        
        return;
    }
    
    int irFunction (int i)
    {
        if (PORTCbits.RC5==0 && i == 0)
        {
            LATBbits.LATB2 = 1;
            i = 1;
        } else if (PORTCbits.RC5 == 0 && i == 1) 
        {
            LATBbits.LATB2 = 0;
            i = 0;
        }
        while(PORTCbits.RC5==0)
            __delay_ms(10);
        return i;
    }
    
    int ventKFunction (int i)
    {
    
        if (PORTCbits.RC6==0 && i == 0)
        {
            LATBbits.LATB1 = 1;
            i = 1;
        } else if (PORTCbits.RC6 == 0 && i == 1) 
        {
            LATBbits.LATB1 = 0;
            i = 0;
        }
        while(PORTCbits.RC6==0)
            __delay_ms(10);
        return i;
    }
    
    int videoFunction (int i)
    {
        if (PORTCbits.RC4==0 && i == 0)
        {
            LATAbits.LATA4 = 0;
            LATAbits.LATA3 = 1;
            //Channel
            LATAbits.LATA0 = 1;
            LATAbits.LATA1 = 0;
            LATAbits.LATA2 = 0;
            i = 1;
        } else if (PORTCbits.RC4==0 && i == 1)
        {
            LATAbits.LATA0 = 0;
            LATAbits.LATA1 = 1;
            LATAbits.LATA2 = 0;
            i = 2;
        } else if (PORTCbits.RC4==0 && i == 2)
        {
            LATAbits.LATA0 = 1;
            LATAbits.LATA1 = 1;
            LATAbits.LATA2 = 0;
            i = 3;
        } else if (PORTCbits.RC4==0 && i == 3)
        {
            LATAbits.LATA0 = 0;
            LATAbits.LATA1 = 0;
            LATAbits.LATA2 = 0;
            LATAbits.LATA3 = 0;
            LATAbits.LATA4 = 1;
            i = 0;
        }
        while(PORTCbits.RC4==0)
        __delay_ms(10);
        return i;
    }
    
    int lefzenFunction (int i)
    {
        if (PORTCbits.RC3==0 && i == 0)
        {
            for (int abfolge = 0; abfolge < 50; abfolge++)
            {
                LATBbits.LATB5 = 1;
                __delay_us(1500);
                LATBbits.LATB5 = 0;
                __delay_ms(18);
            }
            i = 1;
        } else if (PORTCbits.RC3==0 && i == 1)
        {
            for (int abfolge = 0; abfolge < 50; abfolge++)
            {
                LATBbits.LATB5 = 1;
                __delay_us(700);
                LATBbits.LATB5 = 0;
                __delay_ms(19);
            }
            i = 0;
        }
        while(PORTCbits.RC3==0)
        __delay_ms(10);
        return i;
    }

  3. #13
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Zur Schaltung: Hat der PIC keine internen PullUp für die Tasten? Ansonst die +Leitung für die Widerstände nach der Diode abnehmen.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    24.09.2015
    Beiträge
    8
    Äh... Hä?!

  5. #15
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    er meint die gemeinsame Leitung wo alle deine Widerstände von den Tasten dran hängen.
    Diese sollte hinter der Diode D7 rangehen. Also direkt an VDD vom Prozessor.
    Weil: die Portpins sonst "höher" liegen als die Versorgung vom Prozessor.
    Dadurch können die internen Schutzdioden im Prozessor leitend werden und den Chip zerstören.

    @Hubert_G: nein, an diesem Port C hat der PIC leider keine Pullups.

    Für deine LED's brauchst Du keine Treiber. Wenn ich richtig gerechnet habe fliesst da bei einer Roten LED ca. 11mA Strom
    Der PIC kann an den Ausgängen 25mA liefern.
    Also nur Widerstand und LED.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken picci1.jpg  
    Geändert von Siro (28.09.2015 um 23:15 Uhr)

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    24.09.2015
    Beiträge
    8
    Ah ok... Ist geändert. Danke für den Hinweis

    Thema LEDs:
    Das sind nur "Test"LEDs. Hier läuft eine Kanalsteuerung für einen Funkempfänger drüber.
    000 = Channel 1
    001 = Channel 2
    010 = Channel 3
    usw.

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Problem mit Programmierung
    Von Labo im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 01.01.2012, 21:59
  2. Mikrofon prioritäten Schaltun
    Von Movie85 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 20.09.2009, 22:27
  3. Antworten: 1
    Letzter Beitrag: 12.05.2009, 19:46
  4. Noobfrage zu CNY70 Optoreflexkoppler schaltun
    Von jo_robot im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 18.09.2007, 20:16
  5. Problem mit Programmierung!
    Von Frank89 im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 12
    Letzter Beitrag: 11.02.2007, 15:29

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen