PIC16F676 и индикация
|
|
Monolith |
Дата: Пн, 05.08.2013, 16:09 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
30
Замечания:
±
На сайте с 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
Сообщение отредактировал
Monolith - Пн, 05.08.2013, 16:10
|
|
|
|
shaman |
Дата: Пн, 05.08.2013, 16:24 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
178
Замечания:
±
На сайте с 07.11.2011
Статус:
Offline
|
День добрый, Вы хотите просто вывести цифры или еще вольтметр сделать И сегментники у Вас какие с ОА или ОК . И скиньте сюда весь проект пожалуйста, с файлом протеуса и протона.
Сообщение отредактировал
shaman - Пн, 05.08.2013, 16:27
|
|
|
|
Monolith |
Дата: Пн, 05.08.2013, 16:48 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
30
Замечания:
±
На сайте с 04.08.2013
Статус:
Offline
|
Добрый день. Да для начала хочу понять как работает по 3 жилам то, напрямую я разобрался алгоритмом. Вот ххх как управляет хххх хххх (где х - 0 или 1) не могу въехать в алгоритм. Индикатор с общим анодом, но было бы не плохо сразу под два типа и делать. Проект делал в Протеусе 8, компилятор Басик 3.5.1.5.
Сообщение отредактировал
Monolith - Пн, 05.08.2013, 16:57
|
|
|
|
Matrix252005 |
Дата: Пн, 05.08.2013, 16:56 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
636
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 04.08.2013
Статус:
Offline
|
Ну как бы чайник в Бейсике для Пик. Ранее работал в асме (в студенческие годы лет так 10 назад). Уже кнопками научился работать и диоды на прямую.... вот с 74HC595 подвис уже неделю разбираюсь и перелопачиваю что куда и как.
|
|
|
|
Matrix252005 |
Дата: Пн, 05.08.2013, 17:08 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
636
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
178
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
636
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 04.08.2013
Статус:
Offline
|
Добавил задержку в 1 с в "основном цикле" видна только 1 в первом, когда идет перерисовка индикации просматривается 2 и 3 .... и что не так? Добавлено (05.08.2013, 17:53) --------------------------------------------- При добавлении задержки между включением анода в 0,5 с символы по очереди загораются и тухнут и остается 1 символ при работе Общего цикла??? Теперь вопрос как сделать чтобы все символы оставались???
|
|
|
|
Matrix252005 |
Дата: Пн, 05.08.2013, 17:54 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
636
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 04.08.2013
Статус:
Offline
|
да именно 676 ))) самая капризная но и самая надежная и позволяет хранить в себе переменные (запоминать так сказать) даже без питания.
|
|
|
|
Matrix252005 |
Дата: Пн, 05.08.2013, 17:58 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
636
Замечания:
±
На сайте с 12.10.2007
Статус:
Offline
|
Цитата (Monolith) позволяет хранить в себе переменные (запоминать так сказать) даже без питания. Вообще то, любой ПИК это может делать!!!
THE TRUTH IS OUT THERE.
С уважением, Николай.
|
|
|
|
Monolith |
Дата: Пн, 05.08.2013, 18:00 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
30
Замечания:
±
На сайте с 04.08.2013
Статус:
Offline
|
т.е. я так понимаю что от второй 74НС595 надо отказаться и в основной цикл добавить управление анодами? Добавлено (05.08.2013, 18:00) --------------------------------------------- Ну я понимаю что любой, вопрос в другом как надежно и как трудно в коде это реализовать. Когда то делал своего рода сервис меню в 676 нажатием более 10 с одной или нескольких кнопок.
|
|
|
|
Matrix252005 |
Дата: Пн, 05.08.2013, 18:32 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
636
Замечания:
±
На сайте с 12.10.2007
Статус:
Offline
|
Сейчас я подправлю Ваш проект и скину исходник и проект в протеусе, но под версию 7.10
THE TRUTH IS OUT THERE.
С уважением, Николай.
|
|
|
|