NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 4472 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 14 از 14

موضوع: کمک در راه اندازی AT24C64 با xmega32a4

  1. #1
    کاربر فعال arm-mohsen-avr آواتار ها
    تاریخ عضویت
    May 2011
    نام
    محسن جودی
    نوشته ها
    222
    تشکر
    200
    تشکر شده 149 بار در 101 پست

    New کمک در راه اندازی AT24C64 با xmega32a4

    با سلام
    دوستان عزیز من می خواستم آی سی EEPROM رو با xmega32a4 راه اندازی کنم ولی کلا مو ندم توش اگه میشه راهنمایی کنید.
    باتشکر

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  3. #2
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    سلام
    مهندس از كدوم كامپايلر ميخواي استفاده كني؟ BASCOM يا Coevision؟ ...
    _____________________________________
    _____________________________________

  4. کاربران : 2 تشکر کرده اند از شما sadmonew برای ارسال این پست سودمند:


  5. #3
    کاربر فعال arm-mohsen-avr آواتار ها
    تاریخ عضویت
    May 2011
    نام
    محسن جودی
    نوشته ها
    222
    تشکر
    200
    تشکر شده 149 بار در 101 پست

    پیش فرض

    با تشکر
    از کامپایلر avrstudio استفاده می کنم فرقی نداره کدوم کامپایلر فقط زبان C

  6. تشکرها از این نوشته :


  7. #4
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    با سلام
    مهندس خودتون برنامه اي براي راه اندازي اين آي.سي نوشتين؟
    اگه نوشتين لطفا اينجا بذاريد.
    _____________________________________
    _____________________________________

  8. تشکرها از این نوشته :


  9. #5
    کاربر فعال pooriya آواتار ها
    تاریخ عضویت
    Nov 2008
    نام
    پوریا علیزاده
    نوشته ها
    316
    تشکر
    163
    تشکر شده 676 بار در 217 پست

    پیش فرض

    سلام

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

    Object reference not set to an instance of an object.

  10. کاربران : 3 تشکر کرده اند از شما pooriya برای ارسال این پست سودمند:


  11. #6
    کاربر فعال arm-mohsen-avr آواتار ها
    تاریخ عضویت
    May 2011
    نام
    محسن جودی
    نوشته ها
    222
    تشکر
    200
    تشکر شده 149 بار در 101 پست

    پیش فرض

    با سلام به دوستان
    درباره این کدی که اقای پوریا در پست قبلی دادن کسی است من رو راهنمایی کنه.
    باتشکر

  12. تشکرها از این نوشته :


  13. #7
    کاربر فعال arm-mohsen-avr آواتار ها
    تاریخ عضویت
    May 2011
    نام
    محسن جودی
    نوشته ها
    222
    تشکر
    200
    تشکر شده 149 بار در 101 پست

    پیش فرض

    این هم از کد هاش :
    [PHP]#include "avr_compiler.h"
    #include "twi_master_driver.h"
    #include "KEY_7SEG.h"
    #define SLAVE_ADDRESS 0x50
    #define CPU_SPEED 2000000
    #define BAUDRATE 100000
    #define TWI_BAUDSETTING TWI_BAUD(CPU_SPEED, BAUDRATE)

    TWI_Master_t twiMaster; /*!< TWI master module. */
    unsigned char EEPROM_Address_Data[8]={0,0,0,0,0,0,0,0};

    void main(void)
    {
    unsigned char key_code=nokey_code;
    unsigned char old_key_code=nokey_code;
    unsigned char DIGITS[6]={0,0,0,0,0,0};
    unsigned char i=0,j;
    /* Initialize TWI master. */
    TWI_MasterInit(&twiMaster,&TWIC,TWI_MASTER_INTLVL_ LO_gc,TWI_BAUDSETTING);
    init_7seg();
    init_key();
    __enable_interrupt();

    TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,&EEPR OM_Address_Data[0],2,0);
    while (twiMaster.status != TWIM_STATUS_READY);
    TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,&DIGI TS[0],0,6);
    while (twiMaster.status != TWIM_STATUS_READY);
    for(j=0;j<6;j++)DIGITS[j]=twiMaster.readData[j];
    show_7seg(DIGITS,0x00,0x00);

    while(1)
    {
    key_code=get_key();
    if (key_code!= old_key_code)
    {
    old_key_code=key_code;
    if (key_code!=nokey_code)
    {
    if (key_code==10)
    {
    TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,&EEPR OM_Address_Data[0],2,0);
    while (twiMaster.status != TWIM_STATUS_READY);
    TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,&DIGI TS[0],0,6);
    while (twiMaster.status != TWIM_STATUS_READY);
    for(j=0;j<6;j++)DIGITS[j]=twiMaster.readData[j];
    show_7seg(DIGITS,0x00,0x00);
    }
    else if (key_code==11)
    {
    for(j=0;j<6;j++)EEPROM_Address_Data[j+2]=DIGITS[j];
    TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,&EEPR OM_Address_Data[0],8,0);
    while (twiMaster.status != TWIM_STATUS_READY);
    }

    else
    {
    DIGITS[i]=key_code;
    i++;
    if (i==6) i=0;
    show_7seg(DIGITS,0x00,0x00);
    }
    }
    }
    }
    }

    /*! TWIC Master Interrupt vector. */
    ISR(TWIC_TWIM_vect)
    {
    TWI_MasterInterruptHandler(&twiMaster);
    }


    [/PHP]تو این تابع 2 بایت ارسال می شود به ادرسی که عنصر ارایه صفر است ....آیا درست است ؟
    [PHP] TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,&EEPR OM_Address_Data[0],2,0);[/PHP]
    ویرایش توسط arm-mohsen-avr : 29-01-2012 در ساعت 13:00

  14. تشکرها از این نوشته :


  15. #8
    کاربر فعال arm-mohsen-avr آواتار ها
    تاریخ عضویت
    May 2011
    نام
    محسن جودی
    نوشته ها
    222
    تشکر
    200
    تشکر شده 149 بار در 101 پست

    پیش فرض

    دوستان برنامه رو به این صورت تغییر دادم ولی برنامه از این به بعد اجرا نمیشه یعنی بعد از این دو خط که نمایش دیتا تو LCD است هیچ دیتایی نمایش داده نمی شود....
    [PHP]TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,&writ e_Data,3,3);
    while (twiMaster.status != TWIM_STATUS_READY);[/PHP]این هم برنامه :
    [PHP]/*
    * TWI_24C64.c
    *
    * Created: 01/24/2012 02:06:08 ق.ظ
    * Author: DELLN4030
    */
    #include <avr/io.h>
    #include "lcd.h"
    #include <avr/delay.h>
    #include <stdio.h>
    #include "avr_compiler.h"
    #include "twi_master_driver.h"
    #define SLAVE_ADDRESS 0x50
    #define CPU_SPEED 2000000
    #define BAUDRATE 100000
    #define TWI_BAUDSETTING TWI_BAUD(CPU_SPEED, BAUDRATE)
    TWI_Master_t twiMaster; /*!< TWI master module. */
    uint8_t write_Data[8] = {0 ,0 , 0xaa};
    char read_Data[8];
    char eepromread(int add);
    void eepromwrite(unsigned char data,int add);

    int main(void)
    {
    lcd_init(LCD_DISP_ON);
    unsigned char i=0,j;
    char lcd_buff[20];
    /* Initialize TWI master. */
    TWI_MasterInit(&twiMaster,&TWIE,TWI_MASTER_INTLVL_ LO_gc,TWI_BAUDSETTING);
    PMIC.CTRL |= PMIC_LOLVLEN_bm;
    sei();

    TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,&writ e_Data,3,3);
    while (twiMaster.status != TWIM_STATUS_READY);

    lcd_gotoxy(0,0);
    lcd_puts("EEPROM XMEGA");


    while(1)
    {
    eepromwrite(55,1);
    read_Data[0]=eepromread(1);
    lcd_gotoxy(1,1);
    sprintf(lcd_buff,"data=%x ",read_Data[0]);
    lcd_puts(lcd_buff);
    _delay_ms(3000);
    }
    }


    /*! TWIC Master Interrupt vector. */
    ISR(TWIC_TWIM_vect)
    {
    TWI_MasterInterruptHandler(&twiMaster);
    }


    //read's a byte from memory
    char eepromread(int add)
    {
    uint8_t local_data[2];
    local_data[0] = add>>8;
    local_data[1] = add;

    TWI_MasterWriteRead(&twiMaster, SLAVE_ADDRESS, local_data, 2, 0);
    while (twiMaster.status != TWIM_STATUS_READY);

    TWI_MasterWriteRead(&twiMaster, SLAVE_ADDRESS, 0, 0, 1);
    while (twiMaster.status != TWIM_STATUS_READY);

    return twiMaster.readData[0];

    }

    //write's a byte to memory
    void eepromwrite(unsigned char data,int add)
    {
    uint8_t local_data[3];

    local_data[0] = add>>8;
    local_data[1] = add;
    local_data[2] = data;

    TWI_MasterWriteRead(&twiMaster, SLAVE_ADDRESS, local_data, 3, 0);
    while (twiMaster.status != TWIM_STATUS_READY);

    } [/PHP]
    ویرایش توسط arm-mohsen-avr : 29-01-2012 در ساعت 15:03

  16. تشکرها از این نوشته :


  17. #9
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    سلام مهندس
    قبل از اینکه اون خط رو تغییر بدید تو ال.سی.دی چی نشون میداد؟
    راستی برنامه درست اجرا میشه؟
    _____________________________________
    _____________________________________

  18. تشکرها از این نوشته :


  19. #10
    کاربر فعال arm-mohsen-avr آواتار ها
    تاریخ عضویت
    May 2011
    نام
    محسن جودی
    نوشته ها
    222
    تشکر
    200
    تشکر شده 149 بار در 101 پست

    پیش فرض

    با تشکر
    نه منظورم این بود که این تابع
    [PHP]TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,&writ e_Data,3,3);[/PHP]
    اجرا نمیشه و در این خط می مونه . می خواستم ببینم مشکل از کجاست ؟
    برنامه قبل از این تابع اجرا میشه

  20. #11
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    مهندس میتونید بیشتر توضیح بدید که چرا اینطوری تغییر دادید؟
    منظورم اینه که میخواستید با این تغییر چه کاری رو براتون انجام بده؟
    _____________________________________
    _____________________________________

  21. #12
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    نقل قول نوشته اصلی توسط arm-mohsen-avr نمایش پست ها
    با تشکر
    نه منظورم این بود که این تابع
    [PHP]TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,&writ e_Data,3,3);[/PHP]
    اجرا نمیشه و در این خط می مونه . می خواستم ببینم مشکل از کجاست ؟
    برنامه قبل از این تابع اجرا میشه
    سلام
    مهندس تو تعریف این تابع عنوان شده که این تابع برای خوندن یا نوشتن هستش. شما نمیتونید با این تابع در آن واحد هم داده رو بخونی و بنویسی.
    اگر دقت کرده باشید یه دستور بعد از این خط آورده شده یعنی این:
    کد:
    while (twiMaster.status != TWIM_STATUS_READY);
    این دستور بعد از هر با اجرا شده تابع TWI_MasterWriteRead چک میکنه که تابع برای اجرا دستور بعدی آماده هستش یا نه؟
    _____________________________________
    _____________________________________

  22. #13
    کاربر فعال arm-mohsen-avr آواتار ها
    تاریخ عضویت
    May 2011
    نام
    محسن جودی
    نوشته ها
    222
    تشکر
    200
    تشکر شده 149 بار در 101 پست

    پیش فرض

    برنامه رو به این صورت تغییر دادم ولی کار نمی کنه از دوستانی که با at24cxx کار کردن میشه راهنمایی کنند. در این برنامه خروجی data=0 هستش ..که همش صفر است

    [PHP]/*
    * TWI_24C64.c
    *
    * Created: 01/24/2012 02:06:08 ق.ظ
    * Author: N4030
    */
    #include <avr/io.h>
    #include "lcd.h"
    #include <avr/delay.h>
    #include <stdio.h>
    #include "avr_compiler.h"
    #include "twi_master_driver.h"
    #define SLAVE_ADDRESS 0x50
    #define CPU_SPEED 2000000
    #define BAUDRATE 100000
    #define TWI_BAUDSETTING TWI_BAUD(CPU_SPEED, BAUDRATE)
    TWI_Master_t twiMaster; /*!< TWI master module. */
    //uint8_t write_Data[8] = {0 ,0 , 0xaa};

    unsigned char eepromread(int add);
    void eepromwrite(unsigned char data,int add);

    int main(void)
    {
    lcd_init(LCD_DISP_ON);
    unsigned char i=0,j;
    char lcd_buff[20];
    unsigned char read_Data[8],read_status;
    TWI_MasterInit(&twiMaster,&TWIC,TWI_MASTER_INTLVL_ LO_gc,TWI_BAUDSETTING);
    PMIC.CTRL |= PMIC_LOLVLEN_bm;
    sei();

    lcd_gotoxy(0,0);
    lcd_puts("EEPROM XMEGA");


    while(1)
    {

    eepromwrite(10,2);
    read_Data[0]=eepromread(200);
    lcd_gotoxy(1,1);
    sprintf(lcd_buff,"data=%d ", read_Data[0]);
    lcd_puts(lcd_buff);
    _delay_ms(2000);
    lcd_clrscr();

    }
    }


    /*! TWIC Master Interrupt vector. */
    ISR(TWIC_TWIM_vect)
    {
    TWI_MasterInterruptHandler(&twiMaster);
    }


    //read's a byte from memory
    unsigned char eepromread(int add)
    {
    uint8_t local_data[2];
    char lcd_buff[20];
    local_data[0] = add>>8;
    local_data[1] = add;

    TWI_MasterWriteRead(&twiMaster, SLAVE_ADDRESS, local_data, 2, 0);
    while (twiMaster.status != TWIM_STATUS_READY);

    TWI_MasterWriteRead(&twiMaster, SLAVE_ADDRESS, 0, 0, 1);
    while (twiMaster.status != TWIM_STATUS_READY);

    return twiMaster.readData[0];

    }

    //write's a byte to memory
    void eepromwrite(unsigned char data,int add)
    {
    uint8_t local_data[3];
    local_data[0] = add>>8;
    local_data[1] = add;
    local_data[2] = data;

    TWI_MasterWriteRead(&twiMaster, SLAVE_ADDRESS, local_data, 3, 0);
    while (twiMaster.status != TWIM_STATUS_READY);

    } [/PHP]

  23. #14
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    سلام
    فكر ميكنم شايد مشكل از اين دو تا دستور باشه حتي بر فرض هم اگه كل برنامه درست اجرا بشه يه نكته وجو داره شما تو اين دستور:
    کد:
    eepromwrite(10,2); 
    گفتين كه مقدار داده 10 رو در آدرس 2 ذخيره كن.
    و تو اين دستور:
    کد:
    read_Data[0]=eepromread(200);
    گفتين كه مقدار داده ذخيره شده از آدرس 200 رو بخون.
    تو آدرس 200 مگه چيزي ذخيره شده.؟!؟
    _____________________________________
    _____________________________________

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

  1. اشکال در ارتباط eeprom نوع at24c64 با at91sam7x256
    توسط aref3006 در انجمن AT91 series (ATMEL)
    پاسخ: 3
    آخرين نوشته: 18-03-2013, 00:44
  2. راه اندازی eeprom AT24C64 با 1768 و یا 2368
    توسط pswin در انجمن LPC series (NXP)
    پاسخ: 1
    آخرين نوشته: 15-05-2012, 16:30
  3. ره اندازی smt160 با پورت موازی
    توسط M.ABDOLLAHI در انجمن AVR
    پاسخ: 3
    آخرين نوشته: 27-04-2009, 21:34

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

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