Go Down

Topic: Problema con delayMicroseconds() en Arduino0022 (Read 3 times) previous topic - next topic

anv

Jan 28, 2011, 05:56 pm Last Edit: Apr 30, 2012, 05:05 am by coleoptero Reason: 1
Tengo un programa que maneja un display.. Dentro de las rutinas se utiliza delayMilliseconds. Resulta que pasé de Arduino0018 a Arduino0022 y el programa ya no funciona bien.

Descubrí que delayMilliseconds parece no funcionar. No importa el valor que ponga el programa no funciona. Si lo reemplazo por delay(1) sí funciona así que el problema evidentemente está ahí. ¿Alguna idea de lo que ha pasado? ¿Es un bug?


Alcafuz

Hola,

delay(1) significa una espera de un milisegundo, la instrucción delay(x) te entrega una pausa de '(x)' milisegundos.
delayMicroseconds(1) significa una espera de un microsegundo, delayMicroseconds(x) te entrega una pausa de '(x)' microsegundos.

http://arduino.cc/en/Reference/Delay

espero te sirva, saludos!

anv


delay(1) significa una espera de un milisegundo, la instrucción delay(x) te entrega una pausa de '(x)' milisegundos.
delayMicroseconds(1) significa una espera de un microsegundo, delayMicroseconds(x) te entrega una pausa de '(x)' microsegundos.


Tal vez no me expresé bien. Se lo que hace delay y delayMicroseconds. Tengo un programa que funcionaba perfectamente. Cuando lo compilé con la version 0022 dejó de funcionar. Probé volver a 0018 y funcionó bien de nuevo. Investigando descubrí que el problema estaba en los retardos. Al parecer la funcion delayMicroseconds de la 0022 no funciona. Como prueba, cambié delaymicroseconds por delay sabiendo que hace retardos muchísimo más largos pero sólo para probar que el problema era esa funcion. Por más que aumente el número de microsegundos en delayMicrosecods el programa no funciona, lo cual me hace sospechar que directamente no hace ningún retardo o algo así.

Alcafuz

OK, ahora te entiendo bien.

Pero tu sketch compila bien? y luego no funciona en la placa?

Solo habia escuchado de algunos problemas de compatibilidad de codigos hechos en versiones antiguas del software arduino, a mi no me ha ocurrido.

Quizás si pones tu código te puedo ayudar en algo.

Saludos.

anv


OK, ahora te entiendo bien.

Pero tu sketch compila bien? y luego no funciona en la placa?

Solo habia escuchado de algunos problemas de compatibilidad de codigos hechos en versiones antiguas del software arduino, a mi no me ha ocurrido.

Quizás si pones tu código te puedo ayudar en algo.


Sí, el programa compila correctamente y funciona todo. Lo que pasa es que no hace los retardos correctamente y falla la comunicación con el display serie.

El programa que me da problemas es la biblioteca que maneja este display: http://www.yerobot.com/arduino-lcd-shield.html y el software se descarga de: http://www.yerobot.com/products/manual/LCD4Bit_mod.zip

En particular la parte donde falla es esta:

void lcdanv::pulseEnablePin(){
  digitalWrite(Enable,LOW);
  delayMicroseconds(1);
  // send a pulse to enable
  digitalWrite(Enable,HIGH);
  delayMicroseconds(1);
  digitalWrite(Enable,LOW);
  delay(1);  // pause 1 ms.  TODO: what delay, if any, is necessary here?
}

Las instrucciones DelayMicroseconds no hacen lo que deben hacer. Intenté subir el tiempo y siguen sin hacer efecto. Si las reemplazo por un delay normal funciona, pero los tiempos son altísimos y el programa se vuelve muy lento.

Go Up