Пятница, 19.04.2024, 09:15
Микроконтроллерная техника AVR
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Помоги сайту
Поддержи наш сайт
Через WebMoney
U222865683087
R391933670808
Z877043628365
E649133782052

или пополни нашу SMS копилку
SMS.копилка

Ссылки

 Каталог статей
Главная » Статьи » Учимся работать с AVR

Учимся работать с 7-ми сегментником (часть первая)

Начнем, возьмем АТМеga16 и одноразрядный 7-ми сигментник. Сделаем просто й счетчик от 0 до 9.

Соберем следующую схему:


#include <mega16.h>
#include <delay.h>
// Declare your global variables here

void main(void)
{
int temp=0;
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
PORTC=0x00;
DDRC=0xFF;

// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
PORTD=0x00;
DDRD=0xFF;
while (1)
  {
  if (PINB.0==1)
  temp++; // к переменной temp прибавляем еденицу 
  if (temp==10)
  temp=0; // если temp =10 тогда зануляем
  switch(temp) // вывести число которое в переменной twmp
  {  
  case 0:{PORTD=0b11000000; break;} //0
  case 1:{PORTD=0b11111001; break;} //1
  case 2:{PORTD=0b10100100; break;} //2 
  case 3:{PORTD=0b10110000; break;} //3
  case 4:{PORTD=0b10011001; break;} //4
  case 5:{PORTD=0b10010010; break;} //5
  case 6:{PORTD=0b10000010; break;} //6
  case 7:{PORTD=0b11111000; break;} //7
  case 8:{PORTD=0b10000000; break;} //8
  case 9:{PORTD=0b10010000; break;} //9  
  }  
  delay_ms(250); // задержка 250 мс.
  };
}

Делаем HEX файл и моделируем.

Примечание схема для индикатора с общим катодом, чтобы переделать для дисплея с общим анодом

нужно переписать

PORTD=0b11000000; break; //0

на

PORTD=0b10111111; break; //0

Файлы к проекту находиться в разделе "Файлы"

Часть материала взята с сайта http://avru.cwx.ru/ (Kirk99)

Категория: Учимся работать с AVR | Добавил: my-avr (30.01.2009)
Просмотров: 15546 | Комментарии: 12 | Рейтинг: 0.0/0 |
Всего комментариев: 12
11 Юлия  
0
а прошивка у кого-то есть??????

12 HiSER  
0
А исходного кода не достаточно??????

10 Джозеф  
0
По поводу 40 ма, это гон, у меня на одном порте висит сразу 79 светодиодов, в среднем по 11.28 запараллеленых светодиодов на ногу, используется 7 ног, потребление одного светодиода 13 ма, мк нагревается совсем незначительно, больше греется крен, на котором вся конструкция висит, хотя до крена напруга всего 5.3 вольта.
Глянуть красоту можно тут: http://vkontakte.ru/video68717808_149704455

8 Freeman  
0
Подключать сегментник напрямую к МК -изврат! Я понимаю что МК от превишения характеристик не сгорит сразу, но ведь кто-то возьмет и повторит...

9 SergK  
0
Никакой не изврат, а вполне работающая схема. Другое дело что нужно рассчитывать ток через общий электрод так, чтобы он не превышал 40 мА. Хотя и это не критично, как доказал один иностранный автор, ток через один порт в принципе не может превысить 60 мА (по даташиту). Чем больше ток, тем больше падение напряжения внутри микроконтроллера и ток снижается.
Пробовал сам, все прекрасно работает уже несколько месяцев, тут главное не гнаться за слишком большим током, т.к. пр большом расчетном токе через сегмент в реале индикатор светится значительно более тускло. Получается или исходить из 40 мА (даташитных), что для сегмента получается 40/8=5 мА. При таких токах современные индикаторы светятся с больши запасом яркости.

Я видел реализацию индикатора ВООБЩЕ БЕЗ СЕГМЕНТНЫХ РЕЗИСТОРОВ! (правда при пониженном напряжении питания). Сам такое не повторял, 7-8 резюков не жалко, да и разводить при их наличии дорожки полегче...


7 misha  
0
а рассказать как работать с динамическими индикаторами слабо??? Покопировал с инета текст и пишет тут то ,чего в инете миллиард! Сам наверно нихрена не знает ,кроме как порты включать и выключать

6 misha  
0
во-первых DDRB=0xFF; - это выход, а не вход! КАК кнопка работает тут тогда на порте В???????????? Во вторых код работает беспорядочно. То загорается чтото то нет. Нах автора этой статьи!!!!!

5 Tigr_7  
0
Сорри! Туплю!

4 Tigr_7  
0
В блоке оператора выбора при выводе числа на индикатор, например,
case 0:{PORTD=0b11000000; break;} //0 вы указываете, что выводится ноль. Но по логике итак понятно, что зажигая пины порта 0b11000000 мы задаем цифру "1", но никак не "0". Или я в чем то недогоняю?

3 Saer  
0
схема с общим анодом, не тупите!! посмотрите хотя бы код! и начинающих не вгоняйте в ступор

2 Евгений  
0
0b это означает что число находиться в двоичной системе если бы было написано 0x то в шеснадцетиричной.

1 Sergiy  
0
Что значит PORTD=0b10111111 здесь 0b?

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright My-AVR © 2024
Наша кнопка
У нас появилась кнопка, код кнопки:

Лаборатория самоделок на микроконтроллерах AVR

Форма входа
Наш опрос
Какой МК вы используете?
Всего ответов: 3228
Статистика/Друзья
CY-PR.com



Онлайн всего: 1
Гостей: 1
Пользователей: 0

РадиоКОТ - популярно об электронике. Авторские схемы, новые разработки. Обучение по электронике, микроконтроллерам, ПЛИС. Форум Сайт по радиоэлектронике. У нас все просто и интересно… ARV Reserch: Электроника — просто, полезно, увлекательно. Электронные устройства и программные средства для радиолюбителей и профессионалов, только авторские разработки, плагиата нет! Разработки на заказ. AVR projects Создание электронных роботов своими руками Схемы и программы на AVR http://ur5yfv.ucoz.ua/BANNER.gif Блог начинающего эмбеддера. Дай волю паяльнику! Самоделки на all-make.ru Принципиальные схемы Модулі автозапуску бензогенератора та системи АВР, електромонтажні роботи
Хостинг от uCoz