Например TDA7294

Форум РадиоКот • Просмотр темы - 3-х разрядный ампервольтметр на атмега
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 11:49:15

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 73 ]  1, , ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: 3-х разрядный ампервольтметр на атмега
СообщениеДобавлено: Вс дек 20, 2020 16:31:31 
Поставщик валерьянки для Кота

Карма: 4
Рейтинг сообщений: 210
Зарегистрирован: Сб май 07, 2011 17:52:59
Сообщений: 2466
Рейтинг сообщения: 0
Здравствуйте коты! я, к сожаленью, полнейший нуль в программировании. Помогите скрестить ежа и ужа. Нашёл в Сети видео вольтметра на семисегментном 3-х индикаторе
мк атмега_8 или атмега_16. предел 0...100в с точностью 0,1в... и амперметр 0...100а с точностью 0,1а. шунт 100а 75мВ. Вопрос как правильно скрестить две программы,
чтобы атмега оцифровывала поочерёдно эти переменные на входах PA0 и PA1 и выводила на два 3-х разрядных 7-индикатора ОА. программа для вольтметра и амперметра одна.
А вот как запихнуть эти две функции в одну микру?


Вложения:
voltmeter_0_100v.png [171.44 KiB]
Скачиваний: 484
ampermeter_0_100a.png [181.51 KiB]
Скачиваний: 444
av_meter.zip [45.77 KiB]
Скачиваний: 388

_________________
душа человеческая темна и с легкостью обращается ко злу
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 3-х разрядный ампервольтметр на атмега
СообщениеДобавлено: Вс дек 20, 2020 16:56:28 
Друг Кота
Аватар пользователя

Карма: 182
Рейтинг сообщений: 8124
Зарегистрирован: Пт фев 04, 2011 17:57:51
Сообщений: 18533
Откуда: Рыбинск
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
Вот есть готовая проверенная схема на пике https://vrtp.ru/index.php?act=categorie ... ticle=2792 там прошивка до 99,9А есть.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 3-х разрядный ампервольтметр на атмега
СообщениеДобавлено: Вс дек 20, 2020 18:52:08 
Друг Кота
Аватар пользователя

Карма: 187
Рейтинг сообщений: 8255
Зарегистрирован: Пн ноя 30, 2009 03:00:01
Сообщений: 39530
Откуда: Нерезиновая
Рейтинг сообщения: 0
А вот как запихнуть эти две функции в одну микру?

Вариант 1 - написать свою программу (прошивку), если умеете.
Вариант 2 - ОПЛАТИТЬ написание своей прошивки
Вариант 3 - Тщательнее искать нужную схему
Вариант 4 - купить готовый AV метр -
https://aliexpress.ru/item/1005001356302861.html


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: 3-х разрядный ампервольтметр на атмега
СообщениеДобавлено: Вс дек 20, 2020 18:58:50 
Собутыльник Кота

Карма: 14
Рейтинг сообщений: 472
Зарегистрирован: Вс фев 02, 2020 09:12:37
Сообщений: 2804
Рейтинг сообщения: 3
5. Раз два индикатора, то ставить две атмеги и ничего никуда не запихивать (раз сам не можешь)...


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: 3-х разрядный ампервольтметр на атмега
СообщениеДобавлено: Вс дек 20, 2020 20:19:05 
Друг Кота
Аватар пользователя

Карма: 123
Рейтинг сообщений: 7955
Зарегистрирован: Сб сен 13, 2014 16:27:32
Сообщений: 39199
Откуда: СпиртоГонск созвездия Омега
Рейтинг сообщения: 0
5 вариант не лучший...и да я ранше тоже сам паял на 7107 сначала дип а потом QFP
щас тупа заказали мешок разных с алехи и ставлю не парясь..
123 конечно возможен но толка из любви к трудностям=садо маза...
автору пока 4 вариан такого добра наштампованано на любой вкус и цвет ка с жидами так и на LCD

_________________
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: 3-х разрядный ампервольтметр на атмега
СообщениеДобавлено: Вс дек 20, 2020 22:39:30 
Поставщик валерьянки для Кота

Карма: 4
Рейтинг сообщений: 210
Зарегистрирован: Сб май 07, 2011 17:52:59
Сообщений: 2466
Рейтинг сообщения: 0
Александр здравствуйте!
Цитата:
Вариант 2 - ОПЛАТИТЬ написание своей прошивки
если сможете написать, то дайте знать. такие головки я покупал в Китае и они у меня есть. но не подходят.

_________________
душа человеческая темна и с легкостью обращается ко злу


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 3-х разрядный ампервольтметр на атмега
СообщениеДобавлено: Вс дек 20, 2020 22:55:11 
Друг Кота
Аватар пользователя

Карма: 187
Рейтинг сообщений: 8255
Зарегистрирован: Пн ноя 30, 2009 03:00:01
Сообщений: 39530
Откуда: Нерезиновая
Рейтинг сообщения: 0
Если бы я умел писать прошивки, то у меня проблем было бы намного меньше.. А так- приходится пользоваться тем, что кто- то написал :facepalm:

А чем вас китайские ампервольтметры не устраивают?
У меня тоже пара таких валяется, когда я их проверял, там амперметр, даже после попытки его настроить, врал раза в 1,5.. Но как- бы, проблемы с их использованием нет.. :dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 3-х разрядный ампервольтметр на атмега
СообщениеДобавлено: Пн дек 21, 2020 20:15:24 
Опытный кот
Аватар пользователя

Карма: -2
Рейтинг сообщений: -23
Зарегистрирован: Сб окт 22, 2016 17:33:32
Сообщений: 760
Откуда: кг
Рейтинг сообщения: 4
На 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;
    }
  }         
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 3-х разрядный ампервольтметр на атмега
СообщениеДобавлено: Ср дек 23, 2020 16:58:19 
Поставщик валерьянки для Кота

Карма: 4
Рейтинг сообщений: 210
Зарегистрирован: Сб май 07, 2011 17:52:59
Сообщений: 2466
Рейтинг сообщения: 0
:o вах... так щаз мы её и проверим :solder: а там опорное +5в0 предполагается? а чем опорное питание с 7805 не нравиться?

_________________
душа человеческая темна и с легкостью обращается ко злу


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 3-х разрядный ампервольтметр на атмега
СообщениеДобавлено: Сб дек 26, 2020 16:18:48 
Поставщик валерьянки для Кота

Карма: 4
Рейтинг сообщений: 210
Зарегистрирован: Сб май 07, 2011 17:52:59
Сообщений: 2466
Рейтинг сообщения: 0
не компилирует код атмелстудия... ошибки какие-то... я такое починить не смогу :o :shock:


Вложения:
av_meter.rar [9.11 KiB]
Скачиваний: 302

_________________
душа человеческая темна и с легкостью обращается ко злу
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 3-х разрядный ампервольтметр на атмега
СообщениеДобавлено: Сб дек 26, 2020 19:24:54 
Опытный кот
Аватар пользователя

Карма: -2
Рейтинг сообщений: -23
Зарегистрирован: Сб окт 22, 2016 17:33:32
Сообщений: 760
Откуда: кг
Рейтинг сообщения: 0
Про атмел-студию ничего не могу сказать, т.к. не пользуюсь ей. Может быть, местные обитатели подскажут, как в ней собрать.
Я в командной строке make-ом собираю, avr-gcc компилятор.
Приложил собранный проект.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 3-х разрядный ампервольтметр на атмега
СообщениеДобавлено: Вс дек 27, 2020 09:44:57 
Опытный кот
Аватар пользователя

Карма: 10
Рейтинг сообщений: 77
Зарегистрирован: Пт фев 27, 2015 12:00:53
Сообщений: 781
Откуда: Рязанская область
Рейтинг сообщения: 0
8)
charchyard писал(а):
не компилирует код атмелстудия... ошибки какие-то... я такое починить не смогу :o :shock:
Изображение

скопировал
Спойлер#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 все, ничего там собирать не надо.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 3-х разрядный ампервольтметр на атмега
СообщениеДобавлено: Пн дек 28, 2020 13:00:43 
Поставщик валерьянки для Кота

Карма: 4
Рейтинг сообщений: 210
Зарегистрирован: Сб май 07, 2011 17:52:59
Сообщений: 2466
Рейтинг сообщения: 0
да код рабочий :beer: теперь осталось понять куда в шпротеусе подключать вход делителя вольтметра и выход усилка амперметра и как индикаторы к меге подключать :shock: ну вот же тупой бл :?

_________________
душа человеческая темна и с легкостью обращается ко злу


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 3-х разрядный ампервольтметр на атмега
СообщениеДобавлено: Пн дек 28, 2020 19:05:33 
Опытный кот
Аватар пользователя

Карма: -2
Рейтинг сообщений: -23
Зарегистрирован: Сб окт 22, 2016 17:33:32
Сообщений: 760
Откуда: кг
Рейтинг сообщения: 0
Вход делителя вольтметра и выход усилка амперметра - PA0, PA1.
Катоды (сегменты) всех индикаторов - как и в оригинальной схеме, через токоограничительные резисторы к порту 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-го индикатора
};


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 3-х разрядный ампервольтметр на атмега
СообщениеДобавлено: Вт дек 29, 2020 07:11:21 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Подключение сегментов жестко задано - порт PB с привязкой каждого сегмента к конкретному пину.
Код:
uint8_t code_numbers_indicator[11] ={40, 235, 49, 161, 226, 164, 36, 233, 32, 160, 255 };
Меня както ARV научил как это писать правильней...
Спойлер
Код:
//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};
Всё это можно вынести в отдельный файл и приинклюдить.
(Номера твоих пинов я сюда не подставлял)
Чтобы изменить порядок ног сегментов теперь достаточно переписать их номера в первых 8ми строках и весь знакогенератор будет пересчитан автоматически.
Не спорю, наверно можно ещё правильней написать, например для ОА/ОК дисплеев автоматизировать перерисовку...

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 3-х разрядный ампервольтметр на атмега
СообщениеДобавлено: Вт дек 29, 2020 09:46:47 
Мудрый кот
Аватар пользователя

Карма: 27
Рейтинг сообщений: 77
Зарегистрирован: Пн июн 24, 2013 23:00:42
Сообщений: 1781
Откуда: Казахстан
Рейтинг сообщения: 0
Берете ардуину, пишете 10 строк, готово)
при условии AREF =5В
Код:
Напряжение на ноге= float(map(AnalogRead(A0),0, 1023, 0,500)/100)
Вывести на индикатор какой у вас там,
все тоже самое для тока

_________________
Изображение
Ваши хотелки за ваши деньги http://Devs.company


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 3-х разрядный ампервольтметр на атмега
СообщениеДобавлено: Вт дек 29, 2020 11:16:55 
Опытный кот
Аватар пользователя

Карма: -2
Рейтинг сообщений: -23
Зарегистрирован: Сб окт 22, 2016 17:33:32
Сообщений: 760
Откуда: кг
Рейтинг сообщения: 0
Ivanoff-iv, вы, наверное, не смотрели 1-ый пост темы. Этот массив определен в приложенной к нему исходному коду программы в соответствии с приципиальной схемой. Предложенное вами решение, конечно-же, более универсальное. Что я и постарался сделать с ОА.
Но, "лишние" 44 строки текста при текущих 147 всей программы???

Рязанцев Владислав, а что готово-то?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 3-х разрядный ампервольтметр на атмега
СообщениеДобавлено: Вт дек 29, 2020 12:33:20 
Мудрый кот
Аватар пользователя

Карма: 27
Рейтинг сообщений: 77
Зарегистрирован: Пн июн 24, 2013 23:00:42
Сообщений: 1781
Откуда: Казахстан
Рейтинг сообщения: 0
а что готово-то?

А что не готово? :)))
В среде ардуино все делается обычно подключением готовых библиотек. Можно за индикатор тот же TM1637 взять готовым модулем. Добавить библиотеку одна строка, вывести на него еще одна строка)

_________________
Изображение
Ваши хотелки за ваши деньги http://Devs.company


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 3-х разрядный ампервольтметр на атмега
СообщениеДобавлено: Вт дек 29, 2020 13:19:01 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
этот код не усложнит чтение кода (т.к. лежит в отдельном файле) и не утяжеляет прошивку (т.к. обсчитывается на этапе компиляции)...
Ну... если проект окончательный и обжалованию... изменению не подлежит, то и ладно...
(в конце концов - кто код пишет, тот имена переменным и придумывает :))) :))) :))) )

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 3-х разрядный ампервольтметр на атмега
СообщениеДобавлено: Вт дек 29, 2020 13:21:09 
Опытный кот
Аватар пользователя

Карма: 10
Рейтинг сообщений: 77
Зарегистрирован: Пт фев 27, 2015 12:00:53
Сообщений: 781
Откуда: Рязанская область
Рейтинг сообщения: 0
charchyard киньте пожалуйста ссылку на первоисточник откуда вы взяли эти схемы и код.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 73 ]  1, , ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: >TEHb< и гости: 30


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y