Свежие обсуждения
Микроконтроллеры

Ликбез по программированию PIC , vol. # 2

1 7 17

немного изменил алгоритм - сделал проверку нового состояния клавиатуры не по KeyResult, а по Number
по старому при последовательности "*" -> "*" и "5" -> "5" выход из цикла опроса происходил три раза: код "*", затем код "5" с признаком нажатой "*" и затем еще раз код "5" уже без признака нажатой "*"
в результате при однократном нажатии цифровой кнопки на выходе было "двойное" нажатие
теперь та же последовательность нажатий даст два выхода из цикла: код "*" и затем код "5" с признаком нажатой "*"
т. е., если в комбинации сначала отпустить "*" - код "5" повторно выведен не будет,
но если сначала отпустить "5" - на выходе получим еще раз код "*"
такое поведение осложняет использование "*" и "#" одновременно и как клавиши модификации цифровых клавиш (навроде Shift и Alt у компьютера), и как отдельные клавиши ("отмена" и "ввод"), хотя вроде на компьютере одновременное использование обоих вариантов тоже не делают
теперь возможно стоит сделать граф, хотя на мой взгляд граф подходит далеко не для всех проектов, и к этому в том числе - в алгоритме нет устойчивых состояний, в которых устройство будет находиться до определенного события
и скорее к ассемблеру (и модели в протеусе - предлагаю пока просто вывести KeyResult на 8 светодиодов, подключенных к PORTA)

 

... а в ответ тишина
составил для себя техзадание по проекту "кодовый замок" - есть желающие посмотреть/проверить/покритиковать?
правда не совсем уверен, что смогу реализовать все задуманное - попытался объединить свои требования к устройству с частью предложений Левона
по мере того, как что-то будет получаться - код и модель для протеуса (а в будущем и схемы с фотографиями готового устройства выложу здесь же, если кого заинтересует)

43623.rar

 

Имею опыт программирования USART, I2C и ADC на PICах с проверкой на практике. Могу поделиться.

 

На асме или на С?

 

Tarii: Могу поделиться.
Ну и что же мешает Вам это сделать прямо сейчас.. ну, или, к примеру, днём?

 

На асме или на С? - на асике любимом.
Выложить все что понаписывал? (не путать с понаписивал)
Дело в том, что есть во всех задачах маленькие "приколы", не знаю как их назвать. Некоторые из них даже на уровне рекламаций производителю PICов - во как! Пару раз мучался по несколько дней - хотелось бы избавить от этого остальных.

 

Лучше на асме... Хотя, если сообщения будут раз в 2 недели, наверное трудно будет на них сосредоточиться...
Tarii: не знаю как их назвать
Обычно "их" называют "подводные камни".
Я думаю, будет интересно!

 

Есть проблема передачи данных через USART. Если делать все по инструкции от инженеров Microchip (http://ww1.microchip.com/downloads/en/DeviceDoc/usart.pdf) - работать не будет. Точнее будет, но передаваться будут не все байты, а через один.
Проверка окончания передачи байта данных и возможности передачи следующего (по указаниям Microchip):

BANKSEL PIR1
WaitTX: btfss PIR1, TXIF
goto WaitTX

Проверка идет по флагу TXIF (буфер TXREG пуст и можно передавать следующий байт). По не понятным причинам работает через раз!!! Каждый второй байт при этом теряется!!!

Корректо работает только конструкция с проверкой флага окончания передачи последнего бита из сдвигающего регистра Transmit Shift Register (TSR) - флаг TRMT (TXSTA<1>):

BANKSEL TXSTA
WaitTX: btfss TXSTA, TRMT
goto WaitTX

 

up!
Вот мой вариант подпрограммы для работы с клавиатурой (драйвера):
http://www.pic16.nm.ru/likbez2/keybscan02.txt
Теперь, вооружившись , не грех и продолжить.
Предложение такое:
- либо можем создать программу обработки полученной от предложенного драйвера информации и вывода её на индикатор (как вариант - программа на basic с ассемблерными вставками),
- либо другую программу опроса клавиатуры и вывода результата на индикатор - с использованием basic-компилятора.
Это будет тренировкой по освоению basic для PIC.

 

picmaniac: - либо другую программу опроса клавиатуры и вывода результата на индикатор - с использованием basic-компилятора.

Думаю это будет лучше. Можно сначала на PICBasic. Принцип будет понятен, а перенести на другую версию Basic'a будет уже не сложно. Или можно сразу на microBasic'e. Второй вариант даже предпочтительней, микровасик у меня и на работе инсталлирован. Только начнем с алгоритма.