BASIC4MCU | 질문게시판 | 아두이노 I2C 코드를 AVR C 코드로 변경 하는법
페이지 정보
작성자 배동이 작성일2020-11-10 16:56 조회7,276회 댓글2건본문
아두이노 I2C 코드를 AVR C 코드로 변경 하는데 동작이 시원찮네요.
아래는 아두이노 코드입니다.
//*********************************//
#include <Wire.h>
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("Heart rate sensor");
Wire.begin();
}
void loop() {
// put your main code here, to run repeatedly:
Wire.requestFrom(0xA0>>1,1);
while(Wire.available()){
unsigned char c = Wire.read();
Serial.println(c,DEC);
}
delay(500);
}
아래처럼 벼환 했는데 결과값이 이상합니다.
unsigned char read_HRS(unsigned char dev_addr,unsigned char len,unsigned char *data,unsigned char res){
unsigned char i;
if(res){
if(twi_restart()) return 1;
}
else{
if (twi_start())
return 1;
}
if (twi_send_dev_addr((dev_addr << 1) | TWI_RD))
return 1;
for (i=0; i<len-1; i++)
{
if (twi_read_ack_data(data + i))
return 1;
}
if (twi_read_nack_data(data + i))
return 1;
twi_stop();
return 0;
}
read_HRS(0xA0>>1,0,&DATA,0); // 500 Msec마다 한번씩 실행
우노에서 돌리면 잘 동작 하는데요.. Atmega128에서는 while문의 빠져 나오지 못하는경우도 있구요...
조언 바랍니다.
댓글 2
조회수 7,276master님의 댓글
master 작성일
결론부터 적으면
오실로스코프로 파형을 체크하면서 디버깅 하셔야합니다.
master님의 댓글
master 작성일
아두이노는 완벽히 테스트한 소스코드와 회로를 전문가가 제공하고
사용자는 소스코드 복사하고, 회로그림대로 연결해서 동작시키기만 하면 그만입니다.
이 때문에 초등학생이나 주부님도 아두이노를 할 수 있는 것이고요
AVR을 공부한다는 것은 전문가가 되기 위한 공부이므로
완성된 예제를 찾지 말고 예제를 만드는 방법을 공부하셔야 합니다.