Вячеслав написал(а):SyrBrandonА можешь скинуть свою схемку в протеусе и исходники кода,если есть?
// ПРОЕКТ СОЗДАВАЛСЯ ДЛЯ РАБОТЫ С ТЕЛЕФОНОМ SIEMENS ME45
// Основа PIC16F628
// обновление: 16.04.2014
// Описание
// 3 входа (Датчики: 1-двери, 2,3-влажности или прочее), в зависимости от состояние входа с учетом задержки, приходит СМС с текстом Trevoga 1-3
// RA2, RA3, RA4
// RB0 выход на светодиод 5 Гц, контроль работы охраны, классика жанра
// RB3 выход LED SMS, индикация отправки SMS
// RB4 выход на светодиод LED BEEP или цепляем ПЪЕЗИК BEEP на 5в, пикает при активности входа
// RA0 вход сброс всех входов и счетчиков, от внешней платы считывателя I-Button (Домофоновский ключ)
// RX, TX, GND выход к телефону SIEMENS ME45
// текст набран второпях, просьба сильно не пинать, устройство выполняет свою функцию
// Основан на статье "PIC мк. Эксперимент №14. Модуль USART"(http://diymicro.ru/pic-mk-eksperiment-1 … usart.html)
// все 100% рабочее
// Программирование проводилось с помощью программы IC-Prog 1.05D и JDM программатора, описанного в журнале Радио,2004, №2, с.51 (А. Долгий - Программаторы и программирование микроконтроллеров).
// Осцилятор: HS Конфигурация: 3F0Ah
#include <stdio.h>
#include <htc.h>
#define _XTAL_FREQ 4000000
#include "usart.h"
#include <delay.c>
// __CONFIG(LVPDIS & WDTDIS & MCLREN & UNPROTECT & HS);
unsigned int CR;
unsigned int EN;
void pausesec(unsigned int pause_val){
unsigned int v;
// Цикл паузы (pause_val) сек
for ( v = 0; v < pause_val; v++) {
// Подпрограмма задержки
DelayMs(1000); }
}
void
MySMS(unsigned int sms_num)
{
RB3=1; // Индикация LED SMS
printf("AT+CMGS=21"); // Набор команды SMS-send
// Из мануала по AT-командам Siemens
// If PDU mode (+CMGF=0)
// AT+CMGS=<length><CR>PDU is given<ctrl-Z/ESC>
// <length> - Length of PDU
EN=0x1A; // Код <ctrl-Z>
CR=0x0D; // Код CR
putch(CR);
DelayMs(100);
printf("07919730071111F111000B8198***80879F6000000085479D9FE3E876"); //57 символов Набор содержимого SMS-send в PDU
// Изменяем под себя http://twit88.com/home/utility/sms-pdu-encode-decode
// Закодирован мой номер телефона 7906******* + фраза Trevoga
// Далее добавляем к фразе индекс
if (sms_num==1) { printf("3"); } // send 1 SMS:Trevoga1 //58 символов
if (sms_num==2) { printf("5"); } // send 2 SMS:Trevoga2
if (sms_num==3) { printf("7"); } // send 3 SMS:Trevoga3
putch(EN);
putch(CR);
DelayMs(100);
}
void main(void){
unsigned char input;
unsigned char i;
unsigned char time;
unsigned int TR1,TR2,TR3;
unsigned char activ2,activ3;
TRISB0 = 0b00000000; // Настройка RB0 на вывод данных
TRISB3 = 0b00000000; // Настройка RB3 на вывод данных
TRISB4 = 0b00000000; // Настройка RB4 на вывод данных
TRISA = 0b00111111; // Настройка (RA0-RA4)+ и (RA5)- на ввод данных
// использование ножки 4 контроллера (RA5) не получилось по причине
// что она же является MCLR, сброс
PORTA = 0b11000000 ;
CMCON = 0x07; // отключение компараторов
CR=0x0D; // Код CR
INTCON=0; //выключаем прерывания
init_comms(); // инициализируем usart
DelayMs(50);
// инициализируем модем телефона взято из лога пакетов SiMoCo
printf("ATE0"); // Вывод строки на UART
putch(CR); // Вывод байт на UART
DelayMs(50);
printf("ATE0");
putch(CR);
DelayMs(100);
printf("ATE0");
putch(CR);
DelayMs(100);
// Mycall();
// Бесконечный цикл
while(1){
// Сброс Индикатора LED Отправка SMS
RB3=0;
//Канал 1 активен
// Конечник входной двери
if(RA2==1){TR1=TR1+1;RB4=1;} // beep ON пикаем пока активен 1 канал
if(TR1>7){TR1=0;MySMS(1);} // Проверка на ложность срабатывания для 1 канала
// Если 7 тактов активен, то SMS
//Канал 2 активен
// Датчик влажности
if((RA3==1)&&(activ2==0)){TR2=TR2+1;}
if(TR2==5){TR2=TR2+1;MySMS(2);} // Проверка на ложность срабатывания для 2 канала
// Если 5 тактов активен, то SMS
if(TR2==20){activ2=1;TR2=0;MySMS(2);} // Если 20 тактов активен, то SMS и вход блокируется до сброса
//Канал 3 активен
// Датчик влажности
if((RA4==1)&&(activ3==0)){TR3=TR3+1;}
if(TR3==5){TR3=TR3+1;MySMS(3);} // Проверка на ложность срабатывания для 3 канала
// Если 5 тактов активен, то SMS
if(TR3==20){activ3=1;TR3=0;MySMS(3);} // Если 20 тактов активен, то SMS и вход блокируется до сброса
//Канал сброс активен, от внешнего блока I-Button ключа
if(RA0==1){TR1=0;TR2=0;TR3=0;activ2=0;activ3=0;RB4=0;pausesec(20);} // Сброс счетчиков проверки на ложность для всех каналов
// Все каналы в исходное состояние
// Длинная пауза 20 сек, для открывания двери без сигнала
// Мигаем светодиодом LED Контроль работы
RB0=0;
// Подпрограмма задержки
DelayMs(100);
RB4=0; // beep OFF
RB0=1;
// Цикл паузы 200 мс
for ( i = 0; i < 2; i++) {
// Подпрограмма задержки
DelayMs(100);
}
}
}
протеус выложу как доберусь до файла