AVR > ADC 입력으로 난수 만들기

TODAY386 TOTAL2,431,357
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | AVR | ADC | ADC 입력으로 난수 만들기

페이지 정보

작성자 키트 작성일2017-08-29 10:11 조회2,527회 댓글0건

본문

#include <mega128.h> 
#include <delay.h> 
//
void main(void){
    int rand_val;
    ADMUX=0x09;  // AREF 레퍼런스, 게인 10배
    ADCSRA=0xE0// 프리런닝, 분주비 2
    while(1){
      delay_us(2);
      rand_val=ADCW;
      rand_val=(int)( (float)rand_val*9.0/1023.0+0.); //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// 프리런닝, 분주비 2
    while(1){
      _delay_us(2);
      rand_val=ADCW;
      rand_val=(int)( (float)rand_val*9.0/1023.0+0.); //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 레퍼런스
3660040649_NK8WGRfM_25C125A625B825F1_25BE25F825C025BD.PNG3Ftype3Dw740
노이즈 크기가 2.56V보다 더 작다면 가변저항으로 전압을 설정 해줍니다.
커패시터 사용하지 않습니다.

//

3660040649_l2Bgp0Nf_25C125A625B825F1_25BE25F825C025BD.PNG3Ftype3Dw740
레퍼런스로 조정하기 어려울 정도로 작다면 ADC 내부 게인을 사용해서 입력을 증폭 할 수 있습니다.
ADMUX=0x09; // AREF 레퍼런스, 게인 10배
ADMUX=0x0B; // AREF 레퍼런스, 게인 200배

3660040649_edILZgyp_25C125A625B825F1_25BE25F825C025BD.PNG3Ftype3Dw740
차동입력을 받아야하므로 ADC1핀을 안테나로 사용하고 ADC0는 GND에 연결합니다.

댓글 0

조회수 2,527

등록된 댓글이 없습니다.

AVRHOME > AVR > 전체 목록

게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기