AVR 임베디드 학습/AVR 이론 공부 4

ATmega328 i2c통신 학습하기(feat.mpu6050)(4탄)

3탄에 이어 mpu6050을 통해 가속도 값을 받아보겠다. acceleration sensor(feat.joop Brokking) 가속도계를 상상할 때 다음과 같은 중력이 없는 큐브 모양에 상자를 상상해 보자! 우주라고 생각해 보면 다음과 같이 중력가속도는 0이므로 X, Y, Z = 0이 될 것이다.( 우리는 중력가속도 값을 9.8m/s^2 = 1g으로 생각해야 한다.)두 번째로 상자를 갑자기 왼쪽으로 움직이면 공은 당연하게도 X-벽에 부딪힌다. 이때 공이 벽에 작용하는 압력을 측정하면 X축에 -1g 값을 출력한다. 여기서 가속도계는 실제로 가속도 벡터와 반대 방향으로 향하는 힘을 감지한다. 즉 관성력을 뜻하는데... 이는 겉보기 힘으로 가속도 벡터값과 반대 방향으로 향하는 힘을 뜻한다.다음으로 튜브를 ..

ATmega328 i2c통신 학습하기(feat.mpu6050)(3탄)

2탄에 이어 이제 mpu6050을 활용하여 who am i를 활성화해 보고 다음 4탄에서는 mpu6050이 갖는 가속도, 각속도, 온도 값도 확인해 보겠다.Who Am I  이 레지스터는 모듈 장치에 정체성을 증명하는 데 사용된다고 한다. 또한 AD0 pin에 의해서 고유주소값이 변경될 수도 있다고 하는데 mpu6050을 두 개 사용할 때 AD0 pin을 통해 0x68 0x69와 같이 주소를 두 개로 할 수 있는듯하다. 일단 초기 value는 0x68이라고 하고 내 모듈도 0x68이다. read only 타입으로 읽기만 가능한 레지스터이다.main.c 다음과 같이 who am i 값을 통해 i2c통신이 제대로 되는지 확인을 위한 변수를 지정했다.(가속도 각속도는 4탄에서 다룰 거임)코드는 정말 간단하다...

ATmega328 i2c통신 학습하기(feat.mpu6050)(2탄)

1탄에 이어 i2c 통신 이론을 데이터시트를 통해 학습해 보고 직접 프로그래밍해 보겠다. 우선 1탄에서 설명하려 했던 twi bus이다 레지스터 학습까지 완료했으니 이거부터 설명하고 넘어가도록 하겠다.START비트를 활성화하여 통신을 시작한다.START신호가 보내지고 통신이 시작되면 자동적으로 TWINT는 set 된다. 통신이 제대로 성공했다면 SLA+W(7bit address + 1bit wirte) 값을 TWDR에 싣는다. SLA+W가 보내지면 ACK신호가 수신 측으로부터 보내져 제대로 통신이 되었는지 확인할 수 있다.통신이 제대로 성공했다면 보내고 싶은 데이터를 TWDR에 싣는다.data가 보내지면 ACK신호가 수신 측으로부터 보내져 통신이 되었는지 확인할 수 있다.STOP비트를 활성화하여 통신을 ..

ATmega328 i2c통신 학습하기(feat.mpu6050)(1탄)

ATmega328을 활용하여 i2c통신을 해보려고 한다. 이후 i2c통신을 활용하여 mpu6050 모듈에 who am i를 통해 통신이 제대로 되는지까지 확인해 보도록 하겠다.I2C통신 인터페이스 신호 i2c통신은 두 개의 신호선(SDA, SCL)을 통해 다수의 I2C통신을 지원하는 모듈들과 데이터를 주고받을 수 있게 하는 통신 방식이다. 신호선이 SDA(data), SCL(clock)으로 2개의 신호선으로 통신을 할 수 있다는 장점이 있다.해석해 보자면 twi는 마이크로컨트롤러에 적합한 통신이다. twi는 128개에 다른 장치와 두 개의 선(SDA, SCL)을 갖고 통신을 할 수 있다. 각각 버스 라인에 풀업 저항을 달아 줘야 한다. 각 모듈은 개인의 고유주소를 갖고 있다. 즉 한마디로 모듈이 갖고 있..