все верно
ну он кстати реально царапает
подогрева задних сидений.
#include <mega128.h>
#include <mega128_bits.h>
#include <delay.h>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#asm
.equ __lcd_port=3; PORTE
#endasm
#include <alcd.h> ,
#define ADC_VREF_TYPE 0x40
unsigned char i=0; // ПРИШЛОСЬ ОБЪЯВИТЬ ГЛОБАЛЬНО
//========================================
int Levels[6] = { 1006, 1005, 1004, 1002, 1001, 998, };
//==========================================
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
//==========================================
unsigned int convert( int i){ //ПРОПИСАЛ ВХОДНУЮ ПЕРЕМЕННУ.
for (i = 0; i < 5; ++i){
if(Levels[i] == read_adc(1)) //ПО ТВОЕМУ СОВЕТУ, ДЕЛАЮ ВЫБОРКУ ИЗ ацп
return i; //ВОТ ЭТО ТЕПЕРЬ ВЫГЛЯДИТ ВОТ ТАК
}
}
//==========================================
void main(void)
{
char string[8]; // ГЛОБАЛЬНО ПЕРЕМЕСТИЛ ПЕРЕМЕННЫЕ СЮДА
unsigned int adc_data;
float U;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x86;
lcd_init(16);
while (1)
{
adc_data=read_adc(0);
U=(float) adc_data*50.0/1024; // Переводим в вольты
sprintf(string, "U=%2.1fv", U); // форматируем
lcd_gotoxy(0,0); // Выставляем курсор
lcd_puts(string); // Выводим значение
delay_us(500);
adc_data=read_adc(1); // ВРЕМЕННОЕ
U=(float) adc_data*5.0/1024; // в КОНЦЕ ТВОРЧЕСКОГО ПРОЦЕССА ЗАЧИСТИМ
sprintf(string, "%1.4f", U);
lcd_gotoxy(0,1);
lcd_puts(string);
delay_us(500);
adc_data=read_adc(1); // ВРЕМЕННОЕ
U=(float) adc_data*1.0;
sprintf(string, "%4.0f", U);
lcd_gotoxy(0,2);
lcd_puts(string);
delay_us(500);
adc_data=convert(i); // ЗДЕСЬ ТОЖЕ НЕ ТАК, КАК БЫЛО
U=(float) adc_data*1.0-40;
sprintf(string, "T=%-3.1f", U);
lcd_gotoxy(0,3);
lcd_puts(string);
delay_us(500);
}
}
Ты инжекцию что ли строишь?
unsigned char i=0; // ПРИШЛОСЬ ОБЪЯВИТЬ ГЛОБАЛЬНО
unsigned int convert( int i){ //ПРОПИСАЛ ВХОДНУЮ ПЕРЕМЕННУ.
if(Levels[i] == read_adc(1)) //ПО ТВОЕМУ СОВЕТУ, ДЕЛАЮ ВЫБОРКУ ИЗ ацп
А я делал просто - разводил в спирте канифоль, помом мазал места пайки и припаивал,
Заработало...
Сохрани вывод read_adc(1) в переменную перед вызовом функции convert(), а в функцию отдай уже не read_adc, а эту переменную.
Глобальные переменные, прувет.
Советую вынести read_adc() наружу функции, потому что возможна ситуация, когда значение АЦП изменится во время прохода по циклу.
А ты когда с медведами встречался, не был вооружен?
В этот момент АЦП меняет значение и становится 999. Второй прогон. 1000 равно 999? Нет.
ЭД*
А в свободное время с ружжом ходишь?
Закусывать надо!
Петрович, а в ДНР новогодние выходные сколько дней длятся?
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы можете вкладывать файлы
Вы можете скачивать файлы