Подписаться на получение новых статей на почту:

Шаг №18. Термометр на AVR. Вывод температуры на индикатор. Часть 3

Обновлено 17.12.15. Всем привет. В этой записи мы с Вами начнем монтаж основных элементов на плату которую спроектировали в прошлой статье. Своего рода, сегодня, у нас получится простой термометр. Попробуем запустить и убрать все недоработки. Алгоритм будет состоять из ранее написанных программ, как сборка конструктора. Используем программу из статьи №6 для цифрового датчика и индикатора. Немного подкорректируем и выведем температуру на дисплей.  

При подключении микроконтроллера у меня выплыл первый косяк – это ошибка при чтении микроконтроллера программатором , оказалась что порт,который отвечает за  выход данных MISO, он уже у меня отвечает за  управлении первым элементом семи сегментного индикатора, поэтому между портом и транзистором я поставил сопротивление 1 кОм. Все заработало.Теперь подправим нашу программу, добавим еще управление для четвертого элемента индикатора, который по задумке будет выводить знак минус, а также для формата времени ЧЧ.ММ, при помощи DS1307.

Вывод MISO на AVR

Слева, отображен вывод контроллера, который отвечает за четвертый элемент индикатора и вход данных от программатора.

Первое, добавим четвертый сегмент в подпрограмму прерывания для отображения сегмента. Немного дополним программу семи сегментного индикатора на AVR, которую рассматривали для трех элементов (статья №5).

/*подпрограмма выполняющаяся по прерыванию таймера по переполнению, отвечающая за мерцание индикатора*/
ISR (TIMER0_OVF_vect)
{   

      PORTB &= 0x2e;  /*Очистка PB7, PB6, PB0, PB4*/
      switch (k)
      {
            ………….
            …………/*тот же текст программы
        /*Добавляем строку для отображения первого сегмента, который будет выводить знак минус*/
            case 3:   
            if (i1 < 0)   /*данная переменная отвечает за знак выводимой температуры,которая находится в основном цикле*/
            {
                  PORTB |= (1 << PINB4); /*отвечает за вывод знака минус*/
                  PORTD = 16;  /*активируем ножку, отвечающую за элемент G, на индикаторе, который покажет минус*/
             };        
       }
}

В основном цикле, где стоит определение знака, добавляем нашу переменную (статья №6):
if ((temperature[1]&128) == 0)
     i1=1;
else
{
      temp = ((unsigned int) temperature[1]<<8) | temperature[0];
      temp = ~temp + 1;
      temperature[0] = temp;
      temperature[1] = temp>>8;
      i1=-1;
};

и последнее исправление в функции вывода цифр на индикатор была проблема при выводе отрицательных значений, которые передавались в функцию уже отрицательными (статья №5).

void Display (float i)
{
      float N1,N2,Number;
      Number = fabs (i);   /*добавил fabs , который возвращает модуль вещественного числа*/
      N1 = modf (Number, &N2); /*Разбиваем число Number на целую и дробную части,N1 = дробное.*/

Все плата работает, на рисунке ниже представлен результат.

вывод температуры на индикатор на AVR

Далее в записях Вы увидите как интегрируется на плату разная периферия и добавляется код, который мы научимся разбивать на библиотеки и делать его переносимым в другие контроллеры (статья №21). На рисунке слева видно что на плату кроме индикатора и контроллера  также посажена SD-карта, с которой мы научимся работать в следующей статье. На этом на сегодня все. Всем пока.

Просмотрено 3085 раз.

Я на Google+

Шаг №18. Термометр на AVR. Вывод температуры на индикатор. Часть 3: 2 комментария

    • Здравствуйте. Сам по себе блог — это проект , у которого цель связать статьи вместе, как конструктор для сбора устройства. Если Вы посмотрите дальнейшие публикации, то увидите что проект разросся , и при добавлении новой функции в устройство, описываются настройки, пишется новый алгоритм, интегрируется алгоритм с предыдущих публикаций, тестируется по возможности в железе и симуляторе. Конечная цель устройства это контроллер сбора данных. в статье №21 и №31 идет наглядный пример интеграции кодов в один общий, а также анализ проекта.

Добавить комментарий

Ваш e-mail не будет опубликован.

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Subscribe without commenting