Arduino Forum

International => Español => Hardware => Topic started by: AlexTadeo on May 22, 2016, 07:09 pm

Title: Problema entre Atmega328 y Atmega328p
Post by: AlexTadeo on May 22, 2016, 07:09 pm
Hola estimada comunidad,

Mandé a fabricar una placa con un "arduino uno" + sim900+gps, el fabricante me envío la placa con un Atmega328 con un programa pre-cargado (un test de leds y gps) y funciona bien.

*nota: yo no me había dado cuenta que era Atmega328.

Procedí a cargar mi programa usando un Atmega328p ya con el bootloader y pude observar que tardaba en iniciar, explico esto. Con el micro que me enviaron conecto la alimentación y empieza a funcionar de inmediato, encienden los leds y no hay problema. Con mi Atmega328p tarda en iniciar cuando se alimenta y puede o no reiniciarse o no terminar de encender los leds.

Le pregunté al fabricante y me dijo que el había configurado el micro con los fuse del arduino uno.

La verdad no tengo idea que son los fuse y no sé si el problema también sea que son Atmega328 y Atmega328p.


Muchas gracias por su apoyo.
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: AlexTadeo on May 22, 2016, 07:39 pm
Puede ser que el micro que me enviaron este trabajando con el reloj externo mientras que el que tengo este trabajando con el interno?
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: Lucario448 on May 22, 2016, 11:18 pm
De dónde viene ese 328p?

Si viene de un Arduino Uno, entonces sí está programado para trabajar con un oscilador externo.

Además, que te preocupa de que el otro microcontrolador no lleve la 'p'? Que no le puedas cargar otros programas?
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: AlexTadeo on May 23, 2016, 12:01 am
Si vino de un Arduino UNO R3 y no es que me preocupe, es que su comportamiento no es estable.
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: AlexTadeo on May 23, 2016, 12:12 am
No sé como poder poner un video para que vean como se comporta.
Si no es permitido el linkear un video de dropbox disculpe.

https://www.dropbox.com/s/6hdau2y5pd68jmr/20160522_143729.mp4?dl=0 (https://www.dropbox.com/s/6hdau2y5pd68jmr/20160522_143729.mp4?dl=0)
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: surbyte on May 23, 2016, 12:47 am
Perfectamente linkeado.
bueno como siempre digo, una simple busqueda ahorra tiempo : 
google: atmega328 vs atmega328p
Uno de los mejores enlaces fue este link (http://forum.arduino.cc/index.php?topic=60001.0)
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: AlexTadeo on May 25, 2016, 06:34 am
Bueno, tengo nueva información.

El Atmega328 que vino con la placa fue programada en Atmel Studio y con el avrdude se le puso los fuse del arduino uno, no tiene el bootloader.

puedo pensar que el bootloader es el causante de dicha inestabilidad y retraso al encendido?
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: Lucario448 on May 25, 2016, 06:39 am
puedo pensar que el bootloader es el causante de dicha inestabilidad y retraso al encendido?
Yo no sabría decirte con toda certeza si esa es la causa, pero... por qué no intentar reprogramar el bootloader?
Si tienes otro Arduino, este lo puedes utilizar como programador ICSP, sabías?
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: AlexTadeo on May 25, 2016, 06:41 am
Yo no sabría decirte con toda certeza si esa es la causa, pero... por qué no intentar reprogramar el bootloader?
Si tienes otro Arduino, este lo puedes utilizar como programador ICSP, sabías?
si, de hecho no usaba el atmega328p de mi arduino. Pensando que podría ser que no hubiera quemado correctamente el bootloader utilice el micro que vino con mi arduino, y presentó el mismo problema de inestabilidad.
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: Lucario448 on May 25, 2016, 06:45 am
si, de hecho no usaba el atmega328p de mi arduino. Pensando que podría ser que no hubiera quemado correctamente el bootloader utilice el micro que vino con mi arduino, y presentó el mismo problema de inestabilidad.
Espera... cuál es el del comportamiento anormal? El que tiene la 'p' o no?
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: AlexTadeo on May 25, 2016, 06:51 am
si, tengo dos atmega328p uno que compre aparte y uno me vino con el arduino. Los 2 tienen el mismo comportamiento en la placa.
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: noter on May 25, 2016, 04:00 pm
Bueno, tengo nueva información.

El Atmega328 que vino con la placa fue programada en Atmel Studio y con el avrdude se le puso los fuse del arduino uno, no tiene el bootloader.

puedo pensar que el bootloader es el causante de dicha inestabilidad y retraso al encendido?
Del retraso en el encendido puedes estar seguro que sí. En un hilo reciente y cercano a este puse un comentario del proceso de subida de programa mediante bootloader (http://forum.arduino.cc/index.php?topic=402462.msg2769687#msg2769687). Efectivamente, cuando el arduino tiene bootloader éste se ejecuta inmediatamente al encendido o tras un reset, y antes del programa del usuario. Toma habitualmente un par de segundos, hasta que el bootloader "se da por vencido" de que no queremos enviar programación y transfiere el control al programa de usuario. Los montajes que suelen tener mucho inconveniente con este proceso de arranque suelen ser los que integran relés, dado que en dicho proceso, además, se suele producir el encendido y apagado de éstos. Supongo que ese problema también se verá muy mitigado si quitamos el bootloader.
Lo que no entiendo es a qué te refieres con "inestabilidad", pues una vez pasado el bootloader, el funcionamiento del programa debería ser casi idéntico.
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: AlexTadeo on May 25, 2016, 04:26 pm
Hola noter,

Gracias por responder.

En ocasiones se resetea más de una vez o no termina la "secuencia" de encendido.

https://www.dropbox.com/s/6hdau2y5pd68jmr/20160522_143729.mp4?dl=0 (https://www.dropbox.com/s/6hdau2y5pd68jmr/20160522_143729.mp4?dl=0)

mira este video, el primer micro es el que me mandaron (Atmega328 con fuse de Arduino Uno, sin bootloader) y posteriormente es el Atmega328p del arduino UNO.

Podrá ser que como dices, el bootloader no se "lleva bien" con el relé y ahí esté el problema?
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: noter on May 25, 2016, 04:59 pm
Si lo único que cambia en ambos montajes es el atmega, a buen seguro que gran parte de la culpa sea del bootloader.
Si el inicio más lento y la pequeña inestabilidad durante ese segundo no son un gran obstáculo, seguramente que el programa después debería funcionar correctamente (tal vez haya que hacer algún chequeo adicional).
Si ese segundo de inestabilidad te supone problema importante, y dispones de programador, lo mejor es que quites bootloader. Ganarás, además unos pocos bytes de SRAM y de FLASH.
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: AlexTadeo on May 25, 2016, 05:06 pm
Tengo un Master Prog, se supone que se puede utilizar como pickit2, intentaré usarlo para borrar el bootloader.

En cuanto tenga datos nuevos les hago saber.

Gracias por su apoyo.
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: surbyte on May 25, 2016, 05:46 pm
Pero le diste una lectura al enlace que te puse en inglés? Por lo visto no.
Ni siquiera había que leer mucho, post#3
Quote
The 2 devices have a different signature. I added the 328 to my Arduino and AVRDude files so that makes it easier to burn a bootloader. Once the bootloader is loaded they are interchangeable in the Uno board so the Uno config is sufficient to program them. I have a couple 328's that I have installed the bootloader on. they have all been in my arduino board and also in a wireless breadboard that has a MAX232 for a serial interface. Once the bootloader is loaded they all function the same with the ArduinoIDE.

Functionally I think the only real difference is in low power operation.
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: AlexTadeo on May 25, 2016, 05:55 pm
Hola Surbyet,

Pero le diste una lectura al enlace que te puse en inglés? Por lo visto no.
Ni siquiera había que leer mucho, post#3
Si lo leí, pero ahí dice que él agregó el 328 a su arduino y le puso bootloader. Pero yo comparando entre el 328 que no tiene bootloader y el 328p que si tiene, pude apreciar que si hay mucha diferencia.

Ahora también contemplo lo que comentó noter sobre el problema con los relé.
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: surbyte on May 25, 2016, 06:09 pm
Pero no entendiste el sentido de las cosas.

Quote
I added the 328 to my Arduino and AVRDude files so that makes it easier to burn a bootloader. 
Once the bootloader is loaded they are interchangeable in the Uno board so the Uno config is sufficient to program them
Una vez que le grabo el bootloader, resultaron intercambeables. hay uno de los tuyos que no lo tiene, entonces claras diferencias existirán.
Es lo mismo que te dice Noter.
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: AlexTadeo on May 25, 2016, 06:31 pm
Perdón por no captar tan rápido.

Me sugieres que me mantengan con el bootloader para seguir programando con el arduino por su facilidad de programación?

Pido paciencia :(
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: surbyte on May 25, 2016, 06:45 pm
Te sugiero que como dice ese post y como refrenda Noter, le quemes el bootloader a ese 328 que se comporta erráticamente. Iguala las situaciones y luego entonces compara.
Lleva siempre las cosas al mismo plano de comparación!
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: AlexTadeo on May 25, 2016, 06:46 pm
Los 328p son los de comportamiento extraño.
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: surbyte on May 25, 2016, 07:15 pm
yo hablo de 328 en general. sea con o sin p.
Solo hay una diferencia de consumo y de la firma para programarlos, luego son casi iguales tal como concluye el hilo en inglés.
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: AlexTadeo on May 25, 2016, 07:21 pm
ok, procederé a conseguir un 328 y trabajaré con el. No quiero modificar el que llegó con la placa.

Gracias por la ayuda compañero.
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: surbyte on May 25, 2016, 07:38 pm
No entiendo algo.
Cual es la razón por la que no trabajas con el 328p? Para que insistir con el 328?
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: AlexTadeo on May 25, 2016, 07:43 pm
Porque cuando lo programa y lo pongo en la placa no siempre trabaja de forma "estable", se resetea varias veces, a veces si trabaja bien, a veces no termina lo que se le indica.

Este es el código que me mandaron.

Code: [Select]
int ledGps = 9;
int ledGsm = 10;
int ledSms = 11;
int relevador = 8;

void setup()
{
pinMode(ledGps, OUTPUT); digitalWrite(ledGps, LOW);
pinMode(ledGsm, OUTPUT); digitalWrite(ledGsm, LOW);
pinMode(ledSms, OUTPUT); digitalWrite(ledSms, LOW);
pinMode(relevador, OUTPUT); digitalWrite(relevador, LOW);

//Diagnostico
digitalWrite(ledGps, HIGH); delay(250); digitalWrite(ledGps, LOW);
digitalWrite(ledGsm, HIGH); delay(250); digitalWrite(ledGsm, LOW);
digitalWrite(ledSms, HIGH); delay(250); digitalWrite(ledSms, LOW);

digitalWrite(relevador, HIGH); delay(500); digitalWrite(relevador, LOW); delay(500);
digitalWrite(relevador, HIGH); delay(500); digitalWrite(relevador, LOW); delay(500);
digitalWrite(relevador, HIGH); delay(500); digitalWrite(relevador, LOW); delay(500);

}//end void setup

void loop()
{

}//end loop

Title: Re: Problema entre Atmega328 y Atmega328p
Post by: surbyte on May 25, 2016, 07:55 pm
Bueno veo que parece que YO estoy interpretando todo al revés.
Tu 328P sacado de un UNO, tiene bootloader y es el que demora y se comporta inestable. Probaste con otro más e igual resultado.
El 328 que vino con la placa, funciona rápidamente  no lo tiene y funciona rápidamente. 
Es asi?

Porque no pegas si puedes el esquema electrónico de la placa a ver si detecto algo raro.
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: AlexTadeo on May 25, 2016, 08:00 pm
Así es Surbyte,

no me dieron un esquema detallado.

(http://i66.tinypic.com/25kr443.jpg)

Aprecio mucho tu apoyo! gracias!
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: surbyte on May 25, 2016, 08:09 pm
Las imágenes se suben usando el tag de imagen y sitios como www.tinypic.com (http://www.tinypic.com)
Si no sabes como, lee las normas para hacerlo correctamente.

No Veo como poder darte alguna sugerencia, sin mas datos. La hoja de datos del 328 no dice mucho.

Title: Re: Problema entre Atmega328 y Atmega328p
Post by: noter on May 25, 2016, 08:16 pm
Veo que se me han adelantado y que mi post es muy similar, pero así refrendo lo dicho por surbyte, y además ya lo tenía escrito  :smiley-razz:  :smiley-razz:  :smiley-razz:
Lo que no termino de apreciar en el vídeo es que en el atmega con bootloader se reinicie. Lo único que veo es que con un atmega comienza inmediatamente el encendido secuencial de los tres led. Luego vienen tres encendidos/apagados de un relevador, pero no aprecio en el vídeo la consecuencia. En el otro atmega sólo aprecio que el inicio de secuencia es más tardío, lo que es normal, puesto que el bootloader se ejecuta durante ese segundillo. Luego veo la secuencia exactamente igual, y no aprecio en ningún momento que se reinicie.
Si a lo que te refieres es a que el relevador antes de iniciar la secuencia no está en su sitio, también es normal (es a lo que hacía referencia anteriormente). Lo importante es que una vez se inicia la secuencia el comportamiento ya sea el mismo. Luego, si esa indefinición de las entradas/salidas durante el segundo de bootloader resulta un perjuicio importante, podrás optar por programar directamente, aunque yo eso lo dejaría para fase final.
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: AlexTadeo on May 25, 2016, 08:19 pm
Grabaré otro en cuanto tenga oportunidad, en el video se escucha como el relé en vez de accionarse 3 veces se acciona 1.

También pasa q se activa 1 vez el relé y empieza otra vez todo el codigo desde los leds. (lo puede hacer varias veces)
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: surbyte on May 25, 2016, 08:26 pm
yo veo que los accionamientos son muy veloces.
250 mseg muy rápido
500 mseg me gusta mas.

NOTA: gracias por corregir lo de la imágen. 
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: noter on May 25, 2016, 10:28 pm
Lo que hay que evaluar es si realmente hay alguna diferencia desde el momento en que inicia la secuencia (setup), porque hasta ese punto, el estado de todos los pines es indefinido, y por tanto tanto el relé como los led pueden tener parpadeos aleatorios. Descartando el segundo aproximadamente de divagaciones del bootloader, si una vez que inicia el setup encendido/apagado de los tres led consecutivos, el comportamiento del relé es distinto, o se produce algún reseteo, supongo que habría que achacarlo al hardware; pero lo veo poco probable.
Title: Re: Problema entre Atmega328 y Atmega328p
Post by: surbyte on May 26, 2016, 06:07 am
Prueba este código con ambos y nos cuentas.

Code: [Select]
int ledGps = 9;
int ledGsm = 10;
int ledSms = 11;
int relevador = 8;

void setup() {
Serial.begin(9600);
Serial.println("Iniciando el diagnóstico.");
Serial.println("Configuro salidas y apago reles.");

pinMode(ledGps, OUTPUT);
pinMode(ledGsm, OUTPUT);
pinMode(ledSms, OUTPUT);
pinMode(relevador, OUTPUT);

digitalWrite(ledGps, LOW);
digitalWrite(ledGsm, LOW);
digitalWrite(ledSms, LOW);
digitalWrite(relevador, LOW);

Serial.println("Iniciando el diagnóstico.")
}//end void setup

void loop() {
//Diagnostico
Serial.println("Prueba de LEDs y rele a 250 mseg");
Serial.println("4 veces LEDGps a 250mseg");
for (byte i=0; i<4; i++) {
Serial.print("Prueba : ")
Serial.prinln(i);
digitalWrite(ledGps, HIGH);
delay(250);
digitalWrite(ledGps, LOW);
delay(250);
}

Serial.println("4 veces LEDGsm a 250mseg");
for (byte i=0; i<4; i++) {
Serial.print("Prueba : ")
Serial.prinln(i);
digitalWrite(ledGsm, HIGH);
delay(250);
digitalWrite(ledGsm, LOW);
delay(250);
}

Serial.println("4 veces LEDSms a 250mseg");
for (byte i=0; i<4; i++) {
Serial.print("Prueba : ")
Serial.prinln(i);
digitalWrite(ledSms, HIGH);
delay(250);
digitalWrite(ledSms, LOW);
delay(250);
}

Serial.println("8 veces relevador a 500 mseg");
for (byte i=0; i<8; i++) {
Serial.print("Prueba : ")
Serial.prinln(i);
digitalWrite(relevador, HIGH);
delay(500);
digitalWrite(relevador, LOW);
delay(500);
}
}//end loop


Nada prohibe que usemos el puerto serie para ver que pasa.
Tampoco que sea o no repetitivo usando las rutinas en el loop indefinidamente.