Gilbert Sparios Postat Mai 12, 2022 Partajează Postat Mai 12, 2022 (editat) 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 Mai 12, 2022 de Gilbert Sparios Link spre comentariu
Gilbert Sparios Postat Mai 13, 2022 Autor Partajează Postat Mai 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 spre comentariu
nico_2010 Postat Mai 13, 2022 Partajează Postat Mai 13, 2022 Ambele variante functioneaza, dar pe Arduino Nano, cu bootloader cu tot! Verifica fusebits. Link spre comentariu
Gilbert Sparios Postat Mai 13, 2022 Autor Partajează Postat Mai 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 spre comentariu
Vizitator Postat Mai 13, 2022 Partajează Postat Mai 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 spre comentariu
Gilbert Sparios Postat Mai 13, 2022 Autor Partajează Postat Mai 13, 2022 (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 Mai 13, 2022 de Gilbert Sparios Link spre comentariu
Gilbert Sparios Postat Mai 14, 2022 Autor Partajează Postat Mai 14, 2022 (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 Mai 14, 2022 de Gilbert Sparios Link spre comentariu
Mircea Postat Mai 14, 2022 Partajează Postat Mai 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 spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum