在学校,他喜欢微电子学,去了无线电俱乐部,组装了几个简单的设备。然后大学,工作,婚姻和很少回忆起他的爱好。随着家中互联网的出现,我发现了微控制器的详细信息,研究了价格,并非常热衷于在AVR或STM上收集东西。我重新阅读了许多论坛和有关微控制器项目的精选文章,但是一切都出了问题,我无法理解哪里出了问题。似乎很有趣:音乐播放器可以播放存储卡中的文件,也可以播放带有温度计的闹钟,但是还有很多其他功能,但是我并没有希望...我碰到过几篇有关IN系列气体排放指示器上的手表的文章,诸如此类,当我在商店里看着刻度尺上的数字时,就出现了童年的记忆,它们以细线的形式分开,其中一根发光。决定-我去做时钟。气体放电指示器的工作电压约为180伏,因此与控制器配合使用时,最常使用k155id1芯片-唯一的高压芯片是二进制十进制解码器。为了获得高电压,大多数项目还使用单独的专用PWM芯片。在许多项目中,还存在单独芯片或成品组件形式的实时时钟。我在商店的网站上阅读了一个简单的Atmega8的说明,我想像有一个模数转换器和脉宽调制,串行接口等,它们通常仅用于执行时钟程序,甚至在外部安装了指示器的解码器。对于微控制器来说是一种耻辱,它是如此“强大”,并且他们不允许它转过来。结果,绕过电路,我立即开始在SprintLayout中绘制印刷电路板,这对夫妇在几周之内出生:
在一块板上,所有东西都带电,而在另外两个指标上:
该项目中的atmega8微控制器使用所有三个计时器,其中一个与外部时钟石英异步工作。控制器本身从内部RC链以8兆赫的频率运行。PWM用于在升压转换器中产生高电压,该电压由模拟输入控制,并在必要时调整占空比。好了,28条腿足以照亮四个IN 12指示器,并且还剩下几个灯泡。组装后的样子:
点亮:
某些控制器功能当然没有使用,但是当附近没有单独的PWM和RTC时,它并不是那么令人讨厌。BB添加了该计划的一部分,涂了一层蛋白石,这对夫妇辛苦了:我从这里
开始了关键计划SI项目代码#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
//
void init_pwm (void)
{
//
DDRB=0xFF; //OC1A,OC1B,OC2 —
TCCR1A=(1<<COM1B1)|(1<<WGM10)|(1<<WGM11); // OC1A
TCCR1B=(1<<CS10)|(1<<WGM12)|(1<<WGM13); // OC1B
//
OCR1A=250;
OCR1B=215; // 0 200/170 250/215
}
volatile unsigned char second, minute, hour, h, m;
int voltage_ADC, dimm;
// 2
ISR (TIMER2_OVF_vect)
{
if(second++ >= 59)
{
second = 0;
minute++;
}
if(minute > 59)
{
minute = 0;
hour++;
}
if(hour > 23)
hour = 0;
//set_time(hour,minute,second); //
}
ISR (TIMER0_OVF_vect)
{
PORTC |= (1 << PC2);
}
ISR (ADC_vect)//
{
voltage_ADC = ADCW;//
if(voltage_ADC<260 && OCR1A<300){OCR1A++;OCR1B=OCR1A-dimm;}
if(voltage_ADC>260 && OCR1A>170){OCR1A--;OCR1B=OCR1A-dimm;}
ADCSR |= (1<<ADSC);//
}
//
int main(void)
{
unsigned char r;
unsigned char mode;
init_pwm(); //
PORTD=0x00; // D 0, D
DDRD=0xFF; // D , 5
PORTC = 0b00000000; DDRC = 0b11101111;
TIMSK &= ~(1 << OCIE2)|(1 << TOIE2); // T2
ASSR |= (1 << AS2); // T2
TCNT2 = 0; //
TCCR2 |= (1 << CS22)|(0 << CS21)|(1 << CS20); // 128-(32768/128 = 256 /c)
TIMSK |= (1 << TOIE2); // 2
TCCR0|=(0<<CS02)|(1<<CS00);
//TIMSK |= (1 << TOIE0); // 2
//ads
ADMUX|= (1<<REFS0)|(1<<REFS1)|(1<<MUX2); //
//ADCSRA|=(1<<ADEN)|(1<<ADFR)|(1<<ADIE)|(1<<ADPS1)|(1<<ADPS0);
ADCSRA |= (1<<ADEN) | (1<<ADSC) | (1<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
sei(); //
hour = 23; //
minute = 13;
second = 23;
mode=1;
while (1) //
{
/*
PORTD |= (1 << PD1); // 1
PORTD &= ~ (1 << PD1); // 1
*/
dimm=35;
PORTC &= ~ (1 << PC2);
if(mode==1){m=minute; h=hour;}
if(mode==2){m=second; h=minute;}
if(mode==3){m=voltage_ADC%100; h=voltage_ADC/100;};
for (r=0;r<4;r++)
{
if(r==1)
{
PORTC |= (1 << PC3);//
if (m/10==0) PORTD |= (1 << PD3);//0
if (m/10==1) PORTD |= (1 << PD2);//1
if (m/10==2) PORTB |= (1 << PB1);//2
if (m/10==3) PORTB |= (1 << PB3);//3
if (m/10==4) PORTB |= (1 << PB4);//4
if (m/10==5) PORTD |= (1 << PD5);//5
if (m/10==6) PORTD |= (1 << PD6);//6
if (m/10==7) PORTD |= (1 << PD7);//7
if (m/10==8) PORTB |= (1 << PB0);//8
if (m/10==9) PORTD |= (1 << PD4);//9
}
if(r==0)
{
PORTC |= (1 << PC5);//
if (m%10==0) PORTD |= (1 << PD3);//0
if (m%10==1) PORTD |= (1 << PD2);//1
if (m%10==2) PORTB |= (1 << PB1);//2
if (m%10==3) PORTB |= (1 << PB3);//3
if (m%10==4) PORTB |= (1 << PB4);//4
if (m%10==5) PORTD |= (1 << PD5);//5
if (m%10==6) PORTD |= (1 << PD6);//6
if (m%10==7) PORTD |= (1 << PD7);//7
if (m%10==8) PORTB |= (1 << PB0);//8
if (m%10==9) PORTD |= (1 << PD4);//9
}
if(r==2)
{
PORTD |= (1 << PD1);//
if (h/10==0) PORTD |= (1 << PD3);//0
if (h/10==1) PORTD |= (1 << PD2);//1
if (h/10==2) PORTB |= (1 << PB1);//2
if (h/10==3) PORTB |= (1 << PB3);//3
if (h/10==4) PORTB |= (1 << PB4);//4
if (h/10==5) PORTD |= (1 << PD5);//5
if (h/10==6) PORTD |= (1 << PD6);//6
if (h/10==7) PORTD |= (1 << PD7);//7
if (h/10==8) PORTB |= (1 << PB0);//8
if (h/10==9) PORTD |= (1 << PD4);//9
}
if(r==3)
{
PORTD |= (1 << PD0);//
if (h%10==0) PORTD |= (1 << PD3);//0
if (h%10==1) PORTD |= (1 << PD2);//1
if (h%10==2) PORTB |= (1 << PB1);//2
if (h%10==3) PORTB |= (1 << PB3);//3
if (h%10==4) PORTB |= (1 << PB4);//4
if (h%10==5) PORTD |= (1 << PD5);//5
if (h%10==6) PORTD |= (1 << PD6);//6
if (h%10==7) PORTD |= (1 << PD7);//7
if (h%10==8) PORTB |= (1 << PB0);//8
if (h%10==9) PORTD |= (1 << PD4);//9
}
_delay_ms(3);
PORTC &= ~ (1 << PC3);
PORTC &= ~ (1 << PC1);
PORTC &= ~ (1 << PC5);
PORTD &= ~ (1 << PD1);
PORTB=0x00;PORTC=0x00;PORTD=0x00;
_delay_ms(1);
}
}
}