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

vineri, 20 martie 2020

Radio AM / FM (RDS) cu TEF6686 si STM32F103

   In articolele Radio cu TEF6686 si Radio cu TEF6686 si STM32F103 am tetsat doar pardea de FM, de data asta am adaugat un buton (fara retinere), care selecteza banda, exact ca un radio auto, deoarece TEF6686, chiar asta este, un tuner radio folosit in navigatii si radio auto.
   Selectia de face in ordinea FM1/FM2/FM3/MW/LW/SW prin apasarea butonului BAND din schema de mai jos:
   Eu am tetat doar cu STM32F103, dar ar trebui sa ruleze fara probleme pe Arduino Mega sau Mega 2560 Pro (versiunea mai mica), doar se schimba pinii alocati butoanelor.
  Programul folosit este TEF6686_1602i2c_v6beta si modul de instalare a fost prezentat in articolul precedent, trebuie sa tineti cond si de schimbarea librariei Wire cum am prezentat in articolul Functionare corecta comunicatie pe i2c la placile de dezvoltare cu STM32F103.
   Prezentarea informatiei in diferite benzi:
- FM1
- FM2
- FM3
- MW
- LW
- SW
   Pe partea de AM am reusit sa prind doar pe banda de unde medii MW postul Radio Oltenia Craiova pe 1314kHz si asta dupa ce am schimbat sursa de alimentare (pana si lampa cu lupa foloseste sursa in comutatie). Ca si in cazul experimentelor anterioare, antena mea este un fir de jumata de metru.
   Nu am fost multumit de rezultatedele de pe AM, dar, pentru moment, pana nu il mut pe un cablaj/cutie nu pot face teste edificatoare in privint performantelor, dar am incredere ca e un produs de calitate.
   Au ramas implementate functiile de cautare automata post radio (inainte/inapoi), reglaj manual frecventa (crestere/scadere cu pas de 0,1MHz pe FM si 9kHz pe AM) si reglaj volum (crestere/scadere cu pas de 4dB).
   Am realizat 2 filmulete cu acest radio:
Radio AM/FM RDS cu TEF6686 si STM32F103
AM/FM RDS radio with TEF6686 and STM32F103


miercuri, 18 martie 2020

Radio FM (RDS) cu TEF6686 si STM32F103

   In articolul precedent (Radio cu TEF6686) am folosit ca placa de dezvoltare modelul Arduino Mega clasic si, ulterior, Mega 2560 Pro, o varianta redusa ca dimensiuni a celei originale, dar rara ca raspandire.
   Am considerat ca implementarea pe o placa de dezvoltare cu STM32F103 este binevenita, deoarece are pret redus, usor de montat pe cablaj de test sau breadboard, etc.
   Conectarea este simpla, modulul radio cu TEF6686, care are adresa 0x64, si afisajul LCD1602 cu interfata i2c, ce are adresa 0x3F, dupa cum se vede daca cautam ce perifierice avem legate, cu programul i2c_scanner.
   Am pastrat comenzile din 6 butoane, configuratia fiind ca in sketch, doar ca am pus rezistente de 4k7 la +3,3V (rezistente de pull up), deoarece la alte teste anterioare, comanda de folosire a rezistentelor interne de pull-up nu au parut ca lucreaza. Cele 5 butoane au urmatoarea functionalitate: volum(crestere/scadere), cautatare autmata post radio (inainte/inapoi) si schimbare frecvnta cu pas de 0,1MHz (crestere/scadere).
    Pentrua putea folosi placa STM32F103 cu TEF6686, trebuie sa schimbati libraria Wire din locul unde s-a instalat acest model de placa, la mine localizarea este la C:\Users\niq_ro\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries.
cu cea de la https://github.com/stm32duino/Arduino_Core_STM32/tree/master/libraries/Wire
   Detalii se gasesc in articolul Functionare corecta comunicatie pe i2c la placile de dezvoltare cu STM32F103.
   Programul, care poate functiona si pe STM32F103, dar si pe Arduino Mega este TEF6686_1602i2c_v5 si include mai multe fisiere, cel de baza cu terminatia ino si altele ajutatoare. trebuie sa descarcati tot continutul din subdirector, pastrandu-i numele.
- github:
- local:

- in programul Arduino IDE:
   Am realizat 2 filmulete, din care se intelege mai usor ce am facut si cum functioneaza:
radio cu TEF6686 controlat cu STM32F103
RDS radio with TEF6686 and STM32F103
   Consumul mediu indicat de sursa de alimentare este de cca 240mA (variaza, in functie de modul de functionare: redare, cautare automata, reglaj manual, etc):
  Cateva poze:
   Instalarea placii STM32F103 si programarea acesteia se face cum am prezentat in articolul Placa de dezvoltare cu microcontroler STM32F103C8T6
   Deoarece am gasit in articolul STM32F103C8T6 board, alias Blue Pill o librarie pentru placa de dezvoltare, 
am desenat si schema radioului, ca e mai usor de inteles.

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.