Gilbert Sparios Posted May 12, 2022 Share Posted May 12, 2022 (edited) 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 ? Edited May 12, 2022 by Gilbert Sparios Link to comment
Gilbert Sparios Posted May 13, 2022 Author Share Posted May 13, 2022 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 to comment
nico_2010 Posted May 13, 2022 Share Posted May 13, 2022 Ambele variante functioneaza, dar pe Arduino Nano, cu bootloader cu tot! Verifica fusebits. Link to comment
Gilbert Sparios Posted May 13, 2022 Author Share Posted May 13, 2022 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 to comment
Guest Posted May 13, 2022 Share Posted May 13, 2022 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. Link to comment
Gilbert Sparios Posted May 13, 2022 Author Share Posted May 13, 2022 (edited) 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... Edited May 13, 2022 by Gilbert Sparios Link to comment
Gilbert Sparios Posted May 14, 2022 Author Share Posted May 14, 2022 (edited) 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.... Edited May 14, 2022 by Gilbert Sparios Link to comment
Mircea Posted May 14, 2022 Share Posted May 14, 2022 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 to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now