Весы своими руками
Добавлено: Пт дек 24, 2010 10:51:09
Здравствуйте. Пишу программу для электронных весов, и отлаживаю в ПРОТЕУСЕ но так как в нем нет тензодатчика, то использую простой переменный резистор вместо датчика.
У меня такой вопрос:
Что нужно изменить в моем коде, чтобы вмето символов (которые изменяются при изменении сопротивления) на экране при нажатии кнопки появлялось текущее значение АЦП. Код и проект прилагаются:
Вот код:
#include <mega8.h>
// Функции Инициализации LCD
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
#include <delay.h>
#define FIRST_ADC_INPUT 0 //Объявления для АЦП
#define LAST_ADC_INPUT 0
unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
#define ADC_VREF_TYPE 0x20
interrupt [ADC_INT] void adc_isr(void)
{
static unsigned char input_index=0;
// Read the 8 most significant bits
// of the AD conversion result
adc_data[input_index]=ADCH;
// Select next ADC input
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
input_index=0;
ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index;
// Прерывание для стабилизации АЦП и ноги AREF
delay_us(10);
// Начало преобразования АЦП
ADCSRA|=0x40;
}
void main(void)
{
PORTD.0=0x00; //Инициализация кнопки
DDRD.0=0xFF;
ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff);
ADCSRA=0xCC;
lcd_init(8); //Загрузка LCD
#asm("sei")
while (1)
{
if(PIND.0==1) //Если кнопка нажата, то вывод на экран текущего значения АЦП
{
lcd_gotoxy(0,0);
lcd_putchar(adc_data[0]);
}
};
}
Этот код мне нужен для даленейшего использования - преобразования, чтобы потом вывести формулу, которая будет расчитывать настоящую массу, а не результаты преобразования АЦП.
Заранее спасибо.
У меня такой вопрос:
Что нужно изменить в моем коде, чтобы вмето символов (которые изменяются при изменении сопротивления) на экране при нажатии кнопки появлялось текущее значение АЦП. Код и проект прилагаются:
Вот код:
#include <mega8.h>
// Функции Инициализации LCD
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
#include <delay.h>
#define FIRST_ADC_INPUT 0 //Объявления для АЦП
#define LAST_ADC_INPUT 0
unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
#define ADC_VREF_TYPE 0x20
interrupt [ADC_INT] void adc_isr(void)
{
static unsigned char input_index=0;
// Read the 8 most significant bits
// of the AD conversion result
adc_data[input_index]=ADCH;
// Select next ADC input
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
input_index=0;
ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index;
// Прерывание для стабилизации АЦП и ноги AREF
delay_us(10);
// Начало преобразования АЦП
ADCSRA|=0x40;
}
void main(void)
{
PORTD.0=0x00; //Инициализация кнопки
DDRD.0=0xFF;
ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff);
ADCSRA=0xCC;
lcd_init(8); //Загрузка LCD
#asm("sei")
while (1)
{
if(PIND.0==1) //Если кнопка нажата, то вывод на экран текущего значения АЦП
{
lcd_gotoxy(0,0);
lcd_putchar(adc_data[0]);
}
};
}
Этот код мне нужен для даленейшего использования - преобразования, чтобы потом вывести формулу, которая будет расчитывать настоящую массу, а не результаты преобразования АЦП.
Заранее спасибо.