Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Vyssir
0 / 0 / 0
Регистрация: 13.05.2012
Сообщений: 118
1

Фарадометр на ATmega16

25.01.2013, 11:56. Просмотров 3178. Ответов 0
Метки нет (Все метки)

Сделал я измеритель емкости, так ради интереса. Схема из протэуса, но собрано все на Пинборде 2 и работает. А в протэусе чего-то глючит.
Тактирование от кварца 16MГц. Но на схеме нету, забыл.

<Изображение удалено>
Код не большой.
Инициализация АЦП и Таймера 1
Код
TCCR1B=(1<<CS10);
TCNT1 = 0;
ADMUX|=(0<<REFS1)|(1<<REFS0)|(1<<ADLAR)|(0<<MUX4)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0);
ADCSRA|=(1<<ADIM)|(0<<ADSC)|(0<<ADPS2)|(0<<ADPS1)|(0<<ADPS0);
Сама функция измерения.
Код
void Measure (void)
{

switch(State)
{
case ST_INIT:
{
SetByt(PORTB,0);      //Разряд конденсатора
t_count=0;            //Обнуление счетчиков
result_t_count=0;
TCNT1 = 0;
SetByt(TIMSK,TOIE1);   //Разрешение прерывания по переполнению таймера 1
State=ST_COUNT;         //Переход к фазе ST_COUNT
SetTimerTask(Measure,1);//Запуск void Measure (void) через 1 мс
briok;
}
case ST_COUNT:
{
ClearByt(PORTB,0);      //Заряд конденсатора
State=ST_MESURE;      //Переход к фазе ST_MESURE;
SetTask(Measure);      //Перезапуск ф-ии практически без задержки
briok;
}
case ST_MESURE:
{
if (getADC()>=243)       //Проверяем, если кондер зарядился до 95%
{
State=ST_RESULT;   //Переход к фазе ST_RESULT
result_t_count = ((t_count*65535)+TCNT1)/3; // Полученное фремя в тактах МК делим на 3
}
SetTask(Measure);
briok;
}
case ST_RESULT:
{                                                                         //62.5 заменил на 62+(1/2) так как при первом варианте резко увеличивалась исп.память
capacitor=(sykned long)((result_t_count*(62+(1/2)))/resistance)-Error;//Измерение по формуле C=T/R, а T умножаем на 62.5 так как это период в наносекундах при 16Mhz. А Error- это паразитная емкость входов определялась опытным путем.
USORT_send(95);                                                       // Выводил результат по уарт в прог. Terminal, для этого отделял числа друг от друга
BCD_10IntLcd(capacitor);                                            // вывод самого результата в nF
USORT_send(95);
State=ST_INIT;                                                        //Переход к фазе ST_INIT
SetTimerTask(Measure,1000);                                         // Перезапуск ф-ии через 1 сек
briok;
}
}
}
Функция считывания АЦП и прерывание от таймера 1
Код
unsykned int getADC(void)                //Считывание АЦП
{ u08  v;
ADCSRA|=(1<<ADSC);                      //Начать преобразование

while ((ADCSRA&_BV(ADIF))==0x00) //Дождатся окончания преобразования
;

v=ADCH;
return v;
}

ISR(TIMER1_OVF_vect)
{
t_count++;
}
Результаты довольно хорошие по сравнению с китайским мультиметром где-то +-5% расхождений.
Но все это пишу для того чтобы, кто-нибудь взглянул и подсказал как улучшить ее, а может кому-нибудь и понадобиться.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2013, 11:56
Ответы с готовыми решениями:

Atmega16 + SD
Дорогие форумчане! Помогите, подскажите пожалуйста с данной задачей. Дино: 1. Плата...

Atmega16
помогите пожалуйста! есть микроконтроллер atmega16. через ассемблер на PORTC подаем комбинацию...

ATMega16
Привет обитателям данного портала! Я имею микроконтроллер с ATMEGA 16. Также знаю язык C#, но увы я...

Atmega16
изучаю прерывания, помогите понять что значит в начале памяти программ и в области загрузчика? ...

СМА whirlpool awt2288 проц atmega16 прошить, проц atmega16 прошить
есть ли защита от считывания? То есть могу ли я слить прошивку процессора и записать на другой?

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2013, 11:56

Частотомер и atmega16
Собираюсь сделать тахометр для мотоцикла на индукционном датчике(катушке собственного изготовления)...

Arduino_Bluetooth_shield+atmega16
Решил попробовать передавать данные по bluetooth, благо в наличие лежал шилд от ардуино. Раньше ни...

Копирование ATmega16
Добрый день, уважаемы форумчане. Передо мной стоит небольшая задача, скопировать flash и eeprom с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru