[AVR] GPIO ํ™œ์šฉ - LED Shift

์ด์—ฌ์ง„ยท2023๋…„ 7์›” 24์ผ
0

AVR

๋ชฉ๋ก ๋ณด๊ธฐ
2/6
post-thumbnail

๐Ÿ“Œ GPIO

GPIO๋ž€ General Purpose Input Output์˜ ์•ฝ์ž๋กœ ํ•œ๊ตญ์–ด๋กœ๋Š” ๋ฒ”์šฉ ์ž…๋ ฅ ์ถœ๋ ฅ์„ ๋œปํ•œ๋‹ค.

๋งˆ์ดํฌ๋กœํ”„๋กœ์„ธ์„œ๊ฐ€ ์ฃผ๋ณ€์žฅ์น˜์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฒ”์šฉ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ž…์ถœ๋ ฅ ํฌํŠธ์ด๋ฉฐ, ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํฌํŠธ์— ๋Œ€ํ•ด ์ž…๋ ฅ์ด๋ƒ ์ถœ๋ ฅ์ด๋ƒ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ, GPIO ํฌํŠธ๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์ด์ „์— ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ GPIOํฌํŠธ์— ๋Œ€ํ•œ ์„ค์ •์„ ๋ฐ˜๋“œ์‹œ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.
์ด ๋ถ€๋ถ„์— ์žˆ์–ด ์ž…์ถœ๋ ฅ์ด ์ง€์ •๋˜์–ด ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ์ž์œ ๋„๊ฐ€ ๋†’์•„์ง€์ง€๋งŒ, ์ง€์ •์„ ๊ผญ ํ•ด์ฃผ์–ด์•ผ๋งŒ ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

ย 

์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ ํฌํŠธ๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด 3๊ฐœ์˜ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.

PORTx : ํฌํŠธ์— ๋Œ€ํ•œ ๋‚ด์šฉ
DDRx : ์ถœ๋ ฅ์ธ์ง€ ์ž…๋ ฅ์ธ์ง€ ์ •ํ•ด์คŒ
PINx : ํฌํŠธ๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ํ•€ ์ง€์ • ๊ฐ€๋Šฅ

์ด ๋ ˆ์ง€์Šคํ„ฐ๋“ค์— ๋Œ€ํ•ด์„œ๋Š” ๋ฐ‘์—์„œ ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ๋‹ค๋ค„๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

ย 

โœจ ATmega128 GPIO ํฌํŠธ

ATmega128์—๋Š” ์ด 53๊ฐœ์˜ GPIOํฌํŠธ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ํ•€์€ ๋””์ง€ํ„ธ์ ์œผ๋กœ High(5V)๋‚˜ Low(0V)๋กœ ์ถœ๋ ฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฐ˜๋Œ€๋กœ ์ด๋Ÿฐ ๋””์ง€ํ„ธ ์‹ ํ˜ธ์— ๋Œ€ํ•œ ์ž…๋ ฅ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

ย 

โœจ ATmega128 GPIO ๊ด€๋ จ ๋ ˆ์ง€์Šคํ„ฐ

๐Ÿ€ PORTx

PORTx์˜ ๊ฒฝ์šฐ Read๋ž‘ Write ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ดˆ๊ธฐ๊ฐ’์€ 0์ด๋‹ค.
1์„ ๋„ฃ์–ด์ฃผ๋ฉด High์ƒํƒœ, 0์„ ๋„ฃ์–ด์ฃผ๋ฉด Low์ƒํƒœ์ด๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด, LED 8๊ฐœ๋ฅผ PA0~PA7๊นŒ์ง€ ์—ฐ๊ฒฐ์‹œ์ผœ๋‘์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.
ATmega128์˜ ๊ฒฝ์šฐ Pull Up ์ €ํ•ญ์„ ์‚ฌ์šฉํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— LED 8๊ฐœ์˜ ๋ถˆ๋“ค์„ ๋ชจ๋‘ ๋„๊ณ  ์‹ถ์œผ๋ฉด PORTA = 0b11111111 ๋˜๋Š” PORTA = 0xff๋กœ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๐Ÿ€ DDRx

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด DDRx ํฌํŠธ์˜ ๊ฒฝ์šฐ ์ถœ๋ ฅ์ธ์ง€ ์ž…๋ ฅ์ธ์ง€๋ฅผ ์ •ํ•ด์ค€๋‹ค.
PORTx์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Read์™€ Write ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ดˆ๊ธฐ๊ฐ’์€ 0์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, DDRA = 0x00์€ PA0~PA7 ๋ชจ๋‘ ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค๋Š” ๋œป์ด๊ณ , DDRA = 0xff๋Š” PA0~PA7 ๋ชจ๋‘ ์ถœ๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ๋œป์ด๋‹ค.

๐Ÿ€ PINx

PINx์˜ ๊ฒฝ์šฐ Read๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ดˆ๊ธฐ๊ฐ’์€ Not Available์ด๋‹ค.
์ƒํƒœ ์ œ์–ด ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋‘” ๋’ค, ์ฝ”๋“œ ๋‚ด๋ถ€์—์„œ ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์™€ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

ย 

๐Ÿ“Œ Pull Up / Pull Down ์ €ํ•ญ

Pull Up๊ณผ Pull Down ์ €ํ•ญ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ธฐ ์ „์— ๋จผ์ € Floating ํ˜„์ƒ์— ๋Œ€ํ•ด์„œ ์•Œ๊ณ  ๋„˜์–ด๊ฐ€์•ผํ•œ๋‹ค.

ย 

โœจ Floating ํ˜„์ƒ

Floating ํ˜„์ƒ์ด๋ž€ ์Šค์œ„์น˜๊ฐ€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์ „๋ฅ˜๊ฐ€ ํ๋ฅด๋Š”์ง€ ํ๋ฅด์ง€ ์•Š๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋Š” ์ƒํƒœ์ด๋‹ค.

๋””์ง€ํ„ธ ํ•€์„ ์ž…๋ ฅ ์ƒํƒœ๋กœ ์„ค์ •ํ•˜๊ฒŒ ๋˜๋ฉด 5V ๊ฐ’์€ High, 0V๋Š” Low๋กœ ์ธ์‹ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ž…๋ ฅ ๋‹จ์ž ์ฃผ์œ„์— ์ƒ๊ธด ์ •์ „๊ธฐ๋‚˜ ์žก์Œ์— ์˜ํ•ด ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ฒจ์„œ Floating ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ ์ž ๋‚˜์˜จ ๊ฐœ๋…์ด Pull Up ์ €ํ•ญ๊ณผ Pull Down ์ €ํ•ญ์ด๋‹ค. ์œ„์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํšŒ๋กœ์— Pull Up ์ €ํ•ญ๊ณผ Pull Down ์ €ํ•ญ์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋ฉด ํ•ด๊ฒฐ๊ฐ€๋Šฅํ•˜๋‹ค.

ย 

โœจ Pull Up ์ €ํ•ญ

Pull Up ์ €ํ•ญ๊ณผ Pull Down ์ €ํ•ญ์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•  ๋•Œ, ์‚ฌ์ง„์œผ๋กœ ์„ค๋ช…๋œ ์ž๋ฃŒ๋ฅผ ๋ดค์„ ๋•Œ ์ดํ•ด๊ฐ€ ๋ฐ”๋กœ ๋์—ˆ๋Š”๋ฐ ์‚ฌ์ง„์„ ์ฒจ๋ถ€ํ•˜๊ธฐ์—๋Š” ์ €์ž‘๊ถŒ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„ ๊ณต๋ถ€ํ•œ ๊ฐœ๋…๋งŒ ์ •๋ฆฌํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋ณผ ์˜ˆ์ •์ด๋‹ค.

  • ์ €ํ•ญ์„ ์•ž์— ๋ถ™์—ฌ์ค˜์„œ floating ํ˜„์ƒ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ์Šค์œ„์น˜๊ฐ€ ์—ด๋ฆฐ ์ƒํƒœ : ์ž…๋ ฅ ํ•€์œผ๋กœ ์ „๋ฅ˜๊ฐ€ ํ๋ฅด๊ฒŒ ๋˜๊ณ , ์ „์›์ „์••๊ณผ ๊ฐ™์€ 5V ์ „์••์ด ๊ฑธ๋ฆฌ๊ฒŒ ๋˜๋ฏ€๋กœ ์ž…๋ ฅ ํ•€์—๋Š” High ๊ฐ’์ด ์ฝํžˆ๊ฒŒ ๋œ๋‹ค.
  • ์Šค์œ„์น˜๊ฐ€ ๋‹ซํžŒ ์ƒํƒœ : ๋ชจ๋“  ์ „๋ฅ˜๋Š” GND ์ชฝ์œผ๋กœ ํ๋ฅด๊ฒŒ ๋˜๋ฏ€๋กœ ์ž…๋ ฅ ํ•€์—๋Š” Low ๊ฐ’์ด ์ฝํžˆ๊ฒŒ ๋œ๋‹ค.

ย 

โœจ Pull Down ์ €ํ•ญ

  • ์ €ํ•ญ์„ ๋ฐ‘์— ๋ถ™์—ฌ์ค˜์„œ ํ”Œ๋กœํŒ… ํ˜„์ƒ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ์Šค์œ„์น˜๊ฐ€ ์—ด๋ฆฐ ์ƒํƒœ : ์–ด๋””์—๋„ ์ „๋ฅ˜๊ฐ€ ํ๋ฅด์ง€ ์•Š๊ณ , ์ž…๋ ฅ ํ•€์—๋Š” 0V์˜ ์ „์••์ด ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค.
  • ์Šค์œ„์น˜๊ฐ€ ๋‹ซํžŒ ์ƒํƒœ : ์ €ํ•ญ์œผ๋กœ ์ธํ•ด ์ „๋ฅ˜๋Š” ๋ชจ๋‘ ์ž…๋ ฅ ํ•€ ์ชฝ์œผ๋กœ ํ๋ฅด๊ณ  ์ž…๋ ฅ ํ•€์—๋Š” ์ „์› ์ „์••๊ณผ ๊ฐ™์€ 5V๊ฐ€ ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค.

์‚ฌ์‹ค ์ฒ˜์Œ ๊ฐœ๋…์„ ์ ‘ํ–ˆ์„ ๋•Œ๋Š” ๋ณต์žกํ•˜๊ฒŒ๋งŒ ๋Š๊ปด์กŒ๋Š”๋ฐ ๋ณดํ†ต ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ๊ฐ€ Pull Down ์ €ํ•ญ์„ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ์ด๊ณ , ๊ทธ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๊ฐ€ Pull Up ์ €ํ•ญ์„ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜์˜€๋‹ค.

ย 

๐Ÿ“Œ Sink / Source ์ „๋ฅ˜

โœจ Sink ์ „๋ฅ˜

  • ์ถœ๋ ฅ ์ชฝ์œผ๋กœ ์ „๋ฅ˜๊ฐ€ ํ˜๋Ÿฌ๊ฐ„๋‹ค๋Š” ๋œป
  • ์นฉ์˜ ์ถœ๋ ฅ๊ณผ ์ „์› ์‚ฌ์ด์— ์†Œ์ž๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ์นฉ์˜ ์ถœ๋ ฅ์ด Low์ผ ๋•Œ ๋™์ž‘
  • ATmega128์˜ ๊ฒฝ์šฐ datasheet๋ฅผ ๋ณด๋ฉด Vcc๊ฐ€ 5V์ผ ๋•Œ 20mA, Vcc๊ฐ€ 3V์ผ ๋•Œ 10mA์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

โœจ Source ์ „๋ฅ˜

  • ์ถœ๋ ฅ์—์„œ ๋ฐ”๊นฅ์œผ๋กœ ์ „๋ฅ˜๊ฐ€ ํ๋ฅธ๋‹ค๋Š” ๋œป
  • ์นฉ์˜ ์ถœ๋ ฅ๊ณผ 0V ์‚ฌ์ด์— ์†Œ์ž๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ์ถœ๋ ฅ์ด High์ผ ๋•Œ ๋™์ž‘
  • ATmega128์˜ ๊ฒฝ์šฐ datasheet๋ฅผ ๋ณด๋ฉด Vcc๊ฐ€ 5V์ผ ๋•Œ 20mA, Vcc๊ฐ€ 3V์ผ ๋•Œ 10mA์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์•Œ์•„๋ณด๋‹ˆ ๋Œ€๋ถ€๋ถ„์˜ IC๋Š” Source๋ณด๋‹ค Sink ์ „๋ฅ˜๊ฐ€ ๋†’๊ธฐ ๋•Œ๋ฌธ์— Sink๋กœ ๊ตฌ๋™ํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•˜๋‹ค๊ณ  ํ•œ๋‹ค.

ย 

๐Ÿงท LED Shift

โœจ ์กฐ๊ฑด

  • _delay_ms() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์ผ์ •์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ LED ์ฑ„์› ๋‹ค ๋นผ๊ธฐ(์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ)
  • shift ์—ฐ์‚ฐ์ž(>>, <<)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„

ย 

โœจ ์ฝ”๋“œ


#include <avr/io.h>
#include <util/delay.h>


int main(void)
{
  unsigned char led1, led2;               //LED์ ๋“ฑ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋  8bit๋ณ€์ˆ˜ led2
  int i, j;

  DDRA = 0xff;                       //ํฌํŠธA๋ฅผ ์ถœ๋ ฅ์œผ๋กœ ์„ค์ •
  
  while (1)
  {
     PORTA = 0xff;
     _delay_ms(1000);
    
     for (i=0; i<8; i++)
     {
        led1 = 0xff >> 8-i;
        for (j=0; j<8-i; j++)
        {
           led2 = 0x80 >> j;
           PORTA = (~(led1 | led2));
           _delay_ms(1000);
        }
     }
     
      for (i=0; i<8; i++)
     {
        led1 = 0xff << 7-i;
        for (j=0; j<i+1; j++)
        {
           led2 = 0x80 >> i-j;
           PORTA = led1 & (0x00 ^ ~led2);
           _delay_ms(1000);
        }
     }
  }
}

ย 

๐Ÿคฃ ๋Š๋‚€์ 

์–ด๋–ค ๋Š๋‚Œ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งœ์•ผ๋ ์ง€๋Š” ๋ฐ”๋กœ ๊ฐ์ด ์™”์—ˆ๋Š”๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ๋ณต์žกํ•ด์„œ ์ง์ ‘ ์†์œผ๋กœ ๊ทธ๋ ค๊ฐ€๋ฉด์„œ ๊ทœ์น™์„ฑ์„ ์ฐพ์•„๋ƒˆ๋˜ ๊ธฐ์–ต์ด ๋‚œ๋‹ค.

์ฝ”๋“œ๋งŒ ๋ณด๋ฉด ๋˜๊ฒŒ ๊ฐ„๋‹จํ•ด๋ณด์ด๊ฒ ์ง€๋งŒ, ๊ทœ์น™์„ฑ์„ ์ฐพ์•„๋‚ด๊ณ  ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์งœ๋Š”๋ฐ์— ์žˆ์–ด ์–ด๋ ค์›€์ด ์žˆ์—ˆ๋‹ค.

ย 

profile
The sky is the limit

0๊ฐœ์˜ ๋Œ“๊ธ€