Динамическая индикация на PIC16F676 и сдвиговом регистре - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Динамическая индикация на PIC16F676 и сдвиговом регистре
Динамическая индикация на PIC16F676 и сдвиговом регистре
lospartos Дата: Ср, 26.10.2011, 22:09  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Новенький
Сообщений: 16
Репутация: 0   ±
Замечания:   ±
На сайте с 19.03.2011

Статус: Offline

Доброго времени суток!
Мне понадобился простой вольтметр с пределом измерения до 11-12 вольт и отображением 2-х знаков после запятой. За основу я взял широко известную схему на PIC16F676 с отображением данных на 7-сегментным LED индикаторе.
Проблема появилась при организации динамической индикации на 4-х индикаторах, ведь сегментов у индикатора 7 (точку я зажигаю одновременно со 2 разрядом), а у этого PIC портов регистра С всего 6, еще один я заимствую у порта А, еще 4 порта А использую под выводы разрядов, еще один - под АЦП. Вроде, все логично, но зажечь все 4 разряда и добиться нормальной работы вольтметра я пока не смог.
Но есть достойный выход - использовать для управления сдвиговый регистр или дополнительный дешифратор, который в моем случае будет, как раз кстати. Подскажите, пожалуйста, на моем примере, как все это организовать. Пусть для конкретности это будет дешифратор 514ИД2, предназначенный для перевода двоичного кода в виде 1-2-4-8 в семисегментные коды индикатора а-ь-с-d-е-f-g.
Заранее благодарен

Добавлено (26.10.2011, 22.09.41)
---------------------------------------------
Описание дешифратора http://www.shema.ru/cgi-bin/rshema.pl?name=12&file=vk-7el.shtml

ЯНДЕКС Дата: 26.10.2011
Matrix252005 Дата: Чт, 27.10.2011, 09:25  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 672
Репутация: 20   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Приятного времени суток!

lospartos, Вам сильно критично кол-во м/с??? У 514ИД2 - аналогов нет (по крайней мере, я не нашел...)

Смотрите, что у меня есть на данный момент:

4033 - стат - упр 2 провода
595 - стат - 4 пр (можно и 3)
4094 - // - // -
4094 - динамика 4 пр

а также: 74145 - упр разрядами, 7493+4511 - сегментами.

Нарисуйте свою будущую схему в протеусе, как Вы ее представляете и от нее начнем "танцы с бубнами" happy


THE TRUTH IS OUT THERE.

С уважением, Николай.
Matrix252005 Дата: Чт, 27.10.2011, 18:00  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 672
Репутация: 20   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

lospartos, если Вам нужен только вольтметр, вот, МК PIC12F675 + 2х4094 (можете использовать 74НС595, только ОЕ вместо "+", посадите на "-") + 4 х 7 (ОА)

sad С 676 у меня не получилось!!! И чтобы не забивать себе мозги (завтра на работе буду отсутствовать), решил на 675.

З.Ы. cool В следующий раз, выложите хотя бы схему и то что у Вас получилось с кодом...
Прикрепления: ADC_675.dsn(131Kb) · 675.bas(1Kb) · 675.hex(4Kb)


THE TRUTH IS OUT THERE.

С уважением, Николай.
lospartos Дата: Чт, 27.10.2011, 20:42  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Новенький
Сообщений: 16
Репутация: 0   ±
Замечания:   ±
На сайте с 19.03.2011

Статус: Offline

Matrix252005, добрый вечер!
Quote (Matrix252005)
(завтра на работе буду отсутствовать)
- а я как раз на работе этим не могу заниматься, только пару часов вечером
Выкладываю вариант схемы индикации. Исходники выложу до выходных. Для меня Протеус - пока новинка. На работе упорно не хочет ставиться (Windows 7), а дома - до выходных нет времени.
Прикрепления: 0104457.jpg(40Kb) · PIC16F676.dsn(81Kb)
lospartos Дата: Чт, 27.10.2011, 22:16  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Новенький
Сообщений: 16
Репутация: 0   ±
Замечания:   ±
На сайте с 19.03.2011

Статус: Offline

Но сидеть до выходных тоже без дела не хотелось, вот еще вариант схемы с дешифратором CD4056, типа 514ИД2.
http://html.alldatasheet.com/html-pdf/26882/TI/CD4056/45/2/CD4056.html - описание дешифратора.
Ну, а чтобы без дела не сидеть, прикинул, что можно было бы сделать в этой ситуации, на примере вывода одного числа:

Reg Var PORTA 'Число отображаемое на разрядах от 0 до 3'
Value Var Word 'Отображаемое число'

TRISC = %000000
TRISA = %0001000 'Погасить аноды'

Value = 3527 'Это число будем выводить'
main:
PortA.0 = 1 'Включим анод 0 разряда'
Reg = Value DIG 0 'Выделяем число, отображаемое на этом знакоместе'
Gosub Disp 'Отображаем число на этом знакоместе'
Pause 5 'Показываем это число 5 мс'
PortA.0 = 0 'Выключаем анод 0 разряда'

PortA.1 = 1 'Включим анод 1 разряда'
Reg = Value DIG 1 'Выделяем число, отображаемое на этом знакоместе'
Gosub Disp 'Отображаем число на этом знакоместе'
Pause 5 'Показываем это число 5 мс'
PortA.1 = 0 'Выключаем анод 1 разряда'

PortA.2 = 1 'Включим анод 2 разряда'
Reg = Value DIG 2 'Выделяем число, отображаемое на этом знакоместе'
Gosub Disp 'Отображаем число на этом знакоместе'
Pause 5 'Показываем это число 5 мс'
PortA.2 = 0 'Выключаем анод 2 разряда'

PortA.4 = 1 'Включим анод 3 разряда'
Reg = Value DIG 3 'Выделяем число, отображаемое на этом знакоместе'
Gosub Disp 'Отображаем число на этом знакоместе'
Pause 5 'Показываем это число 5 мс'
PortA.4 = 0 'Выключаем анод 3 разряда'
Goto main

Disp:
Select Case Reg
Case 0
C = %000000

Case 1
C = %000001

Case 2
C = %000100

Case 3
C = %000011

Case 4
C = %000100

Case 5
C = %000101

Case 6
C = %000110

Case 7
C = %000111

Case 8
C = %001000

Case 9
C = %001001

End select
Return
Прошил, поставил на монтажку, подал питание - горят 0-0-0
Прикрепления: 6067432.dsn(135Kb)
lospartos Дата: Чт, 27.10.2011, 22:39  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Новенький
Сообщений: 16
Репутация: 0   ±
Замечания:   ±
На сайте с 19.03.2011

Статус: Offline

Не ту схему прикрепил
Прикрепления: 5397502.dsn(139Kb)
Matrix252005 Дата: Пт, 28.10.2011, 09:52  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 672
Репутация: 20   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Приятного времени суток.

lospartos, просмотрел Ваш код и возникло пару вопросов:

1) (и самый главный !!!! ) Мы в разделе "Proton PicBasic", а Ваш код для "PicBasic" !!!
2) Вы присваиваете "С = ххххх", а что такое "С"??? Что за переменная???
3) После "выборки", Вы должны значения "С" присвоить чему то!!!
4) Reg Var PORTA - при этом, Вы переменной "Reg" присваиваете какое то значение!!!


THE TRUTH IS OUT THERE.

С уважением, Николай.
lospartos Дата: Пн, 31.10.2011, 00:26  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Новенький
Сообщений: 16
Репутация: 0   ±
Замечания:   ±
На сайте с 19.03.2011

Статус: Offline

Спасибо за комментарии, этот код - проба что-то сделать из того, что есть. Завтра еду в Митино, возьму нужный сдвиговый регистр.

Добавлено (30.10.2011, 23.47.11)
---------------------------------------------
Matrix252005, микросхемы 74НС595 я приобрел. Для начала, конечно, нужно поиграться с ними в Протеусе. По описанию, данная микросхема представляет собой синхронный преобразователь последовательного кода в параллельный 8-и разрядный. В Вашем проекте для отображения информации используется два таких дешифратора, и как понимаю, это в качестве демонстрации возможности дешифратора. А если все же минимизировать число корпусов, то в моем случае все 6 портов регистра С и 1 порт регистра А я использую для отображения сегментов, а из 5 оставшихся регистра А один используется для АЦП, остаются 4 порта. Как ими правильно распорядиться, ведь не все ножки могут быть выходами?

Добавлено (31.10.2011, 00.26.18)
---------------------------------------------
Заглулил симбиоз PIC16F676 и 74HC595, насыпало кучу различных схем. Вернее, схема подключения одна и та же. Вот я ее и возьму в качестве основы для Протеуса. Так что мои опасения по нехватке портов - напрасны.

lospartos Дата: Пн, 31.10.2011, 01:12  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Новенький
Сообщений: 16
Репутация: 0   ±
Замечания:   ±
На сайте с 19.03.2011

Статус: Offline

А вот мой проект. В принципе, какой смысл пытаться вывести какое-то мифическое число Х-Х-Х-Х, если можно озадачиться измерять напряжение до 5в?
Так что я сразу в проекте поставил делитель. Кстати, еще вопрос. Можно заставить индикатор в таком включении заставить при необходимости выводить служебную информацию, типа Eror?
Прикрепления: My_project.dsn(89Kb)
Matrix252005 Дата: Пн, 31.10.2011, 11:13  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 672
Репутация: 20   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Приятного времени суток.

lospartos, посмотрел я Вашу схему (My_project.dsn), так не получится!!! Как Вы собираетесь подать на вход экрана, сразу "+" и "-"???

Объясню: для того, чтобы "зажечь" сегмент, Вам нужно, на нужный разряд подать "+" (потому что, Вы используете экран с общим анодом), а на сегмент "-". И чем Вас не устраивает регистр сдвига??? Просто, в коде будет не одна таблица, а две... Рез R8, переместите с 2 выхода экрана на Q7 регистра.

В принципе, у Вас есть готовый код (тот, что я выкладывал раньше), только измените программу под нужный Вам МК и замените часть кода, который отвечает за вторую м/с и все...

Я делаю именно так, беру чью ту программу, разбираюсь в ней и подстраиваю под себя... wink


THE TRUTH IS OUT THERE.

С уважением, Николай.
lospartos Дата: Вт, 01.11.2011, 14:26  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Новенький
Сообщений: 16
Репутация: 0   ±
Замечания:   ±
На сайте с 19.03.2011

Статус: Offline

Добрый день, Matrix252005.
Я все сделаю в традициях форума - переделаю схему и представлю ее в лучшем для редактирования варианте. Вопрос времени - переустановить Протон под MPLAB IDE и начать в нем работать.
В нем есть реальные отличия от PRO?
Matrix252005 Дата: Ср, 02.11.2011, 13:32  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 672
Репутация: 20   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Приятного времени суток.

lospartos,

Quote
В нем есть реальные отличия от PRO?


Реального изменения нет!!! Просто нужно привыкнуть... Чуть по другому описываются переменный, например:

MCS - Var1 VAR Byte
Proton - Dim Var1 AS Byte

есть еще некоторые отличия, но к ним привыкаешь очень быстро.

Добавлено (02.11.2011, 13.32.17)
---------------------------------------------
Приятного времени суток!

Quote (lospartos)
Можно заставить индикатор в таком включении заставить при необходимости выводить служебную информацию, типа Eror?


На этот "экран" - можно выводить что угодно, но !!!! на сколько он Вам позволит (сарказм smile ) А если серьезно, "Eror" можно. Я себе так и делал, когда делал термометр на кухню. Если с датчиком что то случалось, он на экране (7х3) писал "Err"

А по поводу 676, у меня получилось его запустить, сейчас подгоню под Вашу схему (My_project.dsn) и выложу. ОК?


THE TRUTH IS OUT THERE.

С уважением, Николай.
Matrix252005 Дата: Ср, 02.11.2011, 14:16  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 672
Репутация: 20   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

lospartos, вот, смотрите что получилось. Правда, не совсем правильно... Но для примера пойдет... Точнее, сколько людей, столько и способов решений....

Смотрите, пользуйтесь... biggrin
Прикрепления: 7seg_676_595.bas(2Kb) · 7seg_676_595.hex(5Kb) · 8919143.dsn(95Kb)


THE TRUTH IS OUT THERE.

С уважением, Николай.
lospartos Дата: Сб, 26.11.2011, 00:25  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Новенький
Сообщений: 16
Репутация: 0   ±
Замечания:   ±
На сайте с 19.03.2011

Статус: Offline

Matrix252005, здравствуйте!
Спасибо за идею и советы.
Наконец-то появилась возможность заняться проектом.
Замысел программы вполне ясен. Но вопросы, конечно, появились, в основном из-за экзотики Протона. Вот в подпрограмме вывода сегментов на экран есть команда SHOut, а на один из параметров - MsbFirst компилятор постоянно ругается:
LCD
I = LookUp N,[$C0, $F9, $A4, $B0, $99, $92, $83, $F8, $80, $98]
SHOut DPin, Cpin, MsbFirst, [I]
PulsOut STB, 1
DelayMS 50
Return
Еще прошу поподробнее пояснить алгоритм вывода 3 цифры:
Case 2
High PORTA.1
I = LookUp N, [$40, $79, $24, $30, $19, $12, $03, $78, $00, $18]
SHOut DPin, Cpin, MsbFirst, [I]
PulsOut STB, 1
DelayMS 50
Low PORTA.1
При этом Ваш готовый hex нормально залился, но индикатор отображает цифры как в бегущей строке, с права на лево. Это лечится правильным подбором времени зажигания - гашения знакоместа или как-то по-другому.
Вот сразу столько вопросов по короткому алгоритму sad
Matrix252005 Дата: Пн, 28.11.2011, 12:10  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 672
Репутация: 20   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Приятного времени суток, lospartos!

Quote (lospartos)
...но индикатор отображает цифры как в бегущей строке...


wink просто, нужно, либо полностью убрать "DelayMS 50", либо, уменьшить (подобрать под себя). Вашу прогу проверял в протеусе, вот и пришлось поставить задержку, чтобы было видно как работает прога...

Quote (lospartos)
Еще прошу поподробнее пояснить алгоритм вывода 3 цифры:


Там все тоже самое что и в других цифрах, только своя таблица!!! (к основным цифрам, добавлена точка.)

Если у Вас протон ругается при компиляции, выложите этот проект (только сам файл *.bas), я посмотрю. Может дело в Вашем протоне!!!


THE TRUTH IS OUT THERE.

С уважением, Николай.
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Динамическая индикация на PIC16F676 и сдвиговом регистре
Страница 1 из 212»
Поиск: