I2C hilfe (Læst 1614x)

Offline DATPA

  • U=I*R
  • ***
  • Indlæg: 31
  • Antal brugbare Indlæg: 2
    • Vis profil
I2C hilfe
« Dato: November 09, 2015, 10:19:43 »
Hejsa

Jeg er kommet igang med at skulle programmere I2C, men jeg er ikke med på hvad dævlen jeg har gjort galt....

Jeg har en PIC16F1827.
Det er lavet således at temperaturen på min TC74 skal udskrives på 2 styk 7-Segment (Som jeg sagtens kan skrive tal ud på)
Nogen der kan lure hvad jeg mangler... :(

Kode:
/*
 * File:   I2C_Main.c
 * Author: datpa
 *
 * Created on 5. november 2015, 13:36
 */


#include <xc.h>
#include "I2C_Header.h"


//const char display[10] = {
//  tal0, tal1, tal2, tal3, tal4, tal5, tal6, tal7, tal8, tal9 };

char tal = 0;

char read_temp = 0b01001011;



void main (void) {
    
    ANSELB= 0x00;
    TRISB=252;
    OPTION_REG=0b00000101;
    ANSELA=0x00;
    TRISA=0;
    INTCONbits.IOCIE=1;
    INTCONbits.GIE=1;
    IOCBNbits.IOCBN2=1;
    

    
    SSP2CON1 = 0b00101000;
    SSP2ADD = 39;
    OSCCON=0b01111010;
    
    
    while(1){
        
    char ener = 0;
    char tier = 0;  
        
        
        SSPCON2bits.SEN = 1; //Start flag
        
        while (SSPCON2bits.SEN) {};
        
        PIR4bits.SSP2IF = 0; //make sure the interrups is cleared
        
        //addr<<1 = move one to the left (roter) 00111110 = 01111100
        SSP2BUF = 0b10010111;
        
        while(PIR4bits.SSP2IF == 0) {                 
        } ;
        
        //see of tjere is a problem with NACK if there is lengh is 9 and for loob is skipped
        if(SSP2CON2bits.ACKSTAT) {
        } 
        
        SSP2CON2bits.RCEN = 1;
        
        PIR4bits.SSP2IF = 0; //make sure the interrupt flag is cleared
        while(PIR4bits.SSP2IF ==0) {} ;
        
        tal = SSP2BUF;
        PIR4bits.SSP2IF = 0;
        SSP2CON2bits.ACKDT = 1;
        SSP2CON2bits.ACKEN = 1;
        while(PIR4bits.SSP2IF ==2 ) {} ;
        
        SSP2CON2bits.PEN = 1; //STOP FLAG
        while (SSP2CON2bits.PEN) {};
        
        
        
        
        
        ener = counter[counterSelect] % 10;
        tier = counter[counterSelect] / 10;
        
       
        
         // Display Enere
            PORTBbits.RB0 = 1;
            __delay_ms(5);
            PORTA = display[ener];    
            PORTBbits.RB0 = 0;
        
        //Display Tiere
            PORTBbits.RB1 = 0;
            __delay_ms(5);
            PORTA = display[tier];
            PORTBbits.RB1 = 1;
       
//       
       
    return;
    
    
    }
}

Danmarks bedste lærling!
...det er bare ikke gået op for mine kolleger endnu

 

Offline asm7100

  • Højpas filter
  • *****
  • Indlæg: 309
  • Antal brugbare Indlæg: 17
  • Hvis det ikke kan gøres så gør det alligevel.
    • Vis profil
Sv: I2C hilfe
« Svar #1 Dato: November 09, 2015, 16:25:57 »
Ny jeg ikke lige så hård til pic kredse mere, men skal du ikke definer hvor / hvilke pin I2c er på, og læse fra den?
MVH
Allan Madsen