Quiero que dos atmega32s se comuniquen en un rango de 1000 pies, por lo que decidí usar un cable serial para ello. Sé que rs232 no es una buena manera de comunicarse en este amplio rango, por lo que decidí usar RS485, que es un par equilibrado. Para esto quiero usar chips MAX485 como estos.
AhoraescribítodoelcódigoparausarloylohicefuncionarparaunacomunicaciónporcableconunabateríaquealimentamisATmegas(yloschipsMAX485)(nopuedoproducirelcódigoaquí,yaqueesparaunacompañíadondesolosoyuninterno,perocomofuncionaenbreve,elcódigonoeselproblema).Loqueelprogramabásicamentehaceesqueunaatmegaenvía"Paresh" en serie, la otra atmega lo recibe, hace un strcmp si de hecho se recibe como "Paresh" que envía "Mathur". Si la primera atmega recibe "Mathur", nuevamente envía paresh y el ciclo continúa.
Todo esto funciona bien para el modo serial, cable corto y con una batería de 6V. Pero tan pronto como cambio a un cable CAT-5 obtengo pérdida de paquetes. Imprimí lo que se recibe en una pantalla LCD y después de algunos ciclos (y, a veces, incluso durante la primera transferencia) se reciben extrañas cadenas. Los problemas son:
- Funciona para cables cortos, pero no para cables CAT-5 de 30 pies
- Funciona con una batería de 6V pero no con una batería de 12 voltios o un adaptador de 12V.
- Funciona para cables seriales normales de hasta 10 pies, pero no más que eso.
Las cosas que he intentado son:
- Se agregaron capacitores para atenuar cualquier ondulación en el suministro. (470uf caps).
- Mayores retrasos entre el cambio de los modos de transmisión a recepción (_delay_ms (3);).
- se agregaron límites al suministro a los módulos.
- Agregar resistencia de terminal de 120ohm a ambos módulos.
¿Qué debo hacer? Por favor, no sugiera ninguna alternativa a la cosa, me haría daño al pirata informático. ¿Por qué no puedo usar una comunicación RS485 exactamente para el propósito para el que fue diseñada, es decir, la comunicación de larga distancia en serie?
Actualización 1: usé resistencia de terminal de 120ohm. Actualización 2: estoy en una velocidad de transmisión de 9600.