Se afișează postările cu eticheta LCD1602. Afișați toate postările
Se afișează postările cu eticheta LCD1602. Afișați toate postările

marți, 17 martie 2020

Functionare corecta comunicatie pe i2c la placile de dezvoltare cu STM32F103

   Dupa ce m-am tot chinuit cateva ore cu rezolvarea problemei de comunicare bidirectionala prin i2c, am zis sa incerc si varianta sa inlocuiesc libraria Wire cu una care se indica ca functioneaza bine.
   Libraria Wire pentru STM32F1xx vine separat de cea clasica, la mine ea este in subdirectorul C:\Users\niq_ro\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries.
   Am gasit pe Github o librarie de parea ok, adresa ei fiind https://github.com/stm32duino/Arduino_Core_STM32/tree/master/libraries/Wire
dar pentru a putea o putea descarca usor, luat toate librariile modificate de la https://github.com/stm32duino/Arduino_Core_STM32
   Am descarcat arhiva, am mutat libraria Wire, pentru cazul ca nu merge cea noua, apoi am copiat noua librarie.
   Am testat apoi sketch-ul clasic de cautare adrese/dispozitive pe i2c numit i2c_scanner ce se gaseste in materialul de pe site-ul Arduino.
avand doar afisajul cu adaptor
   Am incarcat si am gasit adresa adaptorului pentru afisajul LCD1602, ce il testasem in articol precedent.

   Rezultatul mi-a dat sperante, asa ca am conectat receptorul TEF6686 si afisajul LCD2004 cu nterfata i2 si am dat scanare:
   Ulterior, am facut mici modificari si am un radio functional cu TEF6686 controlat cu o placa cu STM32F103
   Curand o postez si articolul cu acest radio, dar mai am de lucru pentru a fi sigur ca e in regula si e foarte stabil.

Afisaj LCD1602 controlat prin protocol i2c de o placa STM32F103C8

   Vrand sa portez proiectul cu radio-ul bazat pe TEF6686 pe o placa STM32F103C8 ("blue pill"), am constatat (si eu) ca prin rularea programului i2c_scanner sau a a unora derivate ori nu gaseste nimic ori raporteaza e serial ca este o eroare sau sunt mai multe la diverse adrese, de la 0x01.
   Am cautat pe internet si am gasit multe discutii, dar un singur articol pare ca a depistat si rezolvat problema. Articolul este STM32 I2C SCANNER. Initial, nu am realizat ce am era prezentat acolo, dar am incarcat programul pentru radio si am conectat la el afisajul LCD2004 si receptorul TEF6686, spre surprinderea mea, afisajul s-a aprins, a aparut partea de inceput, apoi a ramas stins. Am realizat imediat ca placa cu STM32F103C8 trimite corect comenzi prin protocol i2c, dar nu intelege ce i se comunica.
   Am conectat un afisaj LCD1602 cu interfata de la radio, pentru ca ii stiam adresa, si am incarcat sketch-ul "Hello World!". Apoi am adaptat bucati de sketch-uri de test pentru afisaj LCD1602 rezultand sketch-ul STM32F103_i2c_LCD1602.ino si am realizat 2 filmulete:
STM32F103 cu afisaj LCD1602 pe i2c
i2c LCD1602 drived by STM32F103C
  Schema de conectare este "clasica", doar ca am alimentat afisajul de la 5V, microcontrolerul se alimenteaza la 3,3V ori prin folosirea placii de intarfeta USB-FTDI (RxTx) ori din USB-ul placii folosind stabilizatorul intern al placii de dezvoltare.
   O schema desenata cu programul Fritzing, gasita in articolul de la https://controllerstech.com/i2c-lcd-in-stm32/
   Eu am alimentat separat cu 5V afisajul deoarece interfata USB-FTDI trebuie pusa sa lucreze cu 3,3V si eu tot testez.


miercuri, 9 ianuarie 2019

Ceas RTC cu reglaj si termometru in 3 zone

    Fata de articolul anterior, unde am prezentat un Ceas RTC cu reglaj si termometru in 2 zone  de data asta, Bogdan ARGATU a modificat programul pentru a avea indicatii pentru trei zone, pastrand facilitatea de ceas cu reglaj.
   Schema de conectare este identica, doar afisajul este 2004, adica are 20 coloane si 4 randuri, in locd e 1602 cu 16 coloane si 2 randuri.
    Programul modificat de Bogdan este clock_3ds18b20.ino, care incarcat intr-o placa de dezvoltare Arduino montata conform schmei de mai sus prezinta datele cum se vede in filmuletul Ceas RTC cu reglaj si temometru in 3 zone realizat de el:
 
    Montajul realizat de Bogdan:
iar cei trei senzori sunt montati, unul in camera la 1,5m inaltime, unul pe turul de la centrala (la etaj) si unul exterior.

   Eu am facut mici modificari la modul de a afisa temperaturile fara a se deplasa punctul zecimal si simbolul de grad Celsius, dupa cum se vede incarcand programul clock_3ds18b20_v1.ino.
   Fata de programul meu, Bogdan a schimbat semnul de plus cu o pauza pentru valorile pozitive, pentru toate cele 3 temperaturi, dupa cum se vede pentru una din ele:
    Noua versiune functioneaza dupa cum se vede in filmuletul Ceas RTC cu reglaj si temometru in 3 zone (2)

marți, 30 octombrie 2018

Ceas RTC cu reglaj si termometru in 2 zone

   Pentru un ceas cu reglaj si afisare temperaturi pentru 2 zone, una fiind temperatura unei camere (rezolutie mare) si una pentru temperatura tur incalzire centrala (rezolutie redusa), am folosit informatiile din articolul Arduino Digital Clock & Thermometer.
   Schema mea este
   Testele au fost facute de Bogdan Argatu, dupa cum se vede in filmuletul clock with 2 thermometers
 si s-a folosit sketch-ul clock_2ds18b20.ino.
    Alte poze de la montajul realizat de Bogdan:

marți, 1 august 2017

Iluminat de fundal progresiv pentru afisaje

   Avand in teste, cu Marian (GeoMar), un proiect mai complex cu Arduino cu prezentare date pe un afisaj alfanumeric LCD1602, am implementat un mod de a aprinde afisajul cand se apasa un buton, fundalul sta aprins la maxim o perioada, apoi scade treptat, ca la telefoane.
   Schema de test este simpla:
iar in cazul unei placi Nano ar fi
   Incarcand programul gradual_backlight_1.ino ledul va lumina slab, apoi la apasarea scurta a butonului se aprinde maxim o perioada (7 secunde), apoi scade lent pana la minim. Daca in timp ce incepe sa scada luminozitatea, se apasa butonul, ledul se aprinde la maxim, reluand ciclul de la zero.
   In repaus, ledul este aprins la un nivel minim:
si dupa apasarea butonului, ledul se aprinde la maxim
   In filmuletul de o calitate slaba numit iluminat gradat pentru led fundal afisaj am prezentat modul de functionare:
Ulterior, am facut un filmulet de calitate mai buna, iluminat gradat pentru led fundal afisaj (2)

vineri, 28 august 2015

Termostat cu control umiditate (higrostat)

   La solicitarea lui Mircea Craciun, am realizat un termostat, care mai are posibilitatea de a controla si umiditatea dintr-o incinta (higrostat).
   Senzorul pentru umiditate si temperatura este unul dedicat, AM2302 (cunoscut si ca DHT22 cand e montat pe un cablaj si are o rezistenta de 4k7 intre +5V si pinul de date).
   Precizia acestui senzor este destul de buna, la temperatura de +0,5 grade Celsius in domensiul de -40..+80 grade Celsius si pentru umidtatea relativa +2%RH in domensiul de 0..100%. 
   Schema de conectare este:
   Dupa cum se observa, am reprezentat cele doua variante de senzor, montandu-se doar una din ele..
   Am pus 2 led-uri pentru a avea o incatie, dar daca se inlocuiesc cu relee, ele pot comanda o centrala si un servomotor (sau electrovana) de eliminare umiditate, dupa cum sunt date comenzile din sketch-ul LCD1602_thermostat_humidity_ver1m0.ino.
   Din celel 3 butoane fara retinere se regleaza temperatura dorita, intervalul acceptat de scadere a temperaturii odata depasite (histerezis), umiditatea si intervalul acceptat de scadere al umiditatii odata depasite.
- reglaj temperatura:
 
- reglaj interval acceptat de scadere a temperaturii odata depasita (histerezis)
 
- reglaj umiditate:
 
reglaj interval acceptat de scadere a umiditatii odata depasite (histerezis)
 
   In graficul de mai jos se cele 3 cazuri: temperatura scazuta (BELOW), temperatura optima (OK) si temperatura prea mare (OVER):
  In timpul functionarii,pot fi mai multe stari (am simulat cateva):
- temperatura si umiditate in parametrii doriti (optim):
 
- temperatura scazuta si umiditate mai mica decat pragul admis:
- temperatura in parametrii, umiditate mai mica decat pragul admis (bun):
- temperatura in parametrii, umiditate prea mare:
- temperatura scazuta si umiditate prea mare:
- temperatura prea mare, umiditate crescuta:
 
   Am facut si 2 filmulete, care prezinta mai bine modul de reglaj al parametrilor:

27.05.2018
   Pentru a fi un adevarat termostat, am pus si parte de memorare date in EEPROM, sketck-ul fiind acum LCD1602_DHT22_thermostat_humidity_control_ver1m4x.ino