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.


luni, 16 martie 2020

Eroare "exec: "/bin/arm-none-eabi-g++": file does not exist"

   Vrand sa reiau testele si proiectele cu placile "blue pill" realizate cu microcontrolerul STM32F103 pe un calculator "fresh" pe care a fost instalat programul Arduino IDE versiunea 1.18.12, am urmat pasii ce ii indicasem in articolul "Placa de dezvoltare cu microcontroler STM32F103C8T6", doar ca avut neplacuta supriza sa primesc o eroare la compilare "exec: "/bin/arm-none-eabi-g++": file does not exist". 
   Am realizat ca mai trebuie instalat ceva, asa ca am "abuzat de google", vorba lui Vlad Gheorghe si am gasit artiolul STM32-Arduino -STM32f103c8t6 Programming Guide in care se mentioneaza ca mai trebuie instalate si placile de dezvoltare cu microcontrolere SAM  M3 
asa ca am dat sa se instaleze
pana am vazut
   Am compilat exemplul, care trebuia sa mearga, si am obtinut un rezultat ce il asteptam
asa ca am incarcat programul, obtinad, cum era de asteptat rezulat bun:
   Am mutat jumperul de programare, am apasat butonul de RESET si am incarcat programul de test, obtinand
am pus la loc jumperul pentru functionarea normala si ledul de pe placa palpaie
    Urmeaza sa testez diverse proiecte cu aceata placa...

vineri, 6 martie 2020

Ceas cu reglaj pe afisaj P10 de 32x16 leduri (2)

   Avand de testat niste panouri led de tip P10, am zis sa fac si o modificare la ceasul cu reglaj, importanta pentru mine, sa pot afisa ori caractere subtiri, cum imi plac mie, ori unele groase, care se vad de la distanta mare.
   Schema de conectare este identica, ca cea din articolul anterior:
      Am facut poze su cu afisajul initial, cel rosu, cu hartie pusa deasupra:
dar si cu cel verde, tot cu hartie deasupra:
   Partea de reglaj, e identica ca la ceasul anterior:
   Am facut si 2 filme:
   Programul (sketch-ul) folosit este DMD-P10-clock3b.ino !