Pages: [1]   Go Down
Author Topic: codigo  (Read 1040 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 142
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hola se puede modificar un codigo ccs para el arduino
Logged

Albacete
Offline Offline
Full Member
***
Karma: 0
Posts: 140
Arduino mola que te pasas
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

¿Que entiendes por codigo CCS? A mi me suena a Cascade Style Sheet, pero no acabo de pillarlo.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 142
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

no me explicado bien un codigo ccs que esta construdi con pic c compiler
Logged

Albacete
Offline Offline
Full Member
***
Karma: 0
Posts: 140
Arduino mola que te pasas
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Que tonteria.. lo otro eran CSS.
Logged

0
Offline Offline
Jr. Member
**
Karma: 5
Posts: 72
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si tienes los fuentes en CCS si.

Al fin y al cabo los PIC se programan en C y el Arduino también.

Si eres capaz de saber que hace el código mirándolo no deberías tener ningún problema.

Otra cosa son las librerías que use, aunque hay librerías equivalentes para casi todo (acceso a I2C, LCDs, puertos series, etc.)

Si no te aclaras pega el código aquí (o un trozo si es muy grande) y te iremos ayudando.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 142
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

el codigo es este y lo que hace es con un modem y un pic 16f628a y un sensor pir si detcta movimiento manda una llamada al movil
y yo quiero que esto sea con el arduino uno si es posible claro
#include <16F628A.h>
 
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC                    //Internal RC Osc
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
 
#use delay(clock=4000000)
#use fast_io(b)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)
 
typedef enum {INICIO, DETECTA, ALARMA, LLAMADO} ESTADOS;







#include "main.h"
 
ESTADOS estado;
volatile int8 dato;
 
// se ha detectado un movimiento y se pasa al estado de alarma
#INT_EXT
void movimiento()
{
   if(estado == DETECTA)
   {
      estado = ALARMA;
   }
}
 
// se ha detectado un carácter en la cola la USART
#INT_RDA
void lectura()
{
   int8 valor;
   if(kbhit())
   {
      valor = getc();
      if(valor != '\r')
      {
         dato = valor;
      }
   }
}
 
// función genérica que pasa al estado de detección borrando cualquier interrupción anterior y activándola
void deteccion()
{
   estado = DETECTA;
   clear_interrupt(int_ext);
   enable_interrupts(int_ext);
}
 
void main()
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   setup_oscillator(OSC_4MHZ);
   // Ponemos a todos los pines del puerto B como entrada excepto el de salida de la USART
   set_tris_b(0xFB);
   // Empezamos por el estado de inicio
   estado = INICIO;
   // La interrupción debe ser cuando pasa de nivel bajo a nivel alto
   ext_int_edge( L_TO_H );
   enable_interrupts(int_rda);
   enable_interrupts(global);
 
   // TODO: USER CODE!!
 
   for(;smiley-wink
   {
      switch(estado)
      {
         // En el estado de inicio inicializamos el modem para que no haga eco de los comandos,
         // los valores de respuesta sean numéricos y apague el altavoz del modem, esperando
         // 15 segundos para dejar salir al usuario de la sala y pasamos al estado de detección
         case INICIO:
            delay_ms(2000);
            printf("ATE0V0M0\r");
            delay_ms(13000);
            deteccion();
            break;
         // En el estado de detección esperamos la interrupción en modo sleep para consumir menos
         case DETECTA:
            sleep();
            break;
         // Se desactiva la interrupción y marcamos el número de teléfono que queramos alertar
         case ALARMA:
            disable_interrupts(int_ext);
            dato = 'A';
            printf("ATDTXXXXXXXXX\r");
            estado = LLAMADO;
            break;
         // Esperamos a que termine la llamada para que vuelva al estado de detección
         case LLAMADO:
            if(dato != 'A')
            {
               deteccion();
            }
      }
   }
 
}
Logged

0
Offline Offline
Jr. Member
**
Karma: 5
Posts: 72
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Por lo que se ve en tu código lo que tienes es un PIR conectado al PIC, este PIR genera una interrupción cuando pasa de estado LOW a HIGH.

También hay conectado un MODEM, cuando hay una alarma se llama a un número de teléfono printf("ATDTXXXXXXXXX\r"); y se espera a que el MODEM conteste una 'A' (los modems funcionan con comandos AT y si la cosa va bien contestan AT OK, aquí sólo se tiene en cuenta la primera A).

El código está organizado como una máquina de estados.

Tienes un estado INICIO que se ejecuta unicamente al principio, lo que se realiza en esta parte se puede poner en la parte INIT del arduino (inicializar el puerto serie al que se conecta el modem, definir que pines son de entrada y salida y dar valor inicial a las variables.

Luego tienes un estado DETECTA en el que no hace nada, pero en realidad espera a que se ejecute la interrupción que detecta actividad en el PIR y pasa al estado ALARMA.

En el estado ALARMA deshabilita la interrupcion del PIR (para evitar los rebotes en la señal), hace que el modem llame y pasa al estado LLAMADA.

En el estado llamada se espera (mediante interrupciones) a que el modem devuelva una 'A', entonces se habilitan de nuevo las interrupciones del PIR y se pasa al estado DETECTA en el que se espera otra transición de nivel bajo a nivel alto del puerto de entrada del PIR.

Yo la parte del modem no la haría con interrupciones, al fin y al cabo el modem es como un terminal conectado al puerto serie,  se puede usar sin problemas con la biblioteca serial.

Y para la parte del PIR depende, si el PIR devuelve un pulso cuando detecta movimiento usa interrupciones, pero si lo que hace es mantener el nivel alto cuando hay movimiento es mucho mas fácil modificar el case DETECTA:  y poner
if (pinDelPir==HIGH){estado = ALARMA;} aunque el programa original ponía el PIC en modo sleep y así no se haría.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 142
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

yo esto lo temgo montado en la protoboard pero no se que pasa que no termina de funcionar bien da la sensacion que el modem quiere mandar la llamada pero no lo hace tengo que decir que no soy un experto
y lo que quiero es traspasar este prollecto al arduino
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 142
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bueno pues en la protoboard ya funciona jeje ahora me gustaria hacerlo funcionar con el arduino pero no se si sere capaz
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 142
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hola lo resubo  a ver si alguien me ayuda con el tema este
el asunto es conectar arduino con un modem antiguo con entrada db9  y un pir que el modem mande un sms
como ya explicado mas arriba el ensayo en una protoboard es ok pero me gustaria tras pasarlo al arduino  
el problema es que mis conocimientos son escasos
salu2

aqui un video del proceso

« Last Edit: June 21, 2011, 05:36:33 am by tazma » Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 142
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Por lo que se ve en tu código lo que tienes es un PIR conectado al PIC, este PIR genera una interrupción cuando pasa de estado LOW a HIGH.

También hay conectado un MODEM, cuando hay una alarma se llama a un número de teléfono printf("ATDTXXXXXXXXX\r"); y se espera a que el MODEM conteste una 'A' (los modems funcionan con comandos AT y si la cosa va bien contestan AT OK, aquí sólo se tiene en cuenta la primera A).

El código está organizado como una máquina de estados.

Tienes un estado INICIO que se ejecuta unicamente al principio, lo que se realiza en esta parte se puede poner en la parte INIT del arduino (inicializar el puerto serie al que se conecta el modem, definir que pines son de entrada y salida y dar valor inicial a las variables.

Luego tienes un estado DETECTA en el que no hace nada, pero en realidad espera a que se ejecute la interrupción que detecta actividad en el PIR y pasa al estado ALARMA.

En el estado ALARMA deshabilita la interrupcion del PIR (para evitar los rebotes en la señal), hace que el modem llame y pasa al estado LLAMADA.

En el estado llamada se espera (mediante interrupciones) a que el modem devuelva una 'A', entonces se habilitan de nuevo las interrupciones del PIR y se pasa al estado DETECTA en el que se espera otra transición de nivel bajo a nivel alto del puerto de entrada del PIR.

Yo la parte del modem no la haría con interrupciones, al fin y al cabo el modem es como un terminal conectado al puerto serie,  se puede usar sin problemas con la biblioteca serial.

Y para la parte del PIR depende, si el PIR devuelve un pulso cuando detecta movimiento usa interrupciones, pero si lo que hace es mantener el nivel alto cuando hay movimiento es mucho mas fácil modificar el case DETECTA:  y poner
if (pinDelPir==HIGH){estado = ALARMA;} aunque el programa original ponía el PIC en modo sleep y así no se haría.

hola  ahora e leido mas detenida mente tu contestacion y veo que es posible hacer lo que yo quiero no ?
el tema como ya e comentado soy muy novato y aun no me aclaro con las entradas y salidas de los pines
tambien decir que este codigo no lo e montado yo pero tengo el permiso del autor para usarlo
salu2
Logged

Pages: [1]   Go Up
Jump to: