In urma unor teste cu o placa Raspberry Pi Pico W pentru un ceas NTP, am observat ca uneori sistemul se blocheaza (ingheata), asa ca, dupa ce am cautat pe net, si nu am gasit solutie multumitoare, m-am gandit sa aplic o solutie extrema, un sistem care se reseteze placa Raspberry Pi (sau chiar Arduino) cand placa nu mai trimite impulsuri pe un anumit pin.
De fapt, am folosit 2 pini, dupa cum se vede in schema si simularea, realizata cu programul Micro-Cap
prinul numit INIT (D7) are 5V imediat ce porneste placa Arduino (sau Raspberry Pi Pico), ulterior pe pinul D5 numit in schema PIVIEM se trimite semnal dreptunghiular cu frecventa de cca. 1000Hz (semnal PWM 50%), apoi pinul INIT se aduce in 0V, apoi dupa un timp si semnalul PIVIEM cade in zero.
Dupa cum se vede din filmulete si imagini, dupa circa 12ms de la pierderea semnalului, pinul RESET din 5V cade in 0V pentru circa 7ms.
Primele 2 filmulete au fost multumitoare, urmarind semnalul cu un osciloscop didactic, sa-i zic asa. model DSO-TC3:
apoi am mai conectat in osciloscop-tableta, model ADS1013D, cu 2 canale, de la care avem pretentii cam mari, pentru timpii descrisi mai sus, reprezentarea este multumitoare
Am modificat putin timpii de reactie, la cateva sute de ms dupa disparitia semnalului dreptunghiular si cateva sute de ms de reset,
Am gasit, intai, in articolul How to Add a Raspberry Pi Pico Reset Button ca placilor Raspberry Pi Pico (fara sau cu W) li se poate adauga un buton de reset, conectant un buton fara retinere intre pinul 30 (RUN) si GND
asa ca am schimbat si placa, de data asta conectand Raspberry Pi Pico W, pinul INIT este GP21, iar pinul PIVIEM este GP20, semnalul RESET se duce in RUN, montajul se va alimenta din 3V3 (OUT), respectiv GND:
Osciloscopul-tableta a fost greu de controlat pe modul de captarea a unei imagini statice, unde pot masura timpii, dar nu am insistat, deoarece rezultatele vizuale au fost multumitoare, dupa cum se vede in filmuletele:
Dupa ce am testat cateva luni ceasul NTP pe afisaj 8x32 leduri adresabile, am zis sa adaug si ceasul binar-zecimal testat de curand (vezi articolul), programul rezultat find NTPclock_8x32_v2_8.ino, schema este aceeasi
In perioada asta am transferat proiectul pe o placa de test, de pe breadboard:
Observand ca programele obisnuite sunt compatibile cu placile clasie (ATMega328, ESP8266, etc) am testat si placa RP2040-Zero cu un afisaj i2c cu driver ST7567S, pastrand conectarea GP4 (SDA) si GP5 (SCL) si urmnd ce prezentasem in articolul Ceas NTP pe afisaj monocrom de 2,2" cu rezolutie de 128x64 (ST7567S - i2c)
Un program imbunatatit este RTCclock_Arduino_8x32_v2a.ino, in sensul ca am scos culoarea albastra la ceasul clasic sa fie vizibila partea de ceas binar-zecimal.
Am modificat ceasul prezentat in articolul anterior, adaugand animatii: secunde miscatoare pe randul de jos si temperatura ca text deplasabil, dupa cum se vede in cele 2 filmulete:
Am incercat si o versiune de ceas RTC pe afisaj 8x32 ledui adresabile, dar a trebuit sa inlocuiesc placa Arduino Nano cu una Wemos D1 Mini, pentru ca apareau mereu erori de afisare.
in plus, am adaugat si un termometru cu senzor DS18B20
Programul RTCclock_Arduino_8x32_v0b.ino este unul simplu, fara tranzitii sau alte animatii, doar secundele "bat" dupa cum se vede in filmuletele:
iar ceasul este sub observatie cateva zile bune, apoi voi trece si la animatii si diverse moduri de afisare (ora vara/iarna, respectiv format de 12 ore sau 24 ore), etc.