- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 7 von 7

Thema: SRF08 mit I2C BUs am dsPIC33EP512MU810 anschließen,LED von Sensor lechtet nicht

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.09.2014
    Beiträge
    5

    SRF08 mit I2C BUs am dsPIC33EP512MU810 anschließen,LED von Sensor lechtet nicht

    Anzeige

    Powerstation Test
    Hallo allerseits, ich hoffe ihr könnt mir helfen

    Ich bin Neuer und möchte Ultraschallsensoren SRF08 (http://www.roboter-teile.de/datasheets/srf08.pdf) mit I2C Bus
    am Mikrokotroller dsPIC33EP512MU810 (http://www.microchip.com/wwwproducts...IC33EP512MU810) anschließen.

    Ich habe schon Code in C geschrieben.Aber es funktioniert leider nicht richtig.Die LED von Sensor leuchtet immer nicht.


    Ich hoffe ihr könnt mir helfen.
    Bin für jede Hilfe sehr dankbar!!

    Mit freundlichen Grüßen

    Maximilian

    Hier ist die Code:
    Code:
    #include "p33EP512MU810.h"
    #include "i2c.h"
    #include <Initialisierung.h>
    #include "Timer.h"
    
    
    
    /*Configuring the general features of the microcontroller*/
    
    _FGS(GSS_OFF & GWRP_OFF);
    // External Oscillator
    _FOSCSEL(FNOSC_PRIPLL);
    
    _FOSC(FCKSM_CSECMD & OSCIOFNC_OFF  & POSCMD_XT);
    // Clock Switching is enabled and Fail Safe Clock Monitor is disabled
    // OSC2 Pin Function: OSC2 is Clock Output
    // Primary Oscillator Mode: XT Crystal
    
    _FWDT(FWDTEN_OFF);
    // Watchdog Timer Enabled/disabled by user software
    
    _FICD(ICS_PGD3 &  JTAGEN_OFF & RSTPRI_PF); 
    
    _FPOR( BOREN_ON & ALTI2C1_OFF & ALTI2C2_OFF );
    // Brown-out Reset (BOR) Detection Enable bit (BOR is enabled)
    // Alternate I2C pins for I2C1 (SDA1/SCK1 pins are selected as the I/O pins for I2C1)
    // Alternate I2C pins for I2C2 (SDA2/SCK2 pins are selected as the I/O pins for I2C2)
    
    
    
    
    #define CFG_I2C2BRG  0x188
    // (40MHz/100KHz)-2 = 0x188//I2C2=[(1/Fscl-PGD)*Fcy]-2
    
    #define SONAR1 0xE0
    
    
    
    /*** Global functions for the I2C2******************************************/
     main(void)
    {
        
         f_Initialisierung();
    
        unsigned int Config1; // ConfigI2c2 represents I2C2CON register.
             Config1 = (   I2C2_ON & I2C2_IDLE_CON & I2C2_CLK_HLD &
                           I2C2_IPMI_DIS & I2C2_7BIT_ADD & I2C2_SLW_DIS &
                           I2C2_SM_DIS & I2C2_GCALL_DIS & I2C2_STR_DIS &
                           I2C2_NACK & I2C2_ACK_DIS & I2C2_RCV_DIS &
                           I2C2_STOP_DIS & I2C2_RESTART_DIS & I2C2_START_DIS
                            );
    
        OpenI2C2(Config1,CFG_I2C2BRG);/*The following function initializes the I2C2 bus and
                                             set the I2C2 Bus Speed to 100KHz I2C2 used to communicate with the Ultrasonic sensors*/
        IdleI2C2();
        
    /*End Configuration I2C2*/
    
    
         while(1);
       
     }
    // Start Condition
      unsigned int get_srf08 (unsigned int SONAR)
    {
        unsigned int range;  //range=Reichweiten
        unsigned char hi,lo;
        
        //This 1st part send the ranging command to the SRF08 to start it ranging
    
         //StartI2C2();
            I2C2CONbits.SEN=1;         //send start bit
            while(I2C2CONbits.SEN);    //and wait fot it to clear
           
    
         //MasterWriteI2C2(SRF08_ADDR);
            MasterWriteI2C2(SONAR);     //SRF08 I2C address
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);
         //MasterWriteI2C2(0x01);
            MasterWriteI2C2(0x01);    //Verstärkungsregister Adresse
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);       //then clear it
    
         //MasterWriteI2C2(0x00);
            MasterWriteI2C2(SONAR);     //Verstärkung
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);          //then clear it
    
         //StopI2C2();
             I2C2CONbits.PEN=1;         //send stop bit
             while(I2C2CONbits.PEN);
    
    
         //StartI2C2();
             I2C2CONbits.SEN=1;         //send start bit
             while(I2C2CONbits.SEN);    //and wait fot it to clear
    
         //MasterWriteI2C2(SRF08_ADDR);
            MasterWriteI2C2(SONAR);     //SRF08 I2C address
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);
         //MasterWriteI2C2(0x02);
            MasterWriteI2C2(0x02);    //Reichweiten-Register Adresse
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);       //then clear it
    
         //MasterWriteI2C2(0xA0);
            MasterWriteI2C2(0xA0);     //Reichweiten=160    160*43mm+43mm = 6,9m
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);          //then clear it
    
         //StopI2C2();
             I2C2CONbits.PEN=1;         //send stop bit
             while(I2C2CONbits.PEN);
    
         //StartI2C2();
             I2C2CONbits.SEN=1;         //send start bit
             while(I2C2CONbits.SEN);    //and wait fot it to clear
    
          //MasterWriteI2C2(SRF08_ADDR);
            MasterWriteI2C2(SONAR);     //SRF08 I2C address
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);
         //MasterWriteI2C2(0x02);
            MasterWriteI2C2(0x00);    //SRF08 I2C address
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);       //then clear it
    
         //MasterWriteI2C2(0x51);
            MasterWriteI2C2(0x51);     //Messung auslösen - Ergebnis in Zentimeter
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);          //then clear it
    
          //StopI2C2();
             I2C2CONbits.PEN=1;         //send stop bit
             while(I2C2CONbits.PEN);
    
        /*now wait for the ranging to complete. This delay is 104ms*/
         //Timer off; 16-bit mode; Prescaler 2; Input clk CPU/64
    
         //delay_ms(80);
            T6CON = 0x0000;
            T6CONbits.TCKPS = 2;
            // Timer6 period 419.424 ms = 2.384222171 Hz
            PR6 = 0xFFFF-0x001;         //w:?
            // 40MHz/64 = 625KHz , 625KHz/65535 = 9.537 Hz
            //                                           = 104,855 ms
            // later on 80ms required form this timer for the utrasonic
            // initializing. the calculation as it shown below:
            //
            //  PeriodofChecking80ms      65535
            // --------------------- = --------- ===> PeriodtoCheck = 12500
            //          80ms           104,855ms
    
            IFS2bits.T6IF = 0;                //clear old interrupt request.
            IEC2bits.T6IE = 0;                //disable interrupt.
            T6CONbits.TON = 0;                //switch timer off.
    
    
            //finally get the range form the SRF08
    
         //StartI2C2();
            I2C2CONbits.SEN=1;         //send start bit
            while(I2C2CONbits.SEN);    //and wait fot it to clear
    
         //MasterWriteI2C2(SRF08_ADDR);
            MasterWriteI2C2(SONAR);     //SRF08 I2C address
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);  // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);
         //MasterWriteI2C2(0x02);
            MasterWriteI2C2(0x02);    //SRF08 I2C address
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);    //then clear it
    
          //StopI2C2();
             I2C2CONbits.PEN=1;         //send stop bit
             while(I2C2CONbits.PEN);
    
    
                   
         //MasterWriteI2C2(SRF08_ADDR+1);
            MasterWriteI2C2(SONAR|0x01);     //SRF08 I2C address+Read
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);    //then clear it
    
            hi = MasterReadI2C2();      //read Most Significant Bit
            I2C2CONbits.ACKEN = 1;     //start acknowledge sequence
            while(I2C2CONbits.ACKEN);//wait for ack.sequence to end;
            
            lo = MasterReadI2C2();      //read Least significant Bit       
            I2C2CONbits.ACKDT=1;        //not acknowledge for last byte
            I2C2CONbits.ACKEN = 1;     //start acknowledge sequence
            while(I2C2CONbits.ACKEN);//wait for ack.sequence to end
    
         //StopI2C2();
            I2C2CONbits.PEN=1;         //send stop bit
            while(I2C2CONbits.PEN);
    
            range = ((hi<<8)+lo);
           
    
      }
    Geändert von Maximilian1990 (30.09.2014 um 15:53 Uhr)

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    29.09.2014
    Beiträge
    5
    Hallo!
    Ich habe neue code geschrieben. Aber leider funktioniert es immer nicht. kann ich mal ueber high Byte und low Byte read fragen, wie man code dafuer schreiben soll.

    Bin für jede Hilfe sehr dankbar!!

    Mit freundlichen Grüßen

    Maximilian

    Code:
    #include "p33EP512MU810.h"
    #include "i2c.h"
    #include <Initialisierung.h>
    #include "Timer.h"
    
    
    //Schritt 1
    
    
    /*Configuring the general features of the microcontroller*/
    
    _FGS(GSS_OFF & GWRP_OFF);
    // External Oscillator
    _FOSCSEL(FNOSC_PRIPLL);
    
    _FOSC(FCKSM_CSECMD & OSCIOFNC_OFF  & POSCMD_XT);
    // Clock Switching is enabled and Fail Safe Clock Monitor is disabled
    // OSC2 Pin Function: OSC2 is Clock Output
    // Primary Oscillator Mode: XT Crystal
    
    _FWDT(FWDTEN_OFF);
    // Watchdog Timer Enabled/disabled by user software
    
    _FICD(ICS_PGD3 &  JTAGEN_OFF & RSTPRI_PF); 
    
    _FPOR( BOREN_ON & ALTI2C1_OFF & ALTI2C2_OFF );
    // Brown-out Reset (BOR) Detection Enable bit (BOR is enabled)
    // Alternate I2C pins for I2C1 (SDA1/SCK1 pins are selected as the I/O pins for I2C1)
    // Alternate I2C pins for I2C2 (SDA2/SCK2 pins are selected as the I/O pins for I2C2)
    
    
    //Schritt 2
    
    #define CFG_I2C2BRG  0x188
    // (40MHz/100KHz)-2 = 0x188//I2C2=[(1/Fscl-PGD)*Fcy]-2
    
    #define SONAR1 0xE0
    
    unsigned int get_srf08(unsigned int SONAR);
    
    
    /*** Global functions for the I2C2******************************************/
     main(void)
    {
         unsigned int range1=0;
         f_Initialisierung();
    
        unsigned int Config1; // ConfigI2c2 represents I2C2CON register.
             Config1 = (   I2C2_ON & I2C2_IDLE_CON & I2C2_CLK_HLD &
                           I2C2_IPMI_DIS & I2C2_7BIT_ADD & I2C2_SLW_DIS &
                           I2C2_SM_DIS & I2C2_GCALL_DIS & I2C2_STR_DIS &
                           I2C2_NACK & I2C2_ACK_DIS & I2C2_RCV_DIS &
                           I2C2_STOP_DIS & I2C2_RESTART_DIS & I2C2_START_DIS
                            );
    
        OpenI2C2(Config1,CFG_I2C2BRG);/*The following function initializes the I2C2 bus and
                                             set the I2C2 Bus Speed to 100KHz I2C2 used to communicate with the Ultrasonic sensors*/
        IdleI2C2();
    
    /*End Configuration I2C2*/
        while(1)
        {
            range1=get_srf08(SONAR1);
        }
     }
    //Schritt 3
    // Start Condition
    
      unsigned int get_srf08 (unsigned int SONAR)
    {
    
        unsigned int range;  //range=Reichweiten
        unsigned char hi,lo; //high Byte,low Byte
        
     
         //StartI2C2();
            I2C2CONbits.SEN=1;         //send start bit
            while(I2C2CONbits.SEN);    //and wait fot it to clear       
         //MasterWriteI2C2(SRF08_ADDR);
            MasterWriteI2C2(0xE0);     //SRF08 I2C address
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);
         //MasterWriteI2C2(0x01);
            MasterWriteI2C2(0x01);    //Verstärkungsregister Adresse
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);       //then clear it
         //MasterWriteI2C2(0x00);
            MasterWriteI2C2(0x00);     //Verstärkung
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);          //then clear it
         //StopI2C2();
             I2C2CONbits.PEN=1;         //send stop bit
             while(I2C2CONbits.PEN);
    
    
    
    
         //StartI2C2();
             I2C2CONbits.SEN=1;         //send start bit
             while(I2C2CONbits.SEN);    //and wait fot it to clear
         //MasterWriteI2C2(SRF08_ADDR);
            MasterWriteI2C2(0xE0);     //SRF08 I2C address
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);
         //MasterWriteI2C2(0x02);
            MasterWriteI2C2(0x02);    //Reichweiten-Register Adresse
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);       //then clear it
         //MasterWriteI2C2(0xA0);
            MasterWriteI2C2(0xA0);     //Reichweiten=160    160*43mm+43mm = 6,9m
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);          //then clear it
         //StopI2C2();
             I2C2CONbits.PEN=1;         //send stop bit
             while(I2C2CONbits.PEN);
    
    
    
    
     //Schritt 4
    
        /*now wait for the ranging to complete. This delay is 104ms*/
         //Timer off; 16-bit mode; Prescaler 2; Input clk CPU/64
    
         //delay_ms(80);
            T6CON = 0x0000;
            T6CONbits.TCKPS = 2;
            // Timer6 period 419.424 ms = 2.384222171 Hz
            PR6 = 0xFFFF-0x001;         //w:?
            // 40MHz/64 = 625KHz , 625KHz/65535 = 9.537 Hz
            //                                           = 104,855 ms
            // later on 80ms required form this timer for the utrasonic
            // initializing. the calculation as it shown below:
            //
            //  PeriodofChecking80ms      65535
            // --------------------- = --------- ===> PeriodtoCheck
            //          80ms           104,855ms
    
            IFS2bits.T6IF = 0;                //clear old interrupt request.
            IEC2bits.T6IE = 0;                //disable interrupt.
            T6CONbits.TON = 0;                //switch timer off.
    
    
    //Schritt 5
    
            //finally get the range form the SRF08
    
         //StartI2C2();
            I2C2CONbits.SEN=1;         //send start bit
            while(I2C2CONbits.SEN);    //and wait fot it to clear            
        //??????? //MasterWriteI2C2(SRF08_ADDR+1);
            MasterWriteI2C2(0xE0|0x01);     //SRF08 I2C address+Read
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);    //then clear it       
         //??????????????????????
            hi = MasterReadI2C2();      //read Most Significant Bit
            AckI2C2();     //start acknowledge sequence
            while(I2C2CONbits.ACKEN);//wait for ack.sequence to end;
            
            lo = MasterReadI2C2();      //read Least significant Bit       
            NotAckI2C2();     //start acknowledge sequence
            while(I2C2CONbits.ACKEN);//wait for ack.sequence to end
    
         //StopI2C2();
            I2C2CONbits.PEN=1;         //send stop bit
            while(I2C2CONbits.PEN);
    
            range = ((hi<<8)+lo);
            
      }

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    29.09.2014
    Beiträge
    5

    meine Code funktioniert jetzt richtig,aber ich habe jetzt noch eine andere frage

    Hier ist meine neue Code:
    Code:
    #include "p33EP512MU810.h"
    #include "i2c.h"
    #include <Initialisierung.h>
    #define FCY 100000000UL     //declare FCY for a 100 MHz instruction rate
    #include <libpic30.h>
    
    //Schritt 1
    
    /*Configuring the general features of the microcontroller*/
    
    _FGS(GSS_OFF & GWRP_OFF & GSSK_OFF);
    // External Oscillator
    _FOSCSEL(FNOSC_PRIPLL);
    
    _FOSC(FCKSM_CSECMD & OSCIOFNC_OFF  & POSCMD_XT);
    // Clock Switching is enabled and Fail Safe Clock Monitor is disabled
    // OSC2 Pin Function: OSC2 is Clock Output
    // Primary Oscillator Mode: XT Crystal
    
    _FWDT(FWDTEN_OFF);
    // Watchdog Timer Enabled/disabled by user software
    
    _FICD(ICS_PGD3 &  JTAGEN_OFF & RSTPRI_PF); 
    
    _FPOR( BOREN_ON & ALTI2C1_OFF & ALTI2C2_OFF );
    // Brown-out Reset (BOR) Detection Enable bit (BOR is enabled)
    // Alternate I2C pins for I2C1 (SDA1/SCK1 pins are selected as the I/O pins for I2C1)
    // Alternate I2C pins for I2C2 (SDA2/SCK2 pins are selected as the I/O pins for I2C2)
    
    
    //Schritt 2
    
    #define CFG_I2C2BRG  0x188
    // (40MHz/100KHz)-2 = 0x188//I2C2=[(1/Fscl-PGD)*Fcy]-2
    
    
    unsigned int get_srf08(void);
    
    
    /*** Global functions for the I2C2******************************************/
     main(void)
    {
         unsigned int range1=0;
         f_Initialisierung();
    
        unsigned int Config1; // ConfigI2c2 represents I2C2CON register.
             Config1 = (   I2C2_ON & I2C2_IDLE_CON & I2C2_CLK_HLD &
                           I2C2_IPMI_DIS & I2C2_7BIT_ADD & I2C2_SLW_DIS &
                           I2C2_SM_DIS & I2C2_GCALL_DIS & I2C2_STR_DIS &
                           I2C2_NACK & I2C2_ACK_DIS & I2C2_RCV_DIS &
                           I2C2_STOP_DIS & I2C2_RESTART_DIS & I2C2_START_DIS
                            );
    
        OpenI2C2(Config1,CFG_I2C2BRG);/*The following function initializes the I2C2 bus and
                                            set the I2C2 Bus Speed to 100KHz I2C2 used to communicate with the Ultrasonic sensors*/
           
        IdleI2C2();
    
    /*End Configuration I2C2*/
        while(1)
        {
            range1=get_srf08();
        }
     }
    
    
    //Schritt 3
     
    // Start Condition
      unsigned int get_srf08 (void)
    {
        unsigned int hi,lo,range=0; //high Byte,low Byte
        
     
         
          //StartI2C2();
            I2C2CONbits.SEN=1;         //send start bit
            while(I2C2CONbits.SEN);    //and wait fot it to clear
         //MasterWriteI2C2(SRF08_ADDR);
            MasterWriteI2C2(0xF0);     //SRF08 I2C address
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);
         //MasterWriteI2C2(0x00);
            MasterWriteI2C2(0x00);    //Befehls-Register
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);       //then clear it
         //MasterWriteI2C2(0x51);
            MasterWriteI2C2(0x51);     //Messung auslösen - Ergebnis in Zentimeter
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);          //then clear it
         //StopI2C2();
             I2C2CONbits.PEN=1;         //send stop bit
             while(I2C2CONbits.PEN);
         
     //Schritt 4
         __delay_ms(80);
            
    
    
    //Schritt 5
    
         //finally get the range form the SRF08     
            
         //RestartI2C2();
            I2C2CONbits.RSEN = 1;
            while(I2C2CONbits.RSEN);    
        //MasterWriteI2C2(SRF08_ADDR+1);
            MasterWriteI2C2(0xF0|0x01);     //SRF08 I2C address+Read
            while(I2C2STATbits.TBF);
            while(!IFS3bits.MI2C2IF);       // Wait for 9th clock cycle.
            while(I2C2STATbits.ACKSTAT);    //then clear it   
         //
            hi=MasterReadI2C2();      //read Most Significant Bit
            AckI2C2();     //start acknowledge sequence
            while(I2C2CONbits.ACKEN);//wait for ack.sequence to end;
            
            lo=MasterReadI2C2();      //read Least significant Bit
            NotAckI2C2();     //not acknowledge for last byte
            while(I2C2CONbits.ACKEN);//wait for ack.sequence to end
         //StopI2C2();
            I2C2CONbits.PEN=1;         //send stop bit
            while(I2C2CONbits.PEN);
    
            range = ((hi<<8)+lo);
            
      }
    Aber ich habe jetzt noch andere Frage. Wie man SRF08 mit Hyperterminal kommunizieren kann. Soll ich "Printf();"schreiben?

    Viele Gruesse

    Maximilian

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Bist du sicher das hier Überall "Bitund" haben willst? Nicht "Bit Oder"? "|" anstatt "&"

    Code:
    Config1 = (   I2C2_ON & I2C2_IDLE_CON & I2C2_CLK_HLD &
                           I2C2_IPMI_DIS & I2C2_7BIT_ADD & I2C2_SLW_DIS &
                           I2C2_SM_DIS & I2C2_GCALL_DIS & I2C2_STR_DIS &
                           I2C2_NACK & I2C2_ACK_DIS & I2C2_RCV_DIS &
                           I2C2_STOP_DIS & I2C2_RESTART_DIS & I2C2_START_DIS
                            );

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    29.09.2014
    Beiträge
    5
    Ja,Ich bin sicher. Was meisnst du dafuer?

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    54
    Beiträge
    542
    Blog-Einträge
    17
    Sorry wenn ich dazwischen funke.
    Zitat Zitat von schorsch_76 Beitrag anzeigen
    Bist du sicher das hier Überall "Bitund" haben willst? Nicht "Bit Oder"? "|" anstatt "&"
    Das scheint zumindest von der Logik her in Ordnung so. Microchip verwendet im XC16 an der Stelle UND-basierte Bitmasken-Definitionen:
    Code:
    /* I2C2CON register Configuration bit definitions */
    
    #define I2C2_ON                     0xFFFF    /*I2C module enabled */
    #define I2C2_OFF                    0x7FFF    /*I2C module disabled */
    
    #define I2C2_IDLE_STOP              0xFFFF    /*stop I2C module in Idle mode */
    #define I2C2_IDLE_CON               0xDFFF    /*continue I2C module in Idle mode */
    
    #define I2C2_CLK_REL                0xFFFF    /*release clock */
    #define I2C2_CLK_HLD                0xEFFF    /*hold clock  */
    
    #define I2C2_IPMI_EN                0xFFFF    /*IPMI mode enabled */
    #define I2C2_IPMI_DIS               0xF7FF    /*IPMI mode not enabled */
    ...
    Ob damit die I2C Schnittstelle richtig parametriert ist, kann ich nicht sagen. Aber zum Glück sind die Config Register dokumentiert. Der Firmware-Programmierer sollte in der Lage sein das Datenblatt der MCU mit Verständnis zu lesen und entspr. im Quellcode umzusetzen.

    Die Frage mit dem Hyperterminal habe ich noch nicht verstanden. Wenn du "Printf();" schreibst, wird die ASCII Zeichenfolge "Printf();" also 0x50, 0x72, 0x69, ... über die serielle Schnittstelle (RS232) des Rechners gesendet. Und dann?
    Geändert von witkatz (09.10.2014 um 13:44 Uhr)

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    29.09.2014
    Beiträge
    5
    Ich werde weiter das Programm schreiben und probieren. Wenn alles in Ordnung ist, werde ich weite share

Ähnliche Themen

  1. SRF08-Probleme mit I2C
    Von merviux im Forum Sensoren / Sensorik
    Antworten: 6
    Letzter Beitrag: 18.03.2016, 12:44
  2. Wie: Sharp Infrarot Sensor an ADC-I2C anschließen?
    Von cmaurer im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 4
    Letzter Beitrag: 03.02.2014, 22:44
  3. Antworten: 33
    Letzter Beitrag: 07.02.2007, 20:48
  4. Antworten: 8
    Letzter Beitrag: 19.06.2006, 10:41
  5. SRF08 für Robby R5 BE über I2C Bus
    Von im Forum Robby CCRP5
    Antworten: 2
    Letzter Beitrag: 02.07.2004, 23:30

Stichworte

Berechtigungen

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

Labornetzteil AliExpress