Частота работы МК 1МГц, те внутренний генератор на 4МГц и делитель а 4 CLKPR=2;. На R1 и R2 собран делитель напряжения, на котором при входном напряжение 18V на выходе ~5V. Code #include <tiny2313.h> #include <delay.h>
typedef unsigned char byte; typedef unsigned int word;
byte dn=0; word dig_shn; word led_num=0;
//Таблица цифр для семисегментника byte led_table[10]={0b00111111,0b00000110,0b01011011,0b01001111,0b01100110,0b01101101,0b01111101,0b00000111,0b01111111,0b01101111};
void dig_show() { //Здесь отображаем разряды PORTD|=0xf; //Не показываем ни чего if (dn==0) dig_shn=led_num; //Если первый разряд обновляем переменную PORTB=led_table[dig_shn%10]; //Извлекаем разряд if (dn==2) PORTB|=0x80; //Если третий разряд кажем точку dig_shn/=10; //Сдвигаем разряд вправо PORTD&=~(1<<dn); //Показываем разряд dn++; if (dn>3) dn=0; }
interrupt [TIM0_OVF] void timer0_ovf_isr(void) { //Прерывание переполнения таймера 0 dig_show(); }
byte adc_read() { byte i,n; PORTD.4=0; //CS=0; delay_us(10); for (i=0;i<10;i++) { //Читаем 10 битов PORTD.5=1; //CLK=1 delay_us(10); n<<=1; //Сдвигаем биты влево n|=PIND.6; //Читаем бит DO PORTD.5=0; //CLK=0 delay_us(10); } PORTD.4=1; //CS=1; return n; }
void main(void) { #pragma optsize- CLKPR=0x80; CLKPR=2;
#ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif PORTA=0; DDRA=0; PORTB=0; DDRB=0xff; PORTD=0x50; DDRD=0x3f;
TCCR0A=0; TCCR0B=0; TCNT0=0; OCR0A=0; OCR0B=0;
TIMSK=2;
ACSR=0x80;
#asm("sei");
TCCR0B=2;
while (1) { led_num=adc_read()*7.058824; //Читаем АЦП, число с АЦП 0-255 delay_ms(10); }
}
|