You are on page 1of 5

/**http://www.scribd.

com/doc/83808557/Hoja-de-Datos-28380-Color-PAL ****/
#include <16F877A.H>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#fuses BROWNOUT, PUT, HS, NOWDT
#use delay(clock=20000000)
#use rs232(baud=4800, xmit=PIN_c6)
#define N_de_iteraciones 15
//Numero de iteraciones del entrenamiento.
#define umbral 0f
//Taza de aprendizaje del perceptron
void adaline(void);
float F_para_entrenar_adaline( float x0, float x1,float x2,float x3,float x4,flo
at x5,float x6,float x7,float deseado);
void Inicia_los_pesos(void);
float sigmoide( float s );
void adaline(void);

int
int
int
int

rojo0;
rojo1;
rojo2;
rojos;

int valores;
float delta[8];
float Pesos[8] ;
int i = 0;
void main()
{
SET_TRIS_A(0b00000111);
SET_TRIS_B(0b00000000) ;
SET_TRIS_C(0b10000000) ;
entrada
output_A(0b00000000);
output_B(0b00000000);
int rojo0 = 0;
int rojo1 = 0;
int rojo2 = 0;
pesos[0]=
pesos[1]=
pesos[2]=
pesos[3]=
pesos[4]=
pesos[5]=
pesos[6]=
pesos[7]=

while(1)

0.78;
0.78;
0.78;
0.78;
0.78;
0.78;
0.78;
0.78;

// Puerto B como salida.
// Puerto c como salida excepto c7 como

//! #use rs232(baud=4800. // delay_ms(30). 1 . 0 . output_B(0b00000000). //int resultado. // Tiempo de 0. // C6 como salida nivel bajo. printf(" ").//= putc(82). if((valores == 163)||(valores == 164)||(valores == 165)||(valores == 16 6)||(valores == 167)||(valores == 168)||(valores == 169)) //azul { i = 0. xmit=PIN_c6) SET_TRIS_C(0b10000000) .// 66 Azul . delay_ms(2000). // // delay_ms(80). //************************ putc(61). 0 = %f \n\r".VERDE 71 putc(115). printf(" 1 . rojo0 = getc(). // inicializo puerto B en nivel bajo. 0 .1 segundo // output_low (PIN_C6).{ if(input(PIN_A2)==1) { output_A(0b00000000). // delay_ms(30). // C6 como salida nivel bajo.F_para_ent .valores. // hacer que me escuche output_high (PIN_C6). rojo1 = getc(). // Tiempo de 0. // delay_ms(100). 1. #use rs232(baud=4800. // delay_ms(80). //int salida = 168. printf("****************************\n\r"). WHILE (i < N_de_iteraciones) { i++.valores).82 ROJO . // hacer que me escuche output_high (PIN_C6). //resultado = salida . rojo2 = getc(). delay_ms(2000). printf("valores:%3u\n\r". delay_ms(100). 0 . rcv=pin_C6) SET_TRIS_C(0b11000000) . valores = rojo0 + rojo1 + rojo2. 0 .//s putc(33).1 segundo output_low (PIN_C6). output_B(0b00000000).

1 . 0 .F_para_en trenar_adaline( 1 . 0 . } else if ((valores == 153)||(valores == 154)||(valores == 155)||(valores == 156)||(valores == 157)||(valores == 158)||(valores == 159)) //rojo { i = 0. 0 .78. 0 . 0. 0 . 0 . 7)). 1 .78. 0. 1 . 0. 1 . 0 . 0 .F_para_e printf("Numero de iteraciones %d\n\r". 0 . 0. 0. 0. 152)). 0 .78. 1 . 0 = %f \n\r". 0. //printf(" 1 . } else if ((valores == 143)||(valores == 144)||(valores == 145)||(valores == 146)||(valores == 147)||(valores == 148)||(valores == 149)) //verde { i = 0. 0 . 0 . 0 . output_low(PIN_B1). 0 .renar_adaline( 1 . } pesos[0]= pesos[1]= pesos[2]= pesos[3]= pesos[4]= pesos[5]= pesos[6]= pesos[7]= output_high(PIN_B1).78. //printf(" 1 . 1. 0 ntrenar_adaline( 0 .F_para_e ntrenar_adaline( 0 . } pesos[0]= pesos[1]= pesos[2]= pesos[3]= pesos[4]= pesos[5]= pesos[6]= pesos[7]= output_high(PIN_B0). 0 . 0 . = %f \n\r". printf(" 1 . printf("Numero de iteraciones %d\n\r". 0 . 0 . 0 . 0. 0. 0.78. 0 . delay_ms(2000). 0 . 1 . 1. 1 . 1 . 1 . 1 . 0 . printf(" \n\r").78.78. 0. 0 .i). 0. 0. WHILE (i < N_de_iteraciones) { i++. 0. 168)). 1 . 0. 1 . 0 .78. printf(" \n\r"). delay_ms(2000). 0 .78.78. 1. output_low(PIN_B0). 0. 7)). 0.78. valores = 0. 0 = %f \n\r".78.78. 0. 1 . 0 . 0 . . 0 .i).78.78.78.

.float x3. net = Pesos[0]*x0 + Pesos[1]*x1 + Pesos[2]*x2 + Pesos[3]*x3 + Pesos[4]* x4 + Pesos[5]*x5 + Pesos[6]*x6 + Pesos[7]*x7 + umbral. output_low(PIN_B2). 1 . printf(" \n\r").78. 0 . 0.78.i). . . 7)). float x1. delta delta delta delta delta delta delta delta [0]= [1]= [2]= [3]= [4]= [5]= [6]= [7]= 0 0 0 0 0 0 0 0 . 0 0 .F_para_en . 0 = %f \n\r". 0. 145)).float x4.WHILE (i < N_de_iteraciones) { i++.78. . 0 . } } } } float F_para_entrenar_adaline( float x0. 0 . 0 . 1 .F_para_e .float x6.flo at x5. 0 . float out = 0. 0. delay_ms(2000). 0. . 0 .float x2. printf(" 1 trenar_adaline( 1 . } pesos[0]= pesos[1]= pesos[2]= pesos[3]= pesos[4]= pesos[5]= pesos[6]= pesos[7]= output_high(PIN_B2). 0. 0 .78. 1. 0 0 .78. 0 . . . 0 . printf("Numero de iteraciones %d\n\r".float deseado) { float net = 0. float Error = 0. 1 . 0. 0 . 1 .78. 1 .78.float x7. 1 .78. . 0 . . 0. 1 = %f \n\r". . 1 //printf(" ntrenar_adaline( 0 . 0. 0 . 1 . 0 . 0.

Pesos[2]). printf("Error %f\n\r". .html . printf("Pesos[0] printf("Pesos[1] printf("Pesos[2] printf("Pesos[3] printf("Pesos[4] printf("Pesos[5] printf("Pesos[6] printf("Pesos[7] * * * * * * * * error error error error error error error error * * * * * * * * x0 x1 x2 x3 x4 x5 x6 x7 + + + + + + + + umbral umbral umbral umbral umbral umbral umbral umbral .net/RNA/Unidad%202/2. %f\n\r".1 0.Pesos[7]). delta[5]. delta[4]. %f\n\r".Pesos[3]). delta[0] delta[1] delta[2] delta[3] delta[4] delta[5] delta[6] delta[7] = = = = = = = = 0.1 0. delta[6].1 0. %f\n\r". . //printf(" \n\r"). . //de los pesos sinapticos delta[2].net16. delta[7].Pesos[4]). delta[3].Error). %f\n\r".3.Pesos[0]).Pesos[5]).2.1 0. out=net.Error=deseado-net. . %f\n\r". return (out). %f\n\r". .1 0. .Pesos[1]).1 0.Pesos[6]). %f\n\r".1 0.1 Pesos[0] Pesos[1] Pesos[2] Pesos[3] Pesos[4] Pesos[5] Pesos[6] Pesos[7] += += += += += += += += delta[0]. } //http://hugo-inc. . //Se ajustan los nuevos valores delta[1]. %f\n\r".