Jump to content
bardak

Pic12F629 Работа С Портом I/o

Recommended Posts

Читаю документацию на мк и из нее не получается "уловить" как настроить вывод GP на вход и считывать биты.

Прикладываю, схему из Протеуса, то что я хочу видеть! Буду признателен в информации!

post-193397-0-61240900-1454088297_thumb.jpg

Share this post


Link to post
Share on other sites

bardak а что за бардак у вас на схеме? :) у пиков нет подтяжки к минусу питания....

Share this post


Link to post
Share on other sites

Если честно на этот счет не задумался. А как правильер должно быть?! Просто на готовой плате там именно подтяжка к минусу, я решил заменить стоковую микруху на этот мк! дабы он по питанию подошел!

Спасибо - разобрался!

Edited by bardak

Share this post


Link to post
Share on other sites

Литиевые батарейки Fanso для систем телеметрии и дистанционного контроля

Системы телеметрии находят все более широкое применение во многих отраслях на промышленных и коммунальных объектах. Требования, предъявляемые к условиям эксплуатации приборов телеметрии и, как следствие, источников питания для них, могут быть довольно жесткими. Fanso предоставляет широкую линейку продукции, рассчитанной на различные условия эксплуатации, что позволяет подобрать батарейку для каждого конкретного применения, в том числе и для устройств телеметрии.

Подробнее

внутренние подтяжки отключить... между выводом и массой подключить резистор на 10-20кОм

Share this post


Link to post
Share on other sites

Читаю документацию на мк и из нее не получается "уловить" как настроить вывод GP на вход и считывать биты.

Каждому порту кроме регистра самого порт (типа PORTG или PORTA) присвоен регистр TRIS (TRISG, например, или TRISA). Каждый бит 8-битного регистра TRIS определяет, будет ли та или иная линия порта входом или выходом. Запишете в бит регистра TRIS в нужный разряд (соответствующий разряду порта) 0 и линия будет выходом, а запишете 1, линия станет входом. Только, если на порте висят входы АЦП, их нужно отключить в других регистрах (в разных МК разные бывают), чтобы сделать входы чисто цифровыми. Edited by salyamkamrad

Share this post


Link to post
Share on other sites
                     

Приглашаем на вебинар Решения для построения ультразвуковых счетчиков жидкостей и газов на базе MSP430

Компэл совместно с Texas Instruments 23 октября 2019 приглашают на вебинар, посвященный системам-на-кристалле для построения ультразвуковых расходомеров жидкостей и газов на базе ядра MSP430. Вебинар проводит Йоханн Ципперер – эксперт по ультразвуковым технологиям, непосредственно участвовавший в создании данного решения. На вебинаре компания Texas Instruments представит однокристальное решение, позволяющее создавать точные недорогие счетчики жидкостей и газов.

Подробнее...

буду рад, если кто подскажет, как правильно вывести мк из состояния sleep при помощи прерывания по изменению уровня сигнала на GP5. В сон ввожу так

IOCB5=1;//разрешение прерывания по изменениб уровня сигнала на GP5
GPIF=0;
GIE=0;
SLEEP();
NOP();

А как правильно вывести, в великому сожаление не получается!

Share this post


Link to post
Share on other sites

У PIC12F629 бит разрешения прерывания GP5 называется IOC5. Поэтому

IOC5=1;

И ещё надо разрешить общее прерывание от порта

GPIE=1;

Share this post


Link to post
Share on other sites

У PIC12F629 бит разрешения прерывания GP5 называется IOC5. Поэтому

IOC5=1;

И ещё надо разрешить общее прерывание от порта

GPIE=1;

Исправил на IOC5=1; добавил GPIE=1;, но картина не изменилась.

Edited by bardak

Share this post


Link to post
Share on other sites

буду рад, если кто подскажет, как правильно вывести мк из состояния sleep при помощи прерывания по изменению уровня

перед вводом в сон, обязательным требованием есть соответствие уровней порта и защелки , те необходимо прочитать порт

		 GPIE=1;
		 GPIF=0;
		 GPIO=0;
		 GPIO=GPIO;
		 SLEEP();
	  NOP();

Share this post


Link to post
Share on other sites

буду рад, если кто подскажет, как правильно вывести мк из состояния sleep при помощи прерывания по изменению уровня

перед вводом в сон, обязательным требованием есть соответствие уровней порта и защелки , те необходимо прочитать порт

		 GPIE=1;
		 GPIF=0;
		 GPIO=0;
		 GPIO=GPIO;
		 SLEEP();
	 NOP();

Я приведу код программы.

#include <htc.h>
#include <xc.h>
#define _XTAL_FREQ 4000000 //Частота внутреннего генератора
#define   KEY_S1 GP5
#define   KEY_S2 GP4
#define   KEY_S3 GP2
#define   LED  GP1
#define   TX  GP0
unsigned long sleep_count=0;
#pragma config FOSC = INTRCIO
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config MCLRE = OFF
#pragma config CP = ON
#pragma config CPD = OFF
#pragma config BOREN = OFF

//////////Прототипы функций////////
void enter_sleep(void);
void wake_up(void);
void enter_sleep(void)
{
IOC5=1;//разрешение прерывания по изменению уровня сигнала на GP5
GPIE=1;
GPIF=0;
GPIO=0;
GPIO=GPIO;
NOP();
SLEEP();
}
void wake_up(void)
{
GIE = 0;  // бит глобального разрешения прерываний
GPIF=0;
GPIE=0;
TRISIO=0x3C;
IOC5=0;
}
void main()
{
///////////////////////////////////////
//####Настроим направление выводов.####
///////////////////////////////////////
TRISIO=0x3C;
// #############################################
/////////Настройка регистров прерываний/////////
// #############################################
//INTE = 1; // бит разрешения внешнего прерывания INT
GIE = 1;  // бит глобального разрешения прерываний
GPIE=1;//бит разрешения прерывания по изменению уровня сигнала на GPIO
// #############################################
LED=0;
while(1)
{
 if(KEY_S1==1)
  {
  int counter=0;
  while(KEY_S1==1)
   {
   __delay_us(500);
   counter++;
   if(counter==2){LED=1;__delay_ms(500);LED=0;}
   if(counter==3000)
 {
 //Для длительного нажатия
 }
   }
  }

if(sleep_count==15000)
{
sleep_count=0;
LED=1;
__delay_ms(1500);
LED=0;
 enter_sleep();
 NOP();
 wake_up();
}
sleep_count++;
__delay_us(10);

}
}

Share this post


Link to post
Share on other sites

а функция прерывания где?

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

Share this post


Link to post
Share on other sites

Вы бы определились... В начале вы хотели биты из порта читать, теперь что-то про прерывания...

Share this post


Link to post
Share on other sites

Вы бы определились... В начале вы хотели биты из порта читать, теперь что-то про прерывания...

А чего определятся пишешь, программу, рождаются вопросы, все очень просто, с битами я разобрался быстро, потом мне стало важно устройство держать в SLEEP режиме, так как при нажатии на кнопку должно отрабатывать и засыпать! Буду признателен если Вы мне поможете, если у меня дальше будут рождаться вопросы, а не указывать на очевидные моменты.

Share this post


Link to post
Share on other sites

Товарищи, вроде разобрался! Всем спасибо за не о ценимую помощь. Будут вопросы, спрошу)))

Share this post


Link to post
Share on other sites

Появился вопрос, с входа GP0 не могу считать значение бита, отлаживаю в протеусе.

Текст программы прикладываю, в даташите никаких ограничений на этот вывод не видел.

#include "htc.h"
#include "xc.h"
#include "def.h"
#define _XTAL_FREQ 4000000 //Частота внутреннего генератора
#define   KEY_S1 GP0
#define   KEY_S2 GP1
#define   KEY_S3 GP3
#define   LED  GP2
#define   TX  GP5
#pragma config FOSC = INTRCIO
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config MCLRE = OFF
#pragma config CP = ON
#pragma config CPD = OFF
#pragma config BOREN = OFF

//////////Прототипы функций////////
void came(unsigned int);
void enter_sleep(void);
void wake_up(void);
void main()
{
///////////////////////////////////////
//####Настроим направление выводов.####
///////////////////////////////////////
TRISIO=0x01;GP0 - настроен на вход, остальные выводы выход (кроме GP3)
while(1)
{
 if(KEY_S1==1)
  {
  int counter=0;
  while(KEY_S1==1)
   {
   __delay_us(50);
   counter++;
   if(counter==2)
   {LED=1;__delay_ms(500);LED=0;}
   if(counter==1000)
 {

 }
   }
  }
}
}

post-193397-0-60916100-1454442371_thumb.jpg

Share this post


Link to post
Share on other sites

Появился вопрос, с входа GP0 не могу считать значение бита, отлаживаю в протеусе.

Текст программы прикладываю, в даташите никаких ограничений на этот вывод не видел.

#include "htc.h"
#include "xc.h"
#include "def.h"
#define _XTAL_FREQ 4000000 //Частота внутреннего генератора
#define KEY_S1 GP0
#define KEY_S2 GP1
#define KEY_S3 GP3
#define LED GP2
#define TX GP5
#pragma config FOSC = INTRCIO
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config MCLRE = OFF
#pragma config CP = ON
#pragma config CPD = OFF
#pragma config BOREN = OFF

//////////Прототипы функций////////
void came(unsigned int);
void enter_sleep(void);
void wake_up(void);
void main()
{
///////////////////////////////////////
//####Настроим направление выводов.####
///////////////////////////////////////
TRISIO=0x01;GP0 - настроен на вход, остальные выводы выход (кроме GP3)
while(1)
{
if(KEY_S1==1)
{
int counter=0;
while(KEY_S1==1)
{
__delay_us(50);
counter++;
if(counter==2)
 {LED=1;__delay_ms(500);LED=0;}
if(counter==1000)
 {

 }
}
}
}
}

Разобрался, оказывается мешал компаратор. Выключил и все норм!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By bardak
      Нужна помощь, как правильно загнать зверя в режим SLEEP, так как на текущий момент потребление порядка 0.5мА! Необходимо разъяснить, что я делаю не правильно. Бюджет 500 р.
    • By kostyax
      Здравствуйте. Вот решил заняться программированием контролеров PIC, начал с 12f629, хочу написать простую программку которая после подачи питания на контролер он открывал один транзистор а через секунды 3 другой и на этом цикл заканчивался. Вот не знаю как это сделать можете посоветовать литературу какую ни будь для начиная или пример привести как это можно написать. В инете встречал пару вариантов но они то ассемблере написаны то на СИ. Посоветует с каким языком проще разобраться.
    • By dubok963
      Здравствуйте. Нашел в интернете схему "Домофон для частного дома" http://radiomaster.c...snogo-doma.html Решил собрать.

      Прошивка находится в архиве
      DOMOF1.rar
      По схеме была сделана (в Sprint Layout6) печатная плата.

      домофон последняя печатка.lay6
      Была собрана плата на 2х стороннем стеклотекстолите.

      Оптореле CPC1008N пришлось установить на другой стороне из-за неправильной разводки. ( печатная плата была исправлена).
      Транзисторы BC847 были заменены на BC546
      Транзистор T6 - КТ973Б.
      Резистор R17 - 0,5Вт.
      Подстроечные резисторы типа 3296
      Стабилизатор 7805
      Кварц - 455kHz
      Микроконтроллер PIC12F629 был зашит с помощью программатора PICkit2 (без ошибок, без затирания константы).
      Разъемы были взяты из модемов, и для них была сделана отдельная плата

      Трубка для домофона самодельная

      Была сделана печатная плата

      Готовая плата


      Соединил домофон и трубку телефонным кабелем. Подал напряжение 12 вольт-и домофон заработал.
      Выставил контрольные точки (при помощи R20 подстроечника) на компараторе LM339 (выход 1-я нога) напряжение "+3,7в" (Трубка лежит). При поднятой трубке напряжение на выходе (на 1-й ноге) стало как на схеме "+6,5в".
      Говорю в трубку, и слышу сам себя в динамике трубки.
      Говорю в "выносной" микрофон и слышу сам себя в "выносном" динамике.
      Трубка лежит: Говорю в "выносной" микрофон-слышу себя в "выносном" динамике
      При нажатии кнопки "Звонок" - (работает только во втором положении тумблера на трубке) и звук выходит из выносного динамика, а не из трубки. В первом режиме не работает.
      _____________________________________________________________________________________________________
      Чуть позже была найдена "немного другая" схема домофона на сайте http://master-uri.narod.ru/

      Прошивки нет.
      Транзистор Т6 (КТ973Б), с проводимостью P-N-P , изображен на схеме, как N-P-N.
      Заменил транзистор на КТ815. Контрольные точки удалось выставить "приближенные" к указанным на схеме .
      Звонок начал выходить---из трубки.
      Но проблема осталась
      Все мои попытки связаться с автором схемы, оказались неудачными (автор не отвечает).
      Прошу у Вас помощи. Помогите запустить домофон.
      P/S: Прошу прощения, если оформил тему не в тот раздел.
    • By Lev@
      Решил прошить PIC 12F629, прога протестирована в PIC emulator IDE, в Proteus - работает - 100%, но ПИК не шьется!.
      Программатор - Pony Prog, софт - IC prog 1.06 выдает ошибку еще до этапа заливки программы:
      Естественно я сразу же(через пару часов танцов с бубном) забил в "поиск" - вот этот програматор прошьет - паяйте, вот с этим софтом не будет проблем - качайте...
      Еще полтора часа на закачку и пайку програматора, а результат тотже!
      Мозг кипит - ЧТО делать???!!!

    • By Владимир Коновалов
      Решил сделать дозиметр. Есть печатная плата (схема). Буду признателен если поможете разобраться, как открыть эти файлы (.hex / .lay) и как прошить контроллер (PIC12F629)
      Благодарю.
      p.s. http://dmitrstas.uco...zimetr/9-1-0-54 вот такой дозиметр. довольно прост в изготовлении
  • Сообщения

    • А какая необходимость была в изготовлении такой пищалки? - просто хотелось попробовать изготовить? Чем такая конструкция отличается от динамических или пьезо излучателей по звучанию, отдаче, диапазону, неравномерности, направленности, искажению итп?
    • Важно и отсутствие пульсаций и качество стабилизации, - это требование не рядовое, следовало ему уделить особое внимание, поставив локальный стабилизатор по образцу в даташите.
    • рисуй фрагмент схемы .... в Гугле смотрел схемы типовые на них?
    • не сделаешь, у тебя уровня знаний не хватает даже сформулировать ТЗ. ЗЫ с таким ТЗ тему нужно было создавать в разделе работа с оглашением бюджета на разработку. переносить будем?
    • Следующий элемент схемы – силовой трансформатор. Планировалось использовать домотанный ОСМ-0,1 и небольшой трансик от системы охранной сигнализации для смещения. Однако домотанный трансформатор удвоении тока нагрузки (подключении второго канала) не давал необходимого анодного напряжения и увеличить  его дополнительной обмоткой нет никакой возможности. Окно заполнено полностью. Было принято решение доработать сердечник от ОСМ-0,1 и изготовить новый каркас. Перед разборкой помечаю подковы, чтобы не ошибиться в последующем при окончательной сборке.   Трансформатор при работе, даже без пропитки, совершенно беззвучен, так как реальная индукция в сердечнике 1,19 Тл. (вычислялась по току первичной обмотки при полной нагрузке). По результатам прогона можно с удовлетворением сказать что затея удалась.
    • Guest Николай:)
      Зачем все дублировать и добавлять : ? Когда можно сразу передавать состояние джойстиков одной строчкой (в данном случае из 14 символов вместо 7). Будет это выглядеть так:  SMDjoystick j(2, 3, 4, 5, 6, 7, 8,A0,A1,A2,A3,9,10,11); /// При подключении по указанной схеме, кстати, почему проигнорирован 12 пин? естественно,  библиотеку подправить, добавив порты. Кроме того, зачем задержка 90 миллисекунд?! это очень много! В исходнике 35, этого достаточно.
  • Покупай!

×
×
  • Create New...