Haz una pregunta
  Foros de Electrónica » Temas de Interés » Robótica, Domótica y Mecatrónica
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

07/08/2014 #1


Matriz de led con pic 16f886
Buenos días a todos quisiera saber si este código esta funcionando ya que en la simulación si funciona pero a la hora de implementarlo en protoboard no funciona.
Código:
#include <16F883.h>
#fuses NOWDT         //Deshabilita Watchdog
#fuses RC                //Oscilador RC (Resistencia Capacitor Externos)
#fuses HS                //Modo Full Power de alta Velocidad, hasta 10MHZ, más depende el micro
#fuses LP                //Modo Bajo Consumo hasta 200KHZ
#fuses INTRC         //Cristal Interno RC
#use delay(int=4000000)
#define LARGO 28                      //Longitud de la tabla
int const tabla[LARGO+8]={
                          0b00000000, //Espacio
                          0b00000000, //Espacio
                          0b00000000, //Espacio
                          0b00000000, //Espacio
                          0b00000000, //Espacio
                          0b00000000, //Espacio
                          0b00000000, //Espacio
                          0b00000000, //Espacio  
                          0b11111111, //Dato de tabla H
                          0b00010000,
                          0b00010000,
                          0b11111111,
                          0b00000000, //Espacio
                          0b01111110, //Dato de tabla O
                          0b10000001,
                          0b10000001,
                          0b01111110, 
                          0b00000000, //Espacio
                          0b11111111, //Dato de tabla L
                          0b10000000, 
                          0b10000000, 
                          0b00000000, //Espacio
                          0b11111110, //Dato de tabla A
                          0b00010001, 
                          0b00010001, 
                          0b11111110, 
                          0b00000000, //Espacio
                          0b00000000, //Espacio
                          };
void main(){
   byte const bitMask[8]={1,2,4,8,16,32,64,128}; //Mascara
   int i,j,k;                         //Variables contadores
   while(TRUE){                       //Ciclo infinito
      for(i=0;i<LARGO+8;i++){         //Recorrido de tabla
         for(k=0;k<20;k++){           //Refresco de matriz
            for(j=0;j<8;j++){         //Barrido de columnas
               output_a(~bitMask[j]); //Columnas ponderadas
               output_b(tabla[j+i]);  //Desplazamiento de tabla
               delay_ms(1);           //Demora de multiplexado
            }   
         }
      }
   }   
}
07/08/2014 #2

Avatar de TRILO-BYTE

todo esto esta mal
#include <16F883.h>
#fuses NOWDT //Deshabilita Watchdog
#fuses RC //Oscilador RC (Resistencia Capacitor Externos)
#fuses HS //Modo Full Power de alta Velocidad, hasta 10MHZ, más depende el micro
#fuses LP //Modo Bajo Consumo hasta 200KHZ
#fuses INTRC //Cristal Interno RC
#use delay(int=4000000)

si es para el 886 deberia ser asi con oscilador interno

#include <16F886.h>

#fuses INTRC_IO //donde aqui marcamos que es interno el reloj

#use delay(clock=8M) //por la hoja de datos nos dice que el reloj interno solo llega a 8 Mhz


mas cuidado con los copy paste muchos autores ponen errores apropocito para que la gente estudie el codigo y no hagan la ley del minomo esfuerzo
08/08/2014 #3


Te agradezco mucho por tu ayuda voy a intentar de nuevo y subo algún vídeo
09/08/2014 #4

Avatar de TRILO-BYTE

aca te dejo un videito de un demo con un pic18f4550

para hacer el barrido use un cd4017 "para ahorrar pines" y dibuje usando el puerto B


en realidad hacer eso es muy simple solo debes jugar con el puerto b y dar un clock para dibujar la siguiente fila
10/08/2014 #5


Disculpa sabes como hacer una matriz led con teclado.
10/08/2014 #6


Hola disculpa como le hago para utilizar un switch para cambiar de secuencia
10/08/2014 #7

Avatar de TRILO-BYTE

see mas especifico en la pregunta son un switch es facil
solo lees lo que entra por un pin el que sea

digamos

en codigo:

char secuencia;

while(1)
{
secuencia=input_a();

switch(secuencia)
{
case1:
...
break;

case2:
...
break;

case3:
...
break;


default:
...
break;
}
}


y ya!
11/08/2014 #8


Digamos que tengo dos secuencias de led una que es parecido al auto fantástico y otro alazar mi duda era como le hago para utilizar solo una secuencia y a la hora de presionar el switch cambie a la otra y siga repitiendo hasta que vuelva a presionar el switch muchas gracias por ayudarme te lo agadezco mucho
11/08/2014 #9

Avatar de TRILO-BYTE

es que como usas el bucle switch preguntas si hiso un cambio o con un if

digamos que tenemos una secuencia 1 y una secuencia 2 con 1 solo boton cambiamos la secuencia

el codigo debemos poner
1 broche que pregunte en que secuencia esta
leer el boton
un bucle infinito while(1)

un if que pregunten en que secuencia e incrementarla si se pasa regresar a la primer secuencia o a ninguna secuencia

un switch que contenga las secuencias


codigo mas o menos asi

char broche=0;

while(1)
{

// debemos leer el boton
if((!input(pin_a3))
{
broche++;
if(broche>=2)
broche=0;
}

switch(broche)
{

case 0:
//ninguna secuencia
break;

case 1:
//secuencia 1
break;


case 2:
//secuencia 2
break;
}

}
12/08/2014 #10


Excelente explicacion pero tengo una duda y para implementarla en este código como le arria son mas o menos 9 secuencias diferentes
#include<16f84a.h>
#fuses XT
#fuses NOWDT
#fuses NOPUT
#fuses PUT
#fuses NOPROTECT
#use delay (clock= 4000000)
#use fast_io(B)
int i=0;
Void main()
{
Set_tris_B(0x00); //Configura en o, osea
//se configura como salida
Output_B(0b00000000); //coloca en estado cero el pin,0

While(1)
{
for(i=0;i<=9;i++){
output_b(0b00000000);
delay_ms(300);
output_b(0b10000000);
delay_ms(100);
output_b(0b01000000);
delay_ms(100);
output_b(0b00100000);
delay_ms(100);
output_b(0b00010000);
delay_ms(100);
output_b(0b00001000);
delay_ms(100);
output_b(0b00000100);
delay_ms(100);
output_b(0b00000010);
delay_ms(100);
output_b(0b00000001);
delay_ms(100);
output_b(0b00000000);
delay_ms(200);
output_b(0b00000001);
delay_ms(100);
output_b(0b00000010);
delay_ms(100);
output_b(0b00000100);
delay_ms(100);
output_b(0b00001000);
delay_ms(100);
output_b(0b00010000);
delay_ms(100);
output_b(0b00100000);
delay_ms(100);
output_b(0b01000000);
delay_ms(100);
output_b(0b10000000);
delay_ms(100);
}
for(i=0;i<=9;i++){
output_b(0b00000000);
delay_ms(300);
output_b(0b10000001);
delay_ms(150);
output_b(0b11000011);
delay_ms(150);
output_b(0b11100111);
delay_ms(150);
output_b(0b01111110);
delay_ms(150);
output_b(0b00111100);
delay_ms(150);
output_b(0b00011000);
delay_ms(150);
output_b(0b00000000);
delay_ms(300);
output_b(0b00011000);
delay_ms(150);
output_b(0b00111100);
delay_ms(150);
output_b(0b01111110);
delay_ms(150);
output_b(0b11100111);
delay_ms(150);
output_b(0b11000011);
delay_ms(150);
output_b(0b10000001);
delay_ms(150);
}
for(i=0;i<=9;i++){
output_b(0b00001111);
delay_ms(300);
output_b(0b11110000);
delay_ms(250);
output_b(0b00001111);
delay_ms(250);
output_b(0b11110000);
delay_ms(250);
}
for(i=0;i<=9;i++){
output_b(0b00000000);
delay_ms(200);
output_b(0b01010101);
delay_ms(250);
output_b(0b10101010);
delay_ms(250);
output_b(0b01010101);
delay_ms(250);
output_b(0b10101010);
delay_ms(250);
}
for(i=0;i<=9;i++){
output_b(0b00000000);
delay_ms(400);
output_b(0b00111100);
delay_ms(300);
output_b(0b11000011);
delay_ms(300);
output_b(0b00111100);
delay_ms(300);
}
for(i=0;i<=9;i++){
output_b(0b00000000);
delay_ms(400);
output_b(0b11111111);
delay_ms(400);
}
for(i=0;i<=9;i++){
output_b(0b00000000);
delay_ms(600);
output_b(0b11110000);
delay_ms(500);
}
for(i=0;i<=9;i++){
output_b(0b00000000);
delay_ms(600);
output_b(0b00001111);
delay_ms(500);
}
for(i=0;i<=9;i++){
output_b(0b00000000);
delay_ms(250);
output_b(0b10000000);
delay_ms(200);
output_b(0b01000000);
delay_ms(200);
output_b(0b10100000);
delay_ms(200);
output_b(0b01010000);
delay_ms(200);
output_b(0b10101000);
delay_ms(200);
output_b(0b01010100);
delay_ms(200);
output_b(0b10101010);
delay_ms(200);
output_b(0b01010101);
delay_ms(200);
output_b(0b00101010);
delay_ms(200);
output_b(0b00010101);
delay_ms(200);
output_b(0b00001010);
delay_ms(200);
output_b(0b00000101);
delay_ms(200);
output_b(0b00000010);
delay_ms(200);
output_b(0b00000001);
delay_ms(200);
output_b(0b00000000);
delay_ms(200);
output_b(0b00000001);
delay_ms(200);
output_b(0b00000010);
delay_ms(200);
output_b(0b00000101);
delay_ms(200);
output_b(0b00001010);
delay_ms(200);
output_b(0b00010101);
delay_ms(200);
output_b(0b00101010);
delay_ms(200);
output_b(0b01010101);
delay_ms(200);
output_b(0b10101010);
delay_ms(200);
output_b(0b01010100);
delay_ms(200);
output_b(0b10101000);
delay_ms(200);
output_b(0b01010000);
delay_ms(200);
output_b(0b10100000);
delay_ms(200);
output_b(0b01000000);
delay_ms(200);
output_b(0b10000000);
delay_ms(200);
}
}
}
12/08/2014 #11

Avatar de TRILO-BYTE

tus secuencias deben ir dentro de los cases

y dios mio cuantos delay!!!

nimodo eso debe corregirse pues los delay no permiten leer los botones en tiempo real
12/08/2014 #12


Disculpa pero a la hora de compilar me tira varios errores entre ellos estan a numeric expression, must appear here, undefined identifier broche, expecting a close paren si me pudieras explicar por que me da estos errores te agradecería mucho
12/08/2014 #13

Avatar de TRILO-BYTE

a pues numerico no estas igualando bien o noestas incrementando bien
falta un corchete en un if while o case
12/08/2014 #14


Sigue igual quisiera saber si me puedes crear una para tomar como ejemplo si no es mucha molestia
13/08/2014 #15

Avatar de TRILO-BYTE

sube tu codigo para revisarlo
13/08/2014 #16


Aquí esta el archivo
Archivos Adjuntos
Tipo de Archivo: zip Cambio de secuencia.zip (7,1 KB (Kilobytes), 17 visitas)
17/08/2014 #17

Avatar de TRILO-BYTE

no pues todo esta mal


case (1):{
//secuencia 1
break;
output_b(0b00000000);
delay_ms(600);
output_b(0b00001111);
delay_ms(500);
}

eso esta mal

en un case

va asi

case 1:

//tu codigo

break;

sin corchetes
18/08/2014 #18


Disculpa ya casi esta terminado pero no se como colocar el switch subire un zip con la simulacion y el hex para que me ayudes
Archivos Adjuntos
Tipo de Archivo: zip A qui esta casi terminado.zip (22,2 KB (Kilobytes), 12 visitas)
18/08/2014 #19

Avatar de TRILO-BYTE

lo revisare con tiempo no te preocupes cualquier error lo corrijo

---------- Actualizado después de 28 minutos ----------

ya esta correjido que pesimo para mi gusto pero es una ayudadita

en realidad esta mal meter tanto delay pues el micro se atonta y se atora hasta que termina el delay es decir no podra leer el boton hasta que la secuencia acabe, falta antirrebote y es un pic16f84a
yo usaria el pic16f716 o el 16f88, pero en gustos se rompen generos.


terminado y pulido en el proteus usa las ledbar para no poner tanto led, usa resistencias pues no va a simular correctamente y yo te aconsejo que el cuando pongas push usa los toggle que se encuentran en la parte de DEBUG tools.
Archivos Adjuntos
Tipo de Archivo: zip matriz.zip (15,8 KB (Kilobytes), 28 visitas)
19/08/2014 #20


Te agradezco mucho por tomarte el tiempo de explicarme aunque no entendía mucho pero ahora ya entendí un poco .
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Robótica, Domótica y Mecatrónica

La electrónica Aplicada a la Robótica y sus técnicas de interface.

Cerrar
Foros de Electrónica » Temas de Interés » Robótica, Domótica y Mecatrónica

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.