zvonacfirst Postat Februarie 13 Partajează Postat Februarie 13 (editat) Intervin si eu, sper ca nu este cu suparare. Cum setezi fusebits cand folosesti Arduino IDE pentru a uploada un sketch pe Arduino UNO, asa cum a facut @nico_2010? Si la NANO este aceeasi intrebare. Daca setezi din Tools tipul de placa si ceasul, nu inseamna ca si la fusebits se intampla ceva? Daca folosim softuri de genul AVRDUDESS si programator USBASP este adevarat ca putem citi si scrie fusebits, dar cu Arduino IDE nu imi dau seama cum poate fi facut acest lucru. Editat Februarie 13 de zvonacfirst Link spre comentariu
fratello Postat Februarie 13 Autor Partajează Postat Februarie 13 @Nico : Desi in monitor temperatura este citita in continuare, displayul a intepenit !!! Folosesc acum un DS18B20 (neincapsulat) de la T....E Link spre comentariu
fratello Postat Februarie 13 Autor Partajează Postat Februarie 13 Este in loop delay(500) Pe monitorul serial temperatura este, in continuare, "masurata" si afisata ; displayul este intepenit. Schimb displayul cu unul de 0,96" Link spre comentariu
nico_2010 Postat Februarie 13 Partajează Postat Februarie 13 Acum 48 minute, zvonacfirst a spus: Intervin si eu, sper ca nu este cu suparare. Cum setezi fusebits cand folosesti Arduino IDE pentru a uploada un sketch pe Arduino UNO, asa cum a facut @nico_2010? Si la NANO este aceeasi intrebare. Daca setezi din Tools tipul de placa si ceasul, nu inseamna ca si la fusebits se intampla ceva? Daca folosim softuri de genul AVRDUDESS si programator USBASP este adevarat ca putem citi si scrie fusebits, dar cu Arduino IDE nu imi dau seama cum poate fi facut acest lucru. Cu USBASP si AVRDudess. NU, nu inseamna ca ai setat fuse-bits daca setezi placa si ceasul! Cu mediul Arduino IDE nu poti seta fuse-bits, softul nu are astfel de facilitati! Link spre comentariu
Bandi Szasz Postat Februarie 13 Partajează Postat Februarie 13 Acum 3 ore, fratello a spus: Multumesc. Sincer ...nu prea am inteles...dar ce as putea face pentru corectie? De obicei se prefera buffering, asta inseamna ca se aloca in memoria RAM un buffer in care au loc toti pixelii, cand tu "scrii" ceva pe display apeland metodele de "println" se modifica doar in buffer iar catre display se trimit datele doar cand se apeleaza meoda de refresh, display, etc... Fara buffering in momentul in care apelezi functia de "println" se trimit datele catre display pe loc, dezavantajul major este ca majoritate a driverelor de display ( in cazul de fata SSD1306 ) au memoria interna sparta in blocuri si permit scrieri doar pe blocuri intregi, asta inseamna ca daca blocul de memorie e de 8 pixeli tu poti afisa textul incepand cu pixeli in multiplu de 8 pentru ca este efectiv imposibil sa scrii in memoria driverului date pentru pixelul 3 ( trebuie sa scrii pentru tot blocul din care face parte pixelul 3). Nu stiu cum e facut u8g dar probabil este suficient de destept ca corecteaza automat in idea in care tu ii zici ca vrei text de la pixelul 3 el stie ca nu are cum si il muta incepand cu pixelul 8. Pentru aplicatii nepretentioase cum este cel prezentat merge lejer si fara buffering, insa dupa ultimele teste pare ca de fapt se blocheaza display-ul decat nano daca ai date pe serial. Link spre comentariu
nico_2010 Postat Februarie 13 Partajează Postat Februarie 13 In testele mele nu se blocheaza nimic, chiar daca afisez cel putin temperatura pe portul serial. Alimentarea este din portul USB, fara alte farafastacuri. Link spre comentariu
fratello Postat Februarie 13 Autor Partajează Postat Februarie 13 Pana acum nici la mine nu s-a mai blocat cu displayul de 0.96" Cum setez extended fuses ? Degeaba scriu 05 si dau Write, cand citesc e tot FD Link spre comentariu
nico_2010 Postat Februarie 13 Partajează Postat Februarie 13 Ai fuse-bits de boot lock programati (0xCF). Sterge tot uC si scrie fuse bits cum ii ai acum, iar la LB scrie 0xFF. Si dupa aia incarca bootloaderul original, pe care ar trebui sa-l gasesit aici: C:\Program Files (x86)\Arduino\hardware\arduino\avr\bootloaders\atmega\ATmegaBOOT_168_atmega328.hex Link spre comentariu
fratello Postat Februarie 13 Autor Partajează Postat Februarie 13 Voi incerca, multumesc. Problemele mele cred ca s-au datorat, totusi, exclusiv displayului ! Cu displayul mic functioneaza de la 19:01h fara probleme. Voi vedea peste noapte ... Link spre comentariu
zvonacfirst Postat Februarie 13 Partajează Postat Februarie 13 (editat) Acum 2 ore, nico_2010 a spus: NU, nu inseamna ca ai setat fuse-bits daca setezi placa si ceasul! Cu mediul Arduino IDE nu poti seta fuse-bits, softul nu are astfel de facilitati! Stiu ca sunt cam offtopic, dar s-a tot amintit de fusebits si vreau sa confirm ca @nico_2010 are dreptate doar partial, fara a-mi dori sa pornim o discutie in contradictoriu. Da, nu este suficient sa setam micocontrolerul si ceasul pentru a seta fusebits dar putem totusi seta fusebits cu Arduino IDE. Smecheria sta in bootloader. Hai sa facem un experiment. Luam un Atmega328P-PU nou si il conectam la programatorul USBASP si deschidem Arduino IDE si AVRDUDESS. Apoi citim fusebits cu AVRDUDESS. In mod normal si logic fusebits trebuie sa fie cei default. Mergem apoi in Arduino IDE si ii "ardem" un bootloader cu setarile care se vad in pozele 2 si 3, apoi citim fusebits in AVRDUDESS. Am facut treaba asta de doua ori cu ceasul intern sau extern setat la frecvente diferite pentru a vedea daca se intampla ceva. Concluzia este ca putem seta fusebits in Arduino IDE cu conditia sa ardem bootloaderul adecvat. Acesta este un mod simplist de a seta ceasul si a seta fusebits corect in functie de frecventa dorita. Pentru a seta ceasul oscilator extern de 16MHz este nevoie sa existe oscilatorul fizic montat pe breadboard sau pe placa pe care o utilizam pentru programare. Pentru chestii mai complicate legate de fusebits, poate fi folosit calculatorul si AVRDUDESS (sau un soft similar) sau AVRDUDE in Command Prompt. Detalii pentru instalarea AVRDUDE. Detalii despre utilizarea AVRDUDE in consola. Si acum doi de "daca": - Daca am gresit ceva in ceea ce am scris, rog sa fiu corectat. - Daca postarea mea este considerata prea offtopic pentru a fi acceptata in aceasta discutie, rog adminul sa o stearga sau sa o mute unde crede de cuviinta. Editat Februarie 13 de zvonacfirst Link spre comentariu
fratello Postat Februarie 13 Autor Partajează Postat Februarie 13 Mai am ceva de testat, pe baza unor noi informatii : " To get the display working you can use the olikraus U8G2 library. This can also be installed via the Arduino IDE. Search for "U8G2" at Manage Libraries and install the latest version. Since, for example, the Arduino Uno/Nano/Pro Mini does not have sufficient RAM, it cannot be used in combination with the "full_buffer" examples of the U8G2 library. In that case, choose the "page_buffer" examples. We recommend testing the U8g2 -> page_buffer -> GraphicsTest example to get an idea of the library's capabilities. One of the initializations below can be placed in the "U8g2 Contructor List" in the "full_buffer"or "page_buffer" example. To get the "full_buffer" examples working, you can use the following initialization with the standard (hardware-based) I2C connection of your Arduino: U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); For the "page_buffer" examples, this initialization can be used: U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);" Link spre comentariu
zvonacfirst Postat Februarie 13 Partajează Postat Februarie 13 (editat) @fratello, daca afisajul tau este OLED 1.3" sunt sanse mari sa fie SH1106, asa cum ai folosit tu initial. Ale mele, cele de 1.3" merg bine numai ca SH1106. Ca urmare poti incerca ca inlocuiesti U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); cu U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); Sau am mai folosit si: U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE, /* option=*/ U8X8_NO_ACK); Si inca o sugestie: in functie de biblioteca utilizata, pune exact la inceputul functiei loop urmatoarea linie: u8g2.clearBuffer(); sau u8g.clearBuffer(); Astfel, buferul afisorului este curatat la fiecare iteratie a functiei loop. Vei evita stocarea si afisarea informațiilor vechi. Eu folosesc biblioteca U8g2lib.h deoarece este mai flexibila si ofera mai multe functionalitati si optiuni de configurare in special pentru elementele grafice. Editat Februarie 13 de zvonacfirst Link spre comentariu
nico_2010 Postat Februarie 14 Partajează Postat Februarie 14 @zvonacfirst: toti fuse-bits din cele 3 imagini sunt gresiti si vor conduce, la un moment dat de timp, la manifestari bizare ale microcontrolerui! E optiunea ta sa folosesti aceste setari. Si "smecheria" nu consta in bootloader, ci in facilitatea Arduino IDE de a integra Avrdudess. Bootloader-ul nu este decat o bucata de software care faciliteaza incarcarea unei alte bucati de software in microcontroler incepand cu o anumita locatie de memorie si nu stie ce fuse-bits trebuiesc setati pentru a se incarca pe sine insusi, in schimb fisierul Make (care NU face parte din bootloader) poate instrui softul de programare sa scrie fuse-bits. Eu unul nu mai folosesc USBAsp de vreo 12 ani. Pentru programare si debugging folosesc AS7 si Atmel ICE si softul de programare integrat in AS7, unde pot controla corect fuse-bits (ca in fuse calculator), nu dupa ureche sau ce se mai scrie pe net. Ca urmare, nu sunt curios ce imi poate oferi mediul Arduino, decat poate pentru a verifica rapid o anumita componenta (display, senzor sau altceva). Link spre comentariu
fratello Postat Februarie 14 Autor Partajează Postat Februarie 14 In nenumaratele variante de cod, am folosit deja si acele setari pt display si stergerea bufferului. Mai ramane sa incerc dupa-amiaza U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); Cu displayul mic, de 0.96", montajul a functionat toata noaptea fara probleme ... 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