Autor Tema: Programa de CCS para Pic16F876  (Leído 15093 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Flugplatz

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 279
    • Mi canal de YouTube
Re: Programa de CCS para Pic16F876
« Respuesta #15 en: 11 de Mayo de 2006, 07:45:20 »

"Unknown device type -Try PCM" 


Menu -> View -> Toolbars -> Compiler Select

Te saldrá en la parte superior una Toolbar más que contiene una lista desplegable ...

Si usas el 16FXXX tienes que seleccionar  "Microchip 14 Bit"
Si usas el 18FXXX tienes que seleccionar  "Microchip PIC18"

Aunque tiene pinta de que no has empezado el programa con el include del micro que vas a usar, así que, te recomiendo que revises si has puesto todo lo que hace falta para que se compile correctamente el proyecto.

De todas formas, es mejor que para empezar a usar el CCS utilizes el Project Wizard

Menu -> Project -> New -> Pic Wizard

De esta forma te configura todo como hace falta y te inicializa el micro con todo lo que le pongas.

Aquí te pongo un ejemplo de como quedaría un proyecto con el 16F628A. Aunque el Wizzard lo divide en dos archivos, entre los dos, el projecto tiene que tener todo esto:

Código: [Seleccionar]
#include <16F628A.h>

#FUSES NOWDT                  //No Watch Dog Timer
#FUSES HS                    //High speed Osc (> 4mhz)
#FUSES PUT                    //Power Up Timer
#FUSES NOPROTECT              //Code not protected from reading
#FUSES NOBROWNOUT            //No brownout reset
#FUSES MCLR                  //Master Clear pin enabled
#FUSES NOLVP                  //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                  //No EE protection

#use delay(clock=20000000)

#int_TIMER1
TIMER1_isr()
{
//prueba asm
#asm
   nop
#endasm
}

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);
   enable_interrupts(INT_TIMER1);
   enable_interrupts(GLOBAL);
   setup_oscillator(False);
   while(true) //bucle infinito
   {
    }
}

Un saludo
« Última modificación: 11 de Mayo de 2006, 08:00:20 por Flugplatz »
Mi canal de YouTube

Un saludo desde Madrid

Desconectado cristina_26

  • PIC10
  • *
  • Mensajes: 16
Re: Programa de CCS para Pic16F876
« Respuesta #16 en: 11 de Mayo de 2006, 08:11:09 »
hola Flugplatz

La opción que tu me dices no la puedo seleccionar ya que solo me sale  Microchip 12 bits. y no me deja seleccionar otra opción, y eso que tengo el software original y he instalado todo el pack completo.

por otro lado, si que tengo puesto el include del PIC que estoy utilizando, en mi caso es el pic16F876 pero cuando me sale el error, precisamente me queda seleccionado:

#device PIC16F876

del archivo 16F876.h  y no del mío (en mi código también esta cargado)

Ya empecé el proyecto con el Wizard pero ni así conseguí que me dejara compilar.

Os incluyo el código actual que no me deja compilar y del cual gran parte he de agradecer ha maunix y Marcelo que sin su ayuda aun estaría buscando que includes había de utilizar.


#include <16F876.h>          //libreria que carga el pic a utilizar
#device adc=8              //resolución 8 bits para el comversor ADC
#FUSES HS,NOWDT           // Fusibles, El Contador Watch Dog esta desabilitado
#include <string.h>       //libreria necesaria para trabajar con caracters
#include <stdio.h>        //libreria necesaria para trabajar con la UART

#use delay(clock=20000000)   //Velocidad del cristal
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
//Prepara la UART para trabajar con el protocolo rs232

/////////////////////  ENTRADAS ////////////////////////////////////////////////
#define odometro_A  PIN_B0        //la entrada del encoder en el pin RB0
#define odometro_B  PIN_B1        //(entrada de interrupción externa)

////////////////////   SALIDAS /////////////////////////////////////////////////

#define salida PIN_B2

////////////////////  VARIABLES GLOBALES y CONSTANTES  /////////////////////////
#define freq         50   // resetea el contador cada 50ms  20 veces por segundo
#define delayTMR1us(x) (int16)(65536 - (x * 0.625)) //Para que el compilador
 //       calcule el solito la constante para cargar en el timer

static signed int16 cuenta;
static short int transmitir;
int sentido=0;

////////////////////  FUNCIONES Y RUTINAS //////////////////////////////////////
#INT_EXT
void ext_isr()
{
  if(input(odometro_B))   //la otra entrada del encoder está en RB1
  { cuenta += 1;
    sentido = 1;         //de acuerdo a su estado se considera la rotación en un sentido
  }else{
    cuenta += 1;
    sentido = 2;        //u otro
   }
}

#int_TIMER1
void TIMER1_isr(){

   set_timer1(delayTMR1us(50000)); //recargar otros 50ms
   transmitir = 1; //indicar transmitir
}

#int_TBE
TBE_isr()
{signed int16 numero;
 int direccion;
 char num[8],ascii;

 ascii="A";    //letra que concadenar en la trama
 numero=direccion=0;     //inicializamos los valores de las variables.

 numero=cuenta;         //copiamos el valor del contador
 direccion=sentido;     //almacenamos el sentido de la rueda

 cuenta=sentido=0;      //inicializamos el contador

 if(sentido==1)
 {sprintf(num,"%u",numero};
  num=strcat (num, "1"); //introducimos el sentido en la trama
  num=strcat (ascii, num);
  num=strcat (num, ascii);}
 else
 {if(sentido==2)
  {sprintf(num,"%u",numero};
   num=strcat (num, "2"); //introducimos el sentido en la trama
   num=strcat (ascii, num);
   num=strcat (num, ascii);}
 }
}
///////////////////// PROGRAMA PRINCIPAL ///////////////////////////////////////

void main(void)
{
   setup_adc_ports(NO_ANALOGS);  //Puertos desconectados
   setup_adc(ADC_OFF);
   setup_spi(FALSE);

   setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); //activar el timer1
    set_timer1(delayTMR1us(50000));

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); //timers 0 conectado
   setup_timer_2(T2_DISABLED,0,1);            //Timer 2 desconectado

   enable_interrupts(INT_RTCC);  //se activan las interrupciones
   enable_interrupts(INT_TBE);
   enable_interrupts(INT_TIMER0);
   enable_interrupts(INT_TIMER1);

   ext_int_edge(L_TO_H);      //definir el flanco de interrupción
   enable_interrupts(INT_EXT);//encender la interrupción
   enable_interrupts(GLOBAL);

for(;;)   //loop infinito
   {ext_isr();
     TBE_isr();
     //aqui se ha de activar la bandera de transmisión
    if(transmitir)
       {//hacer los procesos de transmisión
        //borrar la bandera de transmisión para que no se transmita hasta
        //pasados otros 50ms

        transmitir = 0; }
   }
}


Ahora estoy preparando otro ordenador para instalar tanto el CCS como el proteus ya que en este no acaban de funcionar correctamente y empiezo a sospechar que no todo es culpa mia  :P  sino que este ordenador tiene gran parte de culpa  :-/


Saludos
Cris :g)

Desconectado Flugplatz

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 279
    • Mi canal de YouTube
Re: Programa de CCS para Pic16F876
« Respuesta #17 en: 11 de Mayo de 2006, 08:38:02 »
Hola ...

Lo siento ...  :? ... si solo te sale Microchip 12 Bit en la lista, es que tienes mal instalado el CCS.

Antes de seguir haciendo el programa intenta arreglar el CCS ... ahora mismo solo tienes el compilador PCB. Para el 16F876 necesitas el PCM y para el 18F252 el PCH

o sea, este:

http://www.ccsinfo.com/product_info.php?cPath=Store&products_id=PCW_full

o este:

http://www.ccsinfo.com/product_info.php?cPath=Store_Software_Compilers&products_id=PCWH_full


Prueba a generar un proyecto sencillo para el 12C508 y a ver si te lo compila ...

un saludo
« Última modificación: 11 de Mayo de 2006, 08:43:10 por Flugplatz »
Mi canal de YouTube

Un saludo desde Madrid

Desconectado marcegoncba

  • PIC10
  • *
  • Mensajes: 17
Re: Programa de CCS para Pic16F876
« Respuesta #18 en: 11 de Mayo de 2006, 09:06:24 »
Cris
Como no progresamos te hice un programa con lo que te sugerí hasta ahora, compila OK. Te toca a vos simularlo (e emularlo)y verificar que funcione.
Debería hacer estas dos cosas: contar pulsos del encoder en la variable cuenta (se supone que el encoder está coenctado a RB0 y RB1) y cada 50ms cambia el estado de RB2. Lo que falta por hacer es todo lo demás pero si esto no funciona que es lo básico...
La conversión hex a ascii, la creación de un buffer, la transmisión del buffer, etc. por ahora no debería preocuparte. Que esta parte funcione, por el resto Dios proveerá.

Saludos
Marcelo

Código: [Seleccionar]
#include <16F876.h>
#device adc=8

#FUSES NOWDT                  //No Watch Dog Timer
#FUSES HS                    //High speed Osc (> 4mhz)
#FUSES NOPUT                  //No Power Up Timer
#FUSES NOPROTECT              //Code not protected from reading
#FUSES BROWNOUT              //Reset when brownout detected
#FUSES NOLVP                  //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                  //No EE protection
#FUSES NOWRT                  //Program memory not write protected
#FUSES NODEBUG                //No Debug mode for ICD

#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

#define delayTMR1us(x) (int16)(65536 - (x * 0.625))

static signed int16 cuenta;
#INT_EXT
void ext_isr(){
//suponiendo que la otra entrada del encoder está en RB1
if(input(PIN_B1)){
//de acuerdo a su estado considera la rotación en un sentido
cuenta++;
}else{
//u otro
cuenta--;
}
}

static short int transmitir;
#int_TIMER1
void TIMER1_isr(){
//recargar otros 50ms
set_timer1(delayTMR1us(50000));
//indicar transmitir
transmitir = 1;
}

void main() {
short int testBit = 0;

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_2(T2_DISABLED,0,1);

//activar el timer 1 (%8)
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
//el compilador te pone la constante adecuada
set_timer1(delayTMR1us(50000));
//habilitar la interrupción
enable_interrupts(INT_TIMER1);

//definir el flanco de interrupción
ext_int_edge(L_TO_H);
//encender la interrupción externa
enable_interrupts(INT_EXT);
//activa todas las interrupciones
enable_interrupts(GLOBAL);

output_bit(PIN_B2, testBit);


//loop infinito
for(;;){
//hacer cosas...
//si se activa la bandera de transmitir
//es que pasaron 50ms
if(transmitir){
//por hacer: todos los procesos de transmisión
//un test para ver si funciona
//cada vez que pasa por acá le cambia el estado
//al pin RB2
if(testBit){
testBit = 0;
}else{
testBit = 1;
}
output_bit(PIN_B2, testBit);


//listo, borrar la bandera para que no se
//transmita hasta que pasen otros 50ms
transmitir = 0;
}
//hacer más cosas...
}
}

Desconectado cristina_26

  • PIC10
  • *
  • Mensajes: 16
Re: Programa de CCS para Pic16F876
« Respuesta #19 en: 16 de Mayo de 2006, 05:45:41 »
Hi,

Muchas gracias marcelo, pero no puedo compilarlo aun, Flugplatz tiene razón necesito la PCW, haber si está en el paquete que nos enviaron los del CCS porque sino.... voy a tener algunos problemas jeje

El codigo tal y como lo pones tu, es más facil de entender ;). Así que espero que cuando tenga el PCW me compile OK.

Vosotros sabeis si puedo cargar directamente el codigo en el Mplab o en el proteus? o necesito obligatoriamente crear el archivo .hex??

Saludos

Cris :g)

Desconectado cristina_26

  • PIC10
  • *
  • Mensajes: 16
Re: Programa de CCS para Pic16F876
« Respuesta #20 en: 17 de Mayo de 2006, 07:56:24 »
buenas,

Ya he conseguido que el compilador CCS me funcione, y el codigo me compila bien.

Ya he generado los archivos .hex

pero no consigo que la licencia del proteus se me instale correctamente, conoceis algun programa de simulación tipo proteus que sea gratuito? porque no puedo seguir comprando software sin entregar nada que funcione.

Segun tu codigo, supongo que el RB0 esta conectado el contador y en el RB1 esta conectado la segunda señal para detectar la dirección, verdad?

Me puedes explicar como se hace para enviar algo através de la UART? se puede enviar directamente un vector string?

necesito saber como implementarlo please.

Saludos

Cris

Desconectado marcegoncba

  • PIC10
  • *
  • Mensajes: 17
Re: Programa de CCS para Pic16F876
« Respuesta #21 en: 19 de Mayo de 2006, 09:38:30 »
Cris
Para transformar un número hexadecimal en BCD podés usar el siguiente algoritmo (es muy rápido, yo solo le hice la implementación para CCS).
Lo primero es la declaración de las variables, es un poco complex pero sirve para convertir variables de 8 y 16 bits. Utiliza 5 bytes de RAM y devuelve BCD empaquetado.

Código: [Seleccionar]
//Estructuras para el convertidor
//de binario a BCD
struct _NIBBLES{
byte _nibbleLongA:4;
byte _nibbleLongB:4;
byte _nibbleLongC:4;
byte _nibbleLongD:4;
byte _nibbleA:4;
byte _nibbleB:4;
byte _nibbleC:4;
byte _nibbleD:4;
byte _nibbleE:4;
};

struct BCD_BYTES{
int _binLbyte;
int _binHbyte;
int BCDbyteA;
int BCDbyteB;
int BCDbyteC;
};

union bin2BCD{
unsigned long _bin16;
struct _NIBBLES _nibble;
struct BCD_BYTES _byte;
};

//variable global de 5 bytes para la conversión
//binaria a BCD (hasta 65535) es una union que
//permite direccionar cada uno de los bytes y
//los nibbles para poder efectuar el algoritmo
//descripto
static union bin2BCD bin_2_BCD;


//Rutina para convertir la variable de intensidad de binario a BCD
//From: http://www.telesys.ru/wwwboards/mcontrol/20/messages/261.shtml
//A simple algorithm to convert binary to BCD is:
//1. Add 3 to every BCD nibble that's >=5
//2. Shift left
//Repeat until binary portion is all 0000

//convierte el dato binario en decimal
void convert2BCD(void){
int i;
bin_2_BCD._byte.BCDbyteA = 0;
bin_2_BCD._byte.BCDbyteB = 0;
bin_2_BCD._byte.BCDbyteC = 0;
for(i=0; i<16; i++){
if (bin_2_BCD._nibble._nibbleA > 4) bin_2_BCD._nibble._nibbleA += 3;
if (bin_2_BCD._nibble._nibbleB > 4) bin_2_BCD._nibble._nibbleB += 3;
if (bin_2_BCD._nibble._nibbleC > 4) bin_2_BCD._nibble._nibbleC += 3;
if (bin_2_BCD._nibble._nibbleD > 4) bin_2_BCD._nibble._nibbleD += 3;
if (bin_2_BCD._nibble._nibbleE > 4) bin_2_BCD._nibble._nibbleE += 3;
shift_left(&bin_2_BCD,5,0);
}
}
[code]

La implementación es la siguiente:
[code]
bin_2_BCD._bin16 = variableHex; //variable long (2 bytes)
convert2BCD();

//o
bin_2_BCD._byte._binLbyte = variableHex1; //variable byte
convert2BCD();

//luego de la conversión cada digito BCD particular está disponible en:
//bin_2_BCD._nibble._nibbleE -> mayor peso relativo
//bin_2_BCD._nibble._nibbleD
//bin_2_BCD._nibble._nibbleC
//bin_2_BCD._nibble._nibbleB
//bin_2_BCD._nibble._nibbleA -> menor peso relativo

//o en su versión empaquetada
//bin_2_BCD._byte.BCDbyteC
//bin_2_BCD._byte.BCDbyteB
//bin_2_BCD._byte.BCDbyteA
[code]

Para covertir a ASCII solo le debes sumar a cada nibble 0x30 y listo.
Para enviar por la USART en la próxima te comento como lo hago yo, seguramente habrá otras formas (y mejores).

Saludos
Marcelo

PD: es correcto, el encoder está conectado en RB0 y RB1 (RB0 es el que produce la interrupción)

[/code][/code][/code]

Desconectado cristina_26

  • PIC10
  • *
  • Mensajes: 16
Re: Programa de CCS para Pic16F876
« Respuesta #22 en: 22 de Mayo de 2006, 08:41:28 »
Hola marcelo,

1)No acabo de entender para que necesito transformar un hexadecimal a BCD, ni donde se ha de introducir el 0X30
Supongo que es para adaptar la información del contador y de la dirección para enviarlo por la UART. Y para pasar de entero de 16 bits a ASCII con poco coste de la memoria del chip. ( si no es así dimelo porque a lo mejor estoy muy perdida)

2)Tu conoces algun simulador tipo Proteus que sea gratuito o que te den una licencia para un mes??

3)La UART al ser un "periferico" (ya se que esta dentro del xip, pero es a la vez independiente), se le puede poner la información en un registro y programando este, que se envie periodicamente lo que haya en ese registro independientemente de si se ha actualizado o no?? o se ha de ir ejecutando alguna sentecia para el envio?

Ya se que en un foro nunca se debe dar prisas, ni nada parecido pero agradeceria que me ayudaras a que me funcionara todo esto antes del jueves, ya que el viernes tengo una auditoria con los encargados del proyecto y les tengo que enseñar un codigo que funcione y si es posible alguna simulación, aunque tranquilo no quieren ver el proyecto finalizado sino los avances que he ido haciendo y me gustaria quedar lo mejor posible  :mrgreen:  please   :g)


Porcierto, ya he podido arreglar el CCS (simplemente estaba mal instalado) y los dos codigos (tanto el que tu me diste como el que yo habia puesto) se han compilado perfectamente, lo malo es que sin el proteus no puedo comprobar como funcionan, pero algo es algo. Hoy me ha llegado la placa de entrenamiento y si no consigo un programa tipo proteus, supongo que podre probar los codigos directamente sobre el microcontrolador, ya te contare al respecto ;)

Saludos

Cris

Desconectado marcegoncba

  • PIC10
  • *
  • Mensajes: 17
Re: Programa de CCS para Pic16F876
« Respuesta #23 en: 22 de Mayo de 2006, 11:00:03 »
Cris
Si mal no leí en uno de tus primeros mensajes necesitabas enviar la información via RS232 en formato ASCII y como los contadores internos trabajan en hexadecimal obviamente primero tenés que transformarlo a BCD y luego sumarle 0x30 a cada dígito para transformarlo en su caracter ASCII correpondiente (el dígito 0 en ASCII es 0x30), ahora si podés mandar el hexadecimal entonces no necesitas hacer nada de esto.

Podés usar el simulador del MPLAB (que es gratuito) que en la últimas versiones (yo uso la v7.31) es bastante elaborado y para un código poco complejo como el tuyo creo que te serviria bastante bien, inclusive puede simular entradas y salidas de la UART.

Para activar el simulador: Debugger -> Select tool -> MPLAB SIM
Para activar la simulación de la UART: Debugger -> Settings -> Uart1 IO, esto hace que en la ventana Output aparezca una pestaña extra que muestra los carateres enviados por el periferico.

Y respecto al envío de caracteres si vos implementás la rutina de enviar un buffer de datos que te envié dentro del programa que ya te habia posteado antes vas a ver en el simulador que cada 50ms se te envía el buffer completo, si vos no cambias los datos del buffer siempre manda lo mismo (la rutina no destuye el contenido del buffer).

Saludos
Marcelo

Desconectado cristina_26

  • PIC10
  • *
  • Mensajes: 16
Re: Programa de CCS para Pic16F876
« Respuesta #24 en: 23 de Mayo de 2006, 06:09:50 »
Marcelo

Tienes razón lo que pasa es que no sabia que era necesario hacer ese paso,
La versión que yo tengo del MPlab es la 7.20 así que haré la simulación por el MPLAB finalmente

He seleccionado el MPLAB SIM tal y como me explicas, y he activado la UART1 IO

Pero me da dos errores

en la pestaña del MPLAB SIM me da el siguiente error:
 "CORE-E0002: Stack under flow error occurred from instruction at 0x002007"

y en la pesataña Build me pone

 "Clean: Deleting intermediary and output files.
  Clean: Done.
  Couldn't locate build tool.  Check tool locations.
  BUILD FAILED: Tue May 23 11:02:41 2006"

Ya tengo seleccionado el chip correctamente en Configure-> select device  que en mi caso es el PIC16F876

Sabes a que se deben esos errores?

Saludos
Cris  :g)


Desconectado cristina_26

  • PIC10
  • *
  • Mensajes: 16
Re: Programa de CCS para Pic16F876
« Respuesta #25 en: 23 de Mayo de 2006, 06:55:54 »
Marcelo

Déjalo, soy un poco despistada y no había cargado bien el archivo .hex y por eso me daban esos errores, ya los he solucionado  :P a veces no se ni donde tengo la cabeza jajaja

Ya he podido cargar bien el código y realizar la simulación, pero tengo dos dudas

1. Cuando tengo la pestaña Special Function Registers, para poder ver durante la ejecución los registros, Cual es el registro de la UART?

2. Se puede simular la señal de entrada? porque sino no se si esta funcionando correctamente, debería crear algún tipo de archivo que fuera la simulación de las señales de entrada?? con el matlab o Octabe?  o el propio Mplab te permite darle las características de las señales de entrada?

Saludos

Cris :g)

P.D: no hagas caso del post anterior ya que todos los errores que me salían era por haber cargado mal el archivo, es que es la primera vez que utilizo el mplab y los tutoriales que tengo no me hablaban de esos errores.

Desconectado marcegoncba

  • PIC10
  • *
  • Mensajes: 17
Re: Programa de CCS para Pic16F876
« Respuesta #26 en: 23 de Mayo de 2006, 10:07:23 »
Cris
Podés hacer todo el proyecto dentro del MPLAB, incluyendo la compilación. Necesitás el plugin para enlazar el compilador con el MPLAB, lo podés bajar en http://www.ccsinfo.com/downloads/mplab-ccs-plugin-install.exe.
Luego creá el proyecto con: Project -> Project wizard, elegís el dispositivo y como lenguaje el "CCS C Compiler for PIC12/14/16/18" y luego los pasos que siguen (que son obvios y no necesitan explicación).
Para compilar Project -> Build All o presionas F10
Para verificar tiempos Debugger -> Stopwatch
Para simular entradas Debugger -> Stimulus Controller
Si activas el monitor de USART se abre una nueva pestaña en la ventana Output que te permite ver los carateres "enviados" por la USART
Para ir paso a paso, preionas F8 (y si querés ingresar dentro de las rutinas F7). Para que arranque hasta el próximo breakpoint F9, para detener la ejecución F5 y para resetear F6 (cada vez que compiles se resetea automáticamente).
Para ver el estado de las variables internas View -> Watch y etc., etc., etc. Por razones obvias no te puedo dar detalles de todas las funcinalidades porque son muchas, estas son las básicas (podes leer el help para una referencia completa).

Espero que te vaya muy bien en tu auditoria y que todo esto te haya servido. Saludos desde Argentina y nos estamos viendo.
Marcelo

Desconectado cristina_26

  • PIC10
  • *
  • Mensajes: 16
Re: Programa de CCS para Pic16F876
« Respuesta #27 en: 24 de Mayo de 2006, 07:19:06 »
Marcelo

Gracias, por todo.

Ya te contaré la semana que biene como me ha ido la auditoria, al final será el viernes porque mañana vienen a filmar el laboratorio de una TV y se ha aplazado (al menos tengo un dia extra) jejeje.

Lo de como funciona el MPlab lo habia aprendido de una guia rápida que me encontré por internet.

Y me he vuelto a leer todo desde el principio y he entendido algunas cosas que me explicabas en los primeros mensajes, así que creo que conseguiré que me funcione para el viernes.

Gracias por todo, ya te contaré

Saludos desde Barcelona  :g)

Cris


 

anything