24.09.2014, 21:08
|
|
Гражданин KAZUS.RU
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
|
PIC16F676 + 2x595
Доброго времени (хотя по погоде не скажешь)!
И снова нарыл себе проблему "неразрешимую"...
Имеем 676 пик и два 595 регистра. На одном - сегменты, на втором - разряды через ключи, индикаторы ОА.
Дык вот: установки, подпрограмма записи в 595 и само "тело", без лирики.
Прерываний нет. В "Протеусе" все красиво и пушисто и работает, в железяке (лежит перед монитором) первая часть да, вторая - нет. И не только такой набор. Попытка записывать в каждый разряд разную инфу - крах. Осцилографом - во время счетных импульсов (вижу все 8, вижу "Lock" импульс), на "данных разрядов" - "1!
Ну честно, уже мозги кипят
В подпрограмме задвигания "T_PORTC" добавил в поисках истины. Эта же "железка" работала и без него.: 1011111 и т.д. в разряды, коды цифр - в сегменты, call "Задвинуть".
На всякий "старая" подпрограмма обработки внешнего прерывания, отображает напряжение АЦП. Прерывания еще не разрешены!
ПА()мА()гИтЕ!
__________________
Смотрящий под ноги - звёзды видит в лужах.
|
|
|
|
25.09.2014, 03:35
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: PIC16F676 + 2x595
Что это вообще за кошмар такой?
Там нужен один MAX7219, который можно найти и в протеусе и засимулировать до смерти.
От вас же требуется просто опустить ногу CS, передать 2 байта по SPI с верхним клоком и поднять ногу CS. Но пока вы даже с публикацией картинки на сайт не справились.
|
|
|
|
25.09.2014, 19:46
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,508
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
|
Re: PIC16F676 + 2x595
Если в железе не работает, то вероятно не соблюдены реальные тайминги. Защелкивание данных в регистрах наверно происходит одновременно со сдвигом данных в регистры.
Либо, как было у меня - забыл вход разрешения выходов регистра подцепить к земле, он висел в воздухе и реагировал на наводки от рук, от этого светились все диоды сразу.
И еще может быть проблема в том, что все разряды быстро пробегают цикл от первого до последнего, а потом идет пауза во много раз превышающая время пробегания всех разрядов. Протеус без проблем засветит индикаторы, а свечения реального индикатора при такой скважности видно не будет.
Скрины неразборчивые.
Последний раз редактировалось NewWriter; 25.09.2014 в 20:00.
|
|
|
|
25.09.2014, 22:49
|
|
Гражданин KAZUS.RU
Регистрация: 27.11.2012
Адрес: 30км от Софии
Сообщений: 732
Сказал спасибо: 89
Сказали Спасибо 310 раз(а) в 180 сообщении(ях)
|
Re: PIC16F676 + 2x595
На картинке плохо видно. Если ключи 2803 сие плохая практика. В 2803 паразитные диоды. Ну был случай, летит 2803, вместе ним 595.
Выход: к ключам 4094, сия серия очень редко поводила. Плохо для светодиодов какбудто не подходит. Ток маленький.
В последней оЧень дешовой разработке стоит 595. Но только к индикаторам на 5В. Не более.
|
|
|
|
26.09.2014, 10:05
|
|
Прохожий
Регистрация: 12.05.2009
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: PIC16F676 + 2x595
попробуй вот так (это из работающей программы)
;************************************************* ***************************************
; вывод знаков через регистры 74НC595 на индикаторы
;************************************************* ***************************************
_digit_out ;п/п вывода данных на индикаторы
clrwdt
movfw digit1 ; вывод 1 - го знака
movwf digit ; данные из регистра в аккумулятор
call _loader ;
clrwdt ;
movfw digit2 ; вывод 2 - го знака
movwf digit ; данные из регистра в аккумулятор
call _loader ;
clrwdt ;
bsf save ;защелкивание данных
nop
nop
bcf save ;
return ;
_loader ;
clrwdt
movfw digit ; данные из регистра ‹digit› в аккумулятор
sublw .11 ;
btfsc STATUS,C ;
goto $+3 ; на перекодировку
movlw .10 ;
movwf digit ; данные из аккумулятор в регистр ‹digit›
movfw digit ; данные из регистра ‹digit› в аккумулятор
call _dig_bin ; на перекодировку
movwf data_temp ; из аккумулятора данные для вывода во временный регистр
movlw .8 ;
movwf cnt ; количество бит в счетчик
_nextbit
clrwdt ;
btfss data_temp,7 ; пересылаемый бит = 0 ?
bcf dig_data ; низкий уровень на вывод
btfsc data_temp,7 ; пересылаемый бит = 1 ?
bsf dig_data ; высокий уровень на вывод
nop
bsf sdvig ; включить стробирующий сигнал
nop
nop
bcf sdvig ; отключить стробирующий сигнал
nop
bcf dig_data ;
rlf data_temp,f ; сдвинуть данные влево
decfsz cnt,f ; уменьшить счетчик бит
goto _nextbit ; если не ноль - повторить
return
|
|
|
|
26.09.2014, 19:51
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,508
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
|
Re: PIC16F676 + 2x595
А вообщето нерационально использовать вторую 595 для переключения разрядов. Мало того, что нужен тактовый импульс для последовательного сдвига, так еще и тактовый импульс для параллельной передачи на вывод загруженного.
Лучше вместо 595 поставить 164. Тогда можно сдвигать "единицу" одним тактовым сигналом.
А если сделать вот так, то можно вообще один раз запустить "нулем" и потом только тактовые импульсы подавать, "единица" будет по кругу сама двигаться. Если разрядов меньше 8, то отбор сделать от нужного разряда
|
|
|
|
26.09.2014, 20:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.10.2004
Адрес: Нижний Новгород
Сообщений: 1,746
Сказал спасибо: 416
Сказали Спасибо 1,240 раз(а) в 551 сообщении(ях)
|
Re: PIC16F676 + 2x595
Похоже на ЧМЗ
__________________
Решил посоветовать, да забыл что...
|
|
|
|
28.09.2014, 19:51
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,508
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
|
Re: PIC16F676 + 2x595
Немного подумав пришел к выводу, что экономичнее сделать на двух 595, соединив их последовательно. Тогда можно использовать всего 3 линии управления. Загружаются данные через первую 595 сначала для второй 595 с выбором разряда цифры, затем загружаются данные текущей цифры в первую 595. И после этого идет положительный импульс для обновления информации. Индикатор с ОбщКат, транзисторные сборки в одной ULN2003A.
И это реально работает в железе, без всяких глюков и с первого раза, вот так:
Проект в MPLAB+Proteus с готовой прошивкой и исходниками во вложении ниже. (симуляция с калибровкой внутреннего осциллятора МК не работает. нужно либо отключить калибровку для симуляции, либо по последнему адресу памяти программ вручную прописать значение 3400. иначе симуляция будет крутиться на первых трех строчках).
А вот как раз в симуляции (в отличие от железа) в режиме Run на индикаторе выводится всякая фигня, видимо, анимация индикатора не успевает переключать сегменты. Пробовал разное minimum trigger time ставить - не помогает. Но косяков в коде нету, потому что в пошаговой отладке всё норм переключается и цифры норм, да и в железе без проблем. Наверно для симуляции нужно между переключениями разрядов вообще гасить разряд.
PS. А, понял, почему косяк с симуляцией. ULN2003 виновата. Если убрать ее и поставить просто инвертер, то сразу норм получается.
Для индикатора с ОА, то нужно инвертировать коды цифр, поправив таблицу. Если зажигание разрядов управляется "нулем", то нужно тоже в коде поменять местами "1" и "0".
Если нужно больше разрядов, то в заголовочном файле в строчке constant NumDigits = b'00001000' сдвигаем "единицу" левее.
Задержка переключения разрядов сделана на TMR0 без прерываний, просто по контролю флага переполнения. Нужны прерывания? Без проблем, вставляем весь текст в прерывания. Время выполнения чисто самого текста - 252-256 мкс при 4 МГц внурненней. Можно ускорить время выполнения за счет расхода регистров памяти.
Сообщение от 3d cube
|
Если ключи 2803 сие плохая практика. В 2803 паразитные диоды. Ну был случай, летит 2803, вместе ним 595.
|
И часто ли диоды эти горят? А если поставить ULN2001A (ULN2801) без внутренних резисторов и перед входами поставить внешние резисторы, то всё норм по защите будет.
Последний раз редактировалось NewWriter; 28.09.2014 в 20:35.
|
|
|
|
28.09.2014, 23:49
|
|
Гражданин KAZUS.RU
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
|
Re: PIC16F676 + 2x595
Оживленная реакция, спасибо!
... когда сделал вывод на индикацию с интервалом 1 импульс в пол секунды, заметил некую закономерность, до боли знакомую...
Так и получилось: выводы Clock и Lock в Протеусе/программе поменяны наоборот в железе. "Красивый" эффект получился и не слабая головная боль.
А по железу:
- две 595 потому как выводов не хватает;
- параллельная запись, дабы "быстрее" из обработки прерывания выйти;
- ключи BC850 или ВС860, смотря для какого индикатора, в моем случае ОА - 860.
- за советы по "какое железо лучше применять" спасибо, но это вариант "из того, что было.
Всем спасибо, тема закрыта!
Это есть то, что работает:
ZADVIG MOVLF 0X08,CYKL_INT ; Задвигаем в регистр
ZAD_0 BTFSS T_INT_S,0x00 ;
BCF PORTC,0x05 ;
BTFSC T_INT_S,0x00 ;
BSF PORTC,0x05 ;
BTFSS T_INT_R,0x00 ;
BCF PORTC,0x02 ;
BTFSC T_INT_R,0x00 ;
BSF PORTC,0x02 ;
RRF T_INT_S,F ;
RRF T_INT_R,F ;
BSF PORTC,0x04 ;
BCF PORTC,0x04
DECFSZ CYKL_INT,F ; по окончанию
GOTO ZAD_0 ; формирую импульс "засветки"
BSF PORTC,0x03 ;
BCF PORTC,0x03
RETURN ; вернусь
__________________
Смотрящий под ноги - звёзды видит в лужах.
|
|
|
|
08.01.2015, 08:46
|
|
Временная регистрация
Регистрация: 26.10.2008
Адрес: москва
Сообщений: 92
Сказал спасибо: 15
Сказали Спасибо 10 раз(а) в 5 сообщении(ях)
|
Re: PIC16F676 + 2x595
Да ужж... Программа разбита на 4 файла, жесть, в одном файле 4 строчки неисполняемого в MPLAB кода, после того как закомментировал эти строчки программа пошла, но только по шагам, правильно отображаются цифры. Значит с таймингами где-то накосячил. Общее впечатление, проект сырой. Я б у себя не стал такой проэкт применять, хотя у меня тоже 16F676 и не хватает ног. Но я по другому выхожу из положения. 74ALS164 + 74ALS138.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:26.
|
|