este codigo

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

Tengo 3 soluciones a tus problemas:

1.- Arduino Playground - Consejos

2.- Video Tutorial Arduino: Primeros pasos (Parte 1/2) - YouTube

3.- Video Tutorial Arduino: Primeros pasos (Parte 2/2) - YouTube

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.

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

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.

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.

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

medina:
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.

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.

medina:
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.

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.

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

:frowning:

Este foro no es el unico en el que ocurren estas cosas, atención a esto:

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.

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.

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...

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

Ojú Igor R ... :smiley:

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 ?

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)

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....

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.

Arduino da la oportunidad de iniciarse rápidamente con micro controladores y es de agradecer la gran ayuda que hay en internet, lamentablemente hay dos clases de gente; la que quiere saber cómo funcionan las cosas, gente que quiere aprender y así poder hacer mejor y más avanzados proyectos y los que quieren fardar con sus colegas por que son capaces de encender un led por internet y que solo comprar una placa y copian y pegan código.

Último ejemplo "tengo que realizar un proyecto que os resumo.... " blabablalal..."la teoría es fácil y quizás la práctica pero no se mu bien por donde meterle mano...sugerencias de la interrelación del Arduino con el Pc?¿"
esto suena a tengo una asignatura que tengo que hacer esto, DAMELO HECHO.

Cualquiera que se haya mirado un poco aunque fueran los ejemplos que vienen con el IDE que te manda por puerto serie el estado de los pines, variables dentro de programa etc, se utiliza para casi todo, para depurar programas.

Solución. ----- NO RESPONDER ???

SrDonGato:
Último ejemplo "tengo que realizar un proyecto que os resumo.... " blabablalal..."la teoría es fácil y quizás la práctica pero no se mu bien por donde meterle mano...sugerencias de la interrelación del Arduino con el Pc?¿"
esto suena a tengo una asignatura que tengo que hacer esto, DAMELO HECHO.

Cualquiera que se haya mirado un poco aunque fueran los ejemplos que vienen con el IDE que te manda por puerto serie el estado de los pines, variables dentro de programa etc, se utiliza para casi todo, para depurar programas.

Solución. ----- NO RESPONDER ???

En mi opinión no responder no arregla el problema. He respondido a éste usuario (antes de ver el jorgorio que tenéis aquí montado) con el enlace para que se vaya leyendo lo básico, y ya pues que lo vaya investigando. Está demostrado que si se le dan las cosas hechas nunca van a dejar de pedir y de pedir, en lugar de aprender por uno mismo, que es como debe de ser.

No responder da a los demás usuarios del foro, sensación de foro abandonado, por lo que no soy partidario de dejar los mensajes sin responder.

Yo antes de echar la bronca a alguno, suelo intentar mirar en su perfil que tipo de preguntas hace, suelen ser siempre los mismos los que preguntan cualquier cosa sin poner muy poco de su parte. Suelen llevar un mes a lo sumo registrado y va a salto de mata casi sin mirar los estupendos ejemplos que hay en la web. Medina tiene una larga ristra de post de este estilo.

Sí, lamentablemente es una situación que se da en la mayoría de foros sea cual sea la temática.

Estoy con ionhs, no responder da sensación de abandono de un foro. Soy partidario de, ante "quiero hacer esto, no tengo ni idea de arduino ni de electrónica, por eso me lo tenéis que dar todo hecho", responder con algo genérico e incluso el enlace de las normas. Ante la siguiente respuesta del que solicitó la ayuda ya queda claro si quiere aprender o que le den un trabajo hecho.

Aquí acaba de hablar Cheyenne, que lleva dos días en este foro, pero que sabe de estas situaciones ya que se dan en muchos sitios.