20.02.2018, 18:02
|
|
Прохожий
Регистрация: 20.02.2018
Сообщений: 2
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Вывод данных на индикатор с аналогового порта
Доброго времени суток!
Суть дела: учусь программировать. Взял подстроечник, подцепил к аналоговой ножке мк, считываю значение напряжения и управляю яркостью светодиода посредством ШИМ. Взял байт данных с АЦП, чтобы проще было. ХОЧУ выводить на три семисегментных индикатора текущее значение АЦП и ШИМ, которое хранится в МК. Ну, проще говоря, если диод светится максимально ярко - будет 255, потух совсем - будет 0. Надеюсь, понятно объяснил.
Пошел путём таким: преобразовал двоичный байт с АЦП в двоично-десятичный код. Сейчас не могу никак вникнуть как сопоставить значение двоично-десятичного кода и байта для определённого числа индикации? проще говоря, исходя из моего подключения МК к индикатору я объявил константу FIVE со значением 0010 1001 (подаю нуль на нужные сегменты чтобы они зажглись). Каким способом объяснить МК, что если в ходе преобразования получилось двоично-десятичное "0101" сопоставить ему константу FIVE и выкинуть "0010 1001" в нужный порт?
Чувствую себя крайне неловко, как будто за поездом бегу, который давно ушел. Я понимаю что всё изобретено до меня, но найти информацию не могу. Или я вообще пошел не тем путём?
|
|
|
|
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
|
|
Прописка
Регистрация: 19.02.2008
Адрес: г. Иркутск
Сообщений: 277
Сказал спасибо: 218
Сказали Спасибо 170 раз(а) в 79 сообщении(ях)
|
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
|
|
|
20.02.2018, 23:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,985
Сказал спасибо: 0
Сказали Спасибо 4,943 раз(а) в 2,371 сообщении(ях)
|
Re: Вывод данных на индикатор с аналогового порта
Сообщение от Rovi
|
учусь программировать
|
Сообщение от Rovi
|
Чувствую себя крайне неловко, как будто за поездом бегу, который давно ушел
|
надо не бежать, а спокойно идти - нос целее будет
на чем программируете - асм, бейсик, С? имя МК?
начните с алгоритма - вначале основной цикл, потом - базовые функции, далее - каждую детально. судя по тому, что выводите на LED/LCD индикатор, необходим интервальный таймер (например, 1мс) и счетчик разрядов (3, 4, ...) индикации, которые задают основные интервалы времени, в которых и будут происходить все события. начните с простого - вывод заданного числа из буфера на индикатор, далее будете все присоединять к этому каркасу
|
|
|
|
21.02.2018, 04:12
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,170
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
|
Re: Вывод данных на индикатор с аналогового порта
С бегом действительно стоит завязывать: "Поспешай, не торопясь"(c)
К вопросам уважаемого jump стоит добавить ещё и про сам индикатор.
У нас на МК динамическая индикация работает или таки имеется более умный индикатор с последовательной записью?
Кстати выводить можно и без цепочки делений с остатком - шестнадцатеричные значения выводить.
Заодно возникнет навык работы с шестнадцатеричными данными в уме, что весьма полезно в программировании (на ником уровне даже обязательно).
Число разрядов индикатора уменьшится до 2-х, а таблица масок состояния станет на 6 элементов длиннее - туда надо добавить маски для A,b,c,d,E,F и нужные индексы получать в цепочке операций:
- скопировать значение в две временные переменные/регистры ;
- выполнить И с константой 0x0F с первой переменной/регистром - это индекс маски для младшего полубайта;
- сдвинуть вторую временную переменную/регистр вправо на 4;
- выполнить И с константой 0x0F с второй переменной/регистром - это индекс маски для старшего полубайта.
Неплохо в промежутках между натурными экспериментами почитать про архитектуру конкретного МК и МК вообще, учебники по программированию (лучше не для чайников и не видеоуроки).
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
21.02.2018, 09:45
|
|
Прохожий
Регистрация: 20.02.2018
Сообщений: 2
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Вывод данных на индикатор с аналогового порта
Господа, благодарю за советы.
Сообщение от Клон
|
Надо прописать таблицу, где каждой цифре будет соответствовать своя константа.
|
Всё готово. А вот с массивом и есть затык.
Сообщение от andron007
|
Такую можно, биты по схеме.
|
Кажется, понял идею. Ща попробую.
Сообщение от jump
|
на чем программируете - асм, бейсик, С? имя МК?
|
Асм, PIC16F874A. Начал с ассемблера, чтобы конкретней разобраться что-как работает. Да и МК старенький, на который мильён примеров. Но толку разобраться не хватило
Сообщение от mike-y-k
|
К вопросам уважаемого jump стоит добавить ещё и про сам индикатор.
|
Выводить то я разберусь, надеюсь=) Небольшая база есть.
Еще раз спасибо!
|
|
|
|
21.02.2018, 10:26
|
|
Прописка
Регистрация: 17.11.2009
Сообщений: 132
Сказал спасибо: 15
Сказали Спасибо 30 раз(а) в 16 сообщении(ях)
|
Re: Вывод данных на индикатор с аналогового порта
Поначалу, дабы не усложнять, можете без таймера - достаточно 1-мс задержки. Затем уже, когда всё заработает, используйте таймер. Если будет необходимость.)
|
|
|
|
21.02.2018, 16:59
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,170
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
|
Re: Вывод данных на индикатор с аналогового порта
Rovi, ну в таком случае сразу шестнадцатеричное число выводить .
заодно сразу оптимизация решения получится.
А адрес смещения в таблице (индекс массива) получится просто сдвигом влево кода цифры на 3 (умножение на . Дальше уже выборка по адресу с полученным смещением.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
21.02.2018, 20:31
|
|
Прописка
Регистрация: 19.02.2008
Адрес: г. Иркутск
Сообщений: 277
Сказал спасибо: 218
Сказали Спасибо 170 раз(а) в 79 сообщении(ях)
|
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 ....
....
|
|
|
|
|
21.02.2018, 21:05
|
|
Гражданин KAZUS.RU
Регистрация: 10.06.2010
Сообщений: 598
Сказал спасибо: 222
Сказали Спасибо 234 раз(а) в 154 сообщении(ях)
|
Re: Вывод данных на индикатор с аналогового порта
Сообщение от andron007
|
С табличной конвертацией в пиках сложность еще такая - таблица должна находится в одном блоке программной памяти и быть не более этого блока (256 слов).
|
чушь.
Цитата:
|
Асм, PIC16F874A. Начал с ассемблера, чтобы конкретней разобраться что-как работает.
|
ТС рекомендую ознакомится: http://pic24.ru/doku.php/osa/articles/mpasm_formatting
там найдете как делается вывод цифр на сиды
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
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, время: 20:40.
|
|