|
Помощь новичку в 16F629, Настройка портов ввода-вывода |
|
|
|
Jun 15 2007, 06:59
|
Группа: Новичок
Сообщений: 6
Регистрация: 29-12-05
Пользователь №: 12 678

|
Долго думал, но решился. Может поможете. Значит так. Решил попробовать написать программу, в частности, плавного повышения напряжения. Принцип ШИМ. Описание: первая переменная меняется от 0 до 255. Вторая наоборот от 255 до 0. первая управляет длительностью "1" на выводе GP2, а вторая соответстванно длительностью "0" Получается, что на выводе GP2 меняется ширина (скважность) импульса. Саму программу более-менее написал, но настроить порты GP2 и GP3 (GP3 пока не используется, это для будущего) не могу. Читал даташит, пробовал писать как там приведено в примерах, не получается. Может поможет кто... В крайнем случае может есть у вас какой исходник, в котором описано все это. Желательно лишнее убрать, чтоб мозги успели все переварить... И если можно, коментарии поподробнее. В глобальном плане такая задача: При нажатии кнопки (GP3) на выводе GP2 плавно (2-4 сек.) повышается напряжение. Как только оно стало MAX, процесс останавливается, но на выводе, например GP4, также начинает повышение напряжения от 0 до MAX. После этого все останавливается. Как только отпущена кнопка GP3, все идет в обратной последовательности: сначала плавно понижается напряжение на GP4, потом на GP2. Все. Исходник приложил.
Прикрепленные файлы
light.zip ( 730 байт )
Кол-во скачиваний: 100
|
|
|
|
|
 |
Ответов
(1 - 12)
|
Jun 15 2007, 09:52
|
Участник

Группа: Участник
Сообщений: 48
Регистрация: 23-10-05
Пользователь №: 10 016

|
с даташита: Код bcf STATUS,RP0 ;Bank 0 clrf GPIO ;Init GPIO movlw 07h ;Set GP<2:0> to movwf CMCON ;digital IO bsf STATUS,RP0 ;Bank 1 clrf ANSEL ;Digital I/O movlw 0Ch ;Set GP<3:2> as inputs movwf TRISIO ;and set GP<5:4,1:0> аs outputs К тому на этот чип есть даташит на русском языке. Чтобы GP3 использовать как вход, нужно в конфигурации задать его использование как цифрового входа, а не как резета.
|
|
|
|
|
Jun 15 2007, 11:03
|
Группа: Новичок
Сообщений: 6
Регистрация: 29-12-05
Пользователь №: 12 678

|
Цитата(vanner @ Jun 15 2007, 13:52)  с даташита: Код bcf STATUS,RP0;Bank 0 clrf GPIO ;Init GPIO movlw 07h ;Set GP<2:0> to movwf CMCON ;digital IO bsf STATUS,RP0;Bank 1 clrf ANSEL ;Digital I/O movlw 0Ch ;Set GP<3:2> as inputs movwf TRISIO;and set GP<5:4,1:0> аs outputs К тому на этот чип есть даташит на русском языке. Чтобы GP3 использовать как вход, нужно в конфигурации задать его использование как цифрового входа, а не как резета. Мне МПлаб выдал ошибку: Error[113] C:\4\LIGHT.ASM 16 : Symbol not previously defined (ANSEL) Message[302] C:\4\LIGHT.ASM 18 : Register in operand not in bank 0. Ensure that bank bits are correct. Скажите, что такое ANSEL? В расскам даташите этой строки нет... И еще в вашем примере: movwf TRISIO ;and set GP<5:4,1:0> аs outputs а в русскоязычном: movwf TRISA ;and set GP<5:4,1:0> аs outputs почему так? Дело в том, что я подставлял с русскоязычного даташита, и у меня МПлаб выдал еще больше ошибок
Сообщение отредактировал lagros - Jun 15 2007, 11:13
|
|
|
|
|
Jun 15 2007, 11:12
|
Участник

Группа: Участник
Сообщений: 48
Регистрация: 23-10-05
Пользователь №: 10 016

|
Это для 12f675, сотри ее. И не сбивай с бестолку, где у тебя ошибка, пик 12f629 в исходниках, 16f629 в теме?
Сообщение отредактировал vanner - Jun 15 2007, 11:17
|
|
|
|
|
Jun 15 2007, 13:02
|
Группа: Новичок
Сообщений: 6
Регистрация: 29-12-05
Пользователь №: 12 678

|
Цитата(vanner @ Jun 15 2007, 15:12)  Это для 12f675, сотри ее. И не сбивай с бестолку, где у тебя ошибка, пик 12f629 в исходниках, 16f629 в теме? 12F629 Извини, торопился... vanner, обьясни мне еще: 1. Команда #define Ligth GP2 - присваивает выводу GP2 имя Light? 2. Команда bsf GPIO, Ligth - устанавливает на выводе Light лог. "1"? У меня это не получается. GP2 принимает какие-то другие значения, но не те, что надо. Не пойму в чем дело... Извини за тупые вопросы... Прикрепленный исходник изменен... Вроде чуть продвинулся... Дело в том, что в русском переводе, которым я и пользовался, при инициализации стояля команда movwf TRISA а в англоязычной: movwf TRISIOКак только я исправил TRISA на TRISIO, все заработало. Теперь вопрос: это ошибка перевода или я что-то не так описал?
Сообщение отредактировал lagros - Jun 15 2007, 12:18
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 15 2007, 13:37
|
Группа: Новичок
Сообщений: 6
Регистрация: 29-12-05
Пользователь №: 12 678

|
Спасибо. По чуть-чуть двигаюсь вперед... А теперь такой вопрос: Мне нужно выполнить определенные действия, если на GP3 появится лог.1, и остановиться. А если появится "0", то выполнить другое действие, и тоже остановиться. Если конкретно: появилась "1" на GP3, свет плавно зажегся и горит постоянно появился "0" на GP3, свет плавно потух. И все. Опять ждет "1" Так вот, обязательно-ли использовать прерывание? Вернее, что проще: использовать прерывание или постоянно опрашивать GP3
|
|
|
|
|
Jun 15 2007, 14:05
|
Участник

Группа: Участник
Сообщений: 48
Регистрация: 23-10-05
Пользователь №: 10 016

|
У тебя в исходнике: Код #define Ligth GP2 #include p12f629.inc GP2 скорее всего не определена. Попробуй сделать: Код #include p12f629.inc #define Ligth GP2 Чаще делают даже так: Код #define Light GPIO, GP2 В коде тогда используешь bsf Light и т.п. Дальше, опрос кнопок нужно делать с антидребезгом. Можно опрашивать, по прерыванию или просто в основном цикле.
|
|
|
|
|
Jun 15 2007, 14:50
|
Группа: Новичок
Сообщений: 6
Регистрация: 29-12-05
Пользователь №: 12 678

|
Про дребезг я еще не думал. Спасибо. А в кратце, чтобы исключить дребезг я должен несколько раз опросить состояние кнопки? Сколько раз и с каким интервалом это делать? Может у кого недалеко образец кода есть? В МПлабе программа вроде заработала. Добавил еще один выход. Теперь алгоритм такой: При включении, на GP2 плавно нарастает напряжение (меняется скважность импульса). Как только достигнет МАХ, то-же начинает происходить на GP1. Потом процесс останавливается. На обоих выводах МАХ напряжение. Мне нужно сделать, чтобы это все происходило не при включении, а при появлении на GP3 лог. "1"
|
|
|
|
|
Jun 16 2007, 08:50
|
Группа: Новичок
Сообщений: 6
Регистрация: 29-12-05
Пользователь №: 12 678

|
А в МПлабе можно сэмулировать работу PICa? Типа, чтоб был внешний вид, и показывало что на каких ногах делается, и чтоб можно было управлять по входам?
|
|
|
|
|
Jun 16 2007, 17:38
|
Местный
  
Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006

|
Цитата(lagros @ Jun 16 2007, 11:50)  А в МПлабе можно сэмулировать работу PICa? Типа, чтоб был внешний вид, и показывало что на каких ногах делается, и чтоб можно было управлять по входам? Можно. Но гораздо удобнее все єто в протеусе советую освоить.
|
|
|
|
|
Jul 12 2007, 21:14
|
Группа: Новичок
Сообщений: 4
Регистрация: 12-02-07
Пользователь №: 25 291

|
Цитата(lagros @ Jun 16 2007, 12:50)  А в МПлабе можно сэмулировать работу PICa? Типа, чтоб был внешний вид, и показывало что на каких ногах делается, и чтоб можно было управлять по входам? Можно, но для этого специальная сравнительно дорогая приблуда нужна. Назвыается MPLAB ICD2. Там можно смотреть и состояния ног и всё что угодно. Этой же штукой можно и запрограммировать процессор.
|
|
|
|
|
Jul 13 2007, 08:36
|
Участник

Группа: Новичок
Сообщений: 15
Регистрация: 14-09-06
Пользователь №: 20 376

|
разве дребезг подавляется прерываниями? или Вы рассчитываете на задержку обработки? Я просто подключаю тпймер и перепровепяю состояние нелучший вариани(простаивает процессор),но как Вы ещё сделаете--прерывать по подтверждению состояния-такое новичку советовать не стоит,громоздко
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|