Go Down

Topic: este codigo (Read 2744 times) previous topic - next topic

medina

desde que un compañero me dijo que implantase este codigo  el lcd esta loco con digitos raros y cuadriculas blanca
//Funciones para escribir en un lcd.
//8 bits de bus de datos.

#include <avr/io.h>

#define F_CPU 16000000UL
#include <util/delay.h>

#define Bus_Datos PORTA
#define Bus_Control PORTD
#define RS  PORTD0                 //Todos deben de pertenecer al mismo puerto
#define RW  PORTD1
#define E   PORTD2

//Comandos para situar el cursor en inicio de líneas.
#define DDRA_LINEA1 0x80    //1000 0000
#define DDRA_LINEA2 0xC0    //1100 0000
#define DDRA_LINEA3 0x94    //1001 0100
#define DDRA_LINEA4 0xD4    //1101 0100


void inicializar();

//Funciones para escribir en el LCD
void lcd_inicializar();
void lcd_escribir_c(unsigned char caracter);
void lcd_escribir(unsigned char *cadena);
void posicionar_cursor(unsigned char x, unsigned char y);
void lcd_comando(unsigned char comando);



int main(void)
{
   inicializar();
   lcd_inicializar();

   unsigned char linea1[]="   www.jmnlab.com";  //Poner en la Flash de programa las cadenas.
   unsigned char linea2[]=" Proyecto Hexapodo";
   unsigned char linea3[]=" Prueba de LCD 4x20";

   
   lcd_escribir(linea2);         //Escribo una cadena, empieza en línea 1, carácter 1.
   posicionar_cursor(2,1);   //Línea 2, primer carácter.
   lcd_escribir(linea1);
   posicionar_cursor(3,1);
   lcd_escribir(linea3);
   posicionar_cursor(4,5);
   lcd_escribir_c('A');        //Escribir los caracteres uno a uno, comprobación de su función correspondiente.
   lcd_escribir_c('r');
   lcd_escribir_c('d');
   lcd_escribir_c('u');
   lcd_escribir_c('i');
   lcd_escribir_c('n');
   lcd_escribir_c('o');
   lcd_escribir_c(' ');
   lcd_escribir_c('M');
   lcd_escribir_c('e');
   lcd_escribir_c('g');
   lcd_escribir_c('a');

   while(1)
   {
   }
}

inicializar()              //Configurar hardware del pic.
{
  DDRA=0xFF;     //1111 1111
  PORTA=0x00;    
  DDRD=0x07;     //0000 0111
  PORTD=0x00;    
}

void lcd_inicializar() //Se mandan los comandos de configuración según el dibujo.
{
   _delay_ms(100);
                       
   lcd_comando(0x3C);    //Function Set RS0 RW0 0011NF** 0011 1100
   lcd_comando(0x3C);    //Function Set
   lcd_comando(0x0C);    //Display ON/OFF Control RS0 RW0 00001DCB 0000 1100
   lcd_comando(0x01);    //Display Clear RS0 RW0 00000001
   lcd_comando(0x06);    //Entry Mode Set RS0 RW0 000001I/DS 0000 0110
}

void lcd_escribir_c(unsigned char caracter)
{
   Bus_Control |= (1<<RS);        //RS1    Dato
   Bus_Control &= ~(1<<RW);  //RS0
   Bus_Datos = caracter;        
   Bus_Control |= (1<<E);
   _delay_us(100);
   Bus_Control &= ~(1<<E);
   _delay_ms(10);
}

void lcd_comando(unsigned char comando)
{
   Bus_Control &= ~(1<<RS);    //RS0   Comando
   Bus_Control &= ~(1<<RW);   //RW0
   Bus_Datos  = comando;           //Comando
   Bus_Control |= (1<<E);
   _delay_us(100);
   Bus_Control &= ~(1<<E);
   _delay_ms(10);
}

void lcd_escribir(unsigned char *cadena)
{
   unsigned char *inicio = cadena;
   char i=0;

   for(i=0;((inicio!='\0')&&(i<20));i++)
   {
       Bus_Control |= (1<<RS);    //RS0 RW0 caracter
       Bus_Control &= ~(1<<RW);
       Bus_Datos  = inicio;        
       Bus_Control |= (1<<E);
       _delay_us(100);
       Bus_Control &= ~(1<<E);
       _delay_ms(3);
   }
}

void posicionar_cursor(unsigned char x, unsigned char y) //línea x 1 a 4, carácter y de 1 a 20.
{                                                                                                
   unsigned char comando=DDRA_LINEA1;
   switch(x)
   {
       case 1:
       {
           comando=DDRA_LINEA1+y-1;
       }break;
       case 2:
       {
           comando=DDRA_LINEA2+y-1;
       }break;
       case 3:
       {
           comando=DDRA_LINEA3+y-1;
       }break;
       case 4:
       {
           comando=DDRA_LINEA4+y-1;
       }break;
       default:break;
   }
       lcd_comando(comando);
}

que ocurrio y solucion resetee y nada

Heke

Tengo 3 soluciones a tus problemas:

   1.- http://arduino.cc/playground/Es/Consejos

   2.- http://www.youtube.com/watch?v=qhy5UtIzZfo&feature=player_embedded

   3.- http://www.youtube.com/watch?v=-KXBZZO6IgQ&feature=player_embedded

Luego queda una que es un poco mas drastica, pero te la comento por si con las otras 3 no funciona.
Para que arduino funcione con el codigo que has puesto:

     - Alimenta el arduino con una pila de 9v.
     - eleva el conjunto  arduino - Lcd unos centimetros de cualquier base o mesa
     - con el conjunto en las manos, gira 360 grados en el sentido de las agujas del reloj
     - Miestras giras, lo mas importante: debes de repetir 15 mississipis

Me explico, das vuelta y dices en voz alta y clara: " UN MISSISSIPI " , otra vuelta y vuelves a decir "DOS MISSISSIPIS" y asi... vamos...
no es facil, yo recomiendo las tres anteriores.

Un saludo.
   
 
CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

medina

la verdad heke es que con las tres 1ª nada de nada y con esta ultima despues del ultimo missisipi  parece que se arreglo gracias

Heke

POR DIOS !!  LA VIRGEN !! Y SAN JOSE ARTESANO!!

MEDINA!!

Pero es que no ves que eso es codigo de microcontrolador PIC, totalmente incompatible !!

Es como querer meterle un "botijo" al arduino y preguntar por que no funciona con el botijo!!

Botijo: 

Si aun no tienes claro eso, dudo mucho que te hayas puesto con las tres primeras respuestas.
CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

medina


POR DIOS !!  LA VIRGEN !! Y SAN JOSE ARTESANO!!

MEDINA!!

Pero es que no ves que eso es codigo de microcontrolador PIC, totalmente incompatible !!

Es como querer meterle un "botijo" al arduino y preguntar por que no funciona con el botijo!!

Botijo: 

Si aun no tienes claro eso, dudo mucho que te hayas puesto con las tres primeras respuestas.


hombre el echo de de que sea un codigo pic ,te agradezco la respuesta, para que sirve aun no lo se ni siquiera ,el simple echo de exponer un pequeño problema y me salgas con ejemplos didacticos de aprendizaje .......tambien ,pero estos los sabia hace tiempo en fin ..............solucionado

Sergegsx




hombre el echo de de que sea un codigo pic ,te agradezco la respuesta, para que sirve aun no lo se ni siquiera ,el simple echo de exponer un pequeño problema y me salgas con ejemplos didacticos de aprendizaje .......tambien ,pero estos los sabia hace tiempo en fin ..............solucionado


COMO????

Si la gente te ayuda, y no te molestas en indicar como solucionaste el problema, este post no sirve para el futuro.
Por favor, expón como has solucionado el problema, así si alguien abre tu post con la misma duda tendrá la respuesta que busca.

curro92

Hola medina,
no lo tomes muy en serio, es el caxondeo del verano, con el nuevo curso el foro volverá a ponerse más serio...
Para saber si un código es de Arduino yo suelo mirar si está la función loop(), que es la principal. Si, en cambio,  encuentras la función main() en el código, eso es código C, pero no de Arduino.

Heke


hombre el echo de de que sea un codigo pic ,te agradezco la respuesta, para que sirve aun no lo se ni siquiera ,el simple echo de exponer un pequeño problema y me salgas con ejemplos didacticos de aprendizaje .......tambien ,pero estos los sabia hace tiempo en fin ..............solucionado


Bueno... me voy a poner serio.
1.- "hombre el echo de de que sea un codigo pic ,te agradezco la respuesta,"

Si hubieras mirado lo mas basico de arduino te habrias dado cuenta que ni esas instrucciones son de arduino, ni la estructura BASICA de un funcion en arduino es esa, como bien te ha indicado Curro92, por eso el mandarte a lo basico de arduino que, por lo que veo, dices que ya sabes y me doy cuenta que no... te dejo... tu sabras lo que tienes que hacer.

2.-"para que sirve aun no lo se ni siquiera"
Hombre, pues eso es lo mejor, te encuentras un codigo por ahi, que no sabes ni para que vale, lo quieres meter en el arduino y lo primero lo sueltas en el foro para que te ayuden, ¿Porque no pruebas a meterle un programa en visual cobol? si ves que no va, no te preocupes, pregunta aqui el ¿porque?

3.-"el simple echo de exponer un pequeño problema y me salgas con ejemplos didacticos de aprendizaje"
Pues es justo la solucion a tus problemas, que por lo que veo, (esto es sensacion con respecto a tus preguntas) no tienes ni idea de lo basico de un arduino, ni lo que es ni de como se usa, porque si no seria ilogico preguntar estas cosas, por lo tanto, mi forma de ayudarte es remitirte a los conocimientos basicos que son los que te faltan, a mi entender... puedo estar equivocado... pero es lo que parece.

4.- "tambien ,pero estos los sabia hace tiempo en fin ..............solucionado"
Bueno, pues si los sabias hace tiempo, no comprendo como puedes tener esa duda, algo falla, o no lo sabes o simplemente es que te gusta postear cualquier ocurrencia.

5.- Por ultimo, vuelvo a aconsejarte las formas de uso en los foros porque veo que te dan igual, el moderador ha puesto un post en el que te da una idea de "Como hay que preguntar" "donde encontrar informacion basica"  en fin... todas las normas minimo-decentes cuando visitas un foro.

Yo por mi parte concluyo.

Como veo que mis consejos caen en "saco roto"  permiteme que pase...

Un saludo.
CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

ionhs

Medina llueve sobre mojado, tienes que currartelo un poco más y que menos que dar las gracias Heke por echarte una mano. Que tu querías que alguien hiciera la traducción de tu código a arduino? Igual encuentras a alguien que esté aburrido pero si no das pasos tu es difícil que alguien los de por ti. Enseñamos a pescar no regalamos peces.


Igor R

#9
Sep 06, 2011, 10:47 am Last Edit: Sep 06, 2011, 10:50 am by Igor R Reason: 1
Habría que crear también un manual de como contestar....

:(

Sergegsx

Este foro no es el unico en el que ocurren estas cosas, atención a esto:
http://arduino.cc/forum/index.php?topic=71468.new%3btopicseen#new
Quote

Hi. I just got my Arduino in the mail today, but I have little ideas on how to program it nor do I have much interest in programming languages
....
Could anyone help me out with this? I know it's a little cowardly to just ask for the whole programming code without figuring it out myself, but I am really more into the electronics that are outside the MCU smiley-sad


las reacciones por parte de la gente me recuerdan a lo visto en el foro Español por lo que parece no ser tan raro.

A mi lo que mas me revienta es que se le ayude a alguien y luego diga, "vale solucionado" y no exponga como lo ha hecho. Por mi parte eso es igual a reírte de la gente y aunque yo no soy ningún experto en Arduino, a partir de ese momento a ese usuario ya no contesto.

SrDonGato


Medina llueve sobre mojado, tienes que currartelo un poco más y que menos que dar las gracias Heke por echarte una mano. Que tu querías que alguien hiciera la traducción de tu código a arduino? Igual encuentras a alguien que esté aburrido pero si no das pasos tu es difícil que alguien los de por ti. Enseñamos a pescar no regalamos peces.



Quote
Habría que crear también un manual de como contestar....


Has resumido lo que muchos pensamos, que estamos para echar una mano, no para hacer el trabajo por los demás, para perder el tiempo nosotros que lo pierdan otros, total muchas cosas es de preguntar a google ¡ la gente entra aqui a preguntar y a que les contesten con pelos y señales de cómo tienen que hacer las cosas.
Señores ... eso tampoco es...


Quote
Habría que crear también un manual de como contestar....
Ojú Igor R ... :D

y como en un reciente post que se critica de no responder con pelos y señales porque eso no ayuda. Vamos que no, que ninguno hemos nacido enseñados pero por parte de los nuevo pienso que se lo tienen que currar un poco más. ( total es estudiar un poco y buscar en google, como todos)

cada vez veo mas casos del tipo "Soy carpintero y me he comprado un arduino para hacer un cohete", no se han molestado ni en leerse los manuales ni como programar, ni estructuras básicas, ni leerse la referencia, ni como funciona un diodo, para que valen las resistencias ni nada.

Como hay que responder a estas personas ?





Igor R

No contestando?? No hay obligacion....
Hay que tener cuidado cuando se escribe, ya que no estas en la mismo contexto que la otra persona y es muy facil malinterpretar.... Mi opinion, en los ultimos meses hay demasiada tension en la mayoria de las respuestas... Particularmente, a mi no me gusta.... Y si alguien tiene demasiado nivel tecnico para este foro, puede ir a avr freaks o muchos otros...

(no tengo ni acentos ni enyes)

SrDonGato

No es que haya demasiado nivel en arduino, es que no hay un mínimo interés en aprender, es el dámelo hecho.

quizás sea la mejor solución . pasar de responder....

aero_yo

Hay dos mentalidades:
-Arduino mola porque te da la oportunidad de aprender un monton al haber una cantidad ingente de informacion(blogs,foros,tutoriales a miles, codigo comentado, etc).

-Arduino mola porque hay tanto material por ahi que solo hay que hacer corta-pega para que rule.


Yo llevo un año enredando y no soy nimgun guru, pero recomiendo pegarse con el blink y el knob antes de pasar al cuadruocptero. Sumar antes de multlipicar vamos. Pero con Arduino y con todo.

Go Up