реклама на сайте
подробности

 
 
> Помощь новичку в 16F629, Настройка портов ввода-вывода
lagros
сообщение Jun 15 2007, 06:59
Сообщение #1





Группа: Новичок
Сообщений: 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
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 12)
vanner
сообщение Jun 15 2007, 09:52
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 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 использовать как вход, нужно в конфигурации задать его использование как цифрового входа, а не как резета.
Go to the top of the page
 
+Quote Post
lagros
сообщение Jun 15 2007, 11:03
Сообщение #3





Группа: Новичок
Сообщений: 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
Прикрепленные файлы
Прикрепленный файл  light.zip ( 871 байт ) Кол-во скачиваний: 54
 
Go to the top of the page
 
+Quote Post
vanner
сообщение Jun 15 2007, 11:12
Сообщение #4


Участник
*

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



Это для 12f675, сотри ее. И не сбивай с бестолку, где у тебя ошибка, пик 12f629 в исходниках, 16f629 в теме?

Сообщение отредактировал vanner - Jun 15 2007, 11:17
Go to the top of the page
 
+Quote Post
lagros
сообщение Jun 15 2007, 13:02
Сообщение #5





Группа: Новичок
Сообщений: 6
Регистрация: 29-12-05
Пользователь №: 12 678



Цитата(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, все заработало.
Теперь вопрос: это ошибка перевода или я что-то не так описал?

Сообщение отредактировал lagros - Jun 15 2007, 12:18
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  light.zip ( 873 байт ) Кол-во скачиваний: 65
 
Go to the top of the page
 
+Quote Post
Andrey_M
сообщение Jun 15 2007, 13:25
Сообщение #6


Участник
*

Группа: Свой
Сообщений: 56
Регистрация: 11-03-05
Из: Подмосковье
Пользователь №: 3 260



В русском переводе некоторые названия регистров даны вольно проверь названия по родному даташиту с микрочипа. (читай русский текст а имена регистров бери из английского). beer.gif
Go to the top of the page
 
+Quote Post
lagros
сообщение Jun 15 2007, 13:37
Сообщение #7





Группа: Новичок
Сообщений: 6
Регистрация: 29-12-05
Пользователь №: 12 678



Спасибо. По чуть-чуть двигаюсь вперед...
А теперь такой вопрос:
Мне нужно выполнить определенные действия, если на GP3 появится лог.1, и остановиться.
А если появится "0", то выполнить другое действие, и тоже остановиться.
Если конкретно: появилась "1" на GP3, свет плавно зажегся и горит постоянно
появился "0" на GP3, свет плавно потух. И все. Опять ждет "1"
Так вот, обязательно-ли использовать прерывание? Вернее, что проще: использовать прерывание или постоянно опрашивать GP3
Go to the top of the page
 
+Quote Post
vanner
сообщение Jun 15 2007, 14:05
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 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 и т.п.

Дальше, опрос кнопок нужно делать с антидребезгом. Можно опрашивать, по прерыванию или просто в основном цикле.
Go to the top of the page
 
+Quote Post
lagros
сообщение Jun 15 2007, 14:50
Сообщение #9





Группа: Новичок
Сообщений: 6
Регистрация: 29-12-05
Пользователь №: 12 678



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

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

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

Мне нужно сделать, чтобы это все происходило не при включении, а при появлении на GP3 лог. "1"
Прикрепленные файлы
Прикрепленный файл  light.zip ( 960 байт ) Кол-во скачиваний: 57
 
Go to the top of the page
 
+Quote Post
lagros
сообщение Jun 16 2007, 08:50
Сообщение #10





Группа: Новичок
Сообщений: 6
Регистрация: 29-12-05
Пользователь №: 12 678



А в МПлабе можно сэмулировать работу PICa?
Типа, чтоб был внешний вид, и показывало что на каких ногах делается, и чтоб можно было управлять по входам?
Go to the top of the page
 
+Quote Post
DL36
сообщение Jun 16 2007, 17:38
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006



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

Можно.
Но гораздо удобнее все єто в протеусе советую освоить.
Go to the top of the page
 
+Quote Post
Peter A. Belov
сообщение Jul 12 2007, 21:14
Сообщение #12





Группа: Новичок
Сообщений: 4
Регистрация: 12-02-07
Пользователь №: 25 291



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


Можно, но для этого специальная сравнительно дорогая приблуда нужна. Назвыается MPLAB ICD2. Там можно смотреть и состояния ног и всё что угодно. Этой же штукой можно и запрограммировать процессор.
Go to the top of the page
 
+Quote Post
alexander23
сообщение Jul 13 2007, 08:36
Сообщение #13


Участник
*

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



разве дребезг подавляется прерываниями?
или Вы рассчитываете на задержку обработки?
Я просто подключаю тпймер и перепровепяю состояние
нелучший вариани(простаивает процессор),но как Вы ещё сделаете--прерывать по подтверждению состояния-такое новичку советовать не стоит,громоздко
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 11:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01488 секунд с 7
ELECTRONIX ©2004-2016