Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 20.02.2018, 18:02  
Rovi
Прохожий
 
Регистрация: 20.02.2018
Сообщений: 2
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Rovi на пути к лучшему
По умолчанию Вывод данных на индикатор с аналогового порта

Доброго времени суток!

Суть дела: учусь программировать. Взял подстроечник, подцепил к аналоговой ножке мк, считываю значение напряжения и управляю яркостью светодиода посредством ШИМ. Взял байт данных с АЦП, чтобы проще было. ХОЧУ выводить на три семисегментных индикатора текущее значение АЦП и ШИМ, которое хранится в МК. Ну, проще говоря, если диод светится максимально ярко - будет 255, потух совсем - будет 0. Надеюсь, понятно объяснил.
Пошел путём таким: преобразовал двоичный байт с АЦП в двоично-десятичный код. Сейчас не могу никак вникнуть как сопоставить значение двоично-десятичного кода и байта для определённого числа индикации? проще говоря, исходя из моего подключения МК к индикатору я объявил константу FIVE со значением 0010 1001 (подаю нуль на нужные сегменты чтобы они зажглись). Каким способом объяснить МК, что если в ходе преобразования получилось двоично-десятичное "0101" сопоставить ему константу FIVE и выкинуть "0010 1001" в нужный порт?

Чувствую себя крайне неловко, как будто за поездом бегу, который давно ушел. Я понимаю что всё изобретено до меня, но найти информацию не могу. Или я вообще пошел не тем путём?
Реклама:
Rovi вне форума  
Непрочитано 20.02.2018, 18:24  
Клон
Временная регистрация
 
Регистрация: 19.10.2017
Сообщений: 59
Сказал спасибо: 29
Сказали Спасибо 14 раз(а) в 7 сообщении(ях)
Клон на пути к лучшему
По умолчанию Re: Вывод данных на индикатор с аналогового порта

Так ручками всё. Надо прописать таблицу, где каждой цифре будет соответствовать своя константа.
Далее - работа с массивами.
A(5):=FIVE;
или A(2#0101):=FIVE;
что в принципе однозначно.
И так - десять раз, по количеству цифр.

Потом просто засунете в порт значение элемента массива, например A(x).
x - один разряд.(значение в Вашем случае х=0101)
Вообще, подобный кусок кода есть в каждой программе, написанной до Вас. Посмотрите, где есть исходный код - и "copy-paste".

Последний раз редактировалось Клон; 20.02.2018 в 18:28.
Клон вне форума  
Непрочитано 20.02.2018, 21:23  
andron007
Прописка
 
Регистрация: 19.02.2008
Адрес: г. Иркутск
Сообщений: 275
Сказал спасибо: 213
Сказали Спасибо 166 раз(а) в 78 сообщении(ях)
andron007 на пути к лучшему
По умолчанию Re: Вывод данных на индикатор с аналогового порта

Цитата:
Convert
ADDWF PCL,F ;начало подпрограммы табличной конвертации
RETLW b'01111110' ;символ "0"
RETLW b'00001100' ;символ "1"
RETLW b'10110110' ;символ "2"
RETLW b'10011110' ;символ "3"
RETLW b'11001100' ;символ "4"
RETLW b'11011010' ;символ "5"
RETLW b'11111010' ;символ "6"
RETLW b'00001110' ;символ "7"
RETLW b'11111110' ;символ "8"
RETLW b'11011110' ;символ "9"
RETLW b'11110010' ;символ "E"
RETLW b'10100000' ;символ "r"
RETLW b'11011010' ;символ "S"
RETLW b'11110000' ;символ "t"
Такую можно, биты по схеме.
andron007 вне форума  
Сказали "Спасибо" andron007
Rovi (21.02.2018)
Непрочитано 20.02.2018, 23:03  
jump
Почётный гражданин KAZUS.RU
 
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,981
Сказал спасибо: 0
Сказали Спасибо 4,939 раз(а) в 2,369 сообщении(ях)
jump на пути к лучшему
По умолчанию Re: Вывод данных на индикатор с аналогового порта

Сообщение от Rovi Посмотреть сообщение
учусь программировать
Сообщение от Rovi Посмотреть сообщение
Чувствую себя крайне неловко, как будто за поездом бегу, который давно ушел
надо не бежать, а спокойно идти - нос целее будет
на чем программируете - асм, бейсик, С? имя МК?
начните с алгоритма - вначале основной цикл, потом - базовые функции, далее - каждую детально. судя по тому, что выводите на LED/LCD индикатор, необходим интервальный таймер (например, 1мс) и счетчик разрядов (3, 4, ...) индикации, которые задают основные интервалы времени, в которых и будут происходить все события. начните с простого - вывод заданного числа из буфера на индикатор, далее будете все присоединять к этому каркасу
jump вне форума  
Непрочитано 21.02.2018, 04:12  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Вывод данных на индикатор с аналогового порта

С бегом действительно стоит завязывать: "Поспешай, не торопясь"(c)

К вопросам уважаемого jump стоит добавить ещё и про сам индикатор.
У нас на МК динамическая индикация работает или таки имеется более умный индикатор с последовательной записью?

Кстати выводить можно и без цепочки делений с остатком - шестнадцатеричные значения выводить.
Заодно возникнет навык работы с шестнадцатеричными данными в уме, что весьма полезно в программировании (на ником уровне даже обязательно).
Число разрядов индикатора уменьшится до 2-х, а таблица масок состояния станет на 6 элементов длиннее - туда надо добавить маски для A,b,c,d,E,F и нужные индексы получать в цепочке операций:
- скопировать значение в две временные переменные/регистры ;
- выполнить И с константой 0x0F с первой переменной/регистром - это индекс маски для младшего полубайта;
- сдвинуть вторую временную переменную/регистр вправо на 4;
- выполнить И с константой 0x0F с второй переменной/регистром - это индекс маски для старшего полубайта.

Неплохо в промежутках между натурными экспериментами почитать про архитектуру конкретного МК и МК вообще, учебники по программированию (лучше не для чайников и не видеоуроки).
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 21.02.2018, 09:45  
Rovi
Прохожий
 
Регистрация: 20.02.2018
Сообщений: 2
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Rovi на пути к лучшему
По умолчанию Re: Вывод данных на индикатор с аналогового порта

Господа, благодарю за советы.
Сообщение от Клон Посмотреть сообщение
Надо прописать таблицу, где каждой цифре будет соответствовать своя константа.
Всё готово. А вот с массивом и есть затык.
Сообщение от andron007 Посмотреть сообщение
Такую можно, биты по схеме.
Кажется, понял идею. Ща попробую.
Сообщение от jump Посмотреть сообщение
на чем программируете - асм, бейсик, С? имя МК?
Асм, PIC16F874A. Начал с ассемблера, чтобы конкретней разобраться что-как работает. Да и МК старенький, на который мильён примеров. Но толку разобраться не хватило
Сообщение от mike-y-k Посмотреть сообщение
К вопросам уважаемого jump стоит добавить ещё и про сам индикатор.
Выводить то я разберусь, надеюсь=) Небольшая база есть.

Еще раз спасибо!
Rovi вне форума  
Непрочитано 21.02.2018, 10:26  
OKF
Прописка
 
Регистрация: 17.11.2009
Сообщений: 128
Сказал спасибо: 15
Сказали Спасибо 30 раз(а) в 16 сообщении(ях)
OKF на пути к лучшему
По умолчанию Re: Вывод данных на индикатор с аналогового порта

Поначалу, дабы не усложнять, можете без таймера - достаточно 1-мс задержки. Затем уже, когда всё заработает, используйте таймер. Если будет необходимость.)
OKF вне форума  
Непрочитано 21.02.2018, 16:59  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Вывод данных на индикатор с аналогового порта

Rovi, ну в таком случае сразу шестнадцатеричное число выводить .
заодно сразу оптимизация решения получится.
А адрес смещения в таблице (индекс массива) получится просто сдвигом влево кода цифры на 3 (умножение на . Дальше уже выборка по адресу с полученным смещением.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 21.02.2018, 20:31  
andron007
Прописка
 
Регистрация: 19.02.2008
Адрес: г. Иркутск
Сообщений: 275
Сказал спасибо: 213
Сказали Спасибо 166 раз(а) в 78 сообщении(ях)
andron007 на пути к лучшему
По умолчанию Re: Вывод данных на индикатор с аналогового порта

Сообщение от Rovi Посмотреть сообщение
Кажется, понял идею. Ща попробую.
С табличной конвертацией в пиках сложность еще такая - таблица должна находится в одном блоке программной памяти и быть не более этого блока (256 слов). Чаще всего если таблица не большая, достаточно разместить её в начале программы. Или можно разместить в любом месте, но для этого добавить что то типа этого:

Цитата:
ADCCHCN
clrf Tmp
movlw high ADCCHT
movwf PCLATH
movf Datchik,w
addwf Tmp,w
andlw 0x07
movwf Tmp
; проверка на принадлежность Смещения к текущему блоку памяти (кратно 256 Word)
addlw low ADCCHT
btfsc c
incf PCLATH,f

movf Tmp,w
addwf PCL,f
; Управляющая команда для ADCCON0
ADCCHT retlw B'01010001' ; 0 Если Datchik = 0 то канал AN2
retlw B'01100001' ; 1 Если Datchik = 1 то канал AN4
retlw B'01001001' ; 2 Если Datchik = 2 то канал AN1
retlw B'01000001' ; 3 Если Datchik = 3 то канал AN0
retlw ....
....
andron007 вне форума  
Непрочитано 21.02.2018, 21:05  
DmitriyVDN
Гражданин KAZUS.RU
 
Регистрация: 10.06.2010
Сообщений: 584
Сказал спасибо: 222
Сказали Спасибо 232 раз(а) в 152 сообщении(ях)
DmitriyVDN на пути к лучшему
По умолчанию Re: Вывод данных на индикатор с аналогового порта

Сообщение от andron007 Посмотреть сообщение
С табличной конвертацией в пиках сложность еще такая - таблица должна находится в одном блоке программной памяти и быть не более этого блока (256 слов).
чушь.
Цитата:
Асм, PIC16F874A. Начал с ассемблера, чтобы конкретней разобраться что-как работает.
ТС рекомендую ознакомится: http://pic24.ru/doku.php/osa/articles/mpasm_formatting
там найдете как делается вывод цифр на сиды
DmitriyVDN вне форума  
 

Закладки

Метки
microchip, двоично-десятичная, индикация
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Способы вывода данных на семисегментный индикатор artyomugr Микроконтроллеры, АЦП, память и т.д 44 04.08.2011 17:25
Учебный стенд на базе AT90S8515 Prevan Микроконтроллеры, АЦП, память и т.д 1 09.06.2011 21:55
Обработка данных с термодатчика dimanfet Микроконтроллеры, АЦП, память и т.д 8 11.10.2010 15:16
Последовательный вывод данных Mitrar Микроконтроллеры, АЦП, память и т.д 9 14.05.2010 11:57
Добавление и вывод данных в EEPROM ( PIC16F84A) alexander70 Микроконтроллеры, АЦП, память и т.д 0 11.10.2006 12:29


Часовой пояс GMT +4, время: 17:03.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot