joi, 31 august 2017

Ceas pe LCD ST7920 CU REGLAJ

Am pornit de la articolul de aici unde mi-a placut realizarea acestuia. Initial am testat codul omului, a functionat insa cercul in realitate arata rau de tot, mai ales daca e privit de aproape, asa ca am renuntat la el. Asta datorita rezolutiei ecranului.
Ulterior m-am hotarit sa fac un ceas mai serios cu cifre cit mai mari si reglaj manual ca sa nu depind de calculator la trecerile ora vara/iarna, eventual alarma daca mai raminea memorie disponibila, si din pacate nu a mai ramas.
Pentru display este folosita o biblioteca U8glib cu care m-am "imprietenit" mai greu (pe link este cea folosita de mine.).
Modul de conectare al display-ului la arduino este descris cu foarte multe detalii de Nicu Florica la el pe blog , si nu voi repeta aici.
I-am adaugat un DS1307, un DS18B20 si trei butoane :
#define meniu 9 
#define minus 10
#define plus 11 
#define ONE_WIRE_BUS 8
La scrierea codului m-am inspirat de aici pentru ca foloseste tot U8GLIB si a iesit ca mai jos:
Am marit atit cit a fost posibil fontul orei iar restul informatiilor le-am incadrat la dimensiunea maxima acceptata de rezolutia ecranului.

 Aici se poate vedea modul de reglaj imediat dupa Duminica  . Am vrut sa sterg ecranul in modul reglaj insa codul depasea marimea maxima a lui Arduino micro (pe asta l-am folosit spre final), si astfel singurul loc liber era cel imediat dupa afisarea zilei.
La rutina de reglaj m-am inspirat tot de la Nicu, ca mi s-a parut foarte simpla de implementat.

(Sketch uses 29814 bytes (97%) of program storage space. Maximum is 30720 bytes.)



Codul final si bibliotecile folosite sint aici:
Consumul este sub 100mA


 Modelul de senzor e temporar pina soseste unul in capsula TO-92
update:34-iul-2018
Dupa varianta lui Nicu realizata cu encoder, am adaptat codul pentru 3 butoane (nu am avut disponibil nici un encoder):
Functionalitatile in mare au ramas cele descrise de Nicu Florica pe blog-ul lui.
Codul pentru poza din stinga este pe github iar pentru cel din dreapta tot pe github. La varianta din dreapta am corectat afisarea secundelor analogice pentru ca era o mica abatere fata de cele numerice.
In plus fata de ce a testat Nicu Florica am adaugat un senzor DS18B20. Fonturile utilizate ocupa foarte multa memorie si am incercat sa fac un compromis pentru o afisare cit mai vizibila.

update 11-aug-2019
A sosit zilele astea display-ul de mai jos pe care am facut citeva teste:


Pentru a functiona a trebuit sa fac upgrade la u8glib, iar driverul a functionat cu:
U8GLIB_DOGM128 u8g(8, 9, 5, 7); // SPI Com: SCK , MOSI, CS, A0
RST-ul LCD-ului l-am legat la pinul reset al lui arduino.
Neajunsul este ca are un offset pe x de -4 puncte.
Codul de test aferent pozelor de mai jos este pe github.
Ecran luminat
Neajunsul cu offset-ul se poate distine usor in partea dreapta unde aprinde pixeli in mod aleatoriu. Mai exact, zona de lucru este de la 4(x=0) la 124, diferenta de 4 pixeli apare aleatoriu in dreapta la pornirea tensiunii de alimentare
Fara lumina de fundal
O alta clona modificata, cod pe github
Update: 22-ian-2022
Cam acelasi cod dar de data asta cu arduino mega si un display 240x64 DG24064 cu T6963




Legaturile se deduc foarte usor din codul postat pe github pentru prima varianta si tot pe github si pentru a doua.

luni, 28 august 2017

Radio cu TEA5767, OLED, MUTE

Sursa de inspiratie este blogul unui neamt.

Aici m-a atras prezenta butonului de MUTE.
Pe blogul nemtului se gasesc suficiente informatii despre TEA5767, si modul de conectare la Arduino. Si aici am adaptat codul pentru afisare pe OLED (display-urile de nokia inca inca erau in avion).
Am folosit un OLED de 0.98" SPI, modul de conectare la controler este descris in cod.
Ce a iesit spre final se poate vedea mai jos

 Are un amplificator cu 2xTBA820, iar VU-metrul este cu AN6884 cu display LED tricolor recuperat de la sistem de parcare defect. Pe spate are si 2 semireglabili pentru "calibrarea" VU-metrului.

Partea proasta la OLED e ca are remanenta daca este aprins foarte multa vreme. In sensul ca informatiile statice vor ramine definitiv pe ecran. De exemplu asta de mai sus a stat foarte multa vreme pe 103,10 si cind s-a dorit schimbarea statiei abia se putea distinge valoarea frecventei.
"MHz", se evidentiaza destul de clar si dupa ce este scoasa alimentarea.
La urmatorul daca va mai fi va trebui sa-i fac ceva sa se stinga ecranul la citeva secunde dupa apasarea vreunui buton.

Radio cu TEA5767, TFT 1,44", afisare nume post

Experimentul are ca sursa de inspiratie materialul lui Nicu Florica.
Nu aveam display de Nokia si m-am gindit sa adaptez codul pentru un TFT 1,44 cu ILI9163 similar cu cel din imagine.
Am pastrat schema de baza si am inlocuit display-ul de nokia cu TFT-ul de 1,44"
Modul de conectare este: (reiese si din cod)
CS               -D10
DC (A0)     - D8
RST            - D9
SCK            - D13
SDA            - D11 

LED, VCC   -5V
Button +        D7
Button -        D6
SDA radio     A4
SCL radio      A5

TEA5767 nu are capabilitati incluse pentru RDS, asa ca am ca am facut un artficiu de tipul:

if (current_freq==103.1) { display.setCursor(5,90);
   display.setTextSize(1);
   display.setTextColor(YELLOW,BLACK);display.print("Cultural   ");} 

Mai exact am scanat tot ce se putea receptiona aici, si am identificat dupa frecventa numele postului, si am adaugat if-urile ca mai sus. In cazul altor statii receptionate  "necunoscute" nu afiseaza nimic.
Finalizarea este cu arduino micro la 5V. Ulterior am micsorat fontul la afisarea frecventei ca 99.99MHz sa fie pe acelasi rind

Aici mai are atasat un mic amplificator cacu urma sa fie adaptat intr-o cutie

 Teste cu difuzoare recuperate dintr-un notebook

duminică, 27 august 2017

Radio cu RDA5807, TFT 1,44"

Este o adaptare dupa testele lui Nicu
La vremea cind am facut acest experiment nu aveam la indemina nici un display de Nokia. Imi placuse ideea de a memora pozitia volumului si ultimul post de radio, si m-am hotarit sa-l adaptez pe un alt tip de display.
Aveam  display-uri TFT color de 1,44" rosii si negre. La teste nu am gasit nici o diferenta intre ele, functionind foarte bine si unul si celalalt (posibil sa fie si nu le-am descoperit eu).
Problema era ca biblioteca folosita imi scotea imaginea de pe display, In final am gasit ce modificari trebuie facute pentru a functiona corect si pe acest display de 1,44". Pe 1,8" cu acelasi controler ILI9163 functioneaza ok. Arhiva cu biblioteca modicata este aici. Nu mai gasesc in acest moment link-ul unde am citit despre modificare.

Proiectul initial pare sa fie al unui spaniol, preluat de un rus, apoi adaptata memorarea de catre Nicu Florica . Dupa ceva  studiu codul mi-a iesit ca aici.
RDS-ul initial nu am reusit sa-l afisez pe TFT.
Eu am adaugat afisarea RDS-ului pe care am adaptat-o dupa un exemplu de aici. La teste am renuntat la afisarea orei care se pare ca la noi nu este setata corect. De fapt nu am gasit nici un post de radio care sa aiba ora actualizata.

Arduino nano este alimentat la 3,3V printr-un modul step-down, iar sub display are un modul amplificator cu PAM8403 care s-a dovedit destul de puternic la 3,3V. Potentiometrul l-am pus pentru ca la volum zero nu face mute. In poza este alimentat de la incarcatorul de telefon.
La teste s-a dovedit suficient de stabil, desi ca antena am folosit doar un fir circa jumatate de metru.

Schema este similara cu cea folosita de cei trei, iar conectarea display-ului la arduino este comentata la inceputul codului.
//CS - D10
//DC (A0)- D8
//RST -D9
//SCK -13
//SDA -11 
//LED, VCC -3,3V
//butoane A0
//sda radioA4
//scl radio A5

 Codul este destul de stufos si a fost greoaie fixarea informatiilor, motiv pentru care a iesit foarte colorat pentru a putea urmari usor modificarile facute.

Varianta de test arata ca mai jos:



Ceas cu ATTINY85 Digispark, RTC, afisare pe I2C 7 segmente HT16K33

Sosise de ceva vreme un display  de 1,2" (3cm) cu interfata I2C,  controlat de HT16K33 si i-am utilizarea pentru carea fost construit impreuna cu un DS3231 si un modul ATTINY85 Digispark..
Trebuia sa iasa doar un ceas foarte vizibil, si sa aiba posibilitatea de ajustare a orelor si minutelor.

Schema de conectare este aici  Pentru reglaj am folosit tot 2 butoane de data asta legate fiecare pe cite un pin.
Dupa un pic de documentare si adaptari am reusit sa-l aprind.
Codul folosit impreuna cu bibliotecile utilizate aici
Prototipul l-am facut tot pe o placa te test cu sirme la care i-am atasat si o sursa:
Ulterior s-a facut o caseta din doua placi fata-spate una transparenta si una opaca, cu gauri pentru butoanele de reglaj.


Ceas cu ATTINY85 Digispark pe TM1637

Vazind cum se lucreaza cu modulele celor de la Digispark, m-am hotarit sa fac un ceas cu afisare pe display cu TM1637. P e internet nu am gasit mare mi-a atras atentia proiectul de aici.
M-am oprit asupra lui si -am adaptat la situatia mea iesind schema de aici.

Am pus doar doua butoane pentru reglaj ora, respectiv minute. Nu am gasit rezistente adecvate ca sa fac divizorul, asa ca am pus un semireglabil din care reglez cca 1,8V. Am testat cu modul de RTC cu DS3231, si DS1307 fara nici o modicare la cod.

Initial facusem sa nu afiseze zero la orele<10 insa se aprinde aleator acel digit si nu m-am prins ce-l deranjeaza, asa ca am renuntat



 In final am folosit un diplay mai mare cu acelasi controler TM1637
 Aici am facut un prototip pe placa de test, cu display-ul cel mare, montajul iesind la dimensiunea acestuia.





Aici este un alt prototip




Termometru ATTINY85 Digispark

Aveam mai multe module cu ATTINY85 de la Digispark si m-am hotarit sa fac un termometru cu DHT11 si afisare pe un display cu TM1637
Dupa o scurta documentare descpre placa de dezvoltare am ajuns la tutorialul lor de aici . Am urmat pasii de acolo si am instalat driver-ul de aici .
La Arduino IDE a aparut urmatoarea situatie:
Aici a aparut un alt programator dupa instalarea driver-ului.
 Aici a aparut si placa mea

M-am jucat un pic cu aprins LED-uri ca sa ma obisnuies cu modul de progrmare. Aici ideea este ca dupa editarea codului, se compileaza de test, se da upload fara a conecta placa la USB
Doar dupa ce apare mesajul de mai sus se conecteaza si placa la USB, va apare mesajul de ok cind termina si se mai asteapta cca 10 secunde dupa care se poate deconecta.
Am incercat si programarea cu circuitul realizat, si din 4-5 incercari merge o data. Pinii PB4 si PB3 sint conectati la USB in timpul programarii, iar daca schema utilizata ii foloseste se pare ca ceva nu-i place. In aceasta situatie am preferat sa scot placa din breadboard, s-o programez si apoi s-o atasez la loc in breadboard.

Acum ca am vazut cum se lucreaza, am folosit biblioteca si codul lui Nicu la care am adaptat modul de conectare conform schemei de aici si a rezultat codul de aici. Pentru DHT11 am folosit biblioteca de aici
Am avut placuta surpriza de a se compila fara erori, asa ca am incarcat codul. Dupa conectarea placutei pe breadboard chiar a functionat:

Testat  si cu un simplu  ATTINY85


Amplificator ultra simplu cu MOS 40W/8Ohm la 2x30V

 Am început construcția unui amplificator cu tranzistori MOS după o schemă proiectată de Ionel Epure , care se împacă foarte bine cu boxele ...