질문게시판 > Atmega 코드 좀 봐주세요.

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

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


BASIC4MCU | 질문게시판 | Atmega 코드 좀 봐주세요.

페이지 정보

작성자 chelsea 작성일2022-07-04 10:48 조회418회 댓글1건

첨부파일

본문

	

안녕하세요...

다음과 같이 동작 Fllow에 맞춰 코드을 작성해보았는데 현재 모듈이 없어 확인이 어렵습니다.

모듈이 오기 전 작성한 코드에 오류가 있는지 확인하고 싶은데 조언 부탁드립니다.

 

1. PD7이 Low일 때 온도와 관계없이 팬 동작 x

2. PD7 High가 입력되면

3. 온도에 따라 팬이 동작(25도 미만이면 duty60%, 25도~27도 이면 duty 78%,27도 이상이면 100%)

4. PD7 High 입력 후 6초 이전까지 PD3,PD5 Low PD6 High

4. 6초 이후 PD3,PD5 High PD6 Low(PD7이 Low될 때까지 유지)

5. flowrate가 0이면 PD1 High, Flowrate가 0이 아니면 PD1 Low (PD7이 High 일때)

 

첨부된 파일은 온도테이블입니다.

 

 

*LCD 출력

1열 Water : 값 표시

2열 temp : 값 표시

 

//Atmega8

 

#include <avr/io.h>

#include <avr/interrupt.h>

#define F_CPU 16000000UL

#include <util/delay.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

//

#define LCD_RS          0x10  // PC4

#define LCD_EN          0x20  // PC5

#define LCD_DIR          DDRC

#define LCD_PORT        PORTC

//

#define LCD_Clear        0x01

#define LCD_Cursor      0x03    //function set:4bit data, 2line display, 5*8 dots

#define LCD_Function_Set 0x28

#define LCD_On          0x0E    //0000    11(set display)1(cursor)0(blink)

#define LCD_Entry        0x06    //Cursor increased, no shift

#define input 0x80 //HP Connector input

//

volatile float calibrationfactor=98,flowrate=0,cal=0;

volatile int pulsecount=0,millisec=0,val=0;

volatile char sec=0;

volatile long R=0;

volatile double Thermister=0;

//

 

void init_port()

{

DDRB = 0x04;

PORTB = 0x00;

DDRD = 0x8B;

PORTD = 0x40;

}

void Write_Command_LCD(char Command){

LCD_PORT=(Command >> 4)|LCD_EN; _delay_us(1); LCD_PORT&=~LCD_EN; _delay_us(1);

LCD_PORT=(Command&0x0F)|LCD_EN; _delay_us(1); LCD_PORT&=~LCD_EN; _delay_ms(2);

}

//

void PutsChar_LCD(int data){

LCD_PORT=(data >> 4)|LCD_RS|LCD_EN; _delay_us(1); LCD_PORT&=~LCD_EN; _delay_us(1);

LCD_PORT=(data&0x0F)|LCD_RS|LCD_EN; _delay_us(1); LCD_PORT&=~LCD_EN; _delay_us(40);

}

//

void String_LCD(char *s){ while(*s)PutsChar_LCD(*s++); }

//

void LCD_Init(void){

LCD_DIR=0xFF;

LCD_PORT=0x00;

_delay_ms(50);

Write_Command_LCD(LCD_Function_Set);

Write_Command_LCD(LCD_On);

Write_Command_LCD(LCD_Clear);

Write_Command_LCD(LCD_Entry);

Write_Command_LCD(0x02); //Return Home

}

 

 

void Cooler()

{

if(Thermister<=25)

{

OCR1B=128;

_delay_ms(300);

}

else if(25<Thermister&&Thermister<27)

{

OCR1B=200;

_delay_ms(300);

}

else if(Thermister>=27)

{

OCR1B=255;

_delay_ms(300);

}

}

 

void ADC_Init()

{

ADCSRA = 0x=87; //Enable ADC, fr/128

ADCSRA |= (1<<ADSC);

while ((ADCSRA &(1<<ADIF))==0); //monitor end of conversion interrupt flag

ADCSRA |=(1<<ADIF); //set the ADIF bit of ADCSRA register

return(ADCW);

}

 

int ADC()

{

ADMUX = 0x46;

}

 

void getTemp()

{

val = ADC(); //store adc value on val register

R=10000*(1023/val-1.0); //calculate the resistance

Thermister = log(R); //calculate natural of resistance

Thermister = 1/(0.8483323763e-03 + (2.581286591e-04 * Thermister) + (1.641220112e-07 * Thermister * Thermister * Thermister)) ; //A=0.8483323763e-03, B=2.581286591e-04, C=1.641220112e-07

Thermister = Thermister - 273.15; //covert kelvin to C

return Thermister;

}

//

void init_timer0()

{

TCCR0 = (1<<CS02); //분주비 256

TCTN0 = 6; //TNCT0의 초기값 6

TIMSK = (1<<TOIE0); //타이머 인터럽트 enable

}

void init_timer1()

{

//set mode: Mode 06 (8Bit Fast PWM)

//f_pwm = f_clk/ N * (1+Top) = 16,000,000Hz / 64 * (1+255) = 976.5625Hz      

//( N :Pre-scale factor = 64)

TCCR1A|=(1<<COM1A1)|(0<<COM1A0)|(1<<COM1B1)|(0<<COM1B0)|(0<<WGM11)|(1<<WGM10); 

TCCR1B=(0<<WGM13)|(1<<WGM12)|(0<<CS12)|(1<<CS11)|(1<<CS10);

TIMSK=(1<<OCIE1A);

/*TCCR0A=(1<<WGM01); TIMSK0|=(1<<OCIE0A); TCCR0B|=(1<<CS02)|(1<<CS00); OCR0A=0x07;*/

}

//

ISR(TIMER0_COMPA_vect) //1ms

{

if(PIND & input == 1){

Cooler(); // Hand piece 연결되면 High 입력

if(++millisec>=1000){ //1sec

millisec=0; 

if(sec<6){

if(++sec>=6)PORTD=0x28; //6sec (PD6)Off,(PD5)on,(PD3)On

}

cal=pulsecount/calibrationfactor; //L/min

flowrate=cal*60; //L/hour

if(flowrate==0){

PORTD|= 0x02; //PD1 High Output(Water flow signal)

}

else PORTD&=~0x02; //PD1 Low Output

pulsecount=0;

}

}

}

ISR(TIMER1_COMPA_vect)

{

}

//

ISR(INT0_vect){ pulsecount++; }

//

 

int main(void){

char water[20]={0};

char Tbuf[20]={0};

double temp;

init_port();

init_timer0();

init_timer1();

MCUCR|=(0<<ISC00)|(1<<ISC01); //The falling edge of INT0 generates an interrupt request.

GICR|=(1<<INT0); //INT0 Enable

sei();

LCD_Init();

ADC_Init();

while(1){

temp=getTemp();

sprintf(water,"WATER:%0.1f L/H",flowrate);

Write_Command_LCD(0x80);

String_LCD(water);

_delay_ms(100);

sprintf(Tbuf,"temp:%0.1f  C ",temp);

Write_Command_LCD(0xc0);

String_LCD(Tbuf);

_delay_ms(100);

}

}

 

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 1

조회수 418

master님의 댓글

master 작성일

동작 시켜보고 문제가 발생하고, 본인 능력으로 해결이 안될 때 질문을 해주세요
동작 전 코드 체크는 스스로 하시고요
조언을 드리자면
알고리즘을 잘 작성하면
코드는 알고리즘 대로 타이핑하면 그만입니다.
언어의 문법은 쉽게 숙련이 되지만 알고리즘은 좀 더 어렵습니다.
시간에 여유가 있으면 알고리즘부터 잘 작성하고, 알고리즘대로 코드를 작성했는지 체크하세요

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 11911
공지 사이트 이용 안내댓글[25] master 17-10-29 31175
질문 해석좀 해주세요 새글 bubu 22-08-14 17
질문 lcd 1602에 특수문자를 출력하는 방법을 알고싶습니다.댓글[3] dndktn 22-08-12 30
질문 stm32 wifi 파일전송댓글[3] 하리 22-08-11 33
질문 회로 구성 수정댓글[2] 첨부파일 픽공부 22-08-11 34
질문 아두이노 와이파이통신 질문 있습니다댓글[1] 학생 22-08-11 31
질문 포토다이오드와의 연결 질문합니다.댓글[7] 이미지첨부파일 박윤모 22-08-10 52
질문 회로 구성댓글[4] 픽공부 22-08-10 42
질문 아두이노 센서, 와이파이, 블루투스 연결댓글[1] pattern 22-08-10 53
질문 PIC 블루투스 연결댓글[19] 픽공부 22-08-09 61
질문 PIC18F452 블루투스 연결댓글[4] 마이컴 22-08-08 67
질문 아두이노 코드 해석을 못하겠습니다...댓글[2] 김가헌 22-08-08 72
질문 아두이노 코드를 avr로 변환해 주세요 ...ㅠ댓글[3] 옹냥냥 22-08-08 62
질문 아두이노 녹음-스피커모듈 관련 질문있습니다 ㅠㅠ댓글[2] 방귀뿡뿡 22-08-08 46
질문 Serial EEPROM 실수값 저장..댓글[2] 이미지첨부파일 광이 22-08-07 40
질문 STM32 Live Expression 값들이 깜빡이는 현상댓글[3] 둠둠 22-08-05 115
질문 아두이노 ESP32 wifi module댓글[1] Yoon 22-08-03 180
질문 atmega128과 dht11, lcd를 연결했는데 0도라고 뜹니다.댓글[1] 고양이33 22-08-02 428
질문 ATMEGA 128 코드를 합치려고 하는데 어렵네요댓글[2] 고양이33 22-08-02 234
질문 서보모터 제어에 대해 질문있습니다.댓글[2] 첨부파일 뉴비에오 22-07-30 158
질문 적외선 통신 알려주실분있나요 ㅠㅠ댓글[1] hkjsj10 22-07-30 149
질문 아두이노 관련 궁금합니다.댓글[1] 뱝뱝 22-07-28 139
질문 아두이노 우노 MCP4725댓글[3] 이미지 opqr 22-07-27 294
질문 레오나르도 인체감지센서 알림 안옴 면지지 22-07-24 227
답변 답변글 답변 : 레오나르도 인체감지센서 알림 안옴 master 22-07-25 161
질문 Uno에서 엔코더값 놓치는 이유가 뭘까요...댓글[3] MAKTUB 22-07-24 166
질문 아두이노 압력센서 연동 질문댓글[4] dbice 22-07-23 273
질문 아두이노 버튼 누르기 문의댓글[1] 김형근 22-07-23 198
질문 HM10 다중페어링댓글[1] ㅎㅋㅎㅋㅎ 22-07-22 210
게시물 검색

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
모바일버전으로보기