Atmega16l簡單單相逆變器制作資料
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png (63.54 KB, 下載次數: 171)
下載附件
2017-9-15 16:38 上傳
0.png (45.65 KB, 下載次數: 156)
下載附件
2017-9-15 16:38 上傳
0.png (43.16 KB, 下載次數: 159)
下載附件
2017-9-15 16:38 上傳
Atmega16l單片機源碼如下:
- #include<iom16v.h>
- #include<macros.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar zd=0,c=0;
- uint iv=0,ii=0,ov=0,oi=0,sj=0,b=0;
- uchar table[3]={8,8,8};
- #pragma data:code
- flash uint table1[]={0X3f,0X06,0X5b,0X4f,0X66,0X6d,0X7d,0X07,0X7f,0X6f,0X77,0X7c,0X39,0X5e,0X79,0X71,0X00,
- 0X40,0XFF};
- flash uint table2[]={
- 0,5,10,16,21,27,32,38,43,48,54,59,64,69,75,80,85,90,95,100,
- 105,110,115,120,124,129,134,138,143,147,152,156,160,164,168,172,176,180,184,187,
- 191,194,198,201,204,207,210,213,216,219,221,224,226,228,230,233,234,236,238,240,
- 241,242,244,245,246,247,247,248,249,249,249,249,250,249,249,249,249,248,247,247,
- 246,245,244,242,241,240,238,236,234,233,230,228,226,224,221,219,216,213,210,207,
- 204,201,198,194,191,187,184,180,176,172,168,164,160,156,152,147,143,138,134,129,
- 125,120,115,110,105,100,95,90,85,80,75,69,64,59,54,48,43,38,32,27,
- 21,16,10,5,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0};
- flash uint table3[]={
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,
- 0,5,10,16,21,27,32,38,43,48,54,59,64,69,75,80,85,90,95,100,
- 105,110,115,120,124,129,134,138,143,147,152,156,160,164,168,172,176,180,184,187,
- 191,194,198,201,204,207,210,213,216,219,221,224,226,228,230,233,234,236,238,240,
- 241,242,244,245,246,247,247,248,249,249,249,249,250,249,249,249,249,248,247,247,
- 246,245,244,242,241,240,238,236,234,233,230,228,226,224,221,219,216,213,210,207,
- 204,201,198,194,191,187,184,180,176,172,168,164,160,156,152,147,143,138,134,129,
- 125,120,115,110,105,100,95,90,85,80,75,69,64,59,54,48,43,38,32,27,
- 21,16,10,5};
- #pragma interrupt_handler timer2_capt_isr:5
- #pragma interrupt_handler adc_sj:15
- void timer2_capt_isr()
- {
- TCNT2=5;
- c++;
- if(c>=2)
- {
- c=0;
- OCR1AH=0;
- OCR1AL=table2[b];
- OCR1BH=0;
- OCR1BL=table3[b];
- b++;
- if(b>=288){b=0;zd++;}
- }
- }
- void timer1_init()
- {
- TCCR2=0X01;
- TCNT2=5;
- OCR1AH=0;
- OCR1AL=0;
- OCR1BH=0;
- OCR1BL=0;
- ICR1=250;
- TCCR1A=0XA0;
- TCCR1B=0X11;
- }
- void init_devices()
- {
- DDRD|=BIT(4);
- DDRD|=BIT(5);
- timer1_init();
- MCUCR=0X00;
- GICR=0X00;
- TIMSK=0X40;
- SREG|=BIT(7);
- }
- void led()//正常指示燈
- {
- PORTB|=BIT(3);
- PORTB&=~BIT(4);
- }
- void led1()//故障指示燈
- {
- PORTB&=~BIT(3);
- PORTB|=BIT(4);
- }
- void led2()//報警指示燈
- {
- PORTB|=BIT(4);
- PORTB|=BIT(3);
- }
- void ad_init(uchar a)//AD轉換
- {
- // uint sj;
- SFIOR=0;//設置ADC為連續工作模式
- ADMUX=a;//設置那一路ADC轉換
- ADCSR=0X80;//ADC轉換使能
- ADCSR|=BIT(ADSC);//啟動ADC
- ADCSR|=BIT(ADIE);
- SREG|=BIT(7);
- // while(!(ADCSR&(BIT(ADIF))));//等待ADC轉換完成
- // sj=ADCL;
- // sj=sj+256*ADCH;
- // ADCSR|=BIT(ADIF);
- // ADCSR=0X00;//關閉ADC
- // return sj;
- }
- void show(uchar bai,uchar shi,uchar ge )
- {
- PORTC=table1[bai];
- PORTA|=BIT(7);
- PORTA&=~BIT(7);
- PORTC=table1[shi];
- PORTA|=BIT(6);
- PORTA&=~BIT(6);
- PORTC=table1[ge];
- PORTA|=BIT(5);
- PORTA&=~BIT(5);
- }
- void adc_sj()
- {
- sj=ADCL;
- sj=sj+256*ADCH;
- ADCSR|=BIT(ADIF);
- ADCSR=0X00;//關閉ADC
- }
- void delay(uint ms)
- {
- uint x,y;
- for(x=0;x<ms;x++)
- {
- for(y=0;y<1141;y++);
- }
- }
- void main()
- {
- uchar f=0;
- uint ci=0;
- DDRC=0XFF;
- DDRA|=BIT(5);
- DDRA|=BIT(6);
- DDRA|=BIT(7);
- PORTC=0X00;
- PORTA&=~BIT(7);
- PORTA&=~BIT(6);
- PORTA&=~BIT(5);
- DDRA&=~BIT(1);
- PORTA&=~BIT(1);
- DDRA&=~BIT(4);
- PORTA&=~BIT(4);
-
- DDRB|=BIT(3);
- DDRB|=BIT(4);
- PORTB&=~BIT(3);
- PORTB&=~BIT(4);
- DDRB|=BIT(6);
- PORTB&=~BIT(6);
- init_devices();
- while(1)
- {
- if(zd>=80)
- {
- zd=0;
- switch(f)
- {
- case 0: table[0]=1;table[1]=17;table[2]=17;f++;ad_init(0x44);
- break;
- case 1:sj=sj/51;iv=sj;table[0]=iv/100;table[1]=iv%100/10;table[2]=iv%10;f++;sj=0;led();
- break;
- case 2: table[0]=2;table[1]=17;table[2]=17;f++;
- break;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
簡單單相逆變器控制板原理圖叫Atmega16L源代碼.rar
(678.59 KB, 下載次數: 201)
2017-9-15 09:48 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|