TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: edu1989 en 10 de Noviembre de 2010, 08:34:22

Título: Problema. Led que no se enciende con pulsador.
Publicado por: edu1989 en 10 de Noviembre de 2010, 08:34:22
Hola a todos, estoy haciendo unos programas antes de meterle el programa que en realidad quiero hacer.. para volver a coger el truquillo a esto de los PIC.
El programa es muy sencillo, apaga o enciende un Led segun si el boton esta pulsado o no. Les dejo el codigo:

#include <pic18f4550.h>
#define PORTBIT(adr,bit)((unsigned)(&adr)*8+(bit))

static bit LED @ PORTBIT(PORTA,1);
static bit MCLR @ PORTBIT(PORTE,3);
static bit polsador @ PORTBIT(PORTB,3);

void main(void)
{
   
   PORTA=0; // RESET A TODOS LOS PINES DE PORTA
   TRISA=0xFD; // Ponemos como  salida(0) el bit de RA1(donde va conectado el LED)

   PORTB=0;   //RESET A TODOS LOS PINES DE PORTAB
   TRISB=0x08; //Ponemos como entrada(1) el bit RB3(donde va el pulsador)

while(1){
   
if(polsador==0) // si no esta pulsado, led encendido
   LED=1;
else   // si esta pulsado, led apagado.
   LED=0;
}


}

A ver si ustedes ven lo que ocurre. El programa lo simulo en proteus en la placa de pic que tengo (18f4550). El led se enciende a la perfeccion pero cuando le doy al pulsador no consigo apagarlo.

Les agradeceria mucho que me ayuden. Gracias de antemano.
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: samshiel_pic en 10 de Noviembre de 2010, 09:12:48
Hola edu1989 de momento no veo los FUXES ni la configuración del OSCILADOR. Para que te sea mas fácil vete a buscador y pon por ejemplo PIC18F4550 y te saldrán un montón de post con programas y comparas las configuraciones del micro.

No te puedes fiar siempre del simulador porque por defecto viene precargado con un oscilador de 4Mhz. Un saludo :P
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: AngelGris en 10 de Noviembre de 2010, 09:15:18
Yo no use nunca un pic de la familia 18, pero en los que uso el puerto A por defecto queda configurado como analógico.

Tendrías que chequear bien eso, asegurarte que estás configurando bien todo. Para ello tenés que tener el datasheet a mano.
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: edu1989 en 10 de Noviembre de 2010, 09:20:37
Si que queda configurado como analogico como bien dices. Es lo que estaba pensando ahora, tengo que cambiar el pin a digital no? Me suena que es con ADCON1...

Mirare a ver...

Lo que respecta a los fuses y al oscilador que me recomendais? Un oscilador muy preciso repercute en el tiempo computacional del programa no?
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: edu1989 en 10 de Noviembre de 2010, 12:01:01
Es un poco extraño pero estoy viendo ejemplos de la web de microchip en c ( www.microchipc.com) donde no pone nada de los fuses en los ejemplos...
Sigo teniendo el problema, alguien sabe que es lo que esta mal?

Gracias de antemano.
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: gary_servin en 10 de Noviembre de 2010, 13:43:59
Si lo estas simulando solo en Proteus (no en un circuito real) creo que no hacen falta los fuses, ahora, si lo quieres programar en un PIC si los debes tener en cuenta. Como te indico AngelGris (y como también explica en el datasheet) los pines de los puertos que se multiplexan con las entradas analógicas (para PIC 18 normalmente el puerto A, E y B) se configuran como entradas analógicas en cualquier tipo de Reset o cuando se enciende el micro. Debes setear el registro de configuración ADCON 1 para habilitar la función I/O digital de los pines del puerto A. También los pines RB0 al RB4 del puerto B se configuran como entradas analógicas, a no ser que se configure en bit de configuración PBADEN de los fuses!

Saludos!


EDIT: Esta información la puedes encontrar en el datasheet del 18F4550, en la sección 10.0 "I/O PORTS" en la pagina 110
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: edu1989 en 10 de Noviembre de 2010, 16:09:59
Muchas gracias por la respuesta, lo probare y ya te contare! Un par de dudas mas..
.Para escoger la verdadera función de un pin ( que puede tener 3 o 4, RA1, Osc0...) es a base de ir activando o desactivando bits de registros especiales no?
. La función de ADCON1 es habilitar los pines del PUERTO A  como digitales? solo del Puerto A? los demás tienen otro bit de algún registro?

Gracias de antemano y perdonad por el batiburrillo de preguntas
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: AngelGris en 10 de Noviembre de 2010, 16:21:45
Muchas gracias por la respuesta, lo probare y ya te contare! Un par de dudas mas..
.Para escoger la verdadera función de un pin ( que puede tener 3 o 4, RA1, Osc0...) es a base de ir activando o desactivando bits de registros especiales no?
. La función de ADCON1 es habilitar los pines del PUERTO A  como digitales? solo del Puerto A? los demás tienen otro bit de algún registro?

  Todo eso está claramente explicado en el datasheet del PIC que quieras utilizar. No todos tienen los mismos periféricos y es por ello que para programar un PIC es conveniente tener su datasheet a la mano. Por lo menos hasta que te familiarices con él.

  En todo caso, si hay algo que no entiendas del datasheet, ahí sí uno puede intentar ayudar.
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: edu1989 en 10 de Noviembre de 2010, 16:55:32
Muy bien! Muchas gracias a todos por la ayuda :)
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: edu1989 en 11 de Noviembre de 2010, 14:19:18
Sigue sin salirme.. he puesto la salida del LED tambien como salida digital... a ver si pueden ayudarme, les adjunto el codigo y la simulacion.

#include <pic18.h>
#define PORTBIT(adr,bit)((unsigned)(&adr)*8+(bit)

static bit polsador @PORTBIT(PORTA,1);
static bit LED @PORTBIT(PORTB,1);

void main(void){

PORTB=0x00;
ADCON1=0x06;
TRISB=0xFD;

PORTA=0;
ADCON1=0x06;

TRISA=0x3F;

while(1){
if(polsador==0)
LED=1;
else
LED=0;

}

}

Gracias de antemano.
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: lopb en 11 de Noviembre de 2010, 14:58:13
Sigue sin salirme.. he puesto la salida del LED tambien como salida digital... a ver si pueden ayudarme, les adjunto el codigo y la simulacion.

#include <pic18.h>
#define PORTBIT(adr,bit)((unsigned)(&adr)*8+(bit)

static bit polsador @PORTBIT(PORTA,1);
static bit LED @PORTBIT(PORTB,1);

void main(void){

PORTB=0x00;
ADCON1=0x06;
TRISB=0xFD;

PORTA=0;
ADCON1=0x06;

TRISA=0x3F;

while(1){
if(polsador==0)
LED=1;
else
LED=0;

}

}

Gracias de antemano.
hola, que compilador estas usando? porque parece que faltan varias cosas ahi.
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: edu1989 en 11 de Noviembre de 2010, 16:03:52
Uso el Hi-tech picc18. El pic es el 18f4550, a ver si podeis ayudarme..
Gracias
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: AngelGris en 11 de Noviembre de 2010, 16:33:16
Uso el Hi-tech picc18. El pic es el 18f4550, a ver si podeis ayudarme..
Gracias

  Yo uso Hitech pero sólo estoy programando por hobby algún que otro 16fxxx.

  Tanto en 16F628A como en el 16F876A (que son los que estoy usando) el puerto A también se usa como entrada de unos comparadores, así que también tengo que tocar el registro CMCON. ¿En tu caso no hay que tocar otra cosa?
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: edu1989 en 11 de Noviembre de 2010, 16:37:20
Otra cosa? a que te refieres? pues tengo ejemplos similares al que estoy haciendo pero son de un pic16... Que haces con CMCON? en principio creo que no deberia tocarlos..

Gracias
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: AngelGris en 11 de Noviembre de 2010, 16:40:11
El registro CMCON es para configurar los comparadores. Por defecto A0 A1 A2 A3 (hablando de los 16F62xA y 16F87xA) quedan conectados a los comparadores por lo tanto no se los puede usar como pines digitales hasta no configurar el registro CMCON.

Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: edu1989 en 11 de Noviembre de 2010, 16:47:12
En los 18 no, quedan configurados como entradas analogicas :)

O eso creo claro, porque aqui nunca se puede decir nada seguro jej
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: AngelGris en 11 de Noviembre de 2010, 17:05:04
Si, estaba viendo el datasheet.

Creo que puede haber algún error en tu #define PORTBIT(adr,bit)((unsigned)(&adr)*8+(bit) porque te falta cerrar un paréntesis y está todo junto.

tal vez probar así

#define PORTBIT(adr,bit) (unsigned)&adr*8 +bit

de esa manera lo use en unas funciones y trabajó bien.

Pero yo haría algo más fácil aún, escribiría el código así...


while (1)
{
  if (RA1 == 0) RB1 = 1;
  else
    RB1 = 0;
}
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: AngelGris en 11 de Noviembre de 2010, 17:49:33
Instalé el Hitech para PIC 18 e hice este programita. Funciona bien simulado en proteus, pero por supuesto falta toda la configuración de los FUSES. Tuve que utilizar una resistencia de 10K entre el pin MCLR y VDD, seguramente será porque por defecto dicho pin funciona como MCLR y no como RE3.

Código: C
  1. #include <htc.h>
  2.  
  3. void main (void)
  4. {
  5.   ADCON1 = 0x0F;
  6.   TRISB = 0;
  7.   TRISA = 2;
  8.   while (1)
  9.   {
  10.     if (RA1 == 0) RB1 = 1;
  11.     else
  12.       RB1 = 0;
  13.   }
  14. }
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: edu1989 en 11 de Noviembre de 2010, 19:18:40
Puedes adjuntarme la simulacion de proteus si no te sabe mal?
Muchas gracias eh, macho te has bajado hasta el Hi-tech.. te lo agradezco mucho d verdad ;)
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: AngelGris en 11 de Noviembre de 2010, 19:38:53
No hay drama, aunque es tan sencillo que no le veo demasiado utilidad el subirlo pero....

Está hecho con el Protesu 7.7 sp2. Si no te corre te lo subo pero como foto así lo armás vos. Acordate que al pic hay que cargarle el programa, hay que usar el archivo .cof generado por tu compilador.
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: edu1989 en 12 de Noviembre de 2010, 05:26:23
Angel, una pregunta:

 
       ADCON1 = 0x0F; // Esta linea pone como digitales R0 R1 R2 R4
  
       TRISB = 0; / esta linea no lo entiendo, lo estas poniendo en decimal no? Porque a trisb le pones un 0 y a trisA un 2 si las dos estan conectados a RA1 o RB1( en todo caso a la pata 1)
  
       TRISA = 2;
  
   Es que quiero que me quede clarisimo! Muchas gracias de antemano.

Edito1: Yo para dar alimentacion a la pata donde va el pulsador tenia una fuente de tension dc. Como haces eso de VCC? coges una entrada y pones vcc pero como sabes a quantos voltios esta?

Edito2: El registro ADCON1 no habria que usarlo en el pulsador en vez de en el led? O en todo caso en los dos lugares no?
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: edu1989 en 12 de Noviembre de 2010, 08:29:21
Sigo con mas dudas... tengo muchas eh!
Quiero hacer un timer para controlar bien el tiempo de delay ( quiero que sea de 1 segundo)

while (1)
 {
retardo(delay);
RB1=j;
retardo(delay);
    if (RA1 == 0)
      j=j^1; //porta xor valors iguals 0, valors dif 1

  }

retardo es una funcion que la tengo a medio hacer...:

void retard(unsigned delay)
{
T08BIT=1; //Configurar el timer0 a 8 bits
TOCS=0; // Seleccionamos el oscilador interno
PSA=0; // Habilitamos el prescaler
T0PS2=
T0PS1=                   //Para configurar el preescalado...
T0PS0=

//SE QUE AL FINAL TIENE QUE HABER UNA SENTENCIA DE ESTE TIPO QUE NOS DE EL DELAY REAL.
delay=delay+retardo_extra;

}

Como hago la cuenta para saber que preescalado necesito?
La frequencia de operacion es la frequencia de reloj?

Los calculos que tengo hechos ya.. es que el ciclo de instruccion son 83.30ns ( (1/48x10^6)/4). Considerando la freq de reloj igual a la frequencia de operacion (48Mhz). Una vez aqui se que delay x 2^n (bits timer)> 1segundo. Se que aqui es donde cometo el error porque no tengo en cuenta el preescalado...

Tengo un lio mental importante...

Gracias de antemano.
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: AngelGris en 12 de Noviembre de 2010, 09:42:35
Angel, una pregunta:

 
       ADCON1 = 0x0F; // Esta linea pone como digitales R0 R1 R2 R4
  
       TRISB = 0; / esta linea no lo entiendo, lo estas poniendo en decimal no? Porque a trisb le pones un 0 y a trisA un 2 si las dos estan conectados a RA1 o RB1( en todo caso a la pata 1)
  
       TRISA = 2;
  
   Es que quiero que me quede clarisimo! Muchas gracias de antemano.

Edito1: Yo para dar alimentacion a la pata donde va el pulsador tenia una fuente de tension dc. Como haces eso de VCC? coges una entrada y pones vcc pero como sabes a quantos voltios esta?

Edito2: El registro ADCON1 no habria que usarlo en el pulsador en vez de en el led? O en todo caso en los dos lugares no?

  Vayamos por partes....

  En la página 176 del documento DS39760B -que es el datasheet que tengo del 18F2550 y 18F4550- muestra que los bits PCFG0 a PCFG3 (que son el nibble bajo) del registro ADCON1 sirven para determinar si los pines servirán como entradas analógicas o como pines digitales. En mi caso configuré para que todos los pines funcionen como digitales.

  TRISB = 0 : Sí, está en decimal. Puesto en binario sería 0b00000000, es decir que todos los pines del puerto B se van a comportar como salida.

  TRISA = 2 : También está en decimal. Puesto en binario sería 0b00000010, es decir que el único pin del puerto A que va a funcionar como entrada es RA1.

  Recordá que cada puerto tiene su correspondiente registro TRIS y sirve para configurarlo como entrada o salida. Para recordar fácilmente cuando se configura como entrada y cuando como salida yo pienso en lo siguiente 1nput  0utput.

  Todo esto que acabo de escribir está en el datasheet, por ello mi insistencia en su lectura.

  Con respecto al punto "Edito1" Sí le ponés una fuente de alimentación directo al pin, cuando presiones el pulsador -que queda conectado a GND- vas a provocar un cortocircuito.
La resistencia que yo conecté desde el pin del pulsador a VCC se denomina resistencia de "Pull-up", porque "empuja" a dicho pin a tener un valor positivo.
Como la entrada del pic consume muy poca corriente, el valor de tensión que se termina desarrollando en dicho terminal es VCC (o infinitamente cercano). Excepto cuando presiono el pulsador, momento en el cual el pin queda conectado a GND y no se produce corto porque no tengo una fuente directa sino que está la resistencia de pull-up.

  También se pueden utilizar resistencias de "Pull-Down" que irían de un pin determinado hacia GND en lugar de positivo.


  Te recomiendo que hagas algo bien sencillo, armá en el Proteus un ciruito tan simple como 2 resistencias en serie con una fuente VCC de 5V y midas tensión en una de las resistencias.
Te lo describo más o menos en modo texto. RA de 10K y RB de 1M. RA_pin1 a VCC, RA_pin2 a RB_pin1, RB_pin2 a GND. Y medí la tensión entre RB_pin1 y RB_pin2.... vas a ver que te da 5V o un valor muy muy cercano.
En este ejemplo RA sería la de Pull-up y RB sería la interna del pic.

Con respecto al punto "Edito2" creo que ya quedó respondido.
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: AngelGris en 12 de Noviembre de 2010, 10:13:21
Sigo con mas dudas... tengo muchas eh!
Quiero hacer un timer para controlar bien el tiempo de delay ( quiero que sea de 1 segundo)

while (1)
 {
retardo(delay);
RB1=j;
retardo(delay);
    if (RA1 == 0)
      j=j^1; //porta xor valors iguals 0, valors dif 1

  }

retardo es una funcion que la tengo a medio hacer...:

void retard(unsigned delay)
{
T08BIT=1; //Configurar el timer0 a 8 bits
TOCS=0; // Seleccionamos el oscilador interno
PSA=0; // Habilitamos el prescaler
T0PS2=
T0PS1=                   //Para configurar el preescalado...
T0PS0=

//SE QUE AL FINAL TIENE QUE HABER UNA SENTENCIA DE ESTE TIPO QUE NOS DE EL DELAY REAL.
delay=delay+retardo_extra;

}

Como hago la cuenta para saber que preescalado necesito?
La frequencia de operacion es la frequencia de reloj?

Los calculos que tengo hechos ya.. es que el ciclo de instruccion son 83.30ns ( (1/48x10^6)/4). Considerando la freq de reloj igual a la frequencia de operacion (48Mhz). Una vez aqui se que delay x 2^n (bits timer)> 1segundo. Se que aqui es donde cometo el error porque no tengo en cuenta el preescalado...

Tengo un lio mental importante...

Gracias de antemano.

 
  El delay real en C es muy difícil porque no tenemos una manera de controlar el tiempo que insumen las instrucciones. En assembler es otro cantar y ahí si podemos ir viendo el tiempo con extrema precisión.

  En la página 284 del datasheet dice TCY = 4/Fosc. Sería que el ciclo de instrucción insume un tiempo de 4/Frecuencia de oscilación. En tu caso serían los 83.3nS.

  Para calcular el prescaler tendrías que dividir el tiempo que querés contar (1S en tu caso) sobre el tiempo de instrucción. Si hacemos la cuenta da 12 millones y moneda....

  Si hacés trabajar el timer0 en 8 bits (va a poder contar hasta 256 y se va a reiniciar y activar el flag de interrupción) multiplicalo por un prescaler de 256 da una cuenta de 256 * 256 *83.3ns = 5.459 mS.
  O sea que no es suficiente. Entonces hay que implementar una variable que vaya aumentando cada vez que se produzca una interrupción del timer0. Cuando tu variable llegue a un valor X es que vas a haber contado 1 segundo. Mas o menos sería cuando la variable llegue a 184.

  No estoy familiarizado con la programación de los 18Fxxx.

  Yo creo que sería bueno empezar con algo más sencillo que no te implique tanto cálculo. O tal vez hacer cuentas menores para llegar más fácilmente.
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: lopb en 12 de Noviembre de 2010, 12:27:49
Uso el Hi-tech picc18. El pic es el 18f4550, a ver si podeis ayudarme..
Gracias
sorry, no se de hi-tech, ya desconocia el codigo,por eso te preguntaba,
suerte
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: edu1989 en 16 de Noviembre de 2010, 18:17:10
Muchas gracias por vuestras respuestas.

Me estoy planteando ya ( aunque voy a seguir haciendo algun programita mas..) el objetivo con el que empece con esto de los PICS, usar el puerto serie.
Les dejo un pequeño programita de puerto serie a ver que les parece, esta compilado sin errores pero aun no he probado si funciona o no.. seguro que me faltan cosas..
Simplemente se trata de que se vaya enviando " Hola mundo" por el puerto serie. Posteriormente hare tambien que se puedan recibir..

#include <htc.h>
#include <stdlib.h>
//#include <pic18f4550.h>

/*
;******** Configuracion del Oscilador **********
CONFIG FOSC = XT_XT         ;Osc XT, XT usado para el USB

;******** Otros bits de configuracion **********
CONFIG PWRT = ON ;PWRT habilitado
CONFIG BOR  = OFF ;Brown out resete deshabilitado
CONFIG WDT = OFF ;Watch dog deshabilitado
CONFIG  MCLRE = OFF ;MCLR como entrada
CONFIG PBADEN = ON ;Todos los pines como entradas analogicas
CONFIG LVP = OFF ;programacion en bajo voltaje deshabilitado

;********* Bits de proteccion ******************
CONFIG CP0 = OFF ;los bloques del codigo de programa
CONFIG CP1 = OFF ;no estan protegidos
CONFIG CP2 = OFF
CONFIG CP3 = OFF
CONFIG CPB = OFF ;Sector Boot no esta protegido
CONFIG CPD = OFF ;La EEPROM no esta protegida
*/
void serial_setup(void);
void putch(unsigned char);


void main (void)
{
 
 
 serial_setup();
 while(1)
 {
  char c="Hola mundo";   
 putch(c);
 
 }
 
  
}



void serial_setup(void)
{
SYNC=0; //Asincrono
SPEN=1; // ENABLE SERIAL PORT

CREN=0; // DESACTIVAR RECEPCION
TXIE=1; // ACTIVAR INTERRUPCIONES TX
RCIE=0; // DESACTIVAR INTERRUPCIONES RX

TX9=0; // 8 BITS TRANSMISION
TXEN=1; // ACTIVAR TRANSMISOR

unsigned char dummy;

#define clear_usart_errors_inline
      if (OERR) // // Overun Error Bit ( forma parte del registro RCSTA)
      {
         TXEN=0; //DESACTIVAR TRANSMISOR
         TXEN=1;//ACTIVAR TRANSMISOR
         CREN=0; // DESACTIVAR RECEPCION
         CREN=1; // ACTIVAR RECEPCION
      }

      if (FERR) // Framing Error Bit
      {
         dummy=RCREG; // se guarda el bit que esta mal en dummy
         TXEN=0; //DESACTIVAR TRANSMISOR
         TXEN=1;//ACTIVAR TRANSMISOR
      }



}

void putch(unsigned char c)
{
   while(!TXIF) // 1 si el registro esta vacio
   {
      clear_usart_errors_inline;
      CLRWDT();
   }
   TXREG=c;

}

Muchas gracias a todos por vuestra ayuda. La verdad es que estoy entiendo muchas cosas que no entendia antes ccon vuestra ayuda

Edito: He probado el programa con el proteus poniendo un terminal virtual y no funciona... he conectado la tx al rc6 y la rx al rc7. Estos pins tengo que declarlos como salida? mas que nada el rc6 ( transmissor) ya que solo transmito.
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: AngelGris en 16 de Noviembre de 2010, 20:16:33
  Yo te recomiendo que habrás un nuevo post con ésta última duda. Igualmente siempre es conveniente usar el buscador del foro porque tal vez ya esté tratado este tema y encuentres la solución rápidamente.

edito:

  Intenté compilar el programa y tira varios errores. Mirando bien el código noto que tenés definiciones de variables pero diseminadas por el programa. Las variables hay que definirlas al comienzo ya sea del main o de cada función.

  Una de esas variables (c) la definís del tipo char pero la querés inicializar con una cadana de caracteres. Char genera variables de 8 bits así que no podés inicializarla con una cadena. Para ello tenés que definir un "puntero del tipo char" que se hace colocando la definición así:  char * c = "Hola Mundo" (tiene que estar el asterísco para indicar que es un puntero).

  Otro problema que noto es que no configurás la velocidad de transmisión.

  Amen de lo anterior parece ser que copiaste (pido disculpas de antemano si es que no es así) el código de un ejemplo que se encuentra en www.microchipc.com pero está mal el "#define clear_usart_errors_inline" ya que a ésta y las líneas siguientes hay que colocarles la barra invertida ( "\" ) al final de cada renglón.
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: edu1989 en 17 de Noviembre de 2010, 05:23:21
AngelCris acabo de cambiar todo lo que me has dicho, compila bien pero sigue sin funcionar. Si, el ejemplo es una modificacion de un programa de microchipc.
Ahi les pongo otra vez el codigo y les adjunto la simulacion de proteus. Si sacamos algo en claro del tema abrire un nuevo post para explicarlo en todo detalle.
Muchas gracias por vuestra ayuda amigos.

#include <htc.h>
#include <stdlib.h>
//#include <pic18f4550.h>

/*
;******** Configuracion del Oscilador **********
CONFIG FOSC = XT_XT         ;Osc XT, XT usado para el USB

;******** Otros bits de configuracion **********
CONFIG PWRT = ON ;PWRT habilitado
CONFIG BOR  = OFF ;Brown out resete deshabilitado
CONFIG WDT = OFF ;Watch dog deshabilitado
CONFIG  MCLRE = OFF ;MCLR como entrada
CONFIG PBADEN = ON ;Todos los pines como entradas analogicas
CONFIG LVP = OFF ;programacion en bajo voltaje deshabilitado

;********* Bits de proteccion ******************
CONFIG CP0 = OFF ;los bloques del codigo de programa
CONFIG CP1 = OFF ;no estan protegidos
CONFIG CP2 = OFF
CONFIG CP3 = OFF
CONFIG CPB = OFF ;Sector Boot no esta protegido
CONFIG CPD = OFF ;La EEPROM no esta protegida
*/
void serial_setup(void);
void putch(unsigned char);

unsigned char dummy;

void main (void)
{
 char c ="h";
 
 serial_setup();
 while(1)
 {
  putch(c);
  }
 
 
}



void serial_setup(void)
{

SYNC=0; //Asincrono
SPEN=1; // ENABLE SERIAL PORT

CREN=0; // DESACTIVAR RECEPCION
TXIE=1; // ACTIVAR INTERRUPCIONES TX
RCIE=0; // DESACTIVAR INTERRUPCIONES RX

TX9=0; // 8 BITS TRANSMISION
TXEN=1; // ACTIVAR TRANSMISOR


#define clear_usart_errors_inline   \
if (OERR)                                       \
{                                                   \
   TXEN=0;                                       \
   TXEN=1;                                       \
   CREN=0;                                       \
   CREN=1;                                       \
}                                                   \
if (FERR)                                       \
{                                                   \
   dummy=RCREG;                              \
   TXEN=0;                                       \
   TXEN=1;                                       \
}



}

void putch(unsigned char c)
{
   while(!TXIF) // 1 si el registro esta vacio
   {
      clear_usart_errors_inline;
      CLRWDT();
   }
   TXREG=c;

}
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: AngelGris en 17 de Noviembre de 2010, 09:25:52
  Insisto en que te falta configurar la velocidad.

  De hecho, la configuré como explica el datasheet, a 9600 y configuré el terminal virtual del proteus también a dicha velocidad y funciona joya.
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: tecnic en 17 de Noviembre de 2010, 17:14:32
Hola edu , con respecto al primer programita del led y el pulsador, si bien yo no utilizo el compilador Hi-tech , lo que me parece raro es cuando entras al while(1) infinito, vos haces lo siguiente=>

 while(1){
if(polsador==0)
LED=1;
else
LED=0;

}

vos estas preguntando por el estado del pulsador dentro del if, pero para ello , antes tendrias que leer el estado del pulsador y asignarlo a una variable previamente definida y cada ves que el loop vuelve a empezar, volver a leer el estado del pulsador y asi sucesivamente .
por ejemplo definis una variable "estado" y haces algo asi:

estado=polsador;  // esta seria la lectura antes de entrar al while
while(1)
{
if(estado==0)
LED=1;
else
LED=0;
estado=polsador; // y aca vuelvo a leer el estado del pulsador

}

es decir por cada pasada por el while, vuelvo a leer el estado del pulsador , porque si no hago esto, no sabria, cual es el valor actual del pulsador, yo creo que puede ser ese el problema, aunque no conosco el compilador hi-tech.
saludos!!
 

Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: edu1989 en 18 de Noviembre de 2010, 05:29:00
Perdona Angel por olvidarme de contestarte al tema de la velocidad. Lei que el modulo usart detectaba automaticamente la velocidad con la que se transmitian los datos por eso no puse nada. Si no es asi, como configuro la velocidad? con el compilador ccs si que se que en el use rs232 especificas los pines y velocidad pero con el hi-tech ni idea. El terminal del proteus tambien hay que configurarlo a esa velocidad para que tengan la misma transmisor y receptor, y ya todo funciona? de ser asi estaria muy contento :)

Tecnic, creo que ese no es el problema porque la variable polsador se va refrescando, no obstante es probable que sea mas claro como dices tu. Lo tendre en cuenta. Muchas gracias

Gracias a todos por vuestra ayuda.

Edito: Acabo de entrar en el proteus para ver como esta configurado el terminal del proteus y por defecto ya viene con vel=9600kbaud/s y en general configurado como creo que tiene que estar: data bits=8, parity=NONE, stop bits=1, send XON/XOFF=NO ( esto no se que es)
Creo que sera question de configurar la velocidad en el programita y listos ( si no me equivoco)
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: AngelGris en 18 de Noviembre de 2010, 12:24:00
Perdona Angel por olvidarme de contestarte al tema de la velocidad. Lei que el modulo usart detectaba automaticamente la velocidad con la que se transmitian los datos por eso no puse nada. Si no es asi, como configuro la velocidad? con el compilador ccs si que se que en el use rs232 especificas los pines y velocidad pero con el hi-tech ni idea. El terminal del proteus tambien hay que configurarlo a esa velocidad para que tengan la misma transmisor y receptor, y ya todo funciona? de ser asi estaria muy contento :)

.........

Edito: Acabo de entrar en el proteus para ver como esta configurado el terminal del proteus y por defecto ya viene con vel=9600kbaud/s y en general configurado como creo que tiene que estar: data bits=8, parity=NONE, stop bits=1, send XON/XOFF=NO ( esto no se que es)
Creo que sera question de configurar la velocidad en el programita y listos ( si no me equivoco)

  El modo auto sólo funciona en recepción. En el datasheet a partir de la página 241 te explica como calcular y configurar la velocidad.

  Y si mal no recuerdo en el ejemplo que hay en www.microchipc.com también tenía una tabla para configurar la velocidad.
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: edu1989 en 19 de Noviembre de 2010, 07:22:09
He hecho una serie de cambios en el programa despues de leer cosas del datasheet:

1. TRISC = 192; //todos los pines del puerto C se van a comportar como salida menos RC7 Y RC6. ( como entrada) 2^6 + 2^7=192 (ESTO NO LO TENIA ANTES).

2. Velocidad:

#define BAUD 9600
#define SPBRG

/*
Synchronous mode: Unused in this mode.
#define BRGH_VALUE 1
*/
   
   #if PIC_CLK==5000000 && BAUD==9600
      #assert SPBRG==129 // Calculado anteriormente . Daba 129.2 pero redondeamos a 129      
   
   #endif

El SPBRG esta calculado con la formula del datasheet. La formula es para una transmision sincrona ( solo quiero ir enviando hola mundo) y es la siguiente:
Baud rate= Fosc/4(n+1) primero de todo calculo N que es el valor de SPBRG. Aislo de la formula n y me da n=129.2 que hay que redondear hacia abajo por tanto 129 ( Calculos hechos con baud rate=9600 y Fosc=5Mhz). Creo que la frequencia de oscilacion es la correcta ya que la de entrada son 20Mhz que se dividen por 4

Sigue sin funcionarme, ahora me sale un error en el proteus
Logic contention(s) detected on net#00023.

Que creen que hago mal? les adjunto el codigo y el proteus en una carpeta
Tambien decirles que me sale un error si activo el bit PIE ( de las interrupciones...)

Ayudenme por favor. muchas gracias!
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: AngelGris en 19 de Noviembre de 2010, 10:44:34
He hecho una serie de cambios en el programa despues de leer cosas del datasheet:

1. TRISC = 192; //todos los pines del puerto C se van a comportar como salida menos RC7 Y RC6. ( como entrada) 2^6 + 2^7=192 (ESTO NO LO TENIA ANTES).

  ¿Viste que es importante leer el Datasheet?

2. Velocidad:

#define BAUD 9600
#define SPBRG

/*
Synchronous mode: Unused in this mode.
#define BRGH_VALUE 1
*/
   
   #if PIC_CLK==5000000 && BAUD==9600
      #assert SPBRG==129 // Calculado anteriormente . Daba 129.2 pero redondeamos a 129      
   
   #endif

El SPBRG esta calculado con la formula del datasheet. La formula es para una transmision sincrona ( solo quiero ir enviando hola mundo) y es la siguiente:
Baud rate= Fosc/4(n+1) primero de todo calculo N que es el valor de SPBRG. Aislo de la formula n y me da n=129.2 que hay que redondear hacia abajo por tanto 129 ( Calculos hechos con baud rate=9600 y Fosc=5Mhz). Creo que la frequencia de oscilacion es la correcta ya que la de entrada son 20Mhz que se dividen por 4

  No importa que envíes el mismo dato una y otra vez, la transmisión puede ser sincrónica o asincrónica. Para que sea sincrónica uno de los pines funciona como clock  (TX) y el otro como data (RX). En una transmisión asincrónica no necesitás salida de clock.

  En la fórmula, FOSC se refiere a la frecuencia de oscilación, que es justamente a cuanto está oscilando el PIC. Si el cristal es de 20MHz, entonces FOSC es 20MHz.
  Si no querés usar pin de clock entonces tenés que configurar como comunicación asincrónica.

Sigue sin funcionarme, ahora me sale un error en el proteus
Logic contention(s) detected on net#00023.

Que creen que hago mal? les adjunto el codigo y el proteus en una carpeta
Tambien decirles que me sale un error si activo el bit PIE ( de las interrupciones...)

Ayudenme por favor. muchas gracias!

  El error de proteus se debe a mal conexionado y en el nodo que indica el error es porque por ejemplo, el pic está generando un nivel alto y el terminal virtual debe estar generando un nivel bajo y entonces se produce un cortocircuito.
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: edu1989 en 19 de Noviembre de 2010, 11:56:07
  En la fórmula, FOSC se refiere a la frecuencia de oscilación, que es justamente a cuanto está oscilando el PIC. Si el cristal es de 20MHz, entonces FOSC es 20MHz.

El asunto de la question es escoger que tipo de oscilador quiero, hay hasta 10 distintos (pg 25 del datasheet). Dentro de la opcion cristal puedo conseguir:
Crystals Used:
4 MHz
8 MHz
20 MHz

Mi pregunta es: para conseguir el reloj tengo que fijarme con los valores de los condensadores que vienen en el datasheet para conseguir cada frequencia y ponerlo en el simulador de proteus? Cual cojo de las tres? con que criterio escojo la frequencia, aparte de para la rapidez del programa claro...

Adjunto otra vez programa + proteus. He corregido el modo, ahora he puesto asincrono ( con los cambios en el programa, pertinentes)

p.d: No he entendido la ultima frase AngelCris, ahora he probado el proteus y no me tira el error aunque no hace nada. No veo el terminal ni nada... voy a seguir probando. Muchas gracias por la ayuda
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: AngelGris en 19 de Noviembre de 2010, 13:10:19
En la fórmula, FOSC se refiere a la frecuencia de oscilación, que es justamente a cuanto está oscilando el PIC. Si el cristal es de 20MHz, entonces FOSC es 20MHz.

El asunto de la question es escoger que tipo de oscilador quiero, hay hasta 10 distintos (pg 25 del datasheet). Dentro de la opcion cristal puedo conseguir:
Crystals Used:
4 MHz
8 MHz
20 MHz

Mi pregunta es: para conseguir el reloj tengo que fijarme con los valores de los condensadores que vienen en el datasheet para conseguir cada frequencia y ponerlo en el simulador de proteus? Cual cojo de las tres? con que criterio escojo la frequencia, aparte de para la rapidez del programa claro...

  La verdad que me está mareando un poco la configuración del clock del 18F. La frecuencia que hay que indicar en el Proteus es la frecuencia de trabajo del CPU.
  Fijate en el esquema de la página 24. Para saber a que frecuencia va a trabajar el CPU hay que tener en cuenta el tipo de clock y algunos bits de configuración.
  Por ejemplo para el modo HS (que abarca el rango de cristales que vos mostrás) tendrías que tener en cuenta los bits CPUDIV para saber a qué frecuencia estaría trabajando el CPU. Por defecto los bits CPUDIV están en 00 así que la frecuencia de trabaja del CPU sería la frecuencia del cristal dividido 1. Osea, si usas cristal de 20MHz, el micro trabaja a 20MHz, por ende en el proteus hay que indicar una frecuencia de 20MHz.


p.d: No he entendido la ultima frase AngelCris, ahora he probado el proteus y no me tira el error aunque no hace nada. No veo el terminal ni nada... voy a seguir probando. Muchas gracias por la ayuda

  No ves la pantalla del terminal porque la cerraste. Cuando estés simulando, anda a Debug y tilda para poder ver el "Virtual Terminal"


  Ahora otra cosa, estoy viendo en tu programa lo siguiente

Código: C
  1. #define BAUD 9600
  2.         #define SPBRG
  3.         #define BRGH_VALUE 1 // High Baud Rate Select bit (=1 High Speed)
  4.  
  5.        
  6.         #if PIC_CLK==5000000 && BAUD==9600
  7.                 #assert SPBRG==129 // Calculado anteriormente. Daba 129.2 pero hay que redondear a la baja 129         
  8.                 #assert BRGH_VALUE==1
  9.         #endif

 Para que te tome la línea "#if PIC_CLK ......"  tenés que definir con anterioridad PIC_CLK. Es decir, poner "#define PIC_CLK 5000000" antes de llamar a "serial_setup".

  Me voy a almorzar, luego trataré de ordenar el programa y lo subo.... Así podés ver las diferencias.
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: AngelGris en 19 de Noviembre de 2010, 14:37:12
Acá te dejo una versión que la probé tanto a 19200 como a 9600 y funcionó bien. Por supuesto para que trabaje a distintas velocidades hay que compilar el programa asignando el valor adecuado a "#define BAUD xxxx" y también cambiar la velocidad al terminal virtual del Proteus.

Código: C
  1. #include <htc.h>
  2.  
  3.  
  4. /*
  5. ;******** Configuracion del Oscilador **********
  6. CONFIG FOSC = XT_XT         ;Osc XT, XT usado para el USB
  7.  
  8. ;******** Otros bits de configuracion **********
  9. CONFIG PWRT = ON ;PWRT habilitado
  10. CONFIG BOR  = OFF ;Brown out resete deshabilitado
  11. CONFIG WDT = OFF ;Watch dog deshabilitado
  12. CONFIG  MCLRE = OFF ;MCLR como entrada
  13. CONFIG PBADEN = ON ;Todos los pines como entradas analogicas
  14. CONFIG LVP = OFF ;programacion en bajo voltaje deshabilitado
  15.  
  16. ;********* Bits de proteccion ******************
  17. CONFIG CP0 = OFF ;los bloques del codigo de programa
  18. CONFIG CP1 = OFF ;no estan protegidos
  19. CONFIG CP2 = OFF
  20. CONFIG CP3 = OFF
  21. CONFIG CPB = OFF ;Sector Boot no esta protegido
  22. CONFIG CPD = OFF ;La EEPROM no esta protegida
  23. */
  24.  
  25. /*
  26.  Hay que definir BAUD y PIC_CLK para que compile bien y a su vez para poder asignar el valor de velocidad
  27. PIC_CLK tiene que ser la frecuencia de trabajo del CPU y es el mismo que hay que asignar desde Proteus
  28. */
  29.  
  30. #define BAUD  19200                     // velocidad en baudios
  31. #define PIC_CLK 20000000    // 20MHz de oscilación
  32.  
  33.  
  34. void serial_setup(void);
  35. void putch(unsigned char);
  36.  
  37. unsigned char dummy;
  38.  
  39. void main (void)
  40. {
  41.  char c = 'G'; //cuando es un valor char tiene que ir entre comillas simples (') y no dobles (")
  42.  TRISC = 192; //todos los pines del puerto C se van a comportar como salida menos RC7 Y RC6. ( como entrada) 2^6 + 2^7=192
  43.  serial_setup();
  44.  while(1)
  45.  {
  46.   putch(c);
  47.   }
  48.  
  49. }
  50.  
  51.  
  52.  
  53. void serial_setup(void)
  54. {
  55.  
  56. /*
  57.   Te agrego lo siguiente para que se configure la velocidad automáticamente,
  58. basandose en el valor definido a PIC_CLK y el valor definido a BAUD
  59.  
  60.   Que esta basado en la formula del DataSheet para BRG16 = 0 y BRGH = 1
  61. */
  62.  
  63. #define SPBRG_VALUE ((PIC_CLK/(16UL*BAUD)) -1) // Valor que hay que asignar al registro SPBRG
  64.  
  65.        
  66.         // En nuestro caso la Fosc=5MHZ y baud rate 9600kbaud/s
  67. /*
  68.         #define BAUD 9600
  69.         #define SPBRG
  70.         #define BRGH_VALUE 1 // High Baud Rate Select bit (=1 High Speed)
  71.  
  72.        
  73.         #if PIC_CLK==5000000 && BAUD==9600
  74.                 #assert SPBRG==129 // Calculado anteriormente. Daba 129.2 pero hay que redondear a la baja 129         
  75.                 #assert BRGH_VALUE==1
  76.         #endif
  77. */
  78. /*
  79.   Anulé todo lo anterior, porque no voy a hacer uso de ello
  80. */     
  81.  
  82.  
  83. BRGH = 1;
  84. BRG16 = 0;
  85.  
  86. SPBRG = SPBRG_VALUE; //esté es el valor caldulado y lo podés corroborar con las tablas del DataSheet
  87.  
  88.  
  89.  
  90. SPEN=1; // Enable serial port
  91. SYNC=0; // Asincrono
  92.  
  93. /*Transmision*/
  94. TXIE=0; // Desactivar interrupciones de tx
  95. TXEN=1; // Enable the transmitter
  96. TX9=0; // 8 bits transmission
  97.  
  98. /*Recepcion*/
  99. RCIE=1; // Interrupciones en recepcion
  100. RX9=0; // 8 bits receiver
  101. CREN=1; // Enable reception
  102.  
  103.  
  104. //Using interruptions...
  105. GIE=1;
  106. PEIE=1;
  107.  
  108.  
  109. // Para configurar como asincrono
  110.  
  111. /*
  112. 1. Initialize the SPBRGH:SPBRG registers for the
  113. appropriate baud rate. Set or clear the BRGH
  114. and BRG16 bits, as required, to achieve the
  115. desired baud rate.
  116. 2. Enable the asynchronous serial port by clearing
  117. bit, SYNC, and setting bit, SPEN.
  118. 3. If the signal from the TX pin is to be inverted, set
  119. the TXCKP bit.
  120. 4. If interrupts are desired, set enable bit, TXIE.
  121. 5. If 9-bit transmission is desired, set transmit bit,
  122. TX9. Can be used as address/data bit.
  123. 6. Enable the transmission by setting bit, TXEN,
  124. which will also set bit, TXIF.
  125. 7. If 9-bit transmission is selected, the ninth bit
  126. should be loaded in bit, TX9D.
  127. 8. Load data to the TXREG register (starts
  128. transmission).
  129. 9. If using interrupts, ensure that the GIE and PEIE
  130. bits in the INTCON register (INTCON<7:6>) are
  131. set.
  132.  
  133. */
  134.  
  135.  
  136. /*
  137. To set up an Asynchronous Reception:
  138. 1. Initialize the SPBRGH:SPBRG registers for the
  139. appropriate baud rate. Set or clear the BRGH
  140. and BRG16 bits, as required, to achieve the
  141. desired baud rate.
  142. 2. Enable the asynchronous serial port by clearing
  143. bit, SYNC, and setting bit, SPEN.
  144. 3. If the signal at the RX pin is to be inverted, set
  145. the RXDTP bit.
  146. 4. If interrupts are desired, set enable bit, RCIE.
  147. 5. If 9-bit reception is desired, set bit, RX9.
  148. 6. Enable the reception by setting bit, CREN.
  149. 7. Flag bit, RCIF, will be set when reception is
  150. complete and an interrupt will be generated if
  151. enable bit, RCIE, was set.
  152. 8. Read the RCSTA register to get the 9th bit (if
  153. enabled) and determine if any error occurred
  154. during reception.
  155. 9. Read the 8-bit received data by reading the
  156. RCREG register.
  157. 10. If any error occurred, clear the error by clearing
  158. enable bit, CREN.
  159. 11. If using interrupts, ensure that the GIE and PEIE
  160. bits in the INTCON register (INTCON<7:6>) are
  161. set
  162.  
  163. */
  164.  
  165.  
  166. #define clear_usart_errors_inline       \
  167. if (OERR)                                                                                                       \
  168. {                                                                                                                                       \
  169.         TXEN=0;                                                                                                 \
  170.         TXEN=1;                                                                                                 \
  171.         CREN=0;                                                                                                 \
  172.         CREN=1;                                                                                                 \
  173. }                                                                                                                                       \
  174. if (FERR)                                                                                                       \
  175. {                                                                                                                                       \
  176.         dummy=RCREG;                                                                            \
  177.         TXEN=0;                                                                                                 \
  178.         TXEN=1;                                                                                                 \
  179. }
  180.  
  181.  
  182.  
  183. }
  184.  
  185. void putch(unsigned char c)
  186. {
  187.         while(!TXIF) // 1 si el registro esta vacio
  188.         {
  189.                 clear_usart_errors_inline;
  190.                 CLRWDT();
  191.         }
  192.         TXREG=c;
  193.  
  194. }
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: edu1989 en 23 de Noviembre de 2010, 06:08:00
Muchas gracias AngelCris! te lo agradezco mucho. Al principio no me funcionaba pero me di cuenta que en el PIC de la simulacion tenia que ponerle el clock adequeado osea 20MHz ( estaba en 4MHz por defecto). Mas tarde te explico mi nuevo programita... voy a intentar-lo yo primero.

Muchas gracias de verdad.
Saludos
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: edu1989 en 24 de Noviembre de 2010, 07:16:04
Hola de nuevo. Estoy haciendo un programa para apagar y encender leds con la novedad del timer. El asunto es que cuando se pulse el pulsador el led este encendido durante 5s ( a traves del timer 0). El código he intentado organizarlo mucho, para seguir los consejos de mi director de proyecto. Como pueden ver, esta hecho a partir de estados. Los dos estados que hay son:

Idle_Low: Apagado ( es como un estado de sleep). Cuando se pulsa el pulsador sale de este estado.

Idle_High: Cuando se pulsa el pulsador se viene a este estado, se cuentan 5s ( en estos 5s el led permanece encendido) y después vuelve al estado de Low.

Un diagrama muy sencillo.

No se porque pero no me acaba de funcionar. Les agradecería que le echaran un ojo a ver que es lo que pasa. Les adjunto el código con el circuito proteus.

Muchas gracias por la ayuda!
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: stk500 en 24 de Noviembre de 2010, 08:05:18
Hola edu1989,
yo te recomendaria que abriera otro hilo si resolviste el problema del LED con pulsador, es que asi queda muy ogorroso para aquellos que busca informacion. no cree?  de todas forma te paso un archivo que debe editarlo para lo que tu quieres.

Saludos


Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: AngelGris en 24 de Noviembre de 2010, 09:30:31
  Estoy de acuerdo con el compañero stk500.
Yo ya te lo había comentado cuando empezaste a preguntar sobre la comunicación serie.
Es más prolijo abrir un nuevo tema por esta duda, incluso lo era con respecto al tema de la comunicación.

Imaginate a alguien que recién comienza y usa el buscador para encontrar algo sencillo como es encender un led. Se encuentra con este topic que tiene un montón de agregados innecesarios para el simple hecho del led. Entonces esa persona se va a marear un poco.
Título: Re: Problema. Led que no se enciende con pulsador.
Publicado por: edu1989 en 24 de Noviembre de 2010, 09:35:08
Ya esta! Realmente teneis razon, sino sera un lio para las otras personas...

Nos vemos en el otro post.