IoT(Internet Of Things) y mi experiencia en el desarrollo de hardware

01-08-2014
 

El auge que esta teniendo el IoT(Internet Of Things) a propiciado mi interés nuevamente por el mundo del hardware, que en el pasado dejó de ser atractivo profesionalmente.

Todo el movimiento del IoT se basa en que existe un gran potencial en conectar todo tipo de dispositivos a la red para hacer que ganen mucho mas valor(Casas controladas a distancia, Gadgets que nos permitan sacar datos como el numero de personas que entran en una tienda o se acercan a un aparador, Cajas fuertes que se abren desde una central, etc.).

Han aparecido también todo un conjunto de hardware estándar o mini-ordenadores muy económicos diseñados para hacer factible instalaciones de este tipo.

Mi paso por el mundo del hardware

Corría el año 2000 cuando estuve trabajando en el departamento de I+D de una empresa que se dedicaba a la fabricación de pantallas de LED. En el laboratorio hacíamos cosas ‘guais’ como dedicarnos a programar el software para hacer funcionar el hardware que también se diseñaba en la misma empresa. La verdad es que pagaban fatal y no había futuro en esta empresa.

Al dejar la empresa, quise probarme a mi mismo diseñando mi propio hardware, concretamente un conjunto de leds que se movían al ritmo de el coche fantástico y tenia un par de botones para controlar la velocidad. 14 años después he querido recuperarlo y subirlo al blog:

El circuito se basa en el chip PIC16F8X. Los PIC estaban muy bien para el desarrollo de pequeños circuitos, porque el mismo chip incluía la RAM y la ROM, no eran de los mas potentes, pero si eran muy prácticos. En el diseño inicial del circuito se ve que es muy sencillo.

El diseño inicial del hardware(Un poco rudimentario)

IMG_20140801_150154

La placa

Circuito leds(PIC16F8X)

Circuito leds(PIC16F8X)

El circuito de detrás de la placa

Circuito leds 2 (PIC16F8X)

Circuito leds 2 (PIC16F8X)

Y finalmente el programa que hace funcionar el circuito.

#include <pic.h>

unsigned char getSortida1(unsigned char valor);

main() {
	int velocitat=1000;  // Velocitat del scroll
	int TRebots=600;  // temps d'espera delst rebots

	int direccio=1;    // direcció del scroll

	unsigned char a=0;
	int i=0;

	unsigned char t1=0;   // Visor

	int rebotsBoto1=0,rebotsBoto2=0;   // Control de Rebots del dos botons

	TRISB=0;
	TRISA=0xFF;

	__CONFIG(WDTDIS & XT & UNPROTECT);

	while (1==1) {
		i++;
		if (i>=velocitat) i=1;

		if (i==1) {
		   if (direccio==1) a++;
		   if (direccio==0) a--;

		   if (a==9) { a=7; direccio=0; }
		   if (a==0) { a=2; direccio=1; }
		   }

		t1=getSortida1(a);
		if ( (i%4==0) && a>1 && direccio==1) t1=t1 | getSortida1(a-1);
		if ( (i%16==0) && a>2 && direccio==1) t1=t1 | getSortida1(a-2);

		if ( (i%4==0) && a<8 && direccio==0) t1=t1 | getSortida1(a+1);
		if ( (i%16==0) && a<7 && direccio==0) t1=t1 | getSortida1(a+2);


		if ( (((unsigned char) PORTA) & 0x02) >0 && rebotsBoto1==0) { 
		        velocitat=velocitat+100;
	 
			rebotsBoto1=1; 
			} else {
		        if (rebotsBoto1>0) rebotsBoto1++;
			if (rebotsBoto1>TRebots) rebotsBoto1=0;
			}

		if ( (((unsigned char) PORTA) & 0x08) >0 && rebotsBoto2==0) { 
			velocitat=velocitat-100;
			if (velocitat<0) velocitat=0; 

			rebotsBoto2=1; 
			} else {
		        if (rebotsBoto2>0) rebotsBoto2++;
			if (rebotsBoto2>TRebots) rebotsBoto2=0;
			}

		PORTB=t1;
		}
	}


unsigned char getSortida1(unsigned char valor) {
	unsigned char ret=0;

	if (valor==1) ret=1;
	if (valor==2) ret=2;
	if (valor==3) ret=4;
	if (valor==4) ret=8;
	if (valor==5) ret=128;
	if (valor==6) ret=64;
	if (valor==7) ret=32;
	if (valor==8) ret=16;
	return ret;
	}
 

Leave a Reply

© Albert Coronado Calzada