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

Статус: Offline

Не получается вывести значения 1234

Исходный текст:

Код
Device = 16F676
'Declare all_digital =1  
Declare Xtal = 4  

'---------------------------------------------------------------------------------------------------  
Symbol SH_CP = PORTC.3
Symbol But = PORTC.1    
Symbol DS = PORTC.4  
Symbol ST_CP = PORTC.5    
'---------------------------------------------------------------------------------------------------  
Dim AD_RESULT As Word'Переменная для хранения результата преобразования АЦП    
Dim j As Word 'Переменная для хранения цифрового значения числа  
Dim n As Byte 'Число для вывода на индикатор ССИ  
Dim Value As Byte 'Переменная для осуществления табличного конвертирования цифры  
Dim b As Byte 'Символ точки для вывода на ССИ  
b = 128  
'-------------------------------Инициализация микроконтроллера--------------------------------------  
   DelayMS 500 'Задержка для стабилизации микроконтроллера  
   GoTo OVER_ADC_SUBS 'Переход на конфигурацию портов  
'-----------------------------------Старт преобразования--------------------------------------------  
ADC:  
   'ADCON0.0 = 1 'Включим АЦП  
   'DelayUS 50 'Задержка для заряда внутреннего конденсатора  
   'ADCON0.1 = 1 'Разрешение преобразования  
   'While ADCON0.1 = 1: Wend 'Опрос флага GO_DONE для завершения преобразования  
   'ADCON0.0 = 0 'Выключим АЦП  
   Return  
'----------------------------Инициализация регистров АЦП--------------------------------------------  
OVER_ADC_SUBS:    
   TRISA = %00001011       'RA0,RA1 - АЦП; RA2, RA4, RA5 - выходы; RA3 - 10к на +5В
   PORTA = %00000000       'Все порты в 0
    
   TRISC = %00000011       'RC0, RC1 - АЦП; RC2, RC3, RC4, RC5 - выходы;
   PORTC = %00000000       'Все порты в 0   
    
    
    
   ADCON0.6 = 0          'Источник опорного напряжения - +5В от шины питания  
   ADCON0.7 = 0          'Бит выбор формирователь - выравнивание правое
   ANSEL.0 = 0           'Установим RA0 цифровым  
   ANSEL.1 = 0           'Установим RA1 цифровым  
   ANSEL.2 = 0           'Установим RA2 цифровым  
   ANSEL.3 = 0           'Установим RA3 цифровым  
   ANSEL.4 = 0           'Установим RC0 цифровым
   ANSEL.5 = 1           'Установим RC1 аналоговым  
   ANSEL.6 = 0           'Установим RC2 цифровым  
   ANSEL.7 = 0           'Установим RC7 цифровым
'-----------------------------------Главная программа-----------------------------------------------  
Start: 'Бесконечный цикл  
   'ADCON0.2 = 1 'Выбор канала АЦП (см. 43 страницу даташита)  
   'ADCON0.3 = 0 'Выбор канала АЦП  
   'GoSub ADC 'Выполним преобразование АЦП  
   j = 1234
   GoSub Ind  
GoTo Start  
'--Подпрограмма динамической индикации с использованием двух сдвиговых регистров 74HC595 и 4-x ССИ--  
Ind:    
'---------------Зажигание первого справа разряда индикатора и вывод на него цифры-------------------  
n = Dig j, 0 'Выделяем из числа единицы  
GoSub Convert 'и конвертируем в код ССИ  
SHOut DS, SH_CP, MsbFirst, [8] 'Проталкиваем в нижний регистр бит для зажигания разряда № 4  
SHOut DS, SH_CP, MsbFirst,  [Value]'Проталкиваем в верхний регистр сконвертированный код для единиц  
ST_CP = 1 'Защелкиваем данные  
DelayMS 5
ST_CP = 0 'Обнуляем защелку данных  
'---------------Зажигание второго справа разряда индикатора и вывод на него цифры-------------------  
n = Dig j, 1 'Выделяем из числа десятки  
GoSub Convert 'и конвертируем в код ССИ  
SHOut DS, SH_CP, MsbFirst, [4] 'Проталкиваем в нижний регистр бит для зажигания разряда № 3  
SHOut DS, SH_CP, MsbFirst,   
[Value]ST_CP = 1 'Защелкиваем данные  
DelayMS 5
ST_CP = 0 'Обнуляем защелку данных  
'---------------Зажигание третьего справа разряда индикатора и вывод на него цифры------------------  
n = Dig j, 2 'Выделяем из числа сотни  
GoSub Convert 'и конвертируем в код ССИ  
SHOut DS, SH_CP, MsbFirst, [2] 'Проталкиваем в нижний регистр бит для зажигания разряда № 2  
SHOut DS, SH_CP, MsbFirst,  [Value]'Проталкиваем в верхний регистр сконвертированный код для сотен  
ST_CP = 1 'Защелкиваем данные  
DelayMS 5
ST_CP = 0 'Обнуляем защелку данных  
'---------------Зажигание четвертого справа разряда индикатора и вывод на него цифры----------------  
n = Dig j, 3 'Выделяем из числа тысячи  
GoSub Convert 'и конвертируем в код ССИ  
SHOut DS, SH_CP, MsbFirst, [1] 'Проталкиваем в нижний регистр бит для зажигания разряда № 1  
SHOut DS, SH_CP, MsbFirst,  [Value]'Проталкиваем в верхний регистр сконвертированный код для тысяч  
ST_CP = 1 'Защелкиваем данные  
DelayMS 5
ST_CP = 0 'Обнуляем защелку данных  

Return  
'---------------Зажигание первого справа разряда индикатора и вывод на него цифры-------------------  
Convert:  
'                  192 249
Value = LookUp n, [$C0, $F9, $A4, $B0, $99, $92, $82, $F8, $80, $90, $BF, $FF ]
'   таблица         0    1    2    3    4    5    6    7    8    9    -   off  
Return  
'---------------------------------------------------------------------------------------------------  
End
Прикрепления: 0509047.jpg(491Kb)

Сообщение отредактировал Monolith - Пн, 05.08.2013, 16:10
ЯНДЕКС Дата: 05.08.2013
shaman Дата: Пн, 05.08.2013, 16:24  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 176
Репутация: 5   ±
Замечания:   ±
На сайте с 07.11.2011

Статус: Offline

День добрый, Вы хотите просто вывести цифры или еще вольтметр сделать
И сегментники у Вас какие  с ОА или ОК . И скиньте сюда весь проект пожалуйста, с файлом протеуса и протона.

Сообщение отредактировал shaman - Пн, 05.08.2013, 16:27
Monolith Дата: Пн, 05.08.2013, 16:48  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 30
Репутация: 0   ±
Замечания:   ±
На сайте с 04.08.2013

Статус: Offline

Добрый день. Да для начала хочу понять как работает по 3 жилам то, напрямую я разобрался алгоритмом. Вот ххх как управляет хххх хххх (где х - 0 или 1) не могу въехать в алгоритм. Индикатор с общим анодом, но было бы не плохо сразу под два  типа и делать. Проект делал в Протеусе 8, компилятор Басик 3.5.1.5.
Прикрепления: termofen.pdsprj.f370840297321363_(21Kb) · Untitled.bas(5Kb)

Сообщение отредактировал Monolith - Пн, 05.08.2013, 16:57
Matrix252005 Дата: Пн, 05.08.2013, 16:56  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 675
Репутация: 20   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

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

Monolith, Вы только начали осваивать ПИКи или уже пробовали работать с самыми простыми программами, такими как помигать светодиодом, вывести на экран 16х2 надпись "Hello World"... Или Вы сразу в "бой"???

По поводу протеуса, у меня лично 7 версия... и пока переходить на 8 не буду... Если Вас не затруднит, переведите его под 7 версию...


THE TRUTH IS OUT THERE.

С уважением, Николай.
Monolith Дата: Пн, 05.08.2013, 16:59  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 30
Репутация: 0   ±
Замечания:   ±
На сайте с 04.08.2013

Статус: Offline

Ну как бы чайник в Бейсике для  Пик. Ранее работал в асме (в студенческие годы лет так 10 назад). Уже кнопками научился работать и диоды на прямую.... вот с 74HC595 подвис уже неделю разбираюсь и перелопачиваю что куда и как.
Matrix252005 Дата: Пн, 05.08.2013, 17:08  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 675
Репутация: 20   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Так что именно Вас интересует??? Как работает регистр сдвига, так эту информацию можно глянуть в интернете...

Может это Вам пригодится: http://www.terrarus.ucoz.ru/proton_plus_ide/index.html


THE TRUTH IS OUT THERE.

С уважением, Николай.
shaman Дата: Пн, 05.08.2013, 17:12  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 176
Репутация: 5   ±
Замечания:   ±
На сайте с 07.11.2011

Статус: Offline

Вот здесь очень хорошо расписано как работать с 74HC595, только программа там для АВР и на языке Bascom.
http://avrproject.ru/publ/kak_podkljuchit/bascom_avr_74hc595/2-1-0-44
Monolith Дата: Пн, 05.08.2013, 17:18  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 30
Репутация: 0   ±
Замечания:   ±
На сайте с 04.08.2013

Статус: Offline

У меня есть эта книга в электронном формате "http://www.terrarus.ucoz.ru/proton_plus_ide/index.html" и на сайте не все есть вернее не отображается. Я не могу понять почему в маем проекте 1 символа нет вообще, 2 отсутствует 1 разряд, 3 отсутствуют 4 разряда и 4 отсутствуют 3 разряда. Хотя все прописал капризному 676 порты работают в цифре и 1 зарезервировал под аналог (RC1). Версия 8 протеуса работает нормально с другими проектами. Я насколько понял алгоритм то получается в зависимости от требуемого числа мы падем 1 для подсвечивание разряда и 0 для для обратного. Перед сменой индикации мы включаем и выключаем через время катод или анод. Как взаимодействует программный код с 2 74РС595 понять не могу и тем самым исправить свои ошибки.
Matrix252005 Дата: Пн, 05.08.2013, 17:43  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 675
Репутация: 20   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

ОК!!! Вам именно под 676??? Я чуть позже скину Вам простой пример для 595 с ОА...

THE TRUTH IS OUT THERE.

С уважением, Николай.

Сообщение отредактировал Matrix252005 - Пн, 05.08.2013, 17:43
Monolith Дата: Пн, 05.08.2013, 17:53  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 30
Репутация: 0   ±
Замечания:   ±
На сайте с 04.08.2013

Статус: Offline

Добавил задержку в 1 с в "основном цикле" видна только 1 в первом, когда идет перерисовка индикации просматривается 2 и 3 .... и что не так?

Добавлено (05.08.2013, 17:53)
---------------------------------------------
При добавлении задержки между включением анода в 0,5 с символы по очереди загораются и тухнут и остается 1 символ при работе Общего цикла??? Теперь вопрос как сделать чтобы все символы оставались???

Matrix252005 Дата: Пн, 05.08.2013, 17:54  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 675
Репутация: 20   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Цитата (Monolith)
ST_CP = 1 'Защелкиваем данные  
DelayMS 5
ST_CP = 0 'Обнуляем защелку данных
  
Замените на PulsOut ST_CP, 1 и после вывода каждой цифры, сделайте задержку, для начала в 1 сек, потом уменьшайте до тех пор, пока все цифру не начнут норм отображаться...


THE TRUTH IS OUT THERE.

С уважением, Николай.
Monolith Дата: Пн, 05.08.2013, 17:54  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 30
Репутация: 0   ±
Замечания:   ±
На сайте с 04.08.2013

Статус: Offline

да именно 676 ))) самая капризная но и самая надежная и позволяет хранить в себе переменные (запоминать так сказать) даже без питания.
Matrix252005 Дата: Пн, 05.08.2013, 17:58  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 675
Репутация: 20   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Цитата (Monolith)
позволяет хранить в себе переменные (запоминать так сказать) даже без питания.

wacko Вообще то, любой ПИК это может делать!!!


THE TRUTH IS OUT THERE.

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

Статус: Offline

т.е. я так понимаю что от второй 74НС595 надо отказаться и в основной цикл добавить управление  анодами?

Добавлено (05.08.2013, 18:00)
---------------------------------------------
Ну я понимаю что любой, вопрос в другом как надежно и как трудно в коде это реализовать. Когда то делал своего рода сервис меню в 676 нажатием более 10 с одной или нескольких кнопок.

Matrix252005 Дата: Пн, 05.08.2013, 18:32  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 675
Репутация: 20   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Сейчас я подправлю Ваш проект и скину исходник и проект в протеусе, но под версию 7.10

THE TRUTH IS OUT THERE.

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