16.1.12

Modulo Serial con ATMEGA (arduino)

Como ya es conocido, existe un modulo que convierte las entradas paralelas del LCD en una conexión serial, la cual mediante un microcontrolador, recibe por el puerto serial los datos a mostrar en la pantalla y los convierte en paralelo. Este Modulo, que es desarrollado por SparkFun, cuesta alrededor de $14.000, por lo que sumado al costo del display LCD es muy caro.
Es por esto, que desarrollaremos un modulo similar con un Integrado ATMEGA que tenia con el bootloader de arduino, y diseñe un programa que mediante los mismos comandos del modulo de SparkFun pueda realizar la misma función.
Para esto se ocupa un Arduino, un cristal de 16KMHz, dos condensadores de 22pF, un ATMEGA168, y un display LCD mas una placa virgen.

 El diseño de la placa por debajo. se aprecia el ATMEGA y los pines de conexión del LCD

Con un Arduino se Programa el chip y luego se coloca en la placa diseñada, para esto hay que retirar el ATMEGA del Arduino que utilizaremos como programador.

 Con mucho cuidado de no doblar los pines.

 Se inserta en la placa, y se sueldan los componentes, el cristal los condensadores y el potenciometro de contraste.

El modulo serial montado en la pantalla LCD

 Se Programa otro arduino y se envía mediante serial al otro y este lo publica en la pantalla

Si interesa el código colocar un comentario y será publicado.

3 comentarios:

  1. Me interesa el código de programación serial, como fue que lo lograste por I2C o cómo?

    ResponderEliminar
  2. se carga como un programa normal al arduino.. luego se retira el chip y se inserta en la placa creada. Por el pin Rx se reciben los datos serial y estos se muestran en pantalla

    Este el programa que se debe cargar en el arduino

    #include
    LiquidCrystal lcd(2, 4, 5, 6, 7, 8);

    int a;

    void setup() {
    Serial.begin(9600);
    lcd.begin(16, 2);
    lcd.clear();
    }

    void loop() {
    if (Serial.available()) {
    delay(50);
    while (Serial.available() > 0) {
    a=Serial.read();
    switch(a){
    case 0x01 :
    lcd.clear();
    break;
    case 0xFE:
    a=Serial.read();
    if (a>=128 && a<144) lcd.setCursor(a-128,0);
    if (a>=144 && a<160) lcd.setCursor(a-144,1);
    break;
    default:
    lcd.write(a);
    }
    }
    }
    }

    si se envia un 0x01 por serial el LCD se borra
    si se envia un 0xFE seguido de la posicion se posiciona el cursor para escribir
    cualquiero otro dato se imprime directamante en el LCD
    se pued agregar tras opciones agregando cases en el switch(a)

    espero te sirva y puedo enviarte ejemplos si dejas tu correo

    ResponderEliminar
  3. Me gustaria que puedieras mandarme algunos ejemplos.

    zuca_cruz@hotmail.com

    ResponderEliminar