ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 7 از 7
  1. #1
    2014/03/05
    22
    3

    خطاي ميکرو 16F877A

    سلام دوستان من کد i2c ماژول MPU6050 رو توي PIC Compiler نوشتم فقط ارور ميکرو 16F877A.h داره، حتي همين کتابخونه رو يه بار ديگه دانلود کردم و توي Device ريختم اما بازم نشد. ممنون ميشم کمک کنيد :sad:
    کد رو پايين گذاشتم
    کد:
      #include <16F877A.h>
    #fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,PUT,NOLVP
    #include "i2c.h"
    #use delay(clock=4000000)
    #include "Flex_LCD420.c"
    #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
    
    
    void main()
    {
     long input; 
      setup_adc_ports(NO_ANALOGS);
      setup_adc(ADC_OFF);
      setup_psp(PSP_DISABLED);
      setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
      setup_timer_1(T1_DISABLED);
      setup_timer_2(T2_DISABLED,0,1);
      setup_comparator(NC_NC_NC_NC);
      setup_vref(FALSE);
    
      // TODO: USER CODE!!
      lcd_init();
     i2c_start(); 
    i2c_write(0xd0);/// sensor slave address 
    i2c_write(0x6b);///device reset 
    i2c_write(0x00); 
     i2c_stop(); 
    delay_ms(10); 
      while(1) 
    { 
     lcd_gotoxy(1,1);
     lcd_putc("test");
     i2c_start(); 
     
    
    i2c_write(0xd0); /// sensor address 
    i2c_write(0x3b); ///ACCEL_XOUT_H 
    i2c_start(); 
    i2c_write(0xd1); 
     input=i2c_read(0); 
     
     i2c_write(0xd0); /// sensor address 
    i2c_write(0x3d); ///ACCEL_YOUT_H 
    i2c_start(); 
    i2c_write(0xd1);  
     input=i2c_read(0);
     
     i2c_write(0xd0); /// sensor address 
    i2c_write(0x3f); ///ACCEL_ZOUT_H 
    i2c_start(); 
    i2c_write(0xd1); 
     input=i2c_read(0);
     
     i2c_write(0xd0)///sensor address
     i2c_write(0x43);///Gyro_XOUT_H
    i2c_start();
    i2c_write(0xd1); 
     input=i2c_read(0);
     
     i2c_write(0xd0); /// sensor address 
    i2c_write(0x45)////Gyro_YOUT_H
    i2c_start(); 
    i2c_write(0xd1);  
     input=i2c_read(0);
     
     i2c_write(0xd0); /// sensor address 
    i2c_write(0x47)/////Gyro_ZOUT_H
    i2c_start(); 
    i2c_write(0xd1); 
     input=i2c_read(0);
     
    //i2c_write(0x68);// device address 
    //input=i2c_read(0x3b);// register address(X accel) 
    i2c_stop(); 
     lcd_gotoxy(2,2);
    printf(lcd_putc,"%Lu",input); 
    delay_ms(200);
    
     lcd_gotoxy(1,1);
     lcd_putc("best");
    delay_ms(100); 
    
    }
      
    
    }
  2. #2
    2006/08/16
    867
    17

    پاسخ : خطاي ميکرو 16F877A

    کامپایلر شما CCS هست. لطفاً محتویات فایل err. رو اینجا بزارید تا برسی بشه.
    فایلهای i2c.h و Flex_LCD420.c هم باید بررسی بشه. لطفاً لینک منبع اصلی پروژه رو هم بزارید.

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  3. #3
    2014/03/05
    22
    3

    پاسخ : خطاي ميکرو 16F877A

    سلام ممنون از لطف شما
    محتويات .err رو پايين قرار دادم
    کد:
      *** Error 17 "C:\Program Files\PICC\devices\16F877A.h" Line 2(10,11): Too many nested #INCLUDEs
       1 Errors, 0 Warnings.
    i2c.h
    کد:
     /*
     * Hi-Tech C I2C library for 12F1822
     * Master mode routines for I2C MSSP port to read and write to slave device 
     * Copyright (C)2011 HobbyTronics.co.uk 2011
     * Freely distributable.
    */
    
    #define I2C_WRITE 0
    #define I2C_READ 1
    
    // Initialise MSSP port. (12F1822 - other devices may differ)
    void i2c_Init(void){
    
      // Initialise I2C MSSP
      // Master 100KHz
      TRISA1=1;       // set SCL and SDA pins as inputs
      TRISA2=1;
    
      SSPCON1 = 0b00101000;  // I2C enabled, Master mode
      SSPCON2 = 0x00;
      // I2C Master mode, clock = FOSC/(4 * (SSPADD + 1)) 
      SSPADD = 39;     // 100Khz @ 16Mhz Fosc
    
      SSPSTAT = 0b11000000;  // Slew rate disabled
    
    }
    
    // i2c_Wait - wait for I2C transfer to finish
    void i2c_Wait(void){
      while ( ( SSP1CON2 & 0x1F ) || ( SSPSTAT & 0x04 ) );
    }
    
    // i2c_Start - Start I2C communication
    void i2c_Start(void)
    {
      i2c_Wait();
      SEN=1;
    }
    
    // i2c_Restart - Re-Start I2C communication
    void i2c_Restart(void){
      i2c_Wait();
      RSEN=1;
    }
    
    // i2c_Stop - Stop I2C communication
    void i2c_Stop(void)
    {
      i2c_Wait();
      PEN=1;
    }
    
    // i2c_Write - Sends one byte of data
    void i2c_Write(unsigned char data)
    {
      i2c_Wait();
      SSPBUF = data;
    }
    
    // i2c_Address - Sends Slave Address and Read/Write mode
    // mode is either I2C_WRITE or I2C_READ
    void i2c_Address(unsigned char address, unsigned char mode)
    {
      unsigned char l_address;
    
      l_address=address<<1;
      l_address+=mode;
      i2c_Wait();
      SSPBUF = l_address;
    }
    
    // i2c_Read - Reads a byte from Slave device
    unsigned char i2c_Read(unsigned char ack)
    {
      // Read data from slave
      // ack should be 1 if there is going to be more data read
      // ack should be 0 if this is the last byte of data read
      unsigned char i2cReadData;
    
      i2c_Wait();
      RCEN=1;
      i2c_Wait();
      i2cReadData = SSPBUF;
      i2c_Wait();
      if ( ack ) ACKDT=0;     // Ack
      else    ACKDT=1;     // NAck
      ACKEN=1;           // send acknowledge sequence
    
      return( i2cReadData );
    }
    Flex_LCD420.c

    کد:
     // Flex_LCD420.c 
    
    // These pins are for my Microchip PicDem2-Plus board, 
    // which I used to test this driver. 
    // An external 20x4 LCD is connected to these pins. 
    // Change these pins to match your own board's connections. 
    
    #define LCD_DB4  PIN_B4 
    #define LCD_DB5  PIN_B5 
    #define LCD_DB6  PIN_B6 
    #define LCD_DB7  PIN_B7 
    
    #define LCD_RS  PIN_B0 
    #define LCD_RW  PIN_B1 
    #define LCD_E   PIN_B2 
    
    /* 
    // To prove that the driver can be used with random 
    // pins, I also tested it with these pins: 
    #define LCD_DB4  PIN_D4 
    #define LCD_DB5  PIN_B1 
    #define LCD_DB6  PIN_C5 
    #define LCD_DB7  PIN_B5 
    
    #define LCD_RS  PIN_E2 
    #define LCD_RW  PIN_B2 
    #define LCD_E   PIN_D6 
    */ 
    
    // If you want only a 6-pin interface to your LCD, then 
    // connect the R/W pin on the LCD to ground, and comment 
    // out the following line. Doing so will save one PIC 
    // pin, but at the cost of losing the ability to read from 
    // the LCD. It also makes the write time a little longer 
    // because a static delay must be used, instead of polling 
    // the LCD's busy bit. Normally a 6-pin interface is only 
    // used if you are running out of PIC pins, and you need 
    // to use as few as possible for the LCD. 
    #define USE_RW_PIN  1   
    
    
    // These are the line addresses for most 4x20 LCDs. 
    #define LCD_LINE_1_ADDRESS 0x00 
    #define LCD_LINE_2_ADDRESS 0x40 
    #define LCD_LINE_3_ADDRESS 0x14 
    #define LCD_LINE_4_ADDRESS 0x54 
    
    // These are the line addresses for LCD's which use 
    // the Hitachi HD66712U controller chip. 
    /* 
    #define LCD_LINE_1_ADDRESS 0x00 
    #define LCD_LINE_2_ADDRESS 0x20 
    #define LCD_LINE_3_ADDRESS 0x40 
    #define LCD_LINE_4_ADDRESS 0x60 
    */ 
    
    
    //======================================== 
    
    #define lcd_type 2  // 0=5x7, 1=5x10, 2=2 lines(or more) 
    
    int8 lcd_line ;
    
    int8 const LCD_INIT_STRING[4] = 
    { 
     0x20 | (lcd_type << 2), // Set mode: 4-bit, 2+ lines, 5x8 dots 
     0xc,           // Display on 
     1,            // Clear display 
     6            // Increment cursor 
     }; 
                   
    
    //------------------------------------- 
    void lcd_send_nibble(int8 nibble) 
    { 
    // Note: !! converts an integer expression 
    // to a boolean (1 or 0). 
     output_bit(LCD_DB4, !!(nibble & 1)); 
     output_bit(LCD_DB5, !!(nibble & 2)); 
     output_bit(LCD_DB6, !!(nibble & 4));  
     output_bit(LCD_DB7, !!(nibble & 8));  
    
     delay_cycles(1) ;
     output_high(LCD_E); 
     delay_us(2); 
     output_low(LCD_E); 
    } 
    
    //----------------------------------- 
    // This sub-routine is only called by lcd_read_byte(). 
    // It's not a stand-alone routine. For example, the 
    // R/W signal is set high by lcd_read_byte() before 
    // this routine is called.   
    
    #ifdef USE_RW_PIN 
    int8 lcd_read_nibble(void) 
    { 
    int8 retval; 
    // Create bit variables so that we can easily set 
    // individual bits in the retval variable. 
    #bit retval_0 = retval.0 
    #bit retval_1 = retval.1 
    #bit retval_2 = retval.2 
    #bit retval_3 = retval.3 
    
    retval = 0; 
      
    output_high(LCD_E); 
    delay_us(1); 
    
    retval_0 = input(LCD_DB4); 
    retval_1 = input(LCD_DB5); 
    retval_2 = input(LCD_DB6); 
    retval_3 = input(LCD_DB7); 
     
    output_low(LCD_E); 
    delay_us(1); 
      
    return(retval);  
    }  
    #endif 
    
    //--------------------------------------- 
    // Read a byte from the LCD and return it. 
    
    #ifdef USE_RW_PIN 
    int8 lcd_read_byte(void) 
    { 
    int8 low; 
    int8 high; 
    
    output_high(LCD_RW); 
    delay_cycles(1); 
    
    high = lcd_read_nibble(); 
    
    low = lcd_read_nibble(); 
    
    return( (high<<4) | low); 
    } 
    #endif 
    
    //---------------------------------------- 
    // Send a byte to the LCD. 
    void lcd_send_byte(int8 address, int8 n) 
    { 
    output_low(LCD_RS); 
    
    #ifdef USE_RW_PIN 
    while(bit_test(lcd_read_byte(),7)) ; 
    #else 
    delay_us(60); 
    #endif 
    
    if(address) 
      output_high(LCD_RS); 
    else 
      output_low(LCD_RS); 
       
     delay_cycles(1); 
    
    #ifdef USE_RW_PIN 
    output_low(LCD_RW); 
    delay_cycles(1); 
    #endif 
    
    output_low(LCD_E); 
    
    lcd_send_nibble(n >> 4); 
    lcd_send_nibble(n & 0xf); 
    } 
    //---------------------------- 
    
    void lcd_init(void) 
    { 
      int8 i; 
    
      lcd_line = 1; 
    
      output_low(LCD_RS); 
    
      #ifdef USE_RW_PIN 
       output_low(LCD_RW); 
      #endif 
    
      output_low(LCD_E); 
    
      // Some LCDs require 15 ms minimum delay after 
      // power-up. Others require 30 ms. I'm going 
      // to set it to 35 ms, so it should work with 
      // all of them. 
      delay_ms(35);     
    
      for(i=0 ;i < 3; i++) 
      { 
       lcd_send_nibble(0x03); 
       delay_ms(5); 
      } 
    
      lcd_send_nibble(0x02); 
    
      for(i=0; i < sizeof(LCD_INIT_STRING); i++) 
      { 
       lcd_send_byte(0, LCD_INIT_STRING[i]); 
      
       // If the R/W signal is not used, then 
       // the busy bit can't be polled. One of 
       // the init commands takes longer than 
       // the hard-coded delay of 50 us, so in 
       // that case, lets just do a 5 ms delay 
       // after all four of them. 
       #ifndef USE_RW_PIN 
         delay_ms(5); 
       #endif 
      } 
    
    } 
    
    //---------------------------- 
    
    void lcd_gotoxy(int8 x, int8 y) 
    { 
    int8 address; 
    
    
    switch(y) 
     { 
      case 1: 
       address = LCD_LINE_1_ADDRESS; 
       break; 
    
      case 2: 
       address = LCD_LINE_2_ADDRESS; 
       break; 
    
      case 3: 
       address = LCD_LINE_3_ADDRESS; 
       break; 
    
      case 4: 
       address = LCD_LINE_4_ADDRESS; 
       break; 
    
      default: 
       address = LCD_LINE_1_ADDRESS; 
       break; 
       
     } 
    
    address += x-1; 
    lcd_send_byte(0, 0x80 | address); 
    } 
    
    //----------------------------- 
    void lcd_putc(char c) 
    { 
     switch(c) 
      { 
      case '\f': 
       lcd_send_byte(0,1); 
       lcd_line = 1; 
       delay_ms(2); 
       break; 
      
      case '\n': 
        lcd_gotoxy(1, ++lcd_line); 
        break; 
      
      case '\b': 
        lcd_send_byte(0,0x10); 
        break; 
      
      default: 
        lcd_send_byte(1,c); 
        break; 
      } 
    } 
    
    //------------------------------ 
    #ifdef USE_RW_PIN 
    char lcd_getc(int8 x, int8 y) 
    { 
    char value; 
    
    lcd_gotoxy(x,y); 
    
    // Wait until busy flag is low. 
    while(bit_test(lcd_read_byte(),7)); 
    
    output_high(LCD_RS); 
    value = lcd_read_byte(); 
    output_low(LCD_RS); 
    
    return(value); 
    } 
    #endif
    معذرت ميخوام منظورتون ازلينک منبع پروژه چي بوده؟
    اين کد رو از منابع مختلف نوشتم.
  4. #4
    2006/08/16
    867
    17

    پاسخ : خطاي ميکرو 16F877A

    ارور میگه خیلی Include تو هم تو هم داری. حالا مشکل ممکنه از نام گذاری فایلهاتون باشه. ممکنه ایراد کامپایلر باشه.
    مطمئن بشید که نام فایلهای پروژه با نام فایلهای include یکی نباشه. من تست کردم کامپایل شد.
    نسخه کامپایلرتون چنده؟

    یه ایراد دیگه اینکه فایل i2c.h شما برای کامپایلر Hi-Tech هست و با CCS نمیتونید استفاده کنید.
    در واقع اصلاً بهش نیاز ندارید. خود CCS توابع i2c رو داره.

    ممکنه ایرادهای دیگه هم باشه ولی فعلاً شما اینا رو باید رفع کنید.

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  5. #5
    2014/03/05
    22
    3

    پاسخ : خطاي ميکرو 16F877A

    معذرت ميخوام براي شما مقدوره که فايل hex رو برام بفرستيد؟
  6. #6
    2006/08/16
    867
    17

    پاسخ : خطاي ميکرو 16F877A

    نقل قول نوشته اصلی توسط ArshadIT
    معذرت ميخوام براي شما مقدوره که فايل hex رو برام بفرستيد؟
    فایل هگزی وجود نداره! من برای اینکه کامپایل کنم دستورات I2C رو حذف کردم.
    عرض کردم.
    شما باید برنامه رو از اول با توابع I2C خود CCS بنویسید.

    مشکل ارور حل شد؟
    در ضمن سوال بنده در مورد نسخه کامپایلر رو جواب ندادید.

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  7. #7
    2014/03/05
    22
    3

    پاسخ : خطاي ميکرو 16F877A

    سلام دوست عزيز اونقدر که پاسخ شما جامع بود يادم رفت که ورژن رو بگم 4 به بالا هستش. البته هنوز ارور ميکرو داره.
نمایش نتایج: از 1 به 7 از 7

موضوعات مشابه

  1. رفع ارورر out of rom در 16f877a
    توسط sarbaz13 در انجمن میکروکنترلرهای PIC
    پاسخ: 10
    آخرين نوشته: 2016/01/25, 15:09
  2. کمک برای راه اندازیGlcdبا 16f877A
    توسط aa62 در انجمن میکروکنترلرهای PIC
    پاسخ: 24
    آخرين نوشته: 2015/08/30, 20:43
  3. کریستال 20 مگا هرتز +16f877a
    توسط hosein0361 در انجمن میکروکنترلرهای PIC
    پاسخ: 10
    آخرين نوشته: 2014/05/04, 11:18
  4. روشن و خواموش شدن 16f877a
    توسط p1000i در انجمن میکروکنترلرهای PIC
    پاسخ: 4
    آخرين نوشته: 2012/07/31, 10:52
  5. lcd با 16f877a
    توسط p1000i در انجمن میکروکنترلرهای PIC
    پاسخ: 1
    آخرين نوشته: 2011/12/21, 07:42

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •