Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помощь новичку в 16F629
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
lagros
Долго думал, но решился. Может поможете.
Значит так. Решил попробовать написать программу, в частности, плавного повышения напряжения. Принцип ШИМ.
Описание: первая переменная меняется от 0 до 255. Вторая наоборот от 255 до 0.
первая управляет длительностью "1" на выводе GP2, а вторая соответстванно длительностью "0"
Получается, что на выводе GP2 меняется ширина (скважность) импульса.
Саму программу более-менее написал, но настроить порты GP2 и GP3 (GP3 пока не используется, это для будущего) не могу. Читал даташит, пробовал писать как там приведено в примерах, не получается.
Может поможет кто... В крайнем случае может есть у вас какой исходник, в котором описано все это. Желательно лишнее убрать, чтоб мозги успели все переварить... И если можно, коментарии поподробнее.
В глобальном плане такая задача: При нажатии кнопки (GP3) на выводе GP2 плавно (2-4 сек.) повышается напряжение. Как только оно стало MAX, процесс останавливается, но на выводе, например GP4, также начинает повышение напряжения от 0 до MAX. После этого все останавливается.
Как только отпущена кнопка GP3, все идет в обратной последовательности: сначала плавно понижается напряжение на GP4, потом на GP2. Все.
Исходник приложил.
vanner
с даташита:
Код
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 использовать как вход, нужно в конфигурации задать его использование как цифрового входа, а не как резета.
lagros
Цитата(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
почему так? Дело в том, что я подставлял с русскоязычного даташита, и у меня МПлаб выдал еще больше ошибок
vanner
Это для 12f675, сотри ее. И не сбивай с бестолку, где у тебя ошибка, пик 12f629 в исходниках, 16f629 в теме?
lagros
Цитата(vanner @ Jun 15 2007, 15:12) *
Это для 12f675, сотри ее. И не сбивай с бестолку, где у тебя ошибка, пик 12f629 в исходниках, 16f629 в теме?

12F629 Извини, торопился... smile.gif


vanner, обьясни мне еще:
1. Команда #define Ligth GP2 - присваивает выводу GP2 имя Light?
2. Команда bsf GPIO, Ligth - устанавливает на выводе Light лог. "1"?
У меня это не получается. GP2 принимает какие-то другие значения, но не те, что надо. Не пойму в чем дело...
Извини за тупые вопросы...
Прикрепленный исходник изменен...

Вроде чуть продвинулся...
Дело в том, что в русском переводе, которым я и пользовался, при инициализации стояля команда
movwf TRISA
а в англоязычной:
movwf TRISIO
Как только я исправил TRISA на TRISIO, все заработало.
Теперь вопрос: это ошибка перевода или я что-то не так описал?
Andrey_M
В русском переводе некоторые названия регистров даны вольно проверь названия по родному даташиту с микрочипа. (читай русский текст а имена регистров бери из английского). beer.gif
lagros
Спасибо. По чуть-чуть двигаюсь вперед...
А теперь такой вопрос:
Мне нужно выполнить определенные действия, если на GP3 появится лог.1, и остановиться.
А если появится "0", то выполнить другое действие, и тоже остановиться.
Если конкретно: появилась "1" на GP3, свет плавно зажегся и горит постоянно
появился "0" на GP3, свет плавно потух. И все. Опять ждет "1"
Так вот, обязательно-ли использовать прерывание? Вернее, что проще: использовать прерывание или постоянно опрашивать GP3
vanner
У тебя в исходнике:
Код
#define Ligth GP2
#include p12f629.inc

GP2 скорее всего не определена.
Попробуй сделать:
Код
#include p12f629.inc
#define Ligth GP2

Чаще делают даже так:
Код
#define Light GPIO, GP2

В коде тогда используешь bsf Light и т.п.

Дальше, опрос кнопок нужно делать с антидребезгом. Можно опрашивать, по прерыванию или просто в основном цикле.
lagros
Про дребезг я еще не думал. Спасибо.
А в кратце, чтобы исключить дребезг я должен несколько раз опросить состояние кнопки?
Сколько раз и с каким интервалом это делать?

Может у кого недалеко образец кода есть?

В МПлабе программа вроде заработала.
Добавил еще один выход.
Теперь алгоритм такой:
При включении, на GP2 плавно нарастает напряжение (меняется скважность импульса).
Как только достигнет МАХ, то-же начинает происходить на GP1.
Потом процесс останавливается. На обоих выводах МАХ напряжение.

Мне нужно сделать, чтобы это все происходило не при включении, а при появлении на GP3 лог. "1"
lagros
А в МПлабе можно сэмулировать работу PICa?
Типа, чтоб был внешний вид, и показывало что на каких ногах делается, и чтоб можно было управлять по входам?
DL36
Цитата(lagros @ Jun 16 2007, 11:50) *
А в МПлабе можно сэмулировать работу PICa?
Типа, чтоб был внешний вид, и показывало что на каких ногах делается, и чтоб можно было управлять по входам?

Можно.
Но гораздо удобнее все єто в протеусе советую освоить.
Peter A. Belov
Цитата(lagros @ Jun 16 2007, 12:50) *
А в МПлабе можно сэмулировать работу PICa?
Типа, чтоб был внешний вид, и показывало что на каких ногах делается, и чтоб можно было управлять по входам?


Можно, но для этого специальная сравнительно дорогая приблуда нужна. Назвыается MPLAB ICD2. Там можно смотреть и состояния ног и всё что угодно. Этой же штукой можно и запрограммировать процессор.
alexander23
разве дребезг подавляется прерываниями?
или Вы рассчитываете на задержку обработки?
Я просто подключаю тпймер и перепровепяю состояние
нелучший вариани(простаивает процессор),но как Вы ещё сделаете--прерывать по подтверждению состояния-такое новичку советовать не стоит,громоздко
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.