Sari la conținut
ELFORUM - Forumul electronistilor

Arduino PRO-MINI problema WD


Postări Recomandate

14534474280_2.thumb.jpg.d70bdca4357dc18e150de912580aff71.jpg

 

Cu unele pro-mini am experimentat mereu aceasi tip de eroare.

De data asta am incercat sa ma conving ce anume problema au.

 

uC este Atmega328P-AU exact ca cele cumparate de pe TME (cu care nu am avut vreodata asa problema) aparent marcate.

Practic se blocheaza daca WD reseteaza uC.

 

De exemplu acest cod

#include <avr/wdt.h>

#define LEDpin	13

void setup() {
	pinMode(LEDpin, OUTPUT);
  	for (byte i=0;i<10;i++) { // puls rapid pentru verificare reset cu WD
    		digitalWrite(LEDpin, !digitalRead(LEDpin));
		delay(100UL);         
        }
	wdt_enable (WDTO_4S);
}
  
  void loop() {
	wdt_reset ();
	digitalWrite(LEDpin, !digitalRead(LEDpin));
	delay(500UL);
                            
	if (millis()>5000UL) while(1) {delay(1);} // fortare resetare
  }

 

 

Am luat uC de pe placa si l-am pus pe o placa de ISP, cu cristal de 16MHz si verificata tot timpul. Aceasi problema. Initial credeam ca cristalul sau altceva de pe placuta pro-mini, are ceva dar..

 

Cu bootloader de UNO optiboot...

De problema asta se stie pe internet, dar spun ei ca se rezolva cu scrierea de bootloader de UNO insa mie nu mi-a rezolvat problema.

Sa fie vorba de uC clone proaste sau...ce pot face ?

 

Editat de Gilbert Sparios
Link spre comentariu
Distribuie pe alte site-uri

Update:

Cu acest cod merge:

#include <avr/wdt.h>

#define LEDpin	13

void setup() {
  	wdt_enable (WDTO_4S);
  
	pinMode(LEDpin, OUTPUT);  
  	for (byte i=0;i<10;i++) { // puls rapid pentru verificare reset cu WD
    		digitalWrite(LEDpin, !digitalRead(LEDpin));
		delay(100UL);         
        }
	/*wdt_enable (WDTO_4S); // THIS LINE MOVE ON TOP setup()*/ 
}
  
  void loop() {
	wdt_reset ();
	digitalWrite(LEDpin, !digitalRead(LEDpin));
	delay(500UL);
                            
	if (millis()>5000UL) while(1) {delay(1);} // fortare resetare
  }

 

Adica cum asa si de ce ? 

Link spre comentariu
Distribuie pe alte site-uri

o sa verific.. dar din câte retin am încercat si nano si ce am mai avut 328 pe acolo.. 

 

Dar ce nu înțeleg.. care ar fi Diferența, pentru ca cip-urilede pe plăcile astea sunt marcate 1:1 cu cele care merg , daca le-as amesteca nu mai faci diferența.. 

 

cred ca dacă doar scrie... altfel nu îmi explic.. 

Link spre comentariu
Distribuie pe alte site-uri

Postat (editat)
Acum 3 ore, Liviu.Mihaiu a spus:

In prima versiune ,cu wdt_enable la sfarsit de setup(), daca pui wdt_reset() la intrarea in setup() merge ok ?
Daca merge asa, foarte posibil sa fie din bootloader.
Adica sa nu reseteze WDT si tot faca restart la repornire.
 

 

nu. doar cu wdt_enable la început de setup(). eu as fi vrut sa știu de ce doar uC-urile care vin pe pro-mini au problema asta. același uC cumpărat nu are probleme. uC este Atmega 328P smd-uri. 

 

am încercat cu bootloader de Arduino Nano, același rezultat..

 

Pentru mine încă rămâne un mister...

Editat de Gilbert Sparios
Link spre comentariu
Distribuie pe alte site-uri

Postat (editat)

Revin...cu un update important la acest topic. Din fericire, era vina mea.

Eu credeam ca daca scriu bootloaderul, se scrie undeva de la o adresa la o adresa fara sa interfereze cu un program scris.

Si atunci faceam o scriere de bootloader, apoi o scriere de soft prin "Scrie prin programator". 

 

Practic, se stergea bootloader-ul, si de acolo blocajul. Nici macar daca scrii prin programator in Arduino IDE nu s-au gandit sa scrie si bootloader-ul cu softul curent. La versiunea mai noua de Arduino IDE, poti salva HEX cu bootloader inclus dar de scris nu ai o optiune. Ma rog, se poate cu avrdude dar...

 

Revenind..am trait tot timpul cu ideea ca bootloader-ul cand il scrie Arduino IDE il scrie de la pana la adresa. De fapt, nu.

 

Totusi. Mai ramane un mister... De ce cu wdt_enable() la inceputul setup-ului mergea chiar si fara bootloader....

Editat de Gilbert Sparios
Link spre comentariu
Distribuie pe alte site-uri

Nu stiu cum e Arduino IDE, dar dupa ce ai incarcat bootloader-ul si te pregatesti sa scrii programul principal, nu-ti zice cata memorie a mai ramas disponibila? Daca iti zice ca toata memoria e disponibila, atunci il cam doare in cot de ce este deja scris si scrie de la inceput, deci si peste bootloader. Ceea ce ai remarcat si tu.

 

Totusi, altii care incarca un bootloader si apoi scriu programul, nu au vreun control care sa le zica "daca scriru de la adresa xx, atunci suprascriu pe ceva deja existent, vrei sa continui"?

 

Despre WDT, activarea (enable) se pune la inceputul buclei principale. Asta ca sa stii daca se blocheaza in prima instanta de rulare a buclei. Dupa ce o instanta a rulat complet - fara sa se blocheze, nu mai conteaza ca e activat la sfarsit.

Link spre comentariu
Distribuie pe alte site-uri

Alătură-te conversației

Poți posta acum și să te înregistrezi mai târziu. Dacă ai un cont, autentifică-te acum pentru a posta cu contul tău.
Notă: Postarea ta va necesita aprobare moderator înainte de a fi vizibilă.

Vizitator
Răspunde la acest subiect...

×   Alipit ca text avansat.   Alipește ca text simplu

  Doar 75 emoji sunt permise.

×   Linkul tău a fost încorporat automat.   Afișează ca link în schimb

×   Conținutul tău precedent a fost resetat.   Curăță editor

×   Nu poți lipi imagini direct. Încarcă sau inserează imagini din URL.

×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări