Professional Documents
Culture Documents
ino
Pgina 1 de 3
Archivo: /home/jorge2/Documentos/MiniPaci_n_crc/codificaci_n_crc.ino
//Se escribe el divisor o generador, de la misma forma que
//el anterior, pero con el arreglo data
cont=0;
for (int i=0; i < 4; i++){
for (int j=0; j < 8; j++){
bitWrite(divisor,cont,bitRead(data[3-i],j));
cont++;
}
}
//Secuencia para imprimir el dato que quiere ser enviado
Serial.println("Enviado");
Serial.println(enviado);
imprimir(enviado);
//Secuencia para imprimir el divisor y revisar que si est bien
/*
Serial.println("Divisor");
Serial.println(divisor);
imprimir(divisor);
*/
//Se establece el residuo con la divisin entre el enviado y el divisor
//y posteriormente se imprime el dato por el puerto serial
residuo1=enviado % divisor;
Serial.println("Residuo #1");
Serial.println(residuo1);
imprimir(residuo1);
//Puede eliminarse, estaba mal establecido desde la teora
/*
enviadomod=enviado;
for (int i=0; i < 4; i++){
bitWrite(enviadomod,i,bitRead(residuo1,i));
}*/
//Se pone el dato que se va a enviar, pero antes se debe restar
//el residuo para que funcione el algoritmo detector de error
//Posteriormente se imprime su valor por el puerto serial
enviadomod=enviadomod-residuo1;
Serial.println("Enviado modificado");
Serial.println(enviadomod);
imprimir(enviadomod);
//Esta rutina detecta si ha habido cambio en la variable estado
//debido a que ha entrado a la interrupcin...
//Se cambia el bit 5 en este caso, para que el dato se corrompa.
//Se corrompe el bit antes de ser enviado, aunque podra corromperse
//despus de ser enviado, en la variable recibido, pero se prefiere
//as, ya que ilustra mejor el concepto de la correccin anterior a
//la lectura del dato.
if(state==HIGH){
if(bitRead(enviadomod,5)==1){
bitWrite(enviadomod,5,0);
} else {
bitWrite(enviadomod,5,1);
}
}
//Se pone en 1 la seal de sincronismo (set)
digitalWrite(sync,HIGH);
//Se imprimen los datos por un pin en este caso Out
//y se lee lo que hay en el pin In y se escribe en la
//variable recibido. Se espera un tiempo para que se pueda
//ver mas claramente en el osciloscopio
for (int i=0; i < 32; i++){
digitalWrite(Out,bitRead(enviadomod,i));
bitWrite(recibido,i,digitalRead(In));
delay(10);
Pgina 2 de 3
Archivo: /home/jorge2/Documentos/MiniPaci_n_crc/codificaci_n_crc.ino
}
//Una vez terminado el trabajo, la seal de sincronizmo
//se pone en cero (clear)
digitalWrite(sync,LOW);
//Se imprime el valor del dato recibido
Serial.println("Recibido");
Serial.println(recibido);
imprimir(recibido);
//Se hace la divisin para saber si el residuo da cero
//(el dato lleg correctamente) o si el residuo da diferente de cero
//(el dato lleg corrupto), luego se imprime su valor.
residuo2=recibido%divisor;
Serial.println("Residuo #2");
Serial.println(residuo2);
imprimir(residuo2);
Serial.print("\n");
//Si el residuo es cero, dato OK, no se prende el led
//Si el residuo es diferente de cero, dato erroneo,
//se enciende el led conectado en el pin Exit
if(residuo2==0) {//no hay error
digitalWrite(Exit,0);
} else {
digitalWrite(Exit,1);
}
//Se espera un tiempo antes de enviar la siguiente trama
//o tren de impulsos.
delay(10);
}
//Funci a la que se entra cuando se genera la interrupcin
void cambio(){
if(digitalRead(2)==HIGH){
ponererror();
} else {
quitarerror();
}
}
void ponererror(){
state=HIGH;
}
void quitarerror(){
state=LOW;
}
//Esta funcin imprime los datos al puerto serial, bit a bit
void imprimir(unsigned long entrada){
for (int i=0; i < 32; i++){
Serial.print(bitRead(entrada,31-i));
}
Serial.print("\n");
}
Pgina 3 de 3