Перейти к содержанию

Помогите с индикацией Pic16f84


sky132

Рекомендуемые сообщения

Доброго времени суток! Возникла проблема. Написал программу для упаковочной машины, зашил в контроллер все работает.

НО! Шеф рвет и мечет требует динамическое изменение одного параметра.

Я прекрасно понимаю как это реализовать через ЕЕПРОМ, но как устроить индикацию ума не приложу, просто не встречался с этим пока. 12 портов занято, куда там пихать 2 семисегментных индикатора и две кнопки (больше/меньше) :blink:

;ПРОГРАММА: УПРАВЛЕНИЕ УПАКОВОЧНЫМ АВТОМАТОМ

PROCESSOR 16F84 ;ТИП КОНТРОЛЛЕРА

__CONFIG 03FF5 ;ОПОРНЫЙ ГЕНЕРАТОР - XT ГЕНЕРАТОР,

;СТОРОЖЕВОЙ ТАЙМЕР WDT - ВЫКЛЮЧЕН,

;ТАЙМЕР ВКЛЮЧЕНИЯ ПИТАНИЯ PWRT - ВЫКЛЮЧЕН,

;БИТ ЗАЩИТЫ ПАМЯТИ ПРОГРАММ CP - НЕ УСТАНОВЛЕН.

;ПОДГОТОВИТЕЛЬНЫЕ ОПЕРАЦИИ

;СТАНДАРТНЫЕ РЕГИСТРЫ

OPTIONR EQU 01H

STATUS EQU 03H

INTCON EQU 0BH ;РЕГИСТР УПРАВЛЕНИЯ ПРЕРЫВАНИЯМИ

PORTA EQU 05H ;ПОРТ .А.

TRISA EQU 05H ;ПОРТ .А. В 1-ОМ БАНКЕ (КОНФИГУРАЦИЯ)

PORTB EQU 06H

TRISB EQU 06H

;БИТЫ УПРАВЛЕНИЯ

RP0 EQU 5 ;БИТ ВЫБОРА БАНКА (STATUS)

;РЕГИСТРЫ ПОЛЬЗОВАТЕЛЯ

SECH EQU 0DH ;СТАРШИЙ БАЙТ ЗАДЕРЖКИ

SECL EQU 0EH ;МЛАДШИЙ БАЙТ ЗАДЕРЖКИ

FLAU EQU 0FH ;ФЛАГ АВТОМАТИЧЕСКОГО РЕЖИМА

F EQU 1

START CLRF INTCON ;ЗАПРЕТИТЬ ВСЕ ПРЕРЫВАНИЯ

BSF STATUS, RP0 ;БАНК 1

; =================================================

; | ОПРЕДЕЛЯЕМСЯ С ВЫВОДАМИ ПОРТА .А. |

; | RA0 - КНОПКА "ПУСК" |

; | RA1 - КНОПКА "РУЧНАЯ РАБОТА ВПЕРЕД" |

; | RA2 - КНОПКА "СТОП" |

; | RA3 - КНОПКА "РЕВЕРС" |

; -------------------------------------------------

; | ОПРЕДЕЛЯЕМСЯ С ВЫВОДАМИ ПОРТА .В. |

; | ВВОД |

; | RB0 - ФОТОДАТЧИК |

; | RB1 - ГЛАВНЫЙ ДАТЧИК |

; | RB2 - ДОЗА ГОТОВА |

; | ВЫВОД |

; | RB3 - ПРИВОД ВПЕРЕД |

; | RB4 - ПРИВОД НАЗАД |

; | RB5 - СОЛИНОИДЫ ПРОТЯЖКИ |

; | RB6 - МАГНИТНЫЙ ТОРМОЗ |

; | RB7 - РАЗГРУЗКА РАЗРЕШЕНА |

; =================================================

MOVLW B'00001111' ;ОПРЕДЕЛЯЕМ 4 МЛАДШИХ БИТА ПОРТА .А. НА ВВОД

MOVWF TRISA ;ОСТАЛЬНЫЕ НА ВЫВОД

MOVLW B'00000111' ;ОПРЕДЕЛЯЕМ 3 МЛАДШИХ БИТА ПОРТА .В. НА ВВОД ОСТАЛЬНЫЕ НА ВЫВОД

MOVWF TRISB

MOVLW B'10000111'

MOVWF OPTIONR ;КОНФИГУРАЦИЯ РЕГИСТРА OPTION

BCF STATUS, RP0 ;БАНК 0

INIT CLRF FLAU ;ОЧИСТКА ПЕРЕМЕННОЙ FLAU

CLRF PORTA ;ИНИЦИАЛИЗАЦИЯ ПОРТА .А.

CLRF PORTB ;ИНИЦИАЛИЗАЦИЯ ПОРТА .B.

;СКАНИРУЕМ КНОПКИ

SCANBTN BTFSC PORTA, 0 ;НАЖАТА КНОПКА "ПУСК" ?

GOTO PP_PUSK ;ДА -> ПЕРЕХОД НА ПОДПРОГРАММУ PP_PUSK

BTFSC PORTA, 1 ;НАЖАТА КНОПКА "РРВ" ?

CALL PP_RRV ;ДА -> ПЕРЕХОД НА ПОДПРОГРАММУ PP_RRV

BTFSC PORTA, 2 ;НАЖАТА КНОПКА "СТОП" ?

CALL PP_STOP ;ДА -> ПЕРЕХОД НА ПОДПРОГРАММУ PP_STOP

;BTFSC PORTA, 1 ;НАЖАТА КНОПКА "РЕВЕРС" ?

;CALL KN_PUSK ;ДА -> ПЕРЕХОД НА ПОДПРОГРАММУ PP_REV

GOTO SCANBTN

;ПОДПРОГРАММА КНОПКИ "ПУСК"

PP_PUSK BTFSC PORTB, 1 ;ПРОВЕРЯЕМ ИСХОДНОЕ ПОЛОЖЕНИЕ АВТОМАТА (ГЛ. ДАТЧИК)

GOTO ISH_POL ;НЕТ -> УСТАНАВЛИВАЕМ АВТОМАТ В ИСХОДНОЕ ПОЛОЖЕНИЕ

;MOVLW 1 ;УСТАНАВЛИВАЕМ ПЕРЕМЕННУЮ АВТОМАТИЧЕСКОГО РЕЖИМА В "1"

;MOVWF FLAU ;ДЛЯ ЦИКЛА ДВИЖЕНИЯ ВПЕРЕД

GOTO VPER_AU ;ПЕРЕХОДИМ В АВТОМАТИЧЕСКИЙ РЕЖИМ

GOTO PP_PUSK ;ВРЕМЕННО!!!

;ПОДПРОГРАММА УСТАНОВКИ АВТОМАТА В ИСХОДНОЕ ПОЛОЖЕНИЕ

ISH_POL BSF PORTB, 3 ;ПУСТИЛИ ПРИВОД ВПЕРЕД!

BTFSC PORTA, 2 ;ПРОВЕРЯЕМ КНОПКУ "СТОП", НАЖАТА?

GOTO PP_STOP ;ДА -> ПЕРЕХОД НА ПОДПРОГРАММУ PP_STOP (ОСТАНОВКА)

BTFSC PORTB, 0 ;ПРОВЕРЯЕМ ФОТОДАТЧИК

CALL FOTO

BTFSC PORTB, 1 ;НЕТ -> ПРОВЕРЯЕМ ГЛ. ДАТЧИК

GOTO PP_PUSK ;ДА -> ПЕРЕХОДИМ НА ПОДПРОГРАММУ КНОПКИ "ПУСК"

GOTO ISH_POL ;НЕТ -> ЦИКЛ

;ПОДПРОГРАММА "СТОП"

PP_STOP CLRF PORTB ;ОЧИСТКА ПОРТА .В.

;CLRF FLAU ;СБРОС ПЕРЕМЕННОЙ АВТОМАТИЧЕСКОГО РЕЖИМА

CALL PAUSE2 ;ЗАДЕРЖКА (ДАЕМ ОСТАНОВИТЬСЯ ПРИВОДУ)

GOTO INIT ;ПЕРЕХОД НА НАЧАЛО (ИНИЦИАЛИЗАЦИЯ)

;ПОДПРОГРАММА ФОТОДАТЧИКА

FOTO BSF PORTB, 5 ;СОЛЕНОИДЫ

CALL PAUSE1 ;ДЕРЖИМ НАПРЯЖЕНИЕ 0.2 СЕК

BCF PORTB, 5 ;ОТПУСТИТЬ СОЛЕНОИДЫ

BSF PORTB, 6 ;ВКЛЮЧИТЬ МАГНИТНЫЙ ТОРМОЗ

RETURN ;ВОЗВРАТ

;ПОДПРОГРАММА АВТОМАТИЧЕСКОГО РЕЖИМА

VPER_AU BTFSC PORTA, 2 ;ПРОВЕРЯЕМ КНОПКУ "СТОП", НАЖАТА?

GOTO PP_STOP ;ДА -> ПЕРЕХОД НА ПОДПРОГРАММУ PP_STOP (ОСТАНОВКА)

BTFSC PORTB, 1 ;ПРОВЕРЯЕМ ГЛ. ДАТЧИК

CALL W_DOZA ;ПЕРЕХОД НА ПОДПРОГРАММУ ОЖИДАНИЯ СИГНАЛА ОТ ДОЗАТОРА (ДОЗА ГОТОВА)

BSF PORTB, 3 ;ПУСТИЛИ ПРИВОД ВПЕРЕД!

BTFSC PORTB, 0 ;ПРОВЕРЯЕМ ФОТОДАТЧИК

CALL FOTO

GOTO VPER_AU ;ЦИКЛ

;ПОДРОГРАММА КНОПКИ "РРВ"

PP_RRV BSF PORTB, 3 ;ПУСТИЛИ ПРИВОД ВПЕРЕД!

BTFSC PORTB, 0 ;ПРОВЕРЯЕМ ФОТОДАТЧИК

CALL FOTO

BCF PORTB, 3

RETURN ;ВОЗВРАТ

;ПОДПРОГРАММА ПРОВЕРКИ СИГНАЛА "ДОЗА ГОТОВА"

W_DOZA BTFSC PORTA, 2 ;ПРОВЕРЯЕМ КНОПКУ "СТОП", НАЖАТА?

GOTO PP_STOP ;ДА -> ПЕРЕХОД НА ПОДПРОГРАММУ PP_STOP (ОСТАНОВКА)

CALL PAUSE2 ;<<<<<<<<<<<<<<<<<<<<<<<<<<<< ВОТ ЗДЕСЬ ДОЛЖНА МЕНЯТЬСЯ ДЛИТЕЛЬНОСТЬ ЗАДЕРЖКИ

BTFSC PORTB, 2 ;ЖДЕМ СИГНАЛА "ДОЗА ГОТОВА"

GOTO RR ;СИГНАЛА ЕСТЬ -> ПЕРЕХОД НА RR

BCF PORTB, 3 ;ОСТАНОВИЛИ ПРИВОД

GOTO W_DOZA ;СИГНАЛА НЕТ -> ЦИКЛ

RR BSF PORTB, 7 ;ПОСЫЛАЕМ СИГНАЛ ДОЗАТОРУ "РАЗГРУЗКА РАЗРЕШЕНА"

GOTO VPER_AU ;ОБРАТНО В ПОДПРОГРАММУ АВТОМАТИЧЕСКОГО РЕЖИМА

PAUSE1 MOVLW .250

MOVWF SECL

MOVLW .20

MOVWF SECH

P1 DECFSZ SECL, F

GOTO P1

DECFSZ SECH, F

GOTO P1

RETURN

PAUSE2 MOVLW .250

MOVWF SECL

MOVLW .250

MOVWF SECH

P2 DECFSZ SECL, F

GOTO P2

DECFSZ SECH, F

GOTO P2

RETURN

END

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Расширить количество портов можно поставив регистр сдвига, например 74НС595, что касается индикации есть драйверы LED индикации с управлением по I2C, SPI (типа MC14489), можно перейти на более многоногий контроллер.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Расширить количество портов можно поставив регистр сдвига, например 74НС595, что касается индикации есть драйверы LED индикации с управлением по I2C, SPI (типа MC14489), можно перейти на более многоногий контроллер.

Например? Я только с 16ф84 имею опыт общения. Мне как то вскользь говорили что можно и при занятых портах это реализовать. Киньте линк если можно, как вообще работать с семисигментниками и контроллером пик16ф84а. Буду очень благодарен.

И еще может кто знает как синхронизировать два контроллера.

Изменено пользователем sky132
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Можно под все это задействовать порт А, периодически переключая его то на ввод, то на вывод.

Для подключения индикаторов можно использовать порты RA3-RA0, переключая на время индикации их на вывод. Индикаторы можно подключить через дешифратор двоичного-десятичного кода в семисегментный, например к555ид18 (понадобится три порта, например RA2-RA0). И один порт RA3 нужен для переключения между двумя индикаторами, это 2 транзисторных ключа, один из которых управляется через инвертор - еще один транзисторный ключ (чтоб не ставить лишние микросхемы).

Ну а кнопки, как я понял, теперь их будет 6, можно подключить к портам RA2-RA0 через шифратор, например к555ив1(или ив3). И для определения нажатой кнопки просто считывать число с порта.

Вроде бы все))

Ссылка на комментарий
Поделиться на другие сайты

Например? ...... Киньте линк если можно, как вообще работать с семисигментниками и контроллером пик16ф84а. .....

Например http://www.schemz.narod.ru/Term_shift/Term_shift.htm . Правда там 155ир8 и программу я писал на Си, но на асме тоже просто -сдвигайте свой байт (RLF или RRF) и выводите бит переноса на порт вместе с импульсом сдвига для регистра.

Ссылка на комментарий
Поделиться на другие сайты

Вешаешт на порт Б микросхему ИР22 перевешиваешь кнопки на Б подключаешь их через АП6 освобождая порт RA0 строб ИР22до его подачи выставляешь в порт б данные на вывод

RA1 строб клавиатуры читаеш значение кнопок если без дишифратора то на прямую подсоединяешь RA2 RA3 онодам или катодом в зависимости от того какие индикаторы RB соответственно тоже на прямую к индикаторам

Алгоритм таков выставил первый разряд на Б RA2 = 1

Nop /пусть погорит немного/

ra2 =0

выставил второй

ra3=1

nop /пусть погорит немного/

ra3=0

ra1=1

прочитал кнопки

ra1=0

выставил данные на вывод на перифирию приводы ...

RA1=1

Я вешал на 1684 28 кнопок и 10 7сигм индикаторов +3 испустройства

Ваши права преследуются по закону!

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...