Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
03.08.2008, 19:43
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Динамическая индикация,вопрос
Сообщение от oflife
|
Еще один вариант разбиения десятичного числа на позиции и вывода на сегменты предоставляю на Ваше суждение.
|
Уважаемый если вы хотя бы вникли в то что выше
представлено , вы вероятно с удивлением заметили бы , что там то же самое и намного проще и универсальнее...
__________________
Осторожно , злой кот
|
|
|
|
03.08.2008, 20:34
|
|
Прописка
Регистрация: 16.01.2007
Сообщений: 104
Сказал спасибо: 0
Сказали Спасибо 8 раз(а) в 6 сообщении(ях)
|
позволю себе немного покритиковать авторский код oflife...
1) операция деления вообсче очень дорогая (ну и определение остатка от деления % тоже), так что я стараюсь ее не применять без необходимости;
2) процедуру Display надо переделать с использованием статического массива констант (как в примере выше)
void Display(unsigned char cifra)
{ char seg7[] = {0x3F, ..., 0x6F};
PORTD = seg7[cifra];
}
на мой взгляд такой код выглядит более удобочитаемым (и несколько быстрее)
для увеличения надежности (предотращения выхода за границу массива) можно делать вот так:
enum { NUM_DIGITS = 10 };
PORTD = seg7[cifra % NUM_DIGITS];
__________________
"I can wire anything directly into anything" Hubert J. Farnsworth
|
|
|
|
03.08.2008, 21:53
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
um
+5
__________________
Осторожно , злой кот
|
|
|
|
04.08.2008, 06:51
|
|
Заблокирован
Регистрация: 05.05.2008
Сообщений: 121
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Для преобразования в семисегментный код есть дешифраторы, ЭТО! специальная микросхемка на которую
прямо подают число в коде. При этом просто выставил
число в порт и все.
|
|
|
|
04.08.2008, 08:40
|
|
Гражданин KAZUS.RU
Регистрация: 24.06.2005
Сообщений: 535
Сказал спасибо: 262
Сказали Спасибо 216 раз(а) в 118 сообщении(ях)
|
Про эту микросхему чаще вспоминали когда не было МК. Можно конечно и сейчас поставить, но имею такую мощь, которой обладает МК еще лепить дешифратор для индикаторов лично я не буду. Напишу программу - будет работать.
|
|
|
|
04.08.2008, 08:52
|
|
Прописка
Регистрация: 16.01.2007
Сообщений: 104
Сказал спасибо: 0
Сказали Спасибо 8 раз(а) в 6 сообщении(ях)
|
да, конечно можно, но
1) это стоит денег (пусть и небольших);
2) лишний 1(2,3...) корпуса на ПП - усложнение монтажа;
3) увеличение массы и габаритов устройства.[/b]
__________________
"I can wire anything directly into anything" Hubert J. Farnsworth
|
|
|
|
04.08.2008, 11:45
|
|
Гражданин KAZUS.RU
Регистрация: 27.07.2006
Сообщений: 659
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Сообщение от sciff
|
Для преобразования в семисегментный код есть дешифраторы, ЭТО! специальная микросхемка на которую
прямо подают число в коде. При этом просто выставил
число в порт и все.
|
Если у контроллера хватает выводов-то применение наружных дешифраторов-это расточительство
|
|
|
|
04.08.2008, 21:28
|
|
Супер-модератор
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
|
Сообщение от EVGENIY1962
|
Если у контроллера хватает выводов-то применение наружных дешифраторов-это расточительство
|
А если у меня индикаторы (8 разрядов) на лицевой двери шкафа, а сам девайс "унутреннего употребления"? Итого шлейф на 8+8(с учетом запятой) проводов длиной как минимум 0,5 метра по деньгам потянет не меньше чем два регистра 74HC595. И получаем: 3 провода управление от МК + Uпит + GND(она же экран). Соотношение 16/5 и допом полтора порта МК свободных. Вместо "сороконожки" ставим 28 ног. И где тут "расточительство"?
|
|
|
|
04.08.2008, 23:16
|
|
Супер-модератор
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
|
to um
Критика "авторского кода" немного не по адресу. Я не зря упоминал выше Микроэлектронику и их MicroC. Если заглянуть в
MikroelektronikamikroCExamplesEasyPic3P16F877A7seg display3 то увидим:
Код:
|
do {
j = i / 1000u ; // prepare digits for diplays
kraj = mask(j);
por[0] = kraj;
j = (char)(i / 100u) % 10u;
kraj = mask(j);
por[1] = kraj;
j = (char)(i / 10u) % 10u;
kraj = mask(j);
por[2] = kraj;
j = i % 10u;
kraj = mask(j);
por[3] = kraj;
Delay_ms(1000);
i++ ; // increment counter
if (i › 9999u)
i = 0;
} while(1); // endless loop |
А case оформлен там отдельно:
#include "Display_utils.h"
Так что данный код тоже имеет право на существование. Хотя он и не такой быстрый и компактный (но для скорости вообще лучше писать на Асме), зато легко адаптируется под любой компилятор. Display_utils просто перекладывается и включается тем же инклудом, а дополнить его своими символами с помощью утилиты, которая встроена в МикроС (см. на предыдущей странице) дело пары минут. Кстати этот же код использует для преобразования и г-н Рюмик в своем цикле статей про МК в Радиоаматоре. А вот itoa-atoi тот же CodeVision в паре с Протеусом не всегда адекватно проглатывают, у меня случались накладки - пришлось поломать голову.
|
|
|
|
04.08.2008, 23:44
|
|
Прописка
Регистрация: 16.01.2007
Сообщений: 104
Сказал спасибо: 0
Сказали Спасибо 8 раз(а) в 6 сообщении(ях)
|
Halex07, вообще любой работающий код имеет право на существование... но ведь есть учебные патроны, а есть боевые - я бы тот код, что в примере к MicroC идет, 1:1 в реальную железяку бы не воткнул.
почем? потому что в некоторых процессорах например, нет команды деления - потому операция будет проводиться силами библиотечного кода, который идет с компилятором... и как эта процедура там реализована - черт ее знает. другие делят 8-разрядные числа, и опять-таки деление на 1000 уже будет выполнно программно и т.п.
а сам принцип подсмотреть, да, ничего в этом зазорного нет.
__________________
"I can wire anything directly into anything" Hubert J. Farnsworth
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:09.
|
|