最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

基于ATMGEA88的豆浆机控制器

来源:动视网 责编:小OO 时间:2025-09-29 18:52:52
文档

基于ATMGEA88的豆浆机控制器

基于ATMGEA88的豆浆机控制器作品采用ATMEL公司的ATMGEA88作为MCU,内部有8KFLASH,1kram。工作在内部8MRC振荡下,耗电仅为2MA左右。采用RISC指令集的AVR核心,运算速度大大超过传统的51单片机。内部带有3个定时器,8路AD(模数转换器),串口,硬件SPI,方便使用。大批量采购价格为6.5RMB,省钱,省电。(具体问题可以搜索下,网上吹捧得很多)推荐你看一下中文的PDF,到处都有下载的。采用这块芯片主要来说就有一点,比51先进,而且带内部AD,集成度高。使用
推荐度:
导读基于ATMGEA88的豆浆机控制器作品采用ATMEL公司的ATMGEA88作为MCU,内部有8KFLASH,1kram。工作在内部8MRC振荡下,耗电仅为2MA左右。采用RISC指令集的AVR核心,运算速度大大超过传统的51单片机。内部带有3个定时器,8路AD(模数转换器),串口,硬件SPI,方便使用。大批量采购价格为6.5RMB,省钱,省电。(具体问题可以搜索下,网上吹捧得很多)推荐你看一下中文的PDF,到处都有下载的。采用这块芯片主要来说就有一点,比51先进,而且带内部AD,集成度高。使用
 基于ATMGEA88的豆浆机控制器

作品采用ATMEL公司的ATMGEA88 作为MCU,内部有8K FLASH,1kram。工作在内部8M RC振荡下,耗电仅为2MA左右。采用RISC指令集的AVR核心,运算速度大大超过传统的51单片机。内部带有3个定时器,8路AD(模数转换器),串口,硬件SPI,方便使用。大批量采购价格为6.5RMB,省钱,省电。(具体问题可以搜索下,网上吹捧得很多)推荐你看一下中文的PDF,到处都有下载的。采用这块芯片主要来说就有一点,比51先进,而且带内部AD,集成度高。

使用一块LCD5110手机屏作为显示设备,可以显示输出电压以及当前状态。液晶屏参数为84*,点阵式,使用一个驱动库作为支持,方便开发,工作在3.3V电压下。耗电极低,小于1MA,背光耗电为20MA。单片机和屏幕均工作在3.3v电压下

使用一片LDO(低压差线性稳压源)作为系统电源,LM1117-3.3V,输出电压为3.3V,最大电流500MA

使用2个继电器控制不同的LED来指示处于加热状态还是研磨状态。继电器利用三极管的电流放大特性来控制。当IO口置高时,三极管B级有电流流过,三极管放大后,CE级可以流过大的电流,因此可以控制继电器的吸和和开闭。

采用一个3级管控制蜂鸣器和报警灯的闪烁,原理与上面的一致。总体的来说,是采用3级管的开关工作模式。这时3级管等效于一个可控的开关。

采用美信公司的DS18B20温度探测器做温度探测。温度探测范围从-40度到正125度,满足使用要求。内部可以高达12位精度。目前采用9位精度模式,已经足够豆浆机使用。器件与单片机只需要用一根信号线连接,是典型的1-WIRE器件。为了测试方便,目前只要测量温度超过30度就算预热完成。

以下为单片机的复位电路和烧录接口。

以下为测试用接口

当PC0被拉低时,表明注水完毕,可以开始工作,当PC1被拉低的时候,代表沸腾,此时停止加热。

软件流程图

/*****************************************************

This program was produced by the

CodeWizardAVR V2.04.4a Advanced

Automatic Program Generator

?Copyright 1998-2009 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

Project : 

Version : 

Date    : 2010/5/20

Author  : NeVaDa

Company : Lenovo

Comments: 

Chip type               : ATmega88V

Program type            : Application

AVR Core Clock frequency: 8.000000 MHz

Memory model            : Small

External RAM size       : 0

Data Stack size         : 256

*****************************************************/

#include

#include "lcd5110.h"

#include

#define uint unsigned int

#define uchar unsigned char

#define ulong unsigned long

uint t;

unsigned char yichu,youshui,run,hot,crush;

uchar ds1820_reset(void) 

 uchar i; 

 DDRD.3=1;

 PORTD.3=0; 

 delay_us(500);    /*延时500uS(480-960)*/ 

 PORTD.3=1;  

 DDRD.3=0;

 delay_us(80);    /*延时80uS*/ 

 i =PIND.3;

 delay_us(500);    /*延时500uS(保持>480uS)*/

 if (i) { 

  return 0x00; 

  } 

 else { 

  return 0x01; 

  } 

uchar ds1820_read_byte(void) 

 uchar i; 

 uchar value = 0; 

 for (i = 8; i != 0; i--) 

 { 

value >>= 1;

 DDRD.3=1;

PORTD.3=0;

PORTD.3=1;

 DDRD.3=0;

  if (PIND.3) 

  value|=0x80; 

  delay_us(60);   /*延时60uS*/ 

  } 

 return(value); 

}

void ds1820_write_byte(uchar value) 

 uchar i; 

 for (i = 8; i != 0; i--) 

 { 

  DDRD.3=1;

PORTD.3=0;

  delay_us(4); 

  if (value & 0x01) 

  { 

PORTD.3=1;

   } 

  delay_us(80);   /*延时80uS*/ 

PORTD.3=1;     /*位结束*/ 

value >>= 1;

  } 

void ds1820_start(void) { 

 ds1820_reset(); 

 ds1820_write_byte(0xCC); /*勿略地址*/ 

 ds1820_write_byte(0x44); /*启动转换*/ 

unsigned int ds1820_read_temp(void) { 

 unsigned int i; 

 uchar buf[9]; 

 ds1820_reset(); 

 ds1820_write_byte(0xCC); /*勿略地址*/ 

 ds1820_write_byte(0xBE); /*读取温度*/ 

for (i = 0; i < 9; i++)

  { 

  buf[i] = ds1820_read_byte(); 

  } 

 i = buf[1]; 

i <<= 8;

 i |= buf[0]; 

 i=i*0.625*100; 

  

 return i; 

}

interrupt [PC_INT1] void pin_change_isr1(void)       //按键中断,检测按键变化

{ #asm("cli") 

   if(PINC.0==0)

     {youshui=1;}

   else

     {youshui=0;}   

   if(PINC.1==0)

     {yichu=1;}

   else

     {yichu=0;}

     

   #asm("sei")       

// Place your code here

}

interrupt [TIM1_OVF] void timer1_ovf_isr(void) //定时器中断,刷新温度显示,检查状态之间的切换

{     #asm("cli")

      ds1820_start(); 

      delay_us(210);                                              

      t=ds1820_read_temp();

      LCD_write_number(24,2,t); 

      if(hot==1&&yichu==0)

      {PORTD.0=1;}

      else

      {PORTD.0=0;}

      if(crush==1)

      {PORTD.1=1;}

      else

      {PORTD.1=0;} 

      if(yichu==1)

      {LCD_write_6_8string(0,0,"    Boiling   ");}

      else

      {LCD_write_6_8string(0,0,"              ");}

      #asm("sei")

// Place your code here

}

// Declare your global variables here

void main(void)       //系统初始化

// Declare your local variables here

// Crystal Oscillator division factor: 1

#pragma optsize-

CLKPR=0x80;

CLKPR=0x00;

#ifdef _OPTIMIZE_SIZE_

#pragma optsize+

#endif

// Input/Output Ports initialization

// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 

PORTB=0x00;

DDRB=0xff;

// Port C initialization

// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 

// State6=T State5=T State4=T State3=T State2=P State1=P State0=P 

PORTC=0x07;

DDRC=0x00;

// Port D initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 

PORTD=0x00;

DDRD=0xff;

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

// Mode: Normal top=FFh

// OC0A output: Disconnected

// OC0B output: Disconnected

TCCR0A=0x00;

TCCR0B=0x00;

TCNT0=0x00;

OCR0A=0x00;

OCR0B=0x00;

// Timer/Counter 1 initialization

// Clock source: System Clock                                         w

// Clock value: 125.000 kHz

// Mode: Normal top=FFFFh

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer1 Overflow Interrupt: On

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x03;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer2 Stopped

// Mode: Normal top=FFh

// OC2A output: Disconnected

// OC2B output: Disconnected

ASSR=0x00;

TCCR2A=0x00;

TCCR2B=0x00;

TCNT2=0x00;

OCR2A=0x00;

OCR2B=0x00;

// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

// Interrupt on any change on pins PCINT0-7: Off

// Interrupt on any change on pins PCINT8-14: On

// Interrupt on any change on pins PCINT16-23: Off

EICRA=0x00;

EIMSK=0x00;

PCICR=0x02;

PCMSK1=0x07;

PCIFR=0x02;

// Timer/Counter 0 Interrupt(s) initialization

TIMSK0=0x00;

// Timer/Counter 1 Interrupt(s) initialization

TIMSK1=0x01;

// Timer/Counter 2 Interrupt(s) initialization

TIMSK2=0x00;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

ADCSRB=0x00;

LCD_init();        //液晶屏初始化

PORTB.5=1;         //打开背光

#asm("sei")

while (1)

      {uchar i;

      

      LCD_write_6_8string(0,3,"     Please   ");   //提示加水

      LCD_write_6_8string(0,4,"   add water  ");

      while(youshui==0)

      {;}

       hot=1;

      LCD_write_6_8string(0,3,"    Heating   ");    //第一次加热

      LCD_write_6_8string(0,4,"              "); 

while(t<30000) //检测超过30度

      {;}

       hot=0;  

       delay_ms(1000);

for(run=5;run>0;run--) //4次循环,每次先研磨17秒,然后煮17秒

   {   crush=1;

      LCD_write_6_8string(0,3,"    Crush     ");       

for(i=18;i>0;i--)

     {LCD_write_6_8string(0,4,"          s   "); 

      LCD_write_number(24,4,i);

      delay_ms(1000);

      } 

      crush=0;

      delay_ms(1000);

      hot=1; 

      LCD_write_6_8string(0,3,"    Heating   ");

for(i=18;i>0;i--)

     {LCD_write_6_8string(0,4,"          s   ");

      LCD_write_number(24,4,i);

      delay_ms(1000);

      }

      hot=0; 

      delay_ms(1000);  

      

      }

      hot=1;

      LCD_write_6_8string(0,3,"    Cooking   ");      //延煮3分钟,180秒

for(i=181;i>0;i--)

     {LCD_write_6_8string(0,4,"          s   ");

      LCD_write_number(24,4,i);

      delay_ms(1000);

      }

      hot=0;

      delay_ms(1000);

      LCD_write_6_8string(0,3,"    All OK    ");      //所有完成,蜂鸣器鸣响3秒

      LCD_write_6_8string(0,4,"              ");

      PORTD.2=1;

      delay_ms(3000);

      PORTD.2=0;

      

      // Place your code here

      while (1)

      {;}

      

      };

}

文档

基于ATMGEA88的豆浆机控制器

基于ATMGEA88的豆浆机控制器作品采用ATMEL公司的ATMGEA88作为MCU,内部有8KFLASH,1kram。工作在内部8MRC振荡下,耗电仅为2MA左右。采用RISC指令集的AVR核心,运算速度大大超过传统的51单片机。内部带有3个定时器,8路AD(模数转换器),串口,硬件SPI,方便使用。大批量采购价格为6.5RMB,省钱,省电。(具体问题可以搜索下,网上吹捧得很多)推荐你看一下中文的PDF,到处都有下载的。采用这块芯片主要来说就有一点,比51先进,而且带内部AD,集成度高。使用
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top