안녕하세요... 오늘은 햇빛 뜨면서 폭우가 내리는 날이네요..;;
요즘 마이크로 마우스 를 만들고 있는데요;...
센서부분에서 막혀서 질문드립니다..
일단 발광 적외선 다이오드 (CL-1L5R) 6개로 발광 센서 부분을 만들었고
적외선이 나오는 것을 핸폰 카메라로 확인하였습니다..
그리고 수광 다이오드 (ST-1KLA) 6개를 사용하여 수광 센서 부분을
만들었는데요.. AD7828 이란 칩을 사용하여 수광에서 받는 빛의 양을
ADC하여 LCD 에 나타내려고 합니다. (AD7828 을 제어하는 다리 23,24,25 를 포트 F 에 연결하였습니다.)
그런데 AD7828 의 ADC결과 다리 8에서 22 를
포트 B( 그림을 잘못 표시했네요;;) 에 연결시켜서 그 결과를 LCD 에 나타냈는데요;;
항상 No.7 즉 (1111 1111) 만 나오게 됩니다..;
제가 짠 코드를 첨부하고 일단 메인부분만 살펴보면
int main(void)
{
while(1)
{
u08 n;
DDRD=0xff;
DDRB=0x00;
DDRF=0xff;
PORTF=0x00;
temp1=PINB;
delay_5ms();
lcd_init();
delay_5ms();
compare(temp1);
cmd_write(0x80);
for(n=0;n<9;n++)
{
data_out(table[n]);
}
delay_5ms();
delay(20000);
delay(20000);
delay(20000);
delay(20000);
delay(20000);
delay(20000);
PORTF|=0x10;
for(;PORTF<128;PORTF+=16)
{
DDRB=0x00;
temp2=PINB;
compare(temp2);
delay_15ms();
cmd_write(0xc0);
for(n=0;n<9;n++)
{
data_out(table[n]);
}
delay(20000);
delay(20000);
delay(20000);
delay(20000);
delay(20000);
delay(20000);
}
delay_15ms();
}
return 0;
}
이런 식으로 짯습니다.. PINB의 값을 비교하여 table[n]에
다른 문자를 넣어주어 lcd 에 나타내도록 하였습니다..
수광 다이오드 뒤에 그냥 LED 를 달았더니 적외선을 쏘일때
빛이 나타나지 않더군요;; 그럼 잘못된 것인가요?
저항이 커서 안나오는 것 아닐까요;;
수광센서가 동작하게 끔 하려면 무엇을 바꿔줘야 할지 궁금합니다..;;
일단 회로에서 의문점이 수광 저항 캐패시터 저항 ad7828로 들어가는데요.. 왜 이러케 하신거죠??
PORTF|=0x10;
for(;PORTF<128;PORTF+=16)
{
이런 문장이 잇는데요 제기억에는 PORTF는 읽기로는 사용이 안되므로 위와 같이 하면 안될꺼 같습니다(가물가물)
변수를 하나 지정하셔서
unsigned port_f;
for(port_f = 0x10;port_f<128;port_f+=16)
{
PORTF = portt_f;
}
이런식으로 해주는게 좋겠습니다.
adc칩을 제어하는데 PORTD와 PORTB를 섞어서사용햇네요..
실제로는 어떻게 구현하셨는지..ㅡㅡ; PORTB에 데이터선을 물리셨다면 전부 PORTB로 바꾸세요-_-;;
한번쯤 입력과 출력 프로세싱 부분을 나눠서 생각해보세요.
PORT랑 회로도랑 확인도 해보시구요
그다음에 테스트 하심이..좋을듯 하네요
아.. ad7828 칩을 쓰게 된건.. 회로도를 얻게 되었는데 수광뒤에 달려있게 되어있드라구요.. 이 칩.. 아무데도 팔지 않아서
청계천에서 2만원이나 하는 것을 중고로 구입해서 쓰게 되었습니다..;; ATMEGA128 을 쓰는데요.. 이 칩에서 ADC하는
방법을 모르겠드라구요..또 비싼 칩을 쓰면 더 정확한 adc가 이뤄지지 않을까 생각했구요;;
PORT B 에는 AD7828 을 거쳐서 나온 ADC 결과 값 을 연결시켰습니다..
PORT D 에는 LCD 와 연결시켜주었구요..
PORT E 부분에는 모터부를 연결시켰습니다. 스텝모터에 SLA7026 을 사용했구요..
마지막 PORT F 부분에는 (모듈로 된것을 사서 4포트만 쓸수 있드라구요..)
AD7828 제어에 필요한 23,24,25(A2,A1,A0) 번 다리와 연결 했는데 PORT F 6,5,4 번 다리를 연결했습니다..
또 여쭤보고 싶은건.. AD7828 을 사용하는데 있어서.. 제가 지금 사용하고 있는 핀은..
1~6번 까지의 수광다이오드와 연결된 입력 부분과. 8~11과 19~22 까지의 출력부분(PORT B와 연결)
23,24,25 핀의 AD7828 제어 , 15 Vcc(5V) 16 GND 부분, 26번의 Vdd(5V)
그리고 12번과 18번 핀을 GND에 연결하였습니다..
이외에 또 연결해야하는 다른 핀이 있는지요??.. DATASHEET을 보면 .. 26번 Vdd 를 연결할때 캐패시터 2개를
같이 연결하는 그림이 나오는데 그렇게 연결을 해야하는 건가요?
그냥 이대로 돌리면 LCD 에 같은 글자만 뜹니다.. 즉 ADC가 제대로 이루어지지 않는다는 뜻이지요..;;;
자꾸질문해서 죄송합니다.. 친절한 답변 감사드리구요..
즐거운하루 되시길..!
일단 avr에 있는 adc 사용하는게 훨씬 편하구요 왜냐하면 결선도 없고 단지 레지스터만 설정하게 되면 되기때문입니다.
그리고 비싸다고 좋은건 아닙니다..청계천 아저씨가 비싸게 판게 아닐런지요. 2만원은 좀 비싸다고 보는데요...
8비트 adc에 10khz 샘플링인데요...(약간 고속이긴 하지만) avr adc는 분해능이 10비트라서 더 정밀하겠죠 7824보다는 느리겠지만요
수광 센서 쪽 회로는 제가 올려놓은 아크마 라인트레이서의 회로도쪽을 한번 보시고 응용해서 하시면 되구요
26번 vdd는 데이터쉬트 그림처럼 병렬로 연결해주시면 됩니다.(노이즈 제거)
정말 중요한걸 연결안하셨군요
10번 /RD, 16 /CS 핀도 연결해서 제어를 해줘야합니다.
칩 셀렉트와 읽기 신호를 위한 핀이구요 ADC값을 읽기 위해서는 이 핀에 클럭 신호를 만들어 주고 값을 읽어와야합니다.
아니면 마이크로 프로세서의 메모리맵 포트에 물려서 간단히 사용하는 방법도 있습니다. 이때는 님께서 램이 달린 모듈을 구입하신거 같기에 이를 고려해서 회로를 설계해야합니다..
전 이칩을 써보진 않았지만 데이터 쉬트에도 MC6800과 메모리맵으로 물려서 사용하는 ㅇ예가 나와있군요//
응용해보시면 좋을듯하군요( 근데 굳이 이 칩을 이용하는 이유가;; 싸고 흔한것도 많은데요///