3-х разрядный ампервольтметр на атмега
-
charchyard
- Поставщик валерьянки для Кота
- Сообщения: 2466
- Зарегистрирован: Сб май 07, 2011 17:52:59
3-х разрядный ампервольтметр на атмега
Здравствуйте коты! я, к сожаленью, полнейший нуль в программировании. Помогите скрестить ежа и ужа. Нашёл в Сети видео вольтметра на семисегментном 3-х индикаторе
мк атмега_8 или атмега_16. предел 0...100в с точностью 0,1в... и амперметр 0...100а с точностью 0,1а. шунт 100а 75мВ. Вопрос как правильно скрестить две программы,
чтобы атмега оцифровывала поочерёдно эти переменные на входах PA0 и PA1 и выводила на два 3-х разрядных 7-индикатора ОА. программа для вольтметра и амперметра одна.
А вот как запихнуть эти две функции в одну микру?
мк атмега_8 или атмега_16. предел 0...100в с точностью 0,1в... и амперметр 0...100а с точностью 0,1а. шунт 100а 75мВ. Вопрос как правильно скрестить две программы,
чтобы атмега оцифровывала поочерёдно эти переменные на входах PA0 и PA1 и выводила на два 3-х разрядных 7-индикатора ОА. программа для вольтметра и амперметра одна.
А вот как запихнуть эти две функции в одну микру?
- Вложения
-
- voltmeter_0_100v.png
- (171.44 КБ) 538 скачиваний
-
- ampermeter_0_100a.png
- (181.51 КБ) 493 скачивания
-
- av_meter.zip
- (45.77 КБ) 443 скачивания
душа человеческая темна и с легкостью обращается ко злу
Re: 3-х разрядный ампервольтметр на атмега
Вот есть готовая проверенная схема на пике https://vrtp.ru/index.php?act=categorie ... ticle=2792 там прошивка до 99,9А есть.
- АлександрЛ
- Друг Кота
- Сообщения: 43765
- Зарегистрирован: Пн ноя 30, 2009 03:00:01
- Откуда: Нерезиновая
Re: 3-х разрядный ампервольтметр на атмега
А вот как запихнуть эти две функции в одну микру?
Вариант 1 - написать свою программу (прошивку), если умеете.
Вариант 2 - ОПЛАТИТЬ написание своей прошивки
Вариант 3 - Тщательнее искать нужную схему
Вариант 4 - купить готовый AV метр -
https://aliexpress.ru/item/1005001356302861.html
Re: 3-х разрядный ампервольтметр на атмега
5. Раз два индикатора, то ставить две атмеги и ничего никуда не запихивать (раз сам не можешь)...
- musor
- Друг Кота
- Сообщения: 39197
- Зарегистрирован: Сб сен 13, 2014 16:27:32
- Откуда: СпиртоГонск созвездия Омега
Re: 3-х разрядный ампервольтметр на атмега
5 вариант не лучший...и да я ранше тоже сам паял на 7107 сначала дип а потом QFP
щас тупа заказали мешок разных с алехи и ставлю не парясь..
123 конечно возможен но толка из любви к трудностям=садо маза...
автору пока 4 вариан такого добра наштампованано на любой вкус и цвет ка с жидами так и на LCD
щас тупа заказали мешок разных с алехи и ставлю не парясь..
123 конечно возможен но толка из любви к трудностям=садо маза...
автору пока 4 вариан такого добра наштампованано на любой вкус и цвет ка с жидами так и на LCD
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
-
charchyard
- Поставщик валерьянки для Кота
- Сообщения: 2466
- Зарегистрирован: Сб май 07, 2011 17:52:59
Re: 3-х разрядный ампервольтметр на атмега
Александр здравствуйте!
если сможете написать, то дайте знать. такие головки я покупал в Китае и они у меня есть. но не подходят.Вариант 2 - ОПЛАТИТЬ написание своей прошивки
душа человеческая темна и с легкостью обращается ко злу
- АлександрЛ
- Друг Кота
- Сообщения: 43765
- Зарегистрирован: Пн ноя 30, 2009 03:00:01
- Откуда: Нерезиновая
Re: 3-х разрядный ампервольтметр на атмега
Если бы я умел писать прошивки, то у меня проблем было бы намного меньше.. А так- приходится пользоваться тем, что кто- то написал
А чем вас китайские ампервольтметры не устраивают?
У меня тоже пара таких валяется, когда я их проверял, там амперметр, даже после попытки его настроить, врал раза в 1,5.. Но как- бы, проблемы с их использованием нет..
А чем вас китайские ампервольтметры не устраивают?
У меня тоже пара таких валяется, когда я их проверял, там амперметр, даже после попытки его настроить, врал раза в 1,5.. Но как- бы, проблемы с их использованием нет..

Re: 3-х разрядный ампервольтметр на атмега
На AREF лучше опорник на TL431.
Естественно, программа в живую не проверялась.
Естественно, программа в живую не проверялась.
Спойлер
Код: Выделить всё
#define F_CPU 1000000uL // частота тактирования мк
// ATmega16
#include <avr/io.h>
#include <avr/interrupt.h> // библиотека прерываний включена коды символов для индикатора
#include <string.h>
// 0 1 2 3 4 5 6 7 8 9 нет
uint8_t code_numbers_indicator[11] = { 40, 235, 49, 161, 226, 164, 36, 233, 32, 160, 255 };
// кол-во каналов
#define nChannels 2
// доп.разрядов на измерение каждого канала
#define nExtraBit 3
// кол-во измерений каждого канала
#define nMeasPerCh (1 << nExtraBit)
// массив с результатами работы АЦП по каналам
volatile uint16_t auRawADC[nChannels];
// флаг окончания цикла по каналам
volatile uint8_t bADCcomplete;
ISR(ADC_vect)
{
static uint8_t nMeasure = 0;
// номер текущего канала АЦП
uint8_t nNowConv = ADMUX & 0b111;
// получаем значение из регистра данных
auRawADC[nNowConv] += ADCW;
if(++nMeasure < nMeasPerCh) {
// очередной запуск измерения текущего канала
ADCSRA |= 1 << ADSC;
} else {
// обнуляем счетчик кол-ва измерений
nMeasure = 0;
// усредняем значение
auRawADC[nNowConv] += (1 << (nExtraBit - 1));
auRawADC[nNowConv] >>=nExtraBit;
// сброс номера канала
ADMUX &= 0b11100000;
// если не все каналы оцифрованы
if(++nNowConv < nChannels) {
ADMUX |= nNowConv; // следующий канал АЦП
ADCSRA |= 1 << ADSC;
} else {
// цикл оцифровки каналов окончен
bADCcomplete = 1;
}
}
}
#define NumDigits 6
typedef struct {
// подключение общего анода индикатора
volatile uint8_t * ddr;
volatile uint8_t * port;
uint8_t pin;
// сегменты
uint8_t seg;
} typDigit;
// 2 индикатора 6 цифр по-сегментно
typDigit aDisp[NumDigits] = {
{&DDRD, &PORTD, 7, 10},
{&DDRC, &PORTC, 0, 0},
{&DDRC, &PORTC, 1, 0},
{&DDRC, &PORTC, 2, 10},
{&DDRC, &PORTC, 3, 0},
{&DDRC, &PORTC, 4, 0}
};
void dataProcessing ( void )
{
// значения
aDisp[0].seg = auRawADC[0] / 100;
aDisp[1].seg = auRawADC[0] % 100;
aDisp[2].seg = aDisp[1].seg % 10;
aDisp[1].seg /= 10;
aDisp[3].seg = auRawADC[1] / 100;
aDisp[4].seg = auRawADC[1] % 100;
aDisp[5].seg = aDisp[4].seg % 10;
aDisp[4].seg /= 10;
// преобразуем числовые значения в набор сегментов
for(uint8_t i = 0; i < NumDigits; ++i)
aDisp[i].seg = code_numbers_indicator[aDisp[i].seg];
// десятичная точка
aDisp[1].seg &= ~(1<<5);
aDisp[4].seg &= ~(1<<5);
}
volatile uint8_t nShowDigit;
ISR (TIMER0_COMP_vect) // прерывание по совпадению таймера T0 работа с разрядами индикатора
{
// отключить общий анод предыдущего индикатора
*aDisp[nShowDigit].port |= (1 << aDisp[nShowDigit].pin);
// следующая цифра
if(++nShowDigit >= NumDigits)
nShowDigit = 0;
// выставляем сегменты
PORTB = aDisp[nShowDigit].seg;
// включаем общий анод
*aDisp[nShowDigit].port &= ~(1 << aDisp[nShowDigit].pin);
}
void Setup(void)
{
// таймер смены отборажения цифр
// Каждая цифра отображается T = 64*(1+OCR0)/F_CPU = 64*(1+24)/1000000=1.6мсек
OCR0=24; // число в регистре сравнения COMP
TCCR0=0b00001011; // преддделитель /64; сброс по совпадению чисел в регистрах TCNT0 & OCR0
TIMSK|=(1<<1); // вектор прерывания сработает по совпадению
// сегменты индикаторов
PORTB = 255; // выставляем порт PB в единичное состояние
DDRB = 255; // выставляем порт PB на вывод
// пины общих анодов на вывод
for(uint8_t i = 0; i < NumDigits; ++i)
*aDisp[i].ddr |= (1 << aDisp[i].pin);
// АЦП
ADMUX |=(0<<REFS0)|(0<<REFS1)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0); // опорное Vref=+AREF(refs0/refs1); входной канал PA0(mux0...mux4)
ADCSRA|=(1<<ADEN)|(1<<ADIE)|(1<<ADIF)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); // вкл ацп (aden); разрешение прерывания (adie); предделитель adc /128 (adps0...adps2)
DDRA &= ~((1<<1)|(1<<0)); // настраиваем 0 и 1 биты порт А на ввод (вход ацп)
}
int main (void)
{
Setup();
// обнуляем массив значений каналов
memset((void*)auRawADC, 0, sizeof(auRawADC));
// флаг окончания цикла оцифровки каналов
bADCcomplete = 0;
// номер цифры для отображения
nShowDigit = 0;
sei(); // разрешаем прерывания
// запуск АЦП
ADCSRA |= 1 << ADSC;
while(1) {
if(nShowDigit == NumDigits - 1 && bADCcomplete) {
dataProcessing();
memset((void*)auRawADC, 0, sizeof(auRawADC));
bADCcomplete = 0;
// запуск АЦП
ADCSRA |= 1 << ADSC;
}
}
}
-
charchyard
- Поставщик валерьянки для Кота
- Сообщения: 2466
- Зарегистрирован: Сб май 07, 2011 17:52:59
Re: 3-х разрядный ампервольтметр на атмега
а там опорное +5в0 предполагается? а чем опорное питание с 7805 не нравиться?душа человеческая темна и с легкостью обращается ко злу
-
charchyard
- Поставщик валерьянки для Кота
- Сообщения: 2466
- Зарегистрирован: Сб май 07, 2011 17:52:59
Re: 3-х разрядный ампервольтметр на атмега
не компилирует код атмелстудия... ошибки какие-то... я такое починить не смогу

- Вложения
-
- av_meter.rar
- (9.11 КБ) 359 скачиваний
душа человеческая темна и с легкостью обращается ко злу
Re: 3-х разрядный ампервольтметр на атмега
Про атмел-студию ничего не могу сказать, т.к. не пользуюсь ей. Может быть, местные обитатели подскажут, как в ней собрать.
Я в командной строке make-ом собираю, avr-gcc компилятор.
Приложил собранный проект.
Я в командной строке make-ом собираю, avr-gcc компилятор.
Приложил собранный проект.
- Serzh2000
- Опытный кот
- Сообщения: 867
- Зарегистрирован: Пт фев 27, 2015 12:00:53
- Откуда: Рязанская область
Re: 3-х разрядный ампервольтметр на атмега
charchyard писал(а):не компилирует код атмелстудия... ошибки какие-то... я такое починить не смогу![]()
скопировал
Спойлер
#define F_CPU 1000000uL // частота тактирования мк// ATmega16
#include <avr/io.h>
#include <avr/interrupt.h> // библиотека прерываний включена коды символов для индикатора
#include <string.h>
// 0 1 2 3 4 5 6 7 8 9 нет
uint8_t code_numbers_indicator[11] = { 40, 235, 49, 161, 226, 164, 36, 233, 32, 160, 255 };
// кол-во каналов
#define nChannels 2
// доп.разрядов на измерение каждого канала
#define nExtraBit 3
// кол-во измерений каждого канала
#define nMeasPerCh (1 << nExtraBit)
// массив с результатами работы АЦП по каналам
volatile uint16_t auRawADC[nChannels];
// флаг окончания цикла по каналам
volatile uint8_t bADCcomplete;
ISR(ADC_vect)
{
static uint8_t nMeasure = 0;
// номер текущего канала АЦП
uint8_t nNowConv = ADMUX & 0b111;
// получаем значение из регистра данных
auRawADC[nNowConv] += ADCW;
if(++nMeasure < nMeasPerCh) {
// очередной запуск измерения текущего канала
ADCSRA |= 1 << ADSC;
} else {
// обнуляем счетчик кол-ва измерений
nMeasure = 0;
// усредняем значение
auRawADC[nNowConv] += (1 << (nExtraBit - 1));
auRawADC[nNowConv] >>=nExtraBit;
// сброс номера канала
ADMUX &= 0b11100000;
// если не все каналы оцифрованы
if(++nNowConv < nChannels) {
ADMUX |= nNowConv; // следующий канал АЦП
ADCSRA |= 1 << ADSC;
} else {
// цикл оцифровки каналов окончен
bADCcomplete = 1;
}
}
}
#define NumDigits 6
typedef struct {
// подключение общего анода индикатора
volatile uint8_t * ddr;
volatile uint8_t * port;
uint8_t pin;
// сегменты
uint8_t seg;
} typDigit;
// 2 индикатора 6 цифр по-сегментно
typDigit aDisp[NumDigits] = {
{&DDRD, &PORTD, 7, 10},
{&DDRC, &PORTC, 0, 0},
{&DDRC, &PORTC, 1, 0},
{&DDRC, &PORTC, 2, 10},
{&DDRC, &PORTC, 3, 0},
{&DDRC, &PORTC, 4, 0}
};
void dataProcessing ( void )
{
// значения
aDisp[0].seg = auRawADC[0] / 100;
aDisp[1].seg = auRawADC[0] % 100;
aDisp[2].seg = aDisp[1].seg % 10;
aDisp[1].seg /= 10;
aDisp[3].seg = auRawADC[1] / 100;
aDisp[4].seg = auRawADC[1] % 100;
aDisp[5].seg = aDisp[4].seg % 10;
aDisp[4].seg /= 10;
// преобразуем числовые значения в набор сегментов
for(uint8_t i = 0; i < NumDigits; ++i)
aDisp[i].seg = code_numbers_indicator[aDisp[i].seg];
// десятичная точка
aDisp[1].seg &= ~(1<<5);
aDisp[4].seg &= ~(1<<5);
}
volatile uint8_t nShowDigit;
ISR (TIMER0_COMP_vect) // прерывание по совпадению таймера T0 работа с разрядами индикатора
{
// отключить общий анод предыдущего индикатора
*aDisp[nShowDigit].port |= (1 << aDisp[nShowDigit].pin);
// следующая цифра
if(++nShowDigit >= NumDigits)
nShowDigit = 0;
// выставляем сегменты
PORTB = aDisp[nShowDigit].seg;
// включаем общий анод
*aDisp[nShowDigit].port &= ~(1 << aDisp[nShowDigit].pin);
}
void Setup(void)
{
// таймер смены отборажения цифр
// Каждая цифра отображается T = 64*(1+OCR0)/F_CPU = 64*(1+24)/1000000=1.6мсек
OCR0=24; // число в регистре сравнения COMP
TCCR0=0b00001011; // преддделитель /64; сброс по совпадению чисел в регистрах TCNT0 & OCR0
TIMSK|=(1<<1); // вектор прерывания сработает по совпадению
// сегменты индикаторов
PORTB = 255; // выставляем порт PB в единичное состояние
DDRB = 255; // выставляем порт PB на вывод
// пины общих анодов на вывод
for(uint8_t i = 0; i < NumDigits; ++i)
*aDisp[i].ddr |= (1 << aDisp[i].pin);
// АЦП
ADMUX |=(0<<REFS0)|(0<<REFS1)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0); // опорное Vref=+AREF(refs0/refs1); входной канал PA0(mux0...mux4)
ADCSRA|=(1<<ADEN)|(1<<ADIE)|(1<<ADIF)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); // вкл ацп (aden); разрешение прерывания (adie); предделитель adc /128 (adps0...adps2)
DDRA &= ~((1<<1)|(1<<0)); // настраиваем 0 и 1 биты порт А на ввод (вход ацп)
}
int main (void)
{
Setup();
// обнуляем массив значений каналов
memset((void*)auRawADC, 0, sizeof(auRawADC));
// флаг окончания цикла оцифровки каналов
bADCcomplete = 0;
// номер цифры для отображения
nShowDigit = 0;
sei(); // разрешаем прерывания
// запуск АЦП
ADCSRA |= 1 << ADSC;
while(1) {
if(nShowDigit == NumDigits - 1 && bADCcomplete) {
dataProcessing();
memset((void*)auRawADC, 0, sizeof(auRawADC));
bADCcomplete = 0;
// запуск АЦП
ADCSRA |= 1 << ADSC;
}
}
}
вставил Atmel Studio 7.0 все, ничего там собирать не надо.
-
charchyard
- Поставщик валерьянки для Кота
- Сообщения: 2466
- Зарегистрирован: Сб май 07, 2011 17:52:59
Re: 3-х разрядный ампервольтметр на атмега
да код рабочий
теперь осталось понять куда в шпротеусе подключать вход делителя вольтметра и выход усилка амперметра и как индикаторы к меге подключать
ну вот же тупой бл 
теперь осталось понять куда в шпротеусе подключать вход делителя вольтметра и выход усилка амперметра и как индикаторы к меге подключать душа человеческая темна и с легкостью обращается ко злу
Re: 3-х разрядный ампервольтметр на атмега
Вход делителя вольтметра и выход усилка амперметра - PA0, PA1.
Катоды (сегменты) всех индикаторов - как и в оригинальной схеме, через токоограничительные резисторы к порту PB.
Общие аноды 1-го 3-х разрядного индикатора - как в оригинальной схеме, через транзисторные ключи, старший PD7, средний PC0, младший PC1.
Общие аноды 2-го 3-х разрядного индикатора - так-же через транзисторные ключи, старший PС2, средний PC3, младший PC4.
Подключение сегментов жестко задано - порт PB с привязкой каждого сегмента к конкретному пину.
Подключение общих анодов задано массивом
Катоды (сегменты) всех индикаторов - как и в оригинальной схеме, через токоограничительные резисторы к порту PB.
Общие аноды 1-го 3-х разрядного индикатора - как в оригинальной схеме, через транзисторные ключи, старший PD7, средний PC0, младший PC1.
Общие аноды 2-го 3-х разрядного индикатора - так-же через транзисторные ключи, старший PС2, средний PC3, младший PC4.
Подключение сегментов жестко задано - порт PB с привязкой каждого сегмента к конкретному пину.
Код: Выделить всё
uint8_t code_numbers_indicator[11] ={40, 235, 49, 161, 226, 164, 36, 233, 32, 160, 255 };Подключение общих анодов задано массивом
Код: Выделить всё
// 2 индикатора 6 цифр по-сегментно
typDigit aDisp[NumDigits] = {
{&DDRD, &PORTD, 7, 10}, // общий анод старшего разряда 1-го индикатора
{&DDRC, &PORTC, 0, 0}, // общий анод среднего разряда 1-го индикатора
{&DDRC, &PORTC, 1, 0}, // общий анод младшего разряда 1-го индикатора
{&DDRC, &PORTC, 2, 10}, // общий анод старшего разряда 2-го индикатора
{&DDRC, &PORTC, 3, 0}, // общий анод среднего разряда 2-го индикатора
{&DDRC, &PORTC, 4, 0} // общий анод младшего разряда 2-го индикатора
};
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: 3-х разрядный ампервольтметр на атмега
Подключение сегментов жестко задано - порт PB с привязкой каждого сегмента к конкретному пину.
Меня както ARV научил как это писать правильней...Код: Выделить всё
uint8_t code_numbers_indicator[11] ={40, 235, 49, 161, 226, 164, 36, 233, 32, 160, 255 };Спойлер
Код: Выделить всё
//Digits
//Описание цифр семисегментного индикатора
//соответствие сегмента и номера ноги порта
#define N_A 0
#define N_B 2
#define N_C 4
#define N_D 6
#define N_E 7
#define N_F 1
#define N_G 3
#define N_DP 5
//расстановка единиц в маске
#define _A (1<<N_A)
#define _B (1<<N_B)
#define _C (1<<N_C)
#define _D (1<<N_D)
#define _E (1<<N_E)
#define _F (1<<N_F)
#define _G (1<<N_G)
#define _DP (1<<N_DP)
//знакогенератор
#define _0 ~(_A|_B|_C|_D|_E|_F )
#define _1 ~( _B|_C )
#define _2 ~(_A|_B| _D|_E| _G)
#define _3 ~(_A|_B|_C|_D| _G)
#define _4 ~( _B|_C| _F|_G)
#define _5 ~(_A| _C|_D| _F|_G)
#define _6 ~(_A| _C|_D|_E|_F|_G)
#define _7 ~(_A|_B|_C )
#define _8 ~(_A|_B|_C|_D|_E|_F|_G)
#define _9 ~(_A|_B|_C|_D| _F|_G)
//#define _a ~(_A|_B|_C| _E|_F|_G)
//#define _b ~( _C|_D|_E|_F|_G)
//#define _c ~(_A| _D|_E|_F| )
//#define _d ~( _B|_C|_D|_E| _G)
//#define _e ~(_A| _D|_E|_F|_G)
//#define _f ~(_A| _E|_F|_G)
#define _Z ~(0 ) //выключенный разряд
#define _N ~( _G) // "-"
flash unsigned char code_numbers_indicator[]={_0,_1,_2,_3,_4,_5,_6,_7,_8,_9,_Z};(Номера твоих пинов я сюда не подставлял)
Не спорю, наверно можно ещё правильней написать, например для ОА/ОК дисплеев автоматизировать перерисовку...
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
- Рязанцев Владислав
- Мудрый кот
- Сообщения: 1781
- Зарегистрирован: Пн июн 24, 2013 23:00:42
- Откуда: Казахстан
Re: 3-х разрядный ампервольтметр на атмега
Берете ардуину, пишете 10 строк, готово)
при условии AREF =5В
при условии AREF =5В
Код: Выделить всё
Напряжение на ноге= float(map(AnalogRead(A0),0, 1023, 0,500)/100)
Вывести на индикатор какой у вас там,
все тоже самое для токаRe: 3-х разрядный ампервольтметр на атмега
Ivanoff-iv, вы, наверное, не смотрели 1-ый пост темы. Этот массив определен в приложенной к нему исходному коду программы в соответствии с приципиальной схемой. Предложенное вами решение, конечно-же, более универсальное. Что я и постарался сделать с ОА.
Но, "лишние" 44 строки текста при текущих 147 всей программы???
Рязанцев Владислав, а что готово-то?
Но, "лишние" 44 строки текста при текущих 147 всей программы???
Рязанцев Владислав, а что готово-то?
- Рязанцев Владислав
- Мудрый кот
- Сообщения: 1781
- Зарегистрирован: Пн июн 24, 2013 23:00:42
- Откуда: Казахстан
Re: 3-х разрядный ампервольтметр на атмега
а что готово-то?
А что не готово?
В среде ардуино все делается обычно подключением готовых библиотек. Можно за индикатор тот же TM1637 взять готовым модулем. Добавить библиотеку одна строка, вывести на него еще одна строка)
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: 3-х разрядный ампервольтметр на атмега
этот код не усложнит чтение кода (т.к. лежит в отдельном файле) и не утяжеляет прошивку (т.к. обсчитывается на этапе компиляции)...
Ну... если проект окончательный и обжалованию... изменению не подлежит, то и ладно...
(в конце концов - кто код пишет, тот имена переменным и придумывает
)
Ну... если проект окончательный и обжалованию... изменению не подлежит, то и ладно...
(в конце концов - кто код пишет, тот имена переменным и придумывает
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
- Serzh2000
- Опытный кот
- Сообщения: 867
- Зарегистрирован: Пт фев 27, 2015 12:00:53
- Откуда: Рязанская область
Re: 3-х разрядный ампервольтметр на атмега
charchyard киньте пожалуйста ссылку на первоисточник откуда вы взяли эти схемы и код.