Microprocessor/ATMEGA 128 ์•„ํŠธ๋ฉ”๊ฐ€128 (EEPROM์ œ์–ด) [20120530]
  • 728x90
    ๋ฐ˜์‘ํ˜•

     

     

     

    ๐Ÿ˜„ ์•ˆ๋…•ํ•˜์„ธ์š” Dexter ์ž…๋‹ˆ๋‹ค.

    ์˜ค๋Š˜์€ ์•„ํŠธ๋ฉ”๊ฐ€128 ๋ฐ์ดํ„ฐ๋ฉ”๋ชจ๋ฆฌ์ธ EEPROM ์—๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ  ์‹ค์Šต๊นŒ์ง€ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

    ๋ณธ๋ฌธ PDF์ž๋ฃŒ๋Š” ์ฒจ๋ถ€ํŒŒ์ผ์— ์žˆ์Šต๋‹ˆ๋‹ค.

     

    7์žฅ ๋‚ด๋ถ€ EEPROM ์“ฐ๊ธฐ.pdf
    ๋‹ค์šด๋กœ๋“œ

     

     

    Atmega128 EEPROM ์ œ์–ด

    • EEPROM : 4KB = 2^2 x 1k x 1byte(์ฃผ์†Œ ํ•˜๋‚˜๋‹น 1byte)

    = 2^2 x 2^10 x 1byte
    = 2^12 x 1byte
    = ์ฃผ์†Œ๋Š” 4096๊ฐœ (0 ํฌํ•จ)

    EEPROM = DATA Memory์ด๋‹ค.

     

    • EECR(์ปจํŠธ๋กค ๋ ˆ์ง€์Šคํ„ฐ) : 8bit

     

    • EERE : ์‚ฌ์šฉ ๋ช…๋ น
    • EEWE : ์“ฐ๊ธฐ ๋ช…๋ น(์“ฐ๊ธฐ ์™„๋ฃŒํ›„ 0์œผ๋กœ ์„ธํŒ…๋˜์–ด ์žˆ์–ด์•ผํ•จ)
    • EEMWE : ์“ฐ๊ธฐ์ž‘์—…์ „์˜ ๋ช…๋ น(1์„๋„ฃ์–ด์ค„๊ฒƒ)
    • EEAR(Adderss) : ์ƒ์œ„ 4byte๋งŒ ์‚ฌ์šฉ
      • ํ•˜์œ„ 0 ~ 11 ์ฃผ์†Œ ๊นŒ์ง€ 4096๊ฐœ

     

     

    • EEDR(DATA ๋ ˆ์ง€์Šคํ„ฐ) 

     

     

    ๐ŸŽฏ EECR (Control Register)

     

     

    ๐ŸŽฏ EEAR (Address Register)

     

     

    ๐ŸŽฏ EEDR (Data Register)

     

     

    ๐ŸŽฏ ํ•œ ๋ฐ”์ดํŠธ ์“ฐ๊ธฐ/์ฝ๊ธฐ ์ ˆ์ฐจ

     

     

    ๐ŸŽฏ EEPROM ๊ด€๋ จ ํ•จ์ˆ˜

     

     

     

    Ex) 1๋ฒˆ ํ‚ค ๋ˆ„๋ฅด๋ฉด EEPROM์— ๋ฐ์ดํ„ฐ ๊ธฐ๋ก, 8๋ฒˆ ํ‚ค ๋ˆ„๋ฅด๋ฉด clear ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ

    #include <L.h>
    #define	KEY_IN PINC
    #define 	FND_DDR DDRE
    #define 	FND_OUT PORTE
    
    int main() 
    {
    	unsigned char ch = 0;
    
    	init_FND();
    	initTC0_overflow();
    	init_switch();
    
    	for (unsigned int i=0; ; i++) {
    		ch = KEY_IN;
    
            if (ch == 0b11111110) {		// 1๋ฒˆ์Šค์œ„์น˜๋ฅผ๋ˆ„๋ฅด๋ฉดEEPROM์—๋Œ€์ดํ„ฐ๊ธฐ๋ก   
                ch = 0;
                
                for (unsigned int a = 0; a<10; a++) {
                    eeprom_write(a, ch++);
                }
    
                ch = 9;
    
                for (unsigned int b = 0; b<10; b++) {
                    eeprom_write(10+b, ch--);
                }
            }
    
            if (ch == 0b01111111) {		// 8๋ฒˆ์Šค์œ„์น˜๋ฅผ๋ˆ„๋ฅด๋ฉดEEPROM๋ฐ์ดํ„ฐ์ดˆ๊ธฐํ™”
                ch = 0;              
    
                for (unsigned int c = 0; c<20; c++) {
                    eeprom_write(c, ch);
                }
            }   
    
            ch = eeprom_read(i);   
    
            FND_OUT = ch;    // ์ฝ์–ด์˜จ๋ฐ์ดํ„ฐ๋ฅผFND์—์ถœ๋ ฅ          
    
            if (i == 19) {
                i = 0;
            }
    
            sleep(200);
        }
    
        return 1;
    }

     

    ๊ฒฐ๊ณผ : ๋™์˜์ƒ ์ฐธ๊ณ 

     

     

    ์˜ˆ์ œ) ์‹ค์Šต ๋ฌธ์ œ

     

    ๐Ÿ’ก ์š”๊ตฌ์‚ฌํ•ญ

    1. LED ์™€ KEY ์‚ฌ์šฉ
    2. ๊ฐ LED๋Š” ์ด์›ƒํ•œ ๊ฐ KEY๋ฒ„ํŠผ๊ณผ ์ง์ด ๋œ๋‹ค.
    3. KEY๋ฅผ ๋ˆ„๋ฅด๋ฉด LED๋Š” ์ด์ „์ƒํƒœ ์œ ์ง€ํ•˜๋ฉด์„œ ํ•ด๋‹น LED๊ฐ€ ON๋จ
    4. ํ˜„์žฌ์˜ ์ƒํƒœ๋ฅผ ๋งค๋ฒˆ EEPROM์— ๊ธฐ์–ต์‹œํ‚จ๋‹ค.
    5. DK-128์˜ ์ „์›์„ ๊ป๋‹ค๊ฐ€ ์ผฏ์„ ๋•Œ, ์ด์ „์˜ LED ์ƒํƒœ๋ฅผ ๊ทธ๋Œ€๋กœ ํ‘œ์‹œํ•œ๋‹ค.
    #include <L.h>
    #define KEY_IN			PINC
    #define FND_DDR		DDRF
    #define FND_OUT		PORTF   
    
    int main(void)
    {
        unsigned char ch = 0;
        unsigned char sh = 0xFF;
        unsigned char le = 0xFF;   
    
        init_LED();
        init_TC0();
        init_switch();   
    
        for (unsigned int i=0;;i++) {
            sh = KEY_IN;
            le = FND_OUT & sh;   
    
            for (unsigned int a = 0; a<9; a++) {
    			FND_OUT = le;                
                if (le != 0xFF) {
                	eeprom_write(a,le);
                }
            }            
    
            ch = eeprom_read(i);
            FND_OUT = ch;       
    
            if (FND_OUT == 0x00) {
    			FND_OUT = 0xFF;
            }
    
            if (i >= 8) {
                i= 0;
            }
    
            sleep(200);
        }
    
        return 1;
    }

     

     

    ํ—ค๋”ํŒŒ์ผ์€ ์œ„ ์†Œ์Šค๋„ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

    [ header ํŒŒ์ผ ] ↓

    #define DDRE	*((volatile unsigned char *)0x22)
    #define PORTE	*((volatile unsigned char *)0x23) 
    #define PINC	*((volatile unsigned char *)0x33)
    #define DDRC	*((volatile unsigned char *)0x34)
    #define PORTC	*((volatile unsigned char *)0x35)  
    #define PINF	*((volatile unsigned char *)0x20)
    #define DDRF	*((volatile unsigned char *)0x61)
    #define PORTF	*((volatile unsigned char *)0x62)
    #define PIND	*((volatile unsigned char *)0x30)
    #define DDRD	*((volatile unsigned char *)0x31)   
    #define TCCR0	*((volatile unsigned char *)0x53)
    #define TCNT0	*((volatile unsigned char *)0x52)
    #define TIMSK	*((volatile unsigned char *)0x57)
    #define SREG	*((volatile unsigned char *)0x5F)
    #define EEDR	*((volatile unsigned char *)0x3D)
    #define EEARH	*((volatile unsigned int *)0x3F)
    #define EEARL	*((volatile unsigned int *)0x3E)
    #define EECR	*((volatile unsigned char *)0x3C)   
    #define EEAR	*((volatile unsigned int *)0x3E) 
    #define EERE	0    
    #define EEWE	1
    #define EEMWE	2 
    
    #define TOIE0			0
    #define CPU_CLOCK		16000000
    #define TICKS_PER_SEC	1000
    #define PRESCALER    	64   
    
    /* delay */    
    volatile unsigned int g_elapsed_time;   
    
    void sleep(unsigned int elapsed_time)
    {
        g_elapsed_time = 0;
        for (;g_elapsed_time<elapsed_time;);
    } 
    
    void __vector_16 (void) __attribute__ ((signal, used, externally_visible));
    void __vector_16 (void)
    {
        TCNT0 = 6;
        ++g_elapsed_time;
    }
    
    /* ์Šค์œ„์น˜ */
    void init_switch(void)
    {
        DDRC = 0x00;
    }
    
    /* LED ์ดˆ๊ธฐํ™” */
    void init_LED(void) 
    {
        DDRF = 0xFF;
        PORTF = 0xFF;
    }
    
    /* FND ์ดˆ๊ธฐํ™” */  
    void init_FND(void)
    {
        DDRE = 0xFF;
        PORTE = 0xFF;
    }
    
    /* ์ ์™ธ์„ ์„ผ์„œ */
    void init_URS(void)
    {
        DDRD = 0x00;
    }
    
    /* Timer/counter Control regi์ดˆ๊ธฐํ™” */
    void init_TC0(void)
    {
        TCCR0 = 0x04;
        TCNT0 = 6;
        TIMSK = TIMSK | (1<<TOIE0);
    
        /*์ „์ฒด์ธํ„ฐ๋ŸฝํŠธํ™œ์„ฑํ™”*/
        SREG = SREG | (1<<7);
    }
    
    /* eeprom Write */
    void eeprom_write(unsigned int uiAddress, unsigned char ucData);
    void eeprom_write(unsigned int uiAddress, unsigned char ucData)
    {
        while (EECR&(1<<EEWE));
        EEAR = uiAddress;
        EEDR = ucData;
        EECR |= (1<<EEMWE);
        EECR |= (1<<EEWE);
    
        return ;
    }
    
    /* eeprom Read */
    unsigned char eeprom_read(unsigned int uiAddress);
    unsigned char eeprom_read(unsigned int uiAddress)
    {
        while(EECR&(1<<EEWE));   
    
        EEAR = uiAddress;
        EECR |= (1<<EERE);   
    
        return EEDR;
    }

     

    ๊ฒฐ๊ณผ : ๋™์˜์ƒ ์ฐธ๊ณ 

     

     

    ๊ถ๊ธˆํ•˜์‹  ์ ์€ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”. ๐Ÿ˜„ ์˜ค๋Š˜๋„ ์ข‹์€ ํ•˜๋ฃจ ๋˜์„ธ์š”.

     

     

     

     

     

    728x90
    ๋ฐ˜์‘ํ˜•
์ƒ๋‹จ์œผ๋กœ