Nuevo en programación con MikroC

#42
Lo mas facil es declarar 2 variables tipo array, por ejemplo para las primera letras y asumiendo catodo comun:

PHP:
int alphaB [3] = {
     //   abcdefgh
        0b11110011,  //   a
        0b00011111,  //   b
        0b11001111,  //   c
    };

int alphaD [3] = {
     //   kmnprstu
        0b00010001,  //   a
        0b00010001,  //   b
        0b00000000,  //   c
    };
Para mostrar las letras utilizas algo asi:

PHP:
         PORTB = alphaB[i];
         PORTD = alphaD[i];
         Delay_ms(500);
donde i es la letra que quieres mostrar.

saludos
 
#43
hola gente muy buenos sus aportes, ahora bien tengo un problema con el delay_ms en mikroc no me lo toma me dice que esta indefinido,necesito hacer el control de servos a-travez de pulsadores pero necesito un retardo para el PWM y no se como hacerlo si me pudieran ayudar se los agradecería
 
Última edición por un moderador:
#44
Hola, inicio con la programación de pics estoy usando un 16f887 y quiero ejecutar 2 funciones simultaneas una para invertir el giro de un motor {puerto B2} y simultaneamente activar otro {puerto A3}, pero al esperar en la función delay no revisa o hace el resto del programa hasta acabar la orden :cry:

PHP:
if(portb.f2==1){ // Recibe señal de inicio
             delay_ms(300); // 1/2 pausa
             porta.f4=1; //giro derecha
             delay_ms(1000); //duracion del giro derecha
             porta.f4=0; //apaga giro derecha
             delay_ms(600); //pausa
             porta.f5=1;    // enciende giro izquierda
             delay_ms(1000); //duracion giro izquierda
             porta.f5=0; //apaga giro izquierda
             delay_ms(300); // 1/2 pausa
Espero puedan ayudarme, Gracias!:D
 
#45
Buenos días. Te cuento, en los microcontroladores (como norma general) solo corren un hilo de programa, es decir, no pueden ejecutar 2 instrucciones simultaneamente, se hace una cosa y despues otra. Piensalo como cuando lees un libro, vas leyendo palabra por palabra fila por fila, puedes saltar de una fila a otra o saltar paginas... pero estar leyendo 2 filas/paginas a la vez lo dejaremos a mentes privilegiadas.

Solución, hacer uso de interrupciones y/o contadores, busca información sobre esto.

Cualquier otra duda pasate. Un saludo
 
#46
Hola,

Alguien me puede decir como desactivar la opción de que al cerrar la llave "}" me meta en la linea anterior un comentario"//".

No lo veo en la configuracion y me está empezando a mosquear bastante.

Gracias
 
#47
No se si ya se habló de esto por aqui, en todo caso yo ya hace años desistí de intentar arreglar esto. No se si en las nuevas versiones le hayan dado solución ya, pero entonces la única manera de evitarlo era poniendo el teclado en modo inglés, donde ahi los simbolos cambian de lugar pasando a ser ^ para { y * para }. Es decir, las teclas que estan encima y pulsando Shift (May) en lugar de Alt.

Un saludo
 
#48
Buenas Noches amigos del foro, actualmente estoy desarrollando un proyecto y en una parte me quede atascado, ya que no encuentro como solucionar mi problema, espero alguno de ustedes pueda ayudarme.

La cuestión es la siguiente, tengo un contador que va contando de 1 en 1 a través de un pulsador, esa variable es /dist/, y a su vez esa variable la guardo en /contX=dist/, cuando hay una interrupción /H/, que es otro pulsador se resetea /dist/ y se cambia la variable de guardado a /contY=dist/, y cuando se vuelva a producir la interrupción /H/ esta vuelva a guardar /dist/ en /contX=dist/ y así sucesivamente. Tengo funcionando hasta que se cambia la variable y viceversa, pero lo que quiero saber es como podría guardar el valor en que quedo /contX/ antes de resetear /dist/, y cuando se vuelva a guardar en /contX/ la variable siga contando desde donde se dejo. Espero me haya explicado jeje.

Un ejemplo seria:
Empieza el contador a funcionar
contX=dist (hay pulso /dist/ valdría 1, /contX/ valdría 1)
contX=dist (hay pulso /dist/ valdría 1, /contX/ valdría 2)

Interrupción (Cambio de variable a guardar /dist/ se resetea)

contY=dist (hay pulso /dist/ valdría 1, /contY/ valdría 1)
contY=dist (hay pulso /dist/ valdría 1, /contY/ valdría 2)
contY=dist (hay pulso /dist/ valdría 1, /contY/ valdría 3)

Interrupción (Cambio de variable a guardar /dist/ se resetea)

contX=dist (hay pulso /dist/ valdría 1, /contX/ valdría 3)
contX=dist (hay pulso /dist/ valdría 1, /contX/ valdría 4)

Interrupción (Cambio de variable a guardar /dist/ se resetea)

contY=dist (hay pulso /dist/ valdría 1, /contY/ valdría 4)
contY=dist (hay pulso /dist/ valdría 1, /contY/ valdría 5)
contY=dist (hay pulso /dist/ valdría 1, /contY/ valdría 6)

Y así sucesivamente...

Espero me hayan entendido, creo que es con otra variable que se guardaría el valor, pero la verdad ya todo el día he intentado de las formas que se me ocurrieron y no me ha dado resultado. Espero su grata ayuda, Gracias! ...
 
#49
Sobre lo que expones, ¿Por qué mejor no incrementas la variable "dist"?

Por ejemplo:
// Servicio de interrupción:
dist ++;
contX = dist;

Así cuando ocurra el reset de la variable "dist", la variable "contX" contendrá el valor global de "dist"
 
#50
Hola. Buenas noches.
Soy nuevo ocupando este compilador, y lo que necesito hacer es una interfase entre Labview y mi PIC.
El problema que tengo, es que Labview envía información por el puerto serial en forma de caracteres.

Ejemplo: envía '0255', pero dicho carácter yo lo necesito en número float para hacer operaciones con él.
¿Cómo le puedo hacer?
 
#51
Un número con decimales o punto flotante, se puede convertir en un número entero si se multiplica por 100.

Ejemplo: 1234.56 * 100 = 123456

Ya en el PIC puedes convertir la cadena "123456" en un entero de 16 o 32 bits.
Después usas una variable Float para dividirlo entre 100 y obtener el número con punto flotante.
 

Temas similares

Arriba