помогите дописАть код. мне надо чтобы на меге8 вход РС0 мерял напряжение а РС1 мерил сопротивление
по шкале делителя от 5 вольт (омы до 1000)
/************************************************** ***
This program was produced by the
CodeWizardAVR V1.25.8 Free Evaluation
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Chip type : ATmega8
Program type : Application
Clock frequency : 1,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
************************************************** ***/
#include ‹mega8.h›
#include ‹delay.h›
#define ADC_VREF_TYPE 0xC0
#define VREF 2210
#define D1 PORTD=0x80 | 0b00001110
#define D2 PORTD=0x80 | 0b00001101
#define D3 PORTD=0x80 | 0b00001011
#define D4 PORTD=0x80 | 0b00000111
//Äëÿ ñ ÎÀ
/*
#define D1 PORTD=0x80 | 0b00000001
#define D2 PORTD=0x80 | 0b00000010
#define D3 PORTD=0x80 | 0b00000100
#define D4 PORTD=0x80 | 0b00001000
*/
unsigned int k1;
unsigned long volt;
unsigned char buf[4];
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
void digit_off(void)
{
//PORTB=0x00;
//DDRB=0x00;
//#asm("NOP");
DDRD=0x00;
}
void digit_on(void)
{
//PORTB=0x00;
//DDRB=0xFF;
//#asm("NOP");
DDRD=0x0F;
delay_ms(5);
digit_off();
}
void read_data(void)
{
buf[0]=volt/1000%10;
buf[1]=((volt/100)%10);
buf[2]=((volt/10)%10);
}
void main(void)
{
unsigned char k2=10;
unsigned int inp=0;
unsigned char digits[]=
{
0b00111111,0b00000110,0b01011011,//0 1 2
0b01001111,0b01100110,0b01101101,//3 4 5
0b01111101,0b00000111,0b01111111,//6 7 8
0b01101111,0b00111110,0b01110111 //9 U A
};
//Äëÿ ñ ÎÀ
/*
unsigned char digits[]=
{
0b11000000,0b11111001,0b10100100,//0 1 2
0b10110000,0b10011001,0b10010010,//3 4 5
0b10000010,0b11111000,0b10000000,//6 7 8
0b10010000,0b11000001,0b10001000, //9 U A
0b01111111
};
*/
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=T State1=P State0=P
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out
// State7=P State6=T State5=T State4=T State3=0 State2=0 State1=0 State0=0
PORTD=0x80;
DDRD=0x0F;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
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: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 125,000 kHz
// ADC Voltage Reference: Int., cap. on AREF
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
while (1)
{ if (PIND.7==0) {k1=1; k2=11; inp=1;} else {k1=4; k2=10; inp=0;};
volt=(read_adc(inp));
volt=(volt*VREF/2095)*k1;
if (volt›=1000)
{
read_data();
digit_off();
D3;
PORTB=digits[buf[0]];
digit_on();
D4;
// PORTB=digits[buf[1]] & 0b01111111;//Äëÿ ñ ÎÀ
PORTB=digits[buf[1]] ^ 0b10000000;;
PINB.7=1;
digit_on();
D1;
PORTB=digits[buf[2]];
digit_on();
D2;
PORTB=digits[k2];
digit_on();
} else
{
read_data();
digit_off();
D3;
// PORTB=digits[buf[0]] & 0b01111111;//Äëÿ ñ ÎÀ
PORTB=digits[buf[1]] ^ 0b10000000;;
digit_on();
D4;
PORTB=digits[buf[1]];
digit_on();
D1;
PORTB=digits[buf[2]];
digit_on();
D2;
PORTB=digits[k2];
digit_on();
}
};
}
шкала напряжений 10 ом 4v
100 om 1.54v
1kom 0.2v
и при достижении максимального напряжения на рс1 меги то на PD4 выводился сигнал
1 кгц на пищалку
вот так.
помогите пжлста реализовать это