3-х разрядный ампервольтметр на атмега
- musor
- Друг Кота
- Сообщения: 39197
- Зарегистрирован: Сб сен 13, 2014 16:27:32
- Откуда: СпиртоГонск созвездия Омега
Re: 3-х разрядный ампервольтметр на атмега
господа вы правда верите что какаято квадрато мелевичная херня с нощками даже без ИОН???? хернясумет мерить достоверно 230/400VAC в сети? да+ и токовского в придачу???
НЕ ВЕРЮ!
НЕ ВЕРЮ!
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
- Рязанцев Владислав
- Мудрый кот
- Сообщения: 1781
- Зарегистрирован: Пн июн 24, 2013 23:00:42
- Откуда: Казахстан
Re: 3-х разрядный ампервольтметр на атмега
[uquote="musor",url="/forum/viewtopic.php?p=3950387#p3950387"]квадрато мелевичная херня с нощками даже без ИОН????[/uquote]
Это какая конкретно херня?
Без ИОН никто ничего никак не измерит точно)
Это какая конкретно херня?
Без ИОН никто ничего никак не измерит точно)
-
charchyard
- Поставщик валерьянки для Кота
- Сообщения: 2466
- Зарегистрирован: Сб май 07, 2011 17:52:59
Re: 3-х разрядный ампервольтметр на атмега
оригинал
опорное напряжение +5v0
ничего не работает... и динамика кривоватая, маленькое времечко экспозиции разряда... в оригинале было по 16...20мс... смотрю в сторону max7219... но там я вообче никаких примеров не нашёл пока
Спойлер
опорное напряжение +5v0
ничего не работает... и динамика кривоватая, маленькое времечко экспозиции разряда... в оригинале было по 16...20мс... смотрю в сторону max7219... но там я вообче никаких примеров не нашёл пока
душа человеческая темна и с легкостью обращается ко злу
Re: 3-х разрядный ампервольтметр на атмега
Ну, у вас ведь по току инвертирующий усилитель.
По напряжению зачем-то RV3, так-же в странном положении выставлен.
Вот и показывает 0.
И, да, я с протеусом не знаком. Но, в 1-м посте темы индикаторные вольтметры показывали какие-то значения. А здесь не показывают.
[uquote="charchyard",url="/forum/viewtopic.php?p=3950515#p3950515"]и динамика кривоватая, маленькое времечко экспозиции разряда[/uquote]
В комментариях время экспозиции каждого разряда расписано.
По напряжению зачем-то RV3, так-же в странном положении выставлен.
Вот и показывает 0.
И, да, я с протеусом не знаком. Но, в 1-м посте темы индикаторные вольтметры показывали какие-то значения. А здесь не показывают.
[uquote="charchyard",url="/forum/viewtopic.php?p=3950515#p3950515"]и динамика кривоватая, маленькое времечко экспозиции разряда[/uquote]
В комментариях время экспозиции каждого разряда расписано.
-
charchyard
- Поставщик валерьянки для Кота
- Сообщения: 2466
- Зарегистрирован: Сб май 07, 2011 17:52:59
Re: 3-х разрядный ампервольтметр на атмега
да схема в протеусе полнстью работала, движки обоих в разных положениях были... ничего не показывало, индикация по 20мс была...
душа человеческая темна и с легкостью обращается ко злу
Re: 3-х разрядный ампервольтметр на атмега
В качестве пятничной развлекухи программа вольтамперметра с разверткой индикации от тактирования АЦП без использования таймера.
-встроенная опора 2,56V
-каждый параметр оцифровывается 256 раз с суммированием в 3-байтном счетчике; округленный результат в 2-х старших байтах счетчика
-далее конвертация для вывода на индикацию с гашением незначащих нулей
В железе не проверялось. Возможно, где-то накосячил.
-встроенная опора 2,56V
-каждый параметр оцифровывается 256 раз с суммированием в 3-байтном счетчике; округленный результат в 2-х старших байтах счетчика
-далее конвертация для вывода на индикацию с гашением незначащих нулей
В железе не проверялось. Возможно, где-то накосячил.

- Вложения
-
- AV_meter.zip
- (2.28 КБ) 258 скачиваний
-
charchyard
- Поставщик валерьянки для Кота
- Сообщения: 2466
- Зарегистрирован: Сб май 07, 2011 17:52:59
Re: 3-х разрядный ампервольтметр на атмега
пал ниц перед талантливым нжинеером и он написал заветный код
#include <avr/io.h> //подключение библиотеки "ввод/вывод" мк
#include <util/delay.h> //подключение библиотеки "пауза" мк
#include <avr/interrupt.h> //подключение библиотеки "прерывание" мк
#define CLK_0 PORTC &= ~(1<<PORTC0) //отправить 0 на вывод Clk микросхемы MAX7219
#define CLK_1 PORTC |=1<<PORTC0 //отправить 1 на вывод Clk микросхемы MAX7219
#define CS_0 PORTC &= ~(1<<PORTC1) //отправить 0 на вывод Cs микросхемы MAX7219
#define CS_1 PORTC |=1<<PORTC1 //отправить 1 на вывод Cs микросхемы MAX7219
#define DIN_0 PORTC &= ~(1<<PORTC2) //отправить 0 на вывод Din микросхемы MAX7219
#define DIN_1 PORTC |= 1<<PORTC2 //отправить 1 на вывод Din микросхемы MAX7219
unsigned int Cifra[8]; //массив беззнаковых двухбайтных переменных Cifra из 8 переменных
unsigned char Data_In[8]; //массив беззнаковых обнобайтных переменных Data_In из 8 переменных
unsigned int Displey1_ADC; //беззнаковая двухбайтная переменная Displey1_ADC
unsigned int Displey2_ADC; //беззнаковая двухбайтная переменная Displey2_ADC
unsigned char X; //беззнаковая однобайтная переменная X (значение регистра ацп с результатом оцифровки напряжения)
unsigned char I; //беззнаковая однобайтная переменная I (значение регистра ацп с результатом оцифровки тока)
//********************* Передача данных в Max7219 *****************
void Write_MAX7219(unsigned char Adres_Reg,unsigned char Data_In_Write)
{
unsigned char Adres_Reg_Copy;
Data_In[Adres_Reg] = Data_In_Write;
Adres_Reg_Copy = Adres_Reg; //создадим копию значения переменной Adres_Reg
CS_0; //отправим «0» на вывод CS микросхемы MAX7219, чтобы начать процесс передачи адреса и данных
asm("nop"); //пауза в 1 такт
for(I=0;I<8;I++) //цикл от 0 до 7 с шагом 1, для побитной отправки байта адреса в микросхему MAX7219
{
if((Adres_Reg & 0x80)==0x80) //если 7 бит переменной Adres_reg=1
{
DIN_1; //отправим 1 на вывод Din микросхемы MAX7219
}
else //если 7 бит переменной Adres_reg=0
{
DIN_0; //отправим 0 на вывод Din микросхемы MAX7219
}
//создадим тактовый импульс на выводе CLK микросхемы MAX7219
asm("nop"); //пауза в 1 такт
CLK_1; //отправим 1 на вывод Clk микросхемы MAX7219
asm("nop"); //пауза в 1 такт
CLK_0; //отправим 0 на вывод Clk микросхемы MAX7219
Adres_Reg <<= 1; //сдвинем значение переменной Adres_reg на 1 бит влево
} //выйдем из цикла когда i станет равной 7, т.е. когда отправка байта адреса в микросхему MAX7219 будет окончена
for(I=0;I<8;I++) //цикл от 0 до 7 с шагом 1, для побитной отправки байта данных в микросхему MAX7219
{
if((Data_In[Adres_Reg_Copy] & 0x80)==0x80) //если 7 бит переменной Data_in=1
{
DIN_1; //отправим 1 на вывод Din микросхемы MAX7219
}
else //если 7 бит переменной Data_in=0
{
DIN_0; //отправим 0 на вывод Din микросхемы MAX7219
}
//создадим тактовый импульс на выводе CLK микросхемы MAX7219
asm("nop"); //пауза в 1 такт
CLK_1; //отправим 1 на вывод Clk микросхемы MAX7219
asm("nop"); //пауза в 1 такт
CLK_0; //отправим 0 на вывод Clk микросхемы MAX7219
Data_In[Adres_Reg_Copy] <<= 1; //сдвинем значение переменной Data_in на 1 бит влево
}
//выйдем из цикла когда i станет равной 7, т.е. когда отправка байта данных в микросхему MAX7219 будет окончена
CS_1; //отправим «1» на вывод CS микросхемы MAX7219, чтобы завершить процесс передачи адреса и данных
}
//********************* Инициализация MAX7219 *****************
void Inicializat_MAX7219()
{
Write_MAX7219(0x09,127); //включаем режим BCD code B, для 7 разрядов
Write_MAX7219(0x0A,10); //яркость свечения сегментов 10 (от 0 до 15)
Write_MAX7219(0x0B,7); //число используемых разрядов (7 разрядов)
Write_MAX7219(0x0C,1); //отключаем режим энергосбережения (Shutdown)
}
//******** Функция вывода значений на 7 сегм.индикатор №1 ******
void Out_Displey_1(unsigned int Displey_Ust)
{
Cifra[7]=Displey_Ust/100; //сотни
Cifra[6]=Displey_Ust%100/10; //десятки
Cifra[6]=Cifra[6]|128; //вкл децимальную точку в разряде Cifra_6
Cifra[5]=Displey_Ust%10; //единицы
for(X=5;X<8;X++)
{
Data_In[X] = Cifra[X];
Write_MAX7219(X,Data_In[X]);
}
}
//******** Функция вывода значений на 7 сегм.индикатор №2 ******
void Out_Displey_2(unsigned int Displey_Ust)
{
Cifra[4]=15; //Отключим не используемую цифру старшего разряда индикатора №2
Cifra[3]=Displey_Ust/100; //сотни
Cifra[2]=Displey_Ust%100/10; //десятки
Cifra[2]=Cifra[2]|128; //вкл децимальную точку в разряде Cifra_2
Cifra[1]=Displey_Ust%10; //единицы
for(X=1;X<5;X++)
{
Data_In[X] = Cifra[X];
Write_MAX7219(X,Data_In[X]);
}
}
//*************************** Функция измерения напряжения на входах АЦП ***************************
unsigned long ADC_Convert (unsigned char Kanal_ADC)
{
//ADMUX = ADMUX&224|Kanal_ADC; //выберем канал АЦП (обнулим биты MUX4-MUX0 в регистре ADMUX, не изменяя при этом биты 5,6,7, после этого заменим значение битов MUX4-MUX0 на номер(код) канала)
ADMUX = ADMUX & 224; //выберем канал АЦП (сначала обнулим биты MUX4-MUX0 в регистре ADMUX, не изменяя при этом биты 5,6,7)
ADMUX = ADMUX | Kanal_ADC; //выберем канал АЦП (затем заменим значение битов MUX4-MUX0 на номер(код) канала)
ADCSRA |= (1<<ADSC); //Начинаем аналого-цифровое преобразование (для этого запишем 1 в бит ADSC регистра ADCSRA)
while((ADCSRA & (1<<ADSC))); //Ждём когда закончиться аналого-цифровое преобразование (преобразование закончится, когда бит ADSC регистра ADCSRA станет равным 0)
return (unsigned long) ADC; //Выйдем из функции и вернём (запишем) полученное значение (из регистров результата ADCL и ADCH) в переменную типа unsigned int
}
//************************** Основная функция с бесконечным циклом *******************************
int main(void)
{
DDRC = 0B00000111;
Inicializat_MAX7219(); //Инициализация MAX7219
//Инициализация АЦП
ADCSRA |= (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);//Разрешение использования АЦП, Делитель 128 = 125 кГц
ADMUX &= ~((1<<REFS0)|(1<<REFS1)); //Источник опорного напряжения Aref=5v0
//Displey1_ADC=351;
//Displey2_ADC=795;
//Out_Displey_1(Displey1_ADC);
//Out_Displey_2(Displey2_ADC);
while(1)
{
Displey1_ADC = ADC_Convert(4); //Считаем значение с 4 канала АЦП
Out_Displey_1(Displey1_ADC); //Отправим считанное значение в функцию вывода на индикатор №1
Displey2_ADC = ADC_Convert(3); //Считаем значение с 3 канала АЦП
Out_Displey_2(Displey2_ADC); //Отправим считанное значение в функцию вывода на индикатор №2
}
}
Спойлер
#define F_CPU 8000000 //тактовая частота мк#include <avr/io.h> //подключение библиотеки "ввод/вывод" мк
#include <util/delay.h> //подключение библиотеки "пауза" мк
#include <avr/interrupt.h> //подключение библиотеки "прерывание" мк
#define CLK_0 PORTC &= ~(1<<PORTC0) //отправить 0 на вывод Clk микросхемы MAX7219
#define CLK_1 PORTC |=1<<PORTC0 //отправить 1 на вывод Clk микросхемы MAX7219
#define CS_0 PORTC &= ~(1<<PORTC1) //отправить 0 на вывод Cs микросхемы MAX7219
#define CS_1 PORTC |=1<<PORTC1 //отправить 1 на вывод Cs микросхемы MAX7219
#define DIN_0 PORTC &= ~(1<<PORTC2) //отправить 0 на вывод Din микросхемы MAX7219
#define DIN_1 PORTC |= 1<<PORTC2 //отправить 1 на вывод Din микросхемы MAX7219
unsigned int Cifra[8]; //массив беззнаковых двухбайтных переменных Cifra из 8 переменных
unsigned char Data_In[8]; //массив беззнаковых обнобайтных переменных Data_In из 8 переменных
unsigned int Displey1_ADC; //беззнаковая двухбайтная переменная Displey1_ADC
unsigned int Displey2_ADC; //беззнаковая двухбайтная переменная Displey2_ADC
unsigned char X; //беззнаковая однобайтная переменная X (значение регистра ацп с результатом оцифровки напряжения)
unsigned char I; //беззнаковая однобайтная переменная I (значение регистра ацп с результатом оцифровки тока)
//********************* Передача данных в Max7219 *****************
void Write_MAX7219(unsigned char Adres_Reg,unsigned char Data_In_Write)
{
unsigned char Adres_Reg_Copy;
Data_In[Adres_Reg] = Data_In_Write;
Adres_Reg_Copy = Adres_Reg; //создадим копию значения переменной Adres_Reg
CS_0; //отправим «0» на вывод CS микросхемы MAX7219, чтобы начать процесс передачи адреса и данных
asm("nop"); //пауза в 1 такт
for(I=0;I<8;I++) //цикл от 0 до 7 с шагом 1, для побитной отправки байта адреса в микросхему MAX7219
{
if((Adres_Reg & 0x80)==0x80) //если 7 бит переменной Adres_reg=1
{
DIN_1; //отправим 1 на вывод Din микросхемы MAX7219
}
else //если 7 бит переменной Adres_reg=0
{
DIN_0; //отправим 0 на вывод Din микросхемы MAX7219
}
//создадим тактовый импульс на выводе CLK микросхемы MAX7219
asm("nop"); //пауза в 1 такт
CLK_1; //отправим 1 на вывод Clk микросхемы MAX7219
asm("nop"); //пауза в 1 такт
CLK_0; //отправим 0 на вывод Clk микросхемы MAX7219
Adres_Reg <<= 1; //сдвинем значение переменной Adres_reg на 1 бит влево
} //выйдем из цикла когда i станет равной 7, т.е. когда отправка байта адреса в микросхему MAX7219 будет окончена
for(I=0;I<8;I++) //цикл от 0 до 7 с шагом 1, для побитной отправки байта данных в микросхему MAX7219
{
if((Data_In[Adres_Reg_Copy] & 0x80)==0x80) //если 7 бит переменной Data_in=1
{
DIN_1; //отправим 1 на вывод Din микросхемы MAX7219
}
else //если 7 бит переменной Data_in=0
{
DIN_0; //отправим 0 на вывод Din микросхемы MAX7219
}
//создадим тактовый импульс на выводе CLK микросхемы MAX7219
asm("nop"); //пауза в 1 такт
CLK_1; //отправим 1 на вывод Clk микросхемы MAX7219
asm("nop"); //пауза в 1 такт
CLK_0; //отправим 0 на вывод Clk микросхемы MAX7219
Data_In[Adres_Reg_Copy] <<= 1; //сдвинем значение переменной Data_in на 1 бит влево
}
//выйдем из цикла когда i станет равной 7, т.е. когда отправка байта данных в микросхему MAX7219 будет окончена
CS_1; //отправим «1» на вывод CS микросхемы MAX7219, чтобы завершить процесс передачи адреса и данных
}
//********************* Инициализация MAX7219 *****************
void Inicializat_MAX7219()
{
Write_MAX7219(0x09,127); //включаем режим BCD code B, для 7 разрядов
Write_MAX7219(0x0A,10); //яркость свечения сегментов 10 (от 0 до 15)
Write_MAX7219(0x0B,7); //число используемых разрядов (7 разрядов)
Write_MAX7219(0x0C,1); //отключаем режим энергосбережения (Shutdown)
}
//******** Функция вывода значений на 7 сегм.индикатор №1 ******
void Out_Displey_1(unsigned int Displey_Ust)
{
Cifra[7]=Displey_Ust/100; //сотни
Cifra[6]=Displey_Ust%100/10; //десятки
Cifra[6]=Cifra[6]|128; //вкл децимальную точку в разряде Cifra_6
Cifra[5]=Displey_Ust%10; //единицы
for(X=5;X<8;X++)
{
Data_In[X] = Cifra[X];
Write_MAX7219(X,Data_In[X]);
}
}
//******** Функция вывода значений на 7 сегм.индикатор №2 ******
void Out_Displey_2(unsigned int Displey_Ust)
{
Cifra[4]=15; //Отключим не используемую цифру старшего разряда индикатора №2
Cifra[3]=Displey_Ust/100; //сотни
Cifra[2]=Displey_Ust%100/10; //десятки
Cifra[2]=Cifra[2]|128; //вкл децимальную точку в разряде Cifra_2
Cifra[1]=Displey_Ust%10; //единицы
for(X=1;X<5;X++)
{
Data_In[X] = Cifra[X];
Write_MAX7219(X,Data_In[X]);
}
}
//*************************** Функция измерения напряжения на входах АЦП ***************************
unsigned long ADC_Convert (unsigned char Kanal_ADC)
{
//ADMUX = ADMUX&224|Kanal_ADC; //выберем канал АЦП (обнулим биты MUX4-MUX0 в регистре ADMUX, не изменяя при этом биты 5,6,7, после этого заменим значение битов MUX4-MUX0 на номер(код) канала)
ADMUX = ADMUX & 224; //выберем канал АЦП (сначала обнулим биты MUX4-MUX0 в регистре ADMUX, не изменяя при этом биты 5,6,7)
ADMUX = ADMUX | Kanal_ADC; //выберем канал АЦП (затем заменим значение битов MUX4-MUX0 на номер(код) канала)
ADCSRA |= (1<<ADSC); //Начинаем аналого-цифровое преобразование (для этого запишем 1 в бит ADSC регистра ADCSRA)
while((ADCSRA & (1<<ADSC))); //Ждём когда закончиться аналого-цифровое преобразование (преобразование закончится, когда бит ADSC регистра ADCSRA станет равным 0)
return (unsigned long) ADC; //Выйдем из функции и вернём (запишем) полученное значение (из регистров результата ADCL и ADCH) в переменную типа unsigned int
}
//************************** Основная функция с бесконечным циклом *******************************
int main(void)
{
DDRC = 0B00000111;
Inicializat_MAX7219(); //Инициализация MAX7219
//Инициализация АЦП
ADCSRA |= (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);//Разрешение использования АЦП, Делитель 128 = 125 кГц
ADMUX &= ~((1<<REFS0)|(1<<REFS1)); //Источник опорного напряжения Aref=5v0
//Displey1_ADC=351;
//Displey2_ADC=795;
//Out_Displey_1(Displey1_ADC);
//Out_Displey_2(Displey2_ADC);
while(1)
{
Displey1_ADC = ADC_Convert(4); //Считаем значение с 4 канала АЦП
Out_Displey_1(Displey1_ADC); //Отправим считанное значение в функцию вывода на индикатор №1
Displey2_ADC = ADC_Convert(3); //Считаем значение с 3 канала АЦП
Out_Displey_2(Displey2_ADC); //Отправим считанное значение в функцию вывода на индикатор №2
}
}
душа человеческая темна и с легкостью обращается ко злу
- musor
- Друг Кота
- Сообщения: 39197
- Зарегистрирован: Сб сен 13, 2014 16:27:32
- Откуда: СпиртоГонск созвездия Омега
Re: 3-х разрядный ампервольтметр на атмега
ну чо с max7219/tm18xx это като неспортивно...вон много ножек зря пропало
лучше уж прикошатить наружный ADC разрядоф на 20..
Добавлено after 2 minutes 45 seconds:
а свыводом на LED межка328 и так сама разберется кое ка... вот аардошная платка кой ка с этим справляется даже с штатными библиотеками
лучше уж прикошатить наружный ADC разрядоф на 20..
Добавлено after 2 minutes 45 seconds:
а свыводом на LED межка328 и так сама разберется кое ка... вот аардошная платка кой ка с этим справляется даже с штатными библиотеками
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
-
charchyard
- Поставщик валерьянки для Кота
- Сообщения: 2466
- Зарегистрирован: Сб май 07, 2011 17:52:59
Re: 3-х разрядный ампервольтметр на атмега
так это исшо не фсё... энкодеры в качестве задатчиков опорного напряжения и ещё кое что по мелочи... только вот терзают сумненья по поводу младшего разряда... не будет ли мельтишить... мож усреднять надо? или это шизофрения уже?вон много ножек зря пропало
душа человеческая темна и с легкостью обращается ко злу
- musor
- Друг Кота
- Сообщения: 39197
- Зарегистрирован: Сб сен 13, 2014 16:27:32
- Откуда: СпиртоГонск созвездия Омега
Re: 3-х разрядный ампервольтметр на атмега
попробуй мож не так все пдохо и сойдет... мелтешение младшего вашета класикеа в цифре...
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Re: 3-х разрядный ампервольтметр на атмега
[uquote="charchyard",url="/forum/viewtopic.php?p=3950515#p3950515"]оригинал
опорное напряжение +5v0
ничего не работает... и динамика кривоватая, маленькое времечко экспозиции разряда... в оригинале было по 16...20мс... смотрю в сторону max7219... но там я вообче никаких примеров не нашёл пока[/uquote]
Пример есть , но он не на AVR (( К сожалению . На PIC 16F 716 что из регуляторов оборотов пылесосов самсунг ! Там ещё подсчёт ёмкости идёт , если необходимо .
Добавлено after 30 minutes 1 second:
Схема то универсальная , два индикатора (выше ниже) и плата 7219 над ней , скрепляются перемычками как бутерброд ... а там есть проги и под АВР и под МИКРОЧИПЫ !
Добавлено after 15 minutes 42 seconds:
Универсальная плата будет на первой "плате" проекта LAY ОБЕ !
Спойлер
опорное напряжение +5v0
ничего не работает... и динамика кривоватая, маленькое времечко экспозиции разряда... в оригинале было по 16...20мс... смотрю в сторону max7219... но там я вообче никаких примеров не нашёл пока[/uquote]
Пример есть , но он не на AVR (( К сожалению . На PIC 16F 716 что из регуляторов оборотов пылесосов самсунг ! Там ещё подсчёт ёмкости идёт , если необходимо .
Добавлено after 30 minutes 1 second:
Схема то универсальная , два индикатора (выше ниже) и плата 7219 над ней , скрепляются перемычками как бутерброд ... а там есть проги и под АВР и под МИКРОЧИПЫ !
Добавлено after 15 minutes 42 seconds:
Универсальная плата будет на первой "плате" проекта LAY ОБЕ !
- Вложения
-
- универсальная плата на 7219.lay6
- (114.37 КБ) 262 скачивания
-
- схема.jpg
- (142.58 КБ) 265 скачиваний
Не спрашивай по ком звонит колокол, он звонит по тебе !
-
charchyard
- Поставщик валерьянки для Кота
- Сообщения: 2466
- Зарегистрирован: Сб май 07, 2011 17:52:59
Re: 3-х разрядный ампервольтметр на атмега
ну, в итоге, по такому сценарию буду пытаться развивать события
с этими вольтмеро-ампермерамипо измерению постоянного напряженияи тока с шунтаи бесконтактного датчикапостоянного токас выводом на семи сегмент
с этими вольтмеро-ампермерамипо измерению постоянного напряженияи тока с шунтаи бесконтактного датчикапостоянного токас выводом на семи сегмент
- Вложения
-
- gerber_drill_2.zip
- (122.36 КБ) 207 скачиваний
-
- gerber_drill.zip
- (115.67 КБ) 206 скачиваний
душа человеческая темна и с легкостью обращается ко злу
-
charchyard
- Поставщик валерьянки для Кота
- Сообщения: 2466
- Зарегистрирован: Сб май 07, 2011 17:52:59
Re: 3-х разрядный ампервольтметр на атмега
собрал, работает, но младший разряд отображает все возможные варианты от 0 до 8. надо усреднять данные в регистре adc. кто-нибудь может помочь с кодом? в код надо написать алгоритм усреднения оцифровки входных сигналов на входах admux_3 and admux_4
- Вложения
-
- main.c
- (9.5 КБ) 213 скачиваний
душа человеческая темна и с легкостью обращается ко злу
Re: 3-х разрядный ампервольтметр на атмега
Kturj
Код: Выделить всё
#define kolvo_dlya_sglaj 17 // по скольким результатам измерений вычислить среднее значение
unsigned long ADC_Convert (unsigned char Kanal_ADC)
{
uint32_t sum = 0;
//ADMUX = ADMUX&224|Kanal_ADC; //выберем канал АЦП (обнулим биты MUX4-MUX0 в регистре ADMUX, не изменяя при этом биты 5,6,7, после этого заменим значение битов MUX4-MUX0 на номер(код) канала)
ADMUX = ADMUX & 224; //выберем канал АЦП (сначала обнулим биты MUX4-MUX0 в регистре ADMUX, не изменяя при этом биты 5,6,7)
ADMUX = ADMUX | Kanal_ADC; //выберем канал АЦП (затем заменим значение битов MUX4-MUX0 на номер(код) канала)
for(uint8_t i = 0; i < kolvo_dlya_sglaj; ++i) {
ADCSRA |= (1<<ADSC); //Начинаем аналого-цифровое преобразование (для этого запишем 1 в бит ADSC регистра ADCSRA)
while((ADCSRA & (1<<ADSC))); //Ждём когда закончиться аналого-цифровое преобразование (преобразование закончится, когда бит ADSC регистра ADCSRA станет равным 0)
sum += ADCW;
}
sum += kolvo_dlya_sglaj >> 1;
sum /= kolvo_dlya_sglaj;
return (unsigned long) sum; //Выйдем из функции и вернём (запишем) полученное значение (из регистров результата ADCL и ADCH) в переменную типа unsigned int
}
- Starichok51
- Модератор
- Сообщения: 19039
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: 3-х разрядный ампервольтметр на атмега
а это что такое?
Карбофос писал(а): sum += kolvo_dlya_sglaj >> 1;
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: 3-х разрядный ампервольтметр на атмега
Интересно глянуть осциллографом на ножке Aref после mos34063a ?
- slav0n
- Опытный кот
- Сообщения: 882
- Зарегистрирован: Ср дек 01, 2010 00:38:15
- Откуда: Харьков
- Контактная информация:
Re: 3-х разрядный ампервольтметр на атмега
это правильное округлениеStarichok51 писал(а):а это что
ohmycode!
primuss3.com
primuss3.com
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: 3-х разрядный ампервольтметр на атмега
[uquote="slav0n",url="/forum/viewtopic.php?p=4028113#p4028113"]это правильное округление[/uquote]Предпочитаю медианную или БИХ фильтрацию, достоинство последней в том, что вольтметр не ждёт несколько замеров ради одного отображения, а значит и не замирает, не подтупливает.StSglag - константа, характеризующая степень фильтрации
Спойлер
БИХ фильтр:Код: Выделить всё
sum+=ADC_Оut;
Out_To_Display=sum>>StSglag;
sum-=Out_Tо_Display;Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
- slav0n
- Опытный кот
- Сообщения: 882
- Зарегистрирован: Ср дек 01, 2010 00:38:15
- Откуда: Харьков
- Контактная информация:
Re: 3-х разрядный ампервольтметр на атмега
Код: Выделить всё
Out_To_Display += (ADC - Out_To_Display) / 2;ohmycode!
primuss3.com
primuss3.com
Re: 3-х разрядный ампервольтметр на атмега
slav0n, ваше выражение справедливо пока ADC > Out_To_Display.
Как только ADC станет < Out_To_Display, представляете какой результат получится?
Давайте попробуем вычислить ADC - Out_To_Display, к примеру 120 - 400 = ?
Как только ADC станет < Out_To_Display, представляете какой результат получится?
Давайте попробуем вычислить ADC - Out_To_Display, к примеру 120 - 400 = ?