TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Strongpic en 07 de Abril de 2017, 16:21:42

Título: En la vida real no funciona
Publicado por: Strongpic en 07 de Abril de 2017, 16:21:42
Programe en c el efecto para hacer trabajar el puertob del 16f84 para encender un led cada 1 segundo
 
Lo simule en proteus anduvo de diez,  en la programacion real en mi protoboar solo enciende los primeros tres led conetado al puertob de lo 8.
les paso el programa en c
-------------------------------------------
* Author: strong
 *
 * Created on 7 de abril de 2017, 14:36
 */
#include <stdio.h>
#include <stdlib.h>
#include <xc.h> //;libreria de compilador en c
#define _XTAL_FREQ 4000000         //Fosc=4Mhz
#define __delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0)))
   ///PROGRAMA

int main() {
   int i ;
   TRISB = 0x00;   //portb como salida(RB0,las demas desactivadas)
   PORTB = 0X00;
   short int       tabla[8] = {
                        0b00000001,      // Numero 0
                        0b00000010,      // Numero 1
                        0b00000100,      // 2
                        0b00001000,      // 3
                        0b00010000,      // 4
                        0b00100000,      // 5
                        0b01000000,      // 6
                        0b10000000,
                        };
        i=0;
           while (i<=7)
         {
         PORTB= tabla ;  con corchetes entre la i no aparece cuando la escribo        //led on
        __delay_ms(1000);
          i=i+1;
         }
   
    return (EXIT_SUCCESS);
  }
-------------------------------------

en la tabla se ve el efecto que quiero obtener en la salida

en que ando mal?
seguire intentando solucionar esto.
Título: Re:En la vida real no funciona
Publicado por: manwenwe en 07 de Abril de 2017, 17:12:42
Cambia esto:

Código: [Seleccionar]
//PORTB= tabla; //MAL
PORTB= tabla[i]; //BIEN

Saludos!
Título: Re:En la vida real no funciona
Publicado por: Strongpic en 07 de Abril de 2017, 17:19:34
Lo cambie , lo compilo y me dice error
ademas es   "PORTB=tabla;" con corchetes entre la i no aparece cuando la escribo
gracias por su rapida repuesta seguire investigado tablas veo que no lo manejo bien.
Título: Re:En la vida real no funciona
Publicado por: manwenwe en 07 de Abril de 2017, 17:33:28
Ya me he dado cuenta, se ve que el editor del foro no lo reconoce. Dale al icono de insertar código y ahí si que lo hace bien. Al final no te he entendido: lo pones con corchetes o no?. Sin corchetes estás copiando la dirección de memoria del puntero, con corchetes el contenido del puntero (que es lo que debería).

qué error te da?

otra cosa: un byte no es short int, es un unsigned char.
Título: Re:En la vida real no funciona
Publicado por: Strongpic en 07 de Abril de 2017, 17:36:03
"con corchetes entre la i", procedi a compilar y aun tengo problemas :shock:.
saludos!!
Título: Re:En la vida real no funciona
Publicado por: manwenwe en 07 de Abril de 2017, 17:37:00
Creo que edité mientras contestabas.... te puse 2 preguntas mas...
Título: Re:En la vida real no funciona
Publicado por: KILLERJC en 07 de Abril de 2017, 20:42:59
Usualmente el Proteus no tiene en cuenta los FUSES del micro, asi que es eso. Ya que no veo que lo tengas puesto. El MPLAB posee un generador en el que seleccionas con el mouse los FUSES y le das a generar el cual te da el codigo a copiar en el codigo.

la i entre corchetes no aparece por que pertenece al tag del estilo: ITALICA
Código: [Seleccionar]
[i]ITALICA[/i]
Y otra cosa, es que no se si conectaste bien el PIC.
Título: Re:En la vida real no funciona
Publicado por: Strongpic en 08 de Abril de 2017, 13:13:33
Muchas gracias por la rapida respuesta, tengo la correccion del codigo, pero aun tengo problemas, ahora con el programador :shock:
------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <xc.h> //;libreria de compilador en c

#define _XTAL_FREQ 4000000         //Fosc=4Mhz
#define __delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0)))
   ///PROGRAMA
// CONFIG
#pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF       // Watchdog Timer (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (Power-up Timer is disabled)
#pragma config CP = OFF         // Code Protection bit (Code protection disabled)

int main(){
   int i,TRISB,PORTB ;
   unsigned char tabla[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
   TRISB = 0x00;   //portb como salida(RB0,las demas desactivadas)
   PORTB = 0X00;
 
        i=0;
           while (i<=7)
         {
         PORTB= tabla;          //led on
        __delay_ms(1000);
          i=i+1;
         }
     
    return (EXIT_SUCCESS);
  }
-------------------------------------------------------
Agregue el cambio de variable, no comprendia  la diferencia ahora logre trabajar con char, intente hacerlo con string, pero no hubo caso , mplab me acepto la varible char y encontre una guia por el foro, los fuses lo hice para el pic  16f84 .

ahora tengo problema en el programador tengo el TMPROG 2.0

"ERROR DE CODIGO EN 0x0000 leido :0x0000;verificador 0x2BED"

con esto me despido por ahora ya gaste mis energia en este problema, voy por otros, saludos
Título: Re:En la vida real no funciona
Publicado por: KILLERJC en 08 de Abril de 2017, 16:02:31
Cuando uno programa un micro puede verificarlo que se programo correctamente, Ese es el paso que te esta dando error.
Ahi dice que en la direccion 0x0000 lee el valor 0x0000 pero deberia estar el valor 0x2BED

Casi siempre es por la proteccion de codigo, pero vos mostras que en tu codigo CP = OFF, por lo tanto no es eso.
Tal ves alguna mala conexión, o posicionado mal el PIC en el programador, o tal ves quemado el PIC.

Revisa que en el programa del programador no posea tildada la opcion de CP ( Proteccion de codigo)
Título: Re:En la vida real no funciona
Publicado por: Strongpic en 08 de Abril de 2017, 16:27:11
 :shock:
acabo de revisarlo aun tengo ese problema, espero que no sea el pic quemado.....porque tengo dos pic y los dos me dicen el mismo error.
Título: Re:En la vida real no funciona
Publicado por: KILLERJC en 08 de Abril de 2017, 17:30:42
Lamentablemente no puedo ser de mas ayuda. Como te decia el error es el que podes conseguir ahi debido a que no lee por estar protegido. Pero si esta quemado podria dar errores tambien. Lo raro es que te reconozca el micro.

Intenta leer el micro por simple curiosidad. Deberias tener el programa viejo. Si no lo podes leer entonces seguramente esta muerto.
Título: Re:En la vida real no funciona
Publicado por: Strongpic en 08 de Abril de 2017, 17:41:59
puedo leer los micros
aparecen las lineas
00000 :00000 00000 00000....
00008  00000  00000  00000.....

todas las lineas con ceros
creo que los deje muertos..... :? :shock:
Título: Re:En la vida real no funciona
Publicado por: manwenwe en 08 de Abril de 2017, 17:59:30
¿lo tienes montado en protoboard? revisa las conexiones. suena raro 3 pics quemados de golpe... ¿lo alimentas con fuente de banco? ¿cuanto consumen?
Título: Re:En la vida real no funciona
Publicado por: KILLERJC en 08 de Abril de 2017, 20:13:00
Ademas lo puede leer, para mi no esta quemado.. porque le envia informacion el PIC al programador. Parece ser que quedo grabado con proteccion de codigo por eso lee 0x00. Cuando se me quema directamente no puedo ni pedir que me detecte el micro.

Intenta primero borrarlo y luego leerlo, Si no aparece 0xFFFF imagino que debe ser algun problema de conexion o del programador
Título: Re:En la vida real no funciona
Publicado por: Strongpic en 13 de Abril de 2017, 11:19:52
creo que el problema es de quedo protegido contra escritura, como usted dice, ahora intente borrar, volver a pasar el codigo maquina, y aun no puedo solucionar el problema.
si existe la manera de borrar la proteccion,yo  no conozco manera.
gracias.
Título: Re:En la vida real no funciona
Publicado por: KILLERJC en 13 de Abril de 2017, 11:50:36
Es que cuando grabas procede a borrar el micro primero, es como si no estuviese grabando/borrando los bits de configuracion, o algun problema de hardware.
Título: Re:En la vida real no funciona
Publicado por: Strongpic en 13 de Abril de 2017, 12:25:26
De todas maneras di con un micro sin usar y logre hacer funcionar el codigo, aun con una advertencia del programador diciendo "error de configuracion", no di importancia a este mensaje coloque el micro en el protoboar y milagro funciona el codigo :-/
*****************************************
#include <stdio.h>
#include <stdlib.h>
#include <xc.h> //;libreria de compilador en c

#define _XTAL_FREQ 4000000         //Fosc=4Mhz
#define __delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0)))
   ///PROGRAMA
// CONFIG
#pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF       // Watchdog Timer (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (Power-up Timer is disabled)
#pragma config CP = OFF         // Code Protection bit (Code protection disabled)

int main(){
   int i;
   const unsigned char tabla[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
   TRISB = 0x00;   //portb como salida(RB0,las demas desactivadas)
 
   while(1){
        i=0;
           while (i<=7)
         {
         PORTB= tabla i entre corchetes;          //led on
        __delay_ms(800);
          i=i+1;
         }
   }
    return (EXIT_SUCCESS);
  }
****************************
bien a seguir con otros ejercicions!!