2024/10 4

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)을 갖고 통신을 할 수 있다. 각각 버스 라인에 풀업 저항을 달아 줘야 한다. 각 모듈은 개인의 고유주소를 갖고 있다. 즉 한마디로 모듈이 갖고 있..

ATmega128 디지털 시계 만들기 (3탄)

ATmega128을 활용한 디지털시계 구현 3탄이다. 1탄에서는 대략적인 설명, 2탄부터 코딩 구현 관련 글을 작성하고 있다! 3탄에서는 2탄 다음으로 코드 작성 관련해서 글 작성해 보겠다. timer.c타이머 0번으로 오버플로 인터럽트로 100us 마다 인터럽트가 발생하게 만들었다. 그리고 PORTA, PORTD에 값을 reset 하여 초기화를 진행했다. 그리고 switch case 문을 활용하여 4 fnd, 2 fnd에 숫자 표현을 했는데 case0~6번까지 번호를 지정하여 각 case마다 fnd부분을 담당하게 만들었다.변수 중 time_stop, flag 가 있는 이는 앞서 1탄에서 설명했듯이 디지털시계에 시간을 변경해야 할 상황이 발생했을 때 시간 변경 모드로 진입을 위한 time_stop, fl..