luni, 16 septembrie 2019

Ceas matriceal animat cu ESP8266 si RTC (DS3231) cu informatii despre temperatura si umiditate (4)

    Am reusit sa am indicatii in limba romana si pentru ceasul acesta (vedeti articolul precedent), scriind intr-un sir de caractere numele zilei, in alt sir de numere lungimea (numarul de caractere al numelui), la fel si pentru numele lunilor.
   Schema de conectarea a modulelor este identica ca si la versiunile anterioare, doar ca s-a modificat un pic programul.
    Programul nou este MatrixClock_ESP8266_DHT_3e2.ino in care am definit zilele si lunile, dupa cum se vede in liniile
   Ca si in versiuniule precedente, apare ora animata cu cifrele ce se modifica ce "coboara", apoi apare ziua, data, temperatura si umiditatea realtia a aerului, dupa cum se vede din pozele urmatoare:
   Cel mai bine se vede modul de prezentare in filmuletele urmatoare:
23.09.2019
   Deoarece uneori afisajul ramane stins, la initializare, am modifica ca textele ce se deruleaza sa fie impartite, intr-un minut sa apara data, in celalalt temperatura si umiditatea.
   Programul modificat este MatrixClock_ESP8266_DHT_3e2ok.ino si modul de afisare se vede in cele 2 filmulete:
- ceas matriceal animat cu higrometru si termometru (6)
- LED matrix clock with ESP8266 (6)
29.9.2019
   Deoarece am observat ca daca ESP-ul se deconecteaza de la retea, verificarea la fiecare minut, in secunda 10, determina stingerea afisajului pentru perioada verificarii, am modificat sa am acest procedeu doar la ora 0:0:10, deoarece ceasul RTC cu Ds3221 este foarte precis si nu pot aparea decalaje de ora prea mari intr-o zi.

si am dezactivat indicarea anumitor stari prin aprindere/stingrea ledului de la D0/GPIO0 👽

05.03.2020
    Revenind acum cateva zile la ultima versiune, am constatat de dimineata ca se stinge afisajul cand sa afiseze ziua si data. Intre timp si Bogdan Argatu mi-a sesizat problema, asa ca am inceput amandoi investigatiile.
   In ecranul de monitorizare seriala apare ceva de genul
   Deoarece problema este doar cand se afiseaza numele zilei intreg, am pus sa mi se afiseze variabilele ce sunt calculate pentru a scoate din sir ziua si am observat ca duminica pentru RTC e zero, iar eu scad un 1 pentru ca am creat sirul incepand cu luni.
asa ca am modificat programul, creand o variabila zi3 care daca e mai mica ca 0 se face 6:
   Programul cu aceasta corectie este MatrixClock_ESP8266_DHT_3e2ok2.ino !!! dar am corectat si versiunile anterioare... pentru a nu aparea erori.
   La ultima versiune, am modifcat si literele 'a' si 'c', deoarece 'a' era prea inalt, iar 'c' prea scund.
   Am folosit caracterele groase pentru numere, create de Bogdan, si programul devine MatrixClock_ESP8266_DHT_3e3.ino modul de prezentare se vede in filmuletele urmatoare:
23.05.2020
   Deoarece unori apar caractere gresite la temperatura si umiditate, am schimbat libraria DHT cu una dedicata pentru ESP8266 si anume DHTesp, asa ca programul este acum MatrixClock_ESP8266_DHT_3e3e4.ino.

25.05.2020
   Am facut 2 filmulmulte:

duminică, 15 septembrie 2019

Ceas matriceal animat cu date din server NTP (fara RTC) - partea a 2-a

   In completarea ceasului realizat anterior (vezi partea 1), am adaugat si afisarea informatiilor in limba romana, deoarece original se puteau obtine doar numeric sau in engleza.
   Schema de conectare ramane aceeasi:
   Pentru asta. am luat la puricat ce informatii pot extrage cu functia strftime si am "spart" informatia dintr-o bucata cu unele mai mici, pentru a inlocui numere cu nume.
   Am extras prima data numarul zilei din saptamana (1 = Luni, ... 7 = Duminica), apoi ziua si luna, unde 1 = Ianuarie si 12 = Decembrie, apoi anul, 2019.
   Am definit numele zilelor si lunilor in 2 siruri, pentru a putea fi usor de adaptat pentru cititori din alte tari:
iar prezentarea zilei si datei (variabila w are dublul numarului de secunde, intre afisari, 120 = 1 minut, daca e w=10, atunci dupa ce se afiseaza ceasul 5 secunde apare si  ziua si data)
   Programul, care afiseaza ziua si numele lunii in romana este NTP_matrix_2v2.ino.
   Am facut un filmulet in care variabila w = 10, deci dupa 5 secunde de ceas apare ziua si data. acesta este ceas animat NTP (2)

  apoi  ceas animat NTP (3) cu interval de 60 secunde:

si unul in engleza, numit NTP animated clock (2)
16.09.2019
   Am schimbat o linie pentru ca secundele ce erau aratate ca 2 puncte ce se sting periodic sa fie inlocuite cu 2 puncte si, in loc de spatiu, o linie, un minus:

    Cel mai bine se vede in filmuletul ceas animat NTP (4)

Ceas matriceal animat cu date din server NTP (fara RTC)


   Fata de ceasurile anterioare, care au avut toate RTC (ceas de timp real cu DS1307 sau DS3231), de data asta voi folosi datele citite on-line de la un server NTP.
   Materialul de pornire mi-a fost dat de Vlad Gheorghe si anume un director de pe Github: G6EJD/ESP8266-MAX7219-LED-4x8x8-Matrix-Clock
   Se foloseste o placa de dezvoltare cu ESP8266 (sau ESP32) si 4 module de 8x8 leduri controlate de MAX7219, schema fiind extrem de simpla, legand
    Eu am folosit o placa de dezvoltare WeMos D1 cu format de Arduino Uno;
deci am folosit alimentarea de 3,3V si masa (GND), apoi am legat pinul DIN la GPIO11/MOSI/D7, CS  la GPIO12/MISO/(D12) si CLK la GPIO13/SCK/D5. Alimentarea se face, cel putin de teste, la o mufa USB, apoi voi folosi un incarcator de telefon.
    Folosind programul modificat de mine, NTP_matrix_2.ino, pe afisaj se arata ora, cu secunde ce clipesc, 
apoi la 60 secunde se indica ziua si data, in engleza (momentan).

   Informatiile de la serverul NTP se convertesc intr-un sir cu functia strftime despre care puteti sa cititi la http://www.cplusplus.com/reference/ctime/strftime/ pentru a va configura mesajul animat, eu lasand in paranteze, ziua si data, dar se pot extrage mai multe infirmatii.
   Configurarea zonei a fost facuta de Vlad si se face in liniile 
urmand identificarea din pagina zones.csv.
    Am facut 2 filmulete, din care se vede mai rapid cum functioneaza ceasul:

PS: Am adaugat si verificarea conectarii la reteaua Wi-Fi locala si, daca s-a pierdut legatura, se reface legatura cu router-ul, vedeti sketch-ul NTP_matrix_2v1.ino.

luni, 9 septembrie 2019

Placa FPGA Altera Cyclone II EP2C5T144 in teste

    Am cumparat de pe internet o placa FPGA (arii de porti programabile) cu chip Altera II EP2C5T144, impreuna cu un programator specific si cablu de conectare pe USB, la un pret acceptabil (in jur de 15$).
   FPGA-ul este o generatie veche de FPGA, dar suficient de puternica pentru invatare si proicte interesante (vredeti articolele:
- ALTERA CYCLONE II EP2C5T144 FPGA DEV BOARD
- Placa de desarrollo Altera Cyclone II EP2C5T144 FPGA Mini
- Retro FPGA: Grant Searle's Multicomp
- Building a MultiComp-based Z80
- Multicomp Cyclone II-C
- Pick-and-mix to create your own custom computer on a low-cost FPGA board
   Revenind la teste, trebuie o alimentare externa de 5V, eu am conectat sursa stabilizata cu ajutorul unor crocodili, deoarece nu am gasit, la momentul testelor, cablul cu jack:
   Imediat ce se alimenteaza placa, se aprinde ledul ce indica prezenta tensiunii si clipesc simultan cele 3 leduri.
   Laptopul, pe care lucrez in mod uzual, are instalat Windows 7, asa ca am instalat driver-ul pentru programator (USB blaster) de la www.intel.com/
   Pentru ca nu am lucrat pana acum cu FPGA-uri, am cautat informatii si am cerut ajutorul colegului meu, Dragos, care se mai "jucase" cu o placa din asta.
   La recomandarea lui, am instalat programul Quartus 9.1 SP2, ce suporta si generatia asta veche (Cyclone 2). Eu instalasem anterior versiuni 13.1 si , apoi 11.1, dar nu m-am prins cum se lucreaza, asa ca abandonasem studiul...
    Dupa ce am primit niste sfaturi de la Dragos, am urmat pasii din articolele:
   Intr-un articol viitor voi posta si eu pasii detaliati care apar in versiunea 9.1, dar daca se respecta ce este acolo prezentat se poate reproduce proiectelul de acolo, cum este in primul articol.
    Dupa ce se creeaza proiectul si se compileaza, se incarca in "RAM", putandu-se rula pana la intreruperea alimentarii, cand porneste programul initial:
- buton neapasat, cele 2 leduri de pe exterior aprinse
- buton apasat, ledul din mijloc aprins
  Pentru a putea rula un program oricand, se scrie un fisier specific, dupa cum se prezinta in al doilea articol (se arata cele 2 tipuri de programare).
   Pentru programare consumul creste temporar, asa ca am limitat curentul la 140mA:
   Dragos mi-a trimis un proiect mai complex, din care am lasat doar un numarator binar;

PS: Un proiect interesant al lui Dragos a fost prezentat in articolul Verificare memorii RAM de tip 4116