bueno.ya estoy realizando el codigo para hacer una impresora 3D con pic usando el software repetier.
lo primero que tengo que hacer es saber como se comunica el repetier con la reprap.asi que he puesto un monitor de puerto serie.
por lo que he visto.el repetier no envia comandos hasta que este no recibe el permiso de la impresora.he intentado enviar comandos G.pero
no he podido emular una comunicacion.y esto es porque el codigo G contiene un CRC.
la impresora esta continuamente enviando un numero de linea con un codigo de permiso: ejm.
N118 M105 *15.. Hex: 4e 31 31 20 4d 31 30 35 20 2a 31 35 0d 0a
trama: 4e 31 31 20 4d 31 30 35 20 2a
crc : 31 35
CR: 0d
LF: 0a
lo que no se es que polinomio usa.
he visto esto por la red pero no se si pertenecera a la generacion del crc de la reprap.
static inline uint16_t GetCRC( uint16_t crc, char ser_data )
{
crc = (unsigned char)(crc >>

| (crc <<

;
crc ^= ser_data;
crc ^= (unsigned char)(crc & 0xff) >> 4;
crc ^= (crc <<

<< 4;
crc ^= ((crc & 0xff) << 4) << 1;
return crc;
}
The logic to compute checksum would then become:
uint16_t cs = 0;
for(int i = 0; i < cmd.length(); i++)
cs = GetCRC( cs, cmd.charAt(i) );
computedCrc = cs;
So, the full logic for accepting or testing a line, encoded with full N and CRC checksum would be something like:
// was line number and checksum provided?
bool value = true;
if( lineNumber != 0 )
{
valid = lineNumber == expectedLineNumber
&& cmd.length() == providedLength
&& computedCrc == providedCrc;
}
// accept or reject the line based on valid flag