Recepción de 9 bits de dato

Saludos ante todo, bueno quiero recepcionar 9 bits de dato sin paridad ,a travez del puerto serial(estoy usando el puerto serial 1 Serial1.begin(19200); del Arduino mega2560) he buscado información(datasheet) y se debe modificar los registros lo cual lo he hecho

void setup() { 
 Serial.begin(19200);

Serial1.begin(19200);
UCSR1B = (0<<RXCIE1)|(0<<TXCIE1)|(0<<UDRIE1)|(0<<RXEN1)|(0<<TXEN1)|(7<<UCSZ12)|(1<<RXB81)|(1<<TXB81);
UCSR1C = (0<<UPM11)|(0<<UPM10)|(1<<USBS1)|(7<<UCSZ11)|(7<<UCSZ10);



}

void loop() { 

  if(Serial1.available()>0){
   int tx=Serial1.read();
   
   Serial.print(tx,HEX);
  
   Serial.print(" "); 
   } 
   delay(100);
}

e visto tambien quemodifican los registros de esta manera:
//UCSR1B = B00011100;//RXCIEn(7) TXCIEn(6) UDRIEn(5) RXENn(4) TXENn(3) [UCSZn2(2)] RXB8n(1) TXB8(0)
//UCSR1C = B00000110;//UMSELn1(7) UMSELn0(6) UPMn1(5) UPMn0(4) USBSn(3) [UCSZn1(2) UCSZn0(1)] UCPOLn(0)

ahora en el datasheet dice se debe asignar
(UCSZn=7) se refiere a que de debe colocar
(7<<UCSZ12)!(7<<UCSZ11)!(7<<UCSZ10) igual lo he probado
colocando 7 o 1 y nada; lo particular es cuando modifica el registro UCSR1C se prende el led de recepción de datos y se recibe información() pero cuando usa el otro registro UCSR1B no se recepciono nada.

Nose que me falta o esta mal mi procedimiento, entendi mal al datasheet,esta mal el orden de mi codigo, cualquier comentario es muy bien recibido muchas gracias

Prueba esto Tal vez esto te sirva, el artículo Sending and Receiving 9-bit Frames with Arduino La librería sugerida https://github.com/Bouni/Arduino/tree/ide-1.5.x-hardware-serial-9-bit

// Arduino 9-bit example

int answer;

setup() {
    Serial1.begin(9600, SERIAL_9N1);
}

loop() {
    // send a 9-bit frame on Serial1   
    Serial1.write(0x112);
    
    // wait for an answer
    while(!Serial1.available());

    // read the answer
    answer = Serial1.read();   

    // do what ever you want to do now ;-)

}

gracias por responder , si ya habia visto algo ese codigo pero Serial1.begin(9600, SERIAL_9N1); serial_9N1 no es valido porque el mega sin modificar registro es solo asta 8 bits serial_8N1, probado pero ya lo habia probado pero no copila y la otra opcion con una libreria voy a revisar aunque segun el datasheet con modificar los registros me parece mejor opcion, pero no logro habilitar el registro para UCSR1B ya modificado ,sabes si tengo que hacer una funcion para modificar los registros o agregar algo mas a ese codigo o todo esta mal

Cómo no compila, qué errores da?

SALE,TAMPOCO SALE EN https://www.arduino.cc/en/serial/begin LA OPCION SERIAL_8N1

DIGO SERIAL_9N1; SALE: SERIAL_9N1 was not declared in the scope. amigo surbyte, gracias por responder

bajaste, la librería? Reemplazaste lo que te indica el autor? y lo mas importante, estas usando la versión que el usó? la 1.5.7. yo no me jugaría con otra versión mas alla de la 1.6.0 y menos que menos las últimas. Ahora la miro y te respondo.

Me parece, surbyte, que no se trata sencillamente de una librería lo que utiliza, sino un IDE modificado.

Si. Me di cuenta ayer. 79MBytes es todo el IDE 1.5.7 aparentemente. Yo bajé la librería para ver los cambios y luego descubro eso. Bueno, mejor aún, la bajas, instalas el IDE y trabajas con esa opción. Asunto resuelto o no?

gracias por sus respuestas amigos , voy verificar , y surbyte por que no se recomienda usar las ultimas versiones del ide de arduino? disculpa si la pregunta puede ser muy basica .

No hago mas que leer a gente que se queja de problemas muy simples intentando compilar programas que funcionan perfectamente con versiones como la 1.6.0 o la 1.6.4 por eso.

hola a todos. Yo realice la misma prueba con la version 1.6.8 y no me compila. Que versión hay que usar para que compile "Serial1.begin(9600, SERIAL_9N1);" ?

que significa modificar el registro?

agradezco cualquier ayuda . gracias

La que viene con el link que puse en el post#1.

Gracias por la respuesta!
Sigue sin funcionar.

Instale el IDE arduino-1.5.8-windows.

Baje el archivo https://github.com/Bouni/Arduino/archive/master.zip

En el IDE arduino me fui a “añadir libreria” y seleccioné el archivo ZIP.

Despues puse que uso Arduino MEGA.

Luego coloqué el código:

// Arduino 9-bit example

int answer;

setup() {
    Serial1.begin(9600, SERIAL_9N1);
}

loop() {
    // send a 9-bit frame on Serial1   
    Serial1.write(0x112);
   
    // wait for an answer
    while(!Serial1.available());

    // read the answer
    answer = Serial1.read();   

    // do what ever you want to do now ;-)

}

Pero me tira un monton de errores de compilacion que adjunto.

Qué estoy haciendo mal?

Gracias a todos!

Y que pasó con el otro IDE que tenías instalado en tu PC? Lo desinstalaste?

por las dudas use otra computadora. alguna sugerencia?

pude al final compilar desde otra particion con ubunutu. es bastante complicado, pero pude.

Estuve viendo la librería y tal vez, digo tal vez instalando solamente estas librerías HardwareSerial.cpp y HardwareSerial.h que incluye el soporte 9Bits resuelvas el problema en el IDE 1.5.8
Debes reemplazar esos dos archivos ubicados en
arduino/hardware/arduino/cores/arduino/
intenta reemplazar estos archivos por los que te adjunto y prueba a ver si funciona en Windows en la PC que hiciste la prueba

HardwareSerial.cpp (9.4 KB)

HardwareSerial.h (5.25 KB)

    Serial1.begin(9600, SERIAL_9N1);

Esto no compila.

Vos decias compilar otro código para enviar 9 bits?

Muchas gracias por tu respuesta!!!

Claudio modificaste los archivos que te indiqué?