اطلاعیه

Collapse
No announcement yet.

eeprom در atmega8

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    eeprom در atmega8

    سلام دوستان این کد برای ضخیره طلاعات توی eeprom میکرو نوشتم ولی

    وقتی اصلاعات میخونم عدد 0 برمیگردونه

    مشکلش کجاست
    از روی دیتاشید atmel نوشتم :angry:
    کد:
    /*****************************************************
    This program was produced by the
    CodeWizardAVR V2.05.3 Standard
    Automatic Program Generator
    © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com
    
    Project : 
    Version : 
    Date  : 10/17/2014
    Author : HOSEIN TORABI
    Company : 
    Comments: 
    
    
    Chip type        : ATmega8
    Program type      : Application
    AVR Core Clock frequency: 8.000000 MHz
    Memory model      : Small
    External RAM size    : 0
    Data Stack size     : 256
    *****************************************************/
    
    #include <mega8.h>
    #include <delay.h>
    #include <stdio.h>
    #include <stdlib.h>
    // Alphanumeric LCD functions
    #include <alcd.h>
    
    // Declare your global variables here
    char str[16],date;
    void main(void)
    {
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTB=0x00;
    DDRB=0x00;
    
    // Port C initialization
    // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTC=0x00;
    DDRC=0x00;
    
    // Port D initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTD=0x00;
    DDRD=0x00;
    
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    TCCR0=0x00;
    TCNT0=0x00;
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer1 Stopped
    // Mode: Normal top=0xFFFF
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer2 Stopped
    // Mode: Normal top=0xFF
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    MCUCR=0x00;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;
    
    // USART initialization
    // USART disabled
    UCSRB=0x00;
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    
    // ADC initialization
    // ADC disabled
    ADCSRA=0x00;
    
    // SPI initialization
    // SPI disabled
    SPCR=0x00;
    
    // TWI initialization
    // TWI disabled
    TWCR=0x00;
    
    // Alphanumeric LCD initialization
    // Connections are specified in the
    // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
    // RS - PORTB Bit 0
    // RD - PORTB Bit 1
    // EN - PORTB Bit 2
    // D4 - PORTB Bit 4
    // D5 - PORTB Bit 5
    // D6 - PORTB Bit 6
    // D7 - PORTB Bit 7
    // Characters/line: 16
    lcd_init(16);
    
    while(EECR & (1<<EEWE))
    {
    }
    EEARL=0x01;
    EEARH=0x00;
    EEDR=0X01;
    EECR|=(1<<EEMWE);
    EECR|=(1<<EEWE);
    lcd_gotoxy(0,0);
    lcd_clear();
    lcd_putsf("date write on eeprom");
    delay_ms(250);
    while(EECR & (1<<EEWE))
    {
    }
    EEARL=0x01;
    EEARH=0x00;
    EECR |= (1<<EERE);
    EEDR=date;
    lcd_gotoxy(0,0);
    lcd_clear();
    sprintf(str,"date is=%s",date);
    
    lcd_puts(str);
    delay_ms(250);
    while (1)
       {
       // Place your code here
       lcd_clear();
       lcd_gotoxy(0,0);
       lcd_putsf("in loop");
       }
    }

    #2
    پاسخ : eeprom در atmega8

    دوستان ما جواب میخوایم هاااا :biggrin: :biggrin: :biggrin: :biggrin:

    دیدگاه


      #3
      پاسخ : eeprom در atmega8

      هنگام تعریف متغیر از کلمه کلیدی _EEPROMآ‌ استفاده کنید (رجوع به هلپ کدویژن)

      دیدگاه


        #4
        پاسخ : eeprom در atmega8

        سلام ممنون که پاسخ دادید من میخوام با خود ریجستر ها این کار انجام بدم :biggrin:

        دیدگاه


          #5
          پاسخ : eeprom در atmega8

          سلام به همه حلش کردیم :wow:
          اینم نمونه کدش برای دوستان
          فقط من از خود ریجستر های avr استفاده کردم
          نه از متغیر های codvision
          کد:
          /*****************************************************
          This program was produced by the
          CodeWizardAVR V2.05.3 Standard
          Automatic Program Generator
          © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
          http://www.hpinfotech.com
          
          Project : 
          Version : 
          Date  : 10/17/2014
          Author : HOSEIN TORABI
          Company : 
          Comments: 
          
          
          Chip type        : ATmega8
          Program type      : Application
          AVR Core Clock frequency: 8.000000 MHz
          Memory model      : Small
          External RAM size    : 0
          Data Stack size     : 256
          *****************************************************/
          
          #include <mega8.h>
          #include <delay.h>
          #include <stdio.h>
          #include <stdlib.h>
          // Alphanumeric LCD functions
          #include <alcd.h>
          
          // Declare your global variables here
          char str[16];
          
          void main(void)
          {
          // Declare your local variables here
          
          // Input/Output Ports initialization
          // Port B initialization
          // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
          // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
          PORTB=0x00;
          DDRB=0x00;
          
          // Port C initialization
          // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
          // State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
          PORTC=0x00;
          DDRC=0x00;
          
          // Port D initialization
          // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
          // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
          PORTD=0x00;
          DDRD=0x00;
          
          // Timer/Counter 0 initialization
          // Clock source: System Clock
          // Clock value: Timer 0 Stopped
          TCCR0=0x00;
          TCNT0=0x00;
          
          // Timer/Counter 1 initialization
          // Clock source: System Clock
          // Clock value: Timer1 Stopped
          // Mode: Normal top=0xFFFF
          // OC1A output: Discon.
          // OC1B output: Discon.
          // Noise Canceler: Off
          // Input Capture on Falling Edge
          // Timer1 Overflow Interrupt: Off
          // Input Capture Interrupt: Off
          // Compare A Match Interrupt: Off
          // Compare B Match Interrupt: Off
          TCCR1A=0x00;
          TCCR1B=0x00;
          TCNT1H=0x00;
          TCNT1L=0x00;
          ICR1H=0x00;
          ICR1L=0x00;
          OCR1AH=0x00;
          OCR1AL=0x00;
          OCR1BH=0x00;
          OCR1BL=0x00;
          
          // Timer/Counter 2 initialization
          // Clock source: System Clock             a
          // Clock value: Timer2 Stopped
          // Mode: Normal top=0xFF
          // OC2 output: Disconnected
          ASSR=0x00;
          TCCR2=0x00;
          TCNT2=0x00;
          OCR2=0x00;
          
          // External Interrupt(s) initialization
          // INT0: Off
          // INT1: Off
          MCUCR=0x00;
          
          // Timer(s)/Counter(s) Interrupt(s) initialization
          TIMSK=0x00;
          
          // USART initialization
          // USART disabled
          UCSRB=0x00;
          
          // Analog Comparator initialization
          // Analog Comparator: Off
          // Analog Comparator Input Capture by Timer/Counter 1: Off
          ACSR=0x80;
          SFIOR=0x00;
          
          // ADC initialization
          // ADC disabled
          ADCSRA=0x00;
          
          // SPI initialization
          // SPI disabled
          SPCR=0x00;
          
          // TWI initialization
          // TWI disabled
          TWCR=0x00;
          
          // Alphanumeric LCD initialization
          // Connections are specified in the
          // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
          // RS - PORTB Bit 0
          // RD - PORTB Bit 1
          // EN - PORTB Bit 2
          // D4 - PORTB Bit 4
          // D5 - PORTB Bit 5
          // D6 - PORTB Bit 6
          // D7 - PORTB Bit 7
          // Characters/line: 16
          lcd_init(16);
          
          while(EECR & (1<<EEWE))
          {
          }
          EEAR=0b11110011;
          EEDR=0b11111000;
          EECR|=(1<<EEMWE);
          EECR|=(1<<EEWE);
          lcd_gotoxy(0,0);
          lcd_clear();
          lcd_putsf("date write on eeprom");
          delay_ms(250);
          while(EECR & (1<<EEWE))
          {
          }
          EEAR=0b11110011;
          EECR |= (1<<EERE);
          lcd_gotoxy(0,0);
          lcd_clear();
          sprintf(str,"date is=%d",EEDR);
          lcd_puts(str);
          delay_ms(250);
          while (1)
             {
             // Place your code here
             lcd_clear();
             lcd_gotoxy(0,0);
             lcd_putsf("in loop");
             }
          }

          دیدگاه


            #6
            پاسخ : eeprom در atmega8

            سلام دوستان
            فرض کنید ما یک پروژه ای تحویل مشتری میدیم و میخواهیم یک پارامتر رو خودش بسته به نیازش کالیبره کنه
            حالا این مقدار درون eeprom قرار هست ذخیره بشه
            ببینید مثلا من اول برنامه اصلی میکرو اینو تعریف کردم 100 =eeprom int x خب... حالا نمیخوام از بوت لودر و .... استفاده کنم
            میخوام با سی شارپ یه برنامه ای بنویسیم که یه مقدارو بهش بدی برای x , و اون بیادفقط یه فایل eep. برام بسازه که مشتری فقط بتونه eeprom پروگرام کنه
            حالا برام سواله این داده داخل فایل eep که فرمت هگز هست رو چطور تولید کنم ؟
            بعنوان مثال
            eeprom int hour_backup;
            eeprom char min_backup,initial=1,FRQ_SAVE
            این دو خط از برناممه منه که وقتی با کدویژن کامپایلش ممیکنم یه فایل eep. بهم میده که محتویاش;اینه:
            :020004000100F9
            :00000001FF
            خب من اون دو خط کد به زبان سی رو با چندین نرم افزار مختلف به هگز تبدیل کردم ولی شبیه این کد هگز تولیدی کد ویژن نیست
            ممنون میشم از دوستان راهنمایی کنند

            دیدگاه


              #7
              پاسخ : eeprom در atmega8

              دوستان نظری ندارند؟

              دیدگاه

              لطفا صبر کنید...
              X