Hola a todos, me alegra decirles que después de una buena temporada sin poder hacer nada de electrónica debido al tiempo libre, lo he retomado.
He estado haciendo unos circuitos para ir probando el usb, el i2c, conversor A/D.. etc, y aquí os pongo unas fotillos:
Esta es una fuente de 5v y 1A.

Esta placa es para conectar LCD 2x16 y tiene un puente para encender la luz de fondo, un potenciometro para el contraste y conexión para cable plano.

Esta es la que controla todo, es un pic 18F2550 con un reset (botón reciclado de un viejo cdrom) y un pulsador, para conectarlo al ordenador e ir haciendo pruebas.

Esta la última que he hecho, lleva un RTC de Philips con alarma, un sensor de temperatura LM35 y un pot.

Aquí la veis por debajo, después de varios intentos fallidos y las placas anteriores (las he hecho por el método de la plancha), es la que mejor me ha quedado.

A ver que os parece, intento aprender poco a poco como manejar el LCD, comunicación USB, conversor A/D, bus i2C, utilizar un RTC gracias a estas placas.
Y tengo un problema con la emulación de puertos serie por usb, he hecho un pequeño programa para que reciba del ordenador caracteres, hasta recibir el signo -(menos), momento en el que tiene que mostrar en el lcd lo que se ha pasado, pero no se espera en la instrucción usb_cdc_kbhit(), y no para de pedirme caracteres por la hyperterminal sin mostrar nada por el lcd (Las conexiones están bien, ya la pantalla funciona perfectamente). Les dejo el código:
#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include "usb_cdc.h"
#include "usb_desc_cdc.h"
#include "flex_lcd_2.c"
#define LED_r PIN_A1
#define LED_v PIN_A0
#ZERO_RAM
void main() {
char *cad;
char car;
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
port_b_pullups(FALSE);
set_tris_a(0b0000000);
set_tris_b(0b00000000);
set_tris_c(0b0000000);
output_low (LED_v);
output_high (LED_r);
lcd_init();
lcd_putc("\f");
delay_ms(300);
usb_cdc_init();
usb_init();
while(!usb_cdc_connected()) {}
do {
usb_task();
if (usb_enumerated()) {
if (input_state(LED_r) == 1){
output_low (LED_r);
delay_ms (10);
output_high (LED_v);
lcd_putc("Conectado");
printf(usb_cdc_putc, "\r\nPrueba usb v0.1 ");
}
printf(usb_cdc_putc, "\r\nIntroduce caracteres de texto(- para terminar): ");
if (usb_cdc_kbhit()){
car = usb_cdc_getc();
if (car == '-')
lcd_putc(cad);
else
cad = cad + car;
}
}
} while (TRUE);
}
Un saludo a todos.
