Autor Tema: Ayuda con Pic 18F45k20 y GSM  (Leído 1247 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado abenene

  • PIC10
  • *
  • Mensajes: 2
Ayuda con Pic 18F45k20 y GSM
« en: 07 de Abril de 2016, 03:06:32 »
Hola a todos,
Soy nuevo en el foro, y muy novato con la programación.
Veréis, necesito ayuda para un pequeño proyecto que estoy intentando hacer, se trata de un avisador por envío de mensaje vía GSM.
El sistema está pensado para que cuando alguien abra una puerta, el sistema active un relé,
Y el módulo GSM empiece a llamar,  en ese momento tenemos un led de aviso llamémosle (LdRed), de que estamos llamando y cuando descuelguen en el otro extremo se nos enciende otro led llamémosle (LdGreen) avisando que han descolgado, pasados unos 8 segundos, tiempo suficiente para enviar un mensaje pregrabado en el módulo GSM, la llamada ha sido enviada correctamente regresamos al estado inicial, pero ya no volveremos a enviar nada aunque la puerta siga estando abierta, para no repetir el envió del mensaje, el ciclo no se repetirá hasta que la puerta no se cierre y se vuelva a abrir de nuevo.
He hecho varias rutinas, y tengo la simulación en proteus, pero no hay manera, a ver si alguien
Me puede echar una mano.
Muchas gracias

Aqui os dejo uno de los codigos que he usado, pero que no me acaba de funcionar:
'*          MICROCONTROLADOR PIC 18F45K20  CLOCK 4 MHZ                       *
'*                                                                           *
'*****************************************************************************
;******************   PIC STANDARD CONFIGURATION BY EA3ABN *******************
;*****************************************************************************
'  DEFINICIÓN DE FUSES Y OSCILADOR
'*****************************************************************************
define _INTRC_IO & _WDT_OFF & _PWRTE_ON & _MCLR_OFF & _LVP_OFF & _CP_OFF & _OSC_4
DEFINE OSC 4

;********************* VARIABLES AND REGISTERS *******************************
   ;---------- OUTPUTS --------------
   RELCALL   VAR portd.0    ; Variable guarda el valor de la salida portD.0
   BEACON    VAR portd.1    ; Variable guarda el valor de la salida portD.1
   AMPLI     VAR portd.2    ; Variable guarda el valor de la salida portD.2
   TESTLD    VAR portd.3    ; Variable para led de test del sistema
   ;---------- DEFINE THE INPUT NAME  --------------
   RSTSW     var portb.5    ; Variable deteccion de RESET SWITCH
   TAMPER    VAR portc.1    ; Variable de detección TAMPER SWITCH
   LDRED     VAR portc.2    ; Variable deteccion de LED RED
   LDGREEN   VAR portc.3    ; Variable deteccion de LED GREEN
   MAINT     VAR portb.1    ; Variable deteccion de MAINTENANCE SWITCH
   ;---------- DEFINE PORT INPUTS ------------------------
   Input PORTb.5  ' Activamos B.5 como entrada de RESET switch.
   Input PORTb.1  ' Activamos B.1 como entrada de MAINTENANCE switch.
   Input PORTc.1  ' Activamos C.1 como entrada de TAMPER switch.
   input PORTc.2  ' Activamos C.2 como entrada de LED RED
   input PORTc.3  ' Activamos C.3 como entrada de LED GREEN
   ;---------- VARIABLES GENERAL USE ------------
   MEMOTamper VAR BIT      ; Variable para guardar el estado TAMPER
   MEMORlay   var bit      ; Variable para guardar el estado RELAY Call
   MEMOLdRED  var bit      ; Variable para guardar el estado LedRED
   MEMOLdGreen  var bit    ; Variable para guardar el estado Green
   CondiCuelga var bit      ; Variable para guardar el paso por colgar
;*****************************************************************************
;------------------------ RESET INICIAL DE LA EEPROM ---------------------------   
   EEPROM 0,[0]        ;memoria 0 con el valor inicial 0 , sirve para
                        ;indicar que nunca ha corrido este programa
;*****************************************************************************
; vector de interrupcion   
    RCON.7=1    ; Enable interrupt priorities 18f45k20 TESTING PP.
    IPR1.5=1    ; Set high interrupt priority   TESTING PP
 ON INTERRUPT GOTO  ARRANQUE     ; EN CASO DE INTERRUPCION IR A .....
;------------- IMPORTANTE, ESTO HABILITA LA INTERRUPCION EN " PORTB.0 
 INTCON=%10010000      ; HABILITA LA INTERRUPCION EN " PORTB.0 "
 ;Trisb=1
 ;Trisc=%00001010
;------------------------------------------------------------------------------

 ARRANQUE:
    high testld                ;LED DE AVISO INICIO SISTEMA
    pause 100
    low testld
    pause 100 
    high testld                ;LED DE AVISO INICIO SISTEMA
    pause 100
    low testld
    pause 100
    high testld                ;LED DE AVISO INICIO SISTEMA
    pause 100
    low testld
    pause 100                                                       
    PAUSE 100
    MEMOTamper=0               ;Inicializamos variable MEMOTamper
    MEMOLdRED=0                ;Inicializamos variable MEMOLdRED
;--------- HASTA QUE MAINT NO ESTE ABIERTO NO HACEMOS NADA ---------------------
INICIO:
        CondiCuelga=0               ;
        IF MAINT=0  THEN TapaOpen   ; Hasta que no está abierto Maint
        goto INICIO                 ; No seguimos con el resto.....
                                    ; Ojo esto solo sucede una vez
                                    ; Cuando estamos en modo normal, todo sigue
                                    ; su curso y nos vamos a ver si esta abierta
                                    ; la tapa TAMPER
                                   
;------- AQUI NOS QUEDAMOS DETECTANDO HASTA QUE SE ABRA LA PUERTA "TAMPER "-----

TapaOpen:
    pause 100                ; Pausa
    high BEACON              ; Activamos BALIZA DE LA CAJA
    pause 100
    LOW BEACON               ; Activamos BALIZA DE LA CAJA
    'pause 10
    'if TAMPER=0 and LDRED =0 then ActAudio ; Miramos si esta la zona activada
    if TAMPER=0 then GOTO LLAMA1; Miramos si esta el tamper activado, y si
                                ; lo esta, nos vamos a llamar, si no, seguimos
                                ;mirando hasta que este abierta.
    goto TapaOpen               ; bucle hasta tapa abierta, SI / N0
     
;----------- HASTA AQUI EL CODIGO BIEN ----------------------------------------
;------------------------------------------------------------------------------
;iniciamos la llamada poniendo el rele activo.
llama1:
     PAUSE 10
     HIGH RELCALL
     memorlay=1
     IF TAMPER=0 and ldred=1 then llama1
     IF TAMPER=0 AND Ldred=0 THEN mirarverde   ; si puerta abierta y led verde activo
           ;significa que estamos en transito de la llamada
                                              ; pero que ha sido cerrada la puerta
     RETURN
;----------------------------------------------------------------------------
llama2:
     PAUSE 10
     HIGH RELCALL
     gosub contverde
;------------------------------------------------------------------------------
; Miramos si esta activo el rojo si no lo esta, seguimos mirando
; para asi verificar que está en transito la llamada.

mirarVerde:
          if ldgreen=1 and tamper=0 then mirarVerde
          if ldgreen=0 and tamper=0 then llama2  ; tengo dudas aqui
ContVerde:         
          if ldgreen=1 and tamper=0 then CondiCuelga=1  ; aqui esta el problema
          if tamper=0 and CondiCuelga=1 then gosub cuelga
cuelga:
     pause 10
     low relcall
     ;if condicuelga=0 and tamper=0 then goto cuelga
     ;if ldgreen=1 and tamper=0 then goto inicio
     
         end
;------------------------------------------------------------------------------


Desconectado vdiazg

  • PIC12
  • **
  • Mensajes: 68
Re:Ayuda con Pic 18F45k20 y GSM
« Respuesta #1 en: 21 de Abril de 2016, 15:29:41 »
Vamos por pasos, primero tienes que indicar que modulo GSM estas usando (Fabricante y Modelo). todos los módulos GSM tienen una conexión serial para el envió de comandos y lectura de datos; Pienso que lo primero que debes realizar es la prueba de comunicación entre el Modulo y un terminal, por ejemplo una PC, cuando logres dicha comunicación sin problemas, recién pasarías a cambiar ese terminal con el PIC (Estoy asumiendo que ya sabes manejar el USART del PIC).
También ayudaría el que coloques el esquemático como imagen, ya que no todos usan proteus
quiero construir un "Condensador de flujos"