BASIC4MCU | AVR | ADC | ADC 입력으로 난수 만들기
페이지 정보
작성자 키트 작성일2017-08-29 10:11 조회2,819회 댓글0건본문
#include <mega128.h>#include <delay.h>//void main(void){int rand_val;ADMUX=0x09; // AREF 레퍼런스, 게인 10배ADCSRA=0xE0; // 프리런닝, 분주비 2while(1){delay_us(2);rand_val=ADCW;rand_val=(int)( (float)rand_val*9.0/1023.0+0.5 ); //0~9의 난수를 얻음}}//------------------#include <avr/io.h>#define F_CPU 16000000UL // 16 MHz#include <util/delay.h>//int main(void){int rand_val;ADMUX=0x09; // AREF 레퍼런스, 게인 10배ADCSRA=0xE0; // 프리런닝, 분주비 2while(1){_delay_us(2);rand_val=ADCW;rand_val=(int)( (float)rand_val*9.0/1023.0+0.5 ); //0~9의 난수를 얻음}}//ADCSRA=0xE0; // 프리런닝, 분주비 1난수로 쓰려면안정된 값을 얻으면 안되므로 분주비는 최소 크기로 합니다.ADC Prescaler Selections는 0이나 1이나 모두 Division Factor 2입니다.변환 시간은 13클럭이 필요하므로16000000/2/13=615384.61538461538461538461538462Hz=1.625us//가능하면 안정된 값을 받지 않아야하므로AVCC는 비드나 저항 커패시터를 사용하지 않습니다.//노이즈를 듬뿍 받기 위해서AREF에도 커패시터 절대 사용하지 않습니다.//ADC 핀에는 주변에 흔히 널려있는 상용전기 60Hz 노이즈를 받아야합니다.노이즈를 잘 받기 위해서 외어어를 연결해서 안테나 처럼 세웁니다.표시가 덜 나게 하려면 작은 선이라도 빼고, 선 주위에 GND 선을 없애서 안테나 역활을 하게 합니다.다른 신호선의 영향도 받지 않도록 하기 위해서 가급적 ADC핀 근처에 없도록 배선합니다.//이젠 레퍼런스를 정해야겠죠노이즈 크기가 5V 레벨까지 입력된다면ADMUX=0x40; // AVCC 레퍼런스노이즈 크기가 2.5V 근처까지 입력된다면ADMUX=0xC0; // 내부 2.56V 레퍼런스노이즈 크기가 2.56V보다 더 작다면 가변저항으로 전압을 설정 해줍니다.커패시터 사용하지 않습니다.//레퍼런스로 조정하기 어려울 정도로 작다면 ADC 내부 게인을 사용해서 입력을 증폭 할 수 있습니다.ADMUX=0x09; // AREF 레퍼런스, 게인 10배ADMUX=0x0B; // AREF 레퍼런스, 게인 200배차동입력을 받아야하므로 ADC1핀을 안테나로 사용하고 ADC0는 GND에 연결합니다.
댓글 0
조회수 2,819등록된 댓글이 없습니다.