• Lunes 29 de Abril de 2024, 01:03

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - CesarCode

Páginas: [1]
1
Programación en C / [b][/b]Ola amigos ... Tengo problemas con un proyecto que e
« en: Sábado 29 de Enero de 2011, 14:08 »
Ola amigos  :)  ...

Tengo problemas con un proyecto que estoy haciendo  :( ya habia manejado antes para algunas cosas sencillas este microcontrolador pero nose que esta pasando on lo que quiero hacer ahora , espero me puedan ayudar, ahi les va...

Con un DSPIC30F4013 quiero controlar 19 leds que van a ir prendiendo en secuencia, entre cada led necesito un retardo de 5 min pero ahorita para probarlo estoy dejandole como 1 seg. ... este proceso de secuencia tiene que empezar cuando precione un boton (prenderia el 1er. led - 5min - 2do. led - 5 min y asi sucesivamente), con ese mismo boton al presionarlo por segunda vez que detenga (pause) la secuencia donde se quedo y con una tercera vez que se presione el mismo boton apagar todos los leds para esperar repetir lo mismo cuando se ocupe otra ves (picando el boton de nuevo) ....

esto es lo que debe hacer el proyecto, pero al momento de probarlo ya en proto algunas veces si lo hace bien y otras no  :? ... ya que apago los led, ahi veces que activo la secuencia y llega hasta el segundo led nada mas no sigue con los demas ( se queda trabado ahi D: ) y otras veces que esta corriendo la secuencia no se detiene cuando presiono el boton   :hitcomp:  ... esos son los grandes problemas que estoy teniendo con este circuito, ya probe varias fuentes diferentes para ver si era eso pero no sigue pasando lo mismo con todas, cheke muchas veces el programa y segun yo esta bn, nose si se me este pasando algun detalle que es en lo que espero me puedan ayudar o dar alguna idea de lo k pueda estar pasando

aki dejo el programa y de antemano .. gracias

#include "p30f4013.h"
#include <math.h>
#include <stdio.h>
#define BOTON _RD8 // En este pin se conecta el boton

_FOSC(CSW_FSCM_OFF & XT_PLL16);
_FWDT(WDT_OFF);                //Apaga el perro guardian
_FBORPOR(MCLR_EN & PWRT_OFF);       //Habilita el reset por el pin MCLR y
                           //desactiva el temporizador de encendido
_FGS(CODE_PROT_OFF);             //Deshabilita la proteccion de codigo

void retardo(int t); //Prototipo de funcion
//void delayms(unsigned t);
int menu,control,reinicia;

int main()
{
   int leds,cont;
   TRISB = 0x0000;      //Puerto B como salida
   TRISF = 0x0000;      //Puerto F como salida
   ADPCFG = 0xFFFF;   //Configura pines digitales

   /* A continuación los pasos para configurar y programar la interrupción */
   _INT1EP = 1;    //Disparo de interrupcion por flanco descendente
   _INT1IP = 4;    //Ajusta la prioridad a 4 (valor predeterminado)
   _INT1IF = 0;   //Paso 3. Limpia la bandera de interrupcion
   _INT1IE = 1;   //Paso 4. Habilita la interrupcion externa 1

   /*// Configura el CN (change notification)
   CNEN1bits.CN2IE = 1;       // Habilita la interrupcion del CN2 pin RB0
   CNPU1bits.CN2PUE = 1;         // Habilita la pull-up del pin CN2
   IFS0bits.CNIF = 0;          // Limpia la bandera de interrupcion de CN
   IPC3bits.CNIP = 7;          // Prioridad 5 de interrupcion CN
   IEC0bits.CNIE = 1;          // Habilita la interrupcion CN*/


//*************************************************************** OPCION 2 DE PROGRAMA ***************************************************************
   reinicia = 0;
   menu = 0;
   control = 0;
   leds = 0;
   while(1)
   {
      if (reinicia == 1)
      {
         PORTB = 0;
         PORTF = 0;
         reinicia = 0;
         menu = 0;
         control = 0;
         leds = 0;
      }
      if (control == 1)
      {
         _LATB0 = 1;       //LED de Encendido
         while(menu!=2)   //Ciclo condicion para 90minutos completos
         {
            for (cont=1;cont<=50;cont++)   //poner a 5min
               retardo(10000);
            leds++;
            if (leds == 1)
               _LATB1 = 1;
            if (leds == 2)
               _LATB2 = 1;
            if (leds == 3)
               _LATB3 = 1;
            if (leds == 4)
               _LATB4 = 1;
            if (leds == 5)
               _LATB5 = 1;
            if (leds == 6)
               _LATB6 = 1;
            if (leds == 7)
               _LATB7 = 1;
            if (leds == 8)
               _LATB8 = 1;
            if (leds == 9)
               _LATB9 = 1;
            if (leds == 10)
               _LATB10 = 1;
            if (leds == 11)
               _LATB11 = 1;
            if (leds == 12)
               _LATB12 = 1;
            if (leds == 13)
               _LATF0 = 1;
            if (leds == 14)
               _LATF1 = 1;
            if (leds == 15)
               _LATF2 = 1;
            if (leds == 16)
               _LATF3 = 1;
            if (leds == 17)
               _LATF4 = 1;
            if (leds == 18)
            {
               _LATF5 = 1;
               control = 2;
               menu = 2;
            }
         }//Ciclo 90 min.
      }
   } //ciclo principal
   return(0);
} //main


//**************** Funcion retardo ************************
void retardo(int t)
{
   int i=1,j;
   for(j=0; j<t; j++)       //Repite el ciclo t veces
      while(i)          //Cicla hasta que i se desborde
         i++;
}

/* RUTINA DE SERVICIO DE INTERRUPCION */
// Esta rutina se ejecuta cada vez que se produce un flanco descendente en el BOTON
void __attribute__((interrupt, no_auto_psv)) _INT1Interrupt( void)
{
   //Delayms(20); // Espera a que se estabilice el nivel de voltaje
   retardo(30);
   if(BOTON==0)
   {
      if(menu==0) // Si no es un rebote...
         control=1;
      if(menu==1)
         control=0;
      if(menu==2)
         reinicia=1;
   }
    menu++;
   _INT1IF = 0; //Limpia la bandera de interrupción antes de salir
} //INT1Interrupt


/*// Rutina de servicio de interrupcion del Change Notification (CN)
void __attribute__((interrupt, no_auto_psv)) _CNInterrupt(void)
{
   if(BOTON == 0)          // Si se pulso el boton
   {
   retardo(20);
   if((BOTON==0)&&(menu==0)) // Si no es un rebote...
      control=1;
   if((BOTON==0)&&(menu==1))
      control=0;
   if((BOTON==0)&&(menu==2))
      reinicia=1;
        menu++;
   //}
   IFS0bits.CNIF = 0;          // Limpia la bandera de interrupcio
} //CNInterrupt*/

2
Matlab / Cómo Manejo Imagenes RGB??
« en: Miércoles 10 de Marzo de 2010, 14:20 »
hola  :) ...
Empece a manejar el matlab hace algun tiempo en la escuela, pero tengo un problema con un ejercicio que me dejaron.
Se trata de hacer una función para rotar horizontalmente una imagen dada del tipo RGB(a color), solo que no se como manejar las imagenes de este tipo ya que estan hechas por 3 matrices  :unsure: .... aqui les pongo el codigo que hice solo que es convirtiendo la imagen en tonos de gris  :P(que es lo que no quiero, pero para que se den una idea) , espero que me puedan ayudar:

function [im] = rotarH(im)
im = imread('carmen.jpg');
im = rgb2gray(im);
[L,C] = size(im);
columna = C;
for c = 1:C
    for r = 1:L
        g(r,columna) = im(r,c);
    end
    columna = columna -1;
end
imshow(im);
figure,imshow(g);


muchas gracias de antemano  ^_^  espero sus respuestas  :beer:

Páginas: [1]