https://www.tme.eu/cz/katalog/mechanicke-prvky_100336/?utm_source=mcu.cz&utm_medium=banner&utm_campaign=2020-03_Elementy_mechaniczne_general_MTM-2674_936x60_CZ
Tvrzení pryskyřic UV světlem patří mezi stále oblíbenější metody 3D tisku – zejména pro přesné výtisky s nároky na detaily a hladkými povrchy. Stereolitografie (SLA) je stává stále dostupnější technologií a využívají ji i stolní 3D tiskárny a neustále se rozšiřuje nabídka světlocitlivých termosetů. Většina pryskyřic trpí nepříjemným neduhem a to je zápach a toxicita.

Ve vánočních slevách jsem si koupil dvě tiskárny od společnosti Anycubic. První 3D tiskárna je Photon (aktuální cena je $244.00), ta druhá je 4Max Pro (aktuální cena je $299.00). Každá tiskárna používá jiný princip tisku. Recenze a zkušenosti na oběma tiskárnami uveřejníme později.
Mě zaujala nejen cena, která byla a stále je velmi zajímavá, ale také fakt, že dostanete hotovou složenou tiskárnu v uvedené ceně. Stačí pouze zapnout, nakalibrovat a můžete tisknout.

Photon je LCD UV tiskárna s vysokým rozlišením LCD (2560x1440px), která používá pro tisk UV pryskyřici. V balení byla jedna 0.5L láhev ze zelenou pryskyřici. Už při otevření lahve bylo velmi výrazně cítit silný zápach a tisknout moje první pokusy jsem mohl jen v jiné místnosti, která byla dobře větraná. To může způsobovat poměrně velké omezení na běžné použití 3D SLA tiskárny. Určitě zde sehrál roli i můj syndrom "Nic netušícího" a moje přání bylo rychlejší než všechno ostatní. To ale nemění nic na faktu, že ten zápach je velmi nepříjemný a dočetl jsem se, že i škodlivý.

Jako odpověď a pravděpodobně i zajímavé řešení nabízí společnost Anycubic svojí novou verzí pryskyřice pod názvem Plant-based UV Resin. Nemá asi výzvám se zde velmi rozepisovat, neboť všechny relevantní informace jsou uvedeny v přiložených obrázcích.

Chci jen dodat, že jsem novou verzi přiskiřice vyzkoušel v běžné místnosti a její vůně mi pripomýna vůni nového mýdla. Nevím jak to přesněji popsat, ale možná si někteří pamatujete ty staré mýdla na praní. Tak něco takového.

Ještě pro srovnání cena přímo od Anycubic:
Název500mL1L
Plant-based UV Resin$31.9949.99
UV Resin$24.99$41.99
Ještě si dovolím jednu poznámku. Vše jsem nakupoval přímo od Anycubic a doprava byla vždy zdarma. I když jsem si objednal pouze dvě 500ml láhve.


Stránka Anycubic



Postavte si analogové hodiny s několika ciferníky a LCD 240x240px.

Vlatnosti
  • použita interní STM32 RTC, podpora záložní baterie
  • k dispozici několik barevných ciferníků převzatých z internetu
  • ciferník s rozlišením 240x240 pixelů je komprimovaný na 4 bity a zabírá pouze 29kB paměti, takže až dva se mohou vejít do paměti STM32
  • nebyly použity žádné aritmetické funkce s plovoucí desetinnou čárkou a pomalé trigonometrické funkce


Ukázka
Zdrojový kód na GitHub
S ohledem na aktuální mezinárodní situaci šířící se epidemie nemoci COVID19 jsme byli nuceni přesunout konání veletrhu AMPER 2020 z plánovaného termínu 17.3.-20.3. 2020 do obvyklého termínu veletrhu AMPER 2021.

Seminář je určen vývojovým pracovníkům a výrobcům v oboru elektroniky, návrhářům desek plošných spojů (DPS), vedoucím vývoje, přípravy výroby a výroby samotné, stejně jako všem pracovníkům následných operací s DPS.
Seminář se uskuteční dne 19. 3. 2020, od 9 do 14 hodin, BVV Brno - pavilon P - sál P4

Program semináře:


9.00–9.20 h. Registrace

9.20–10.00 h. Metodika návrhu DPS
Ing. Vít Záhlava, ČVUT v Praze-FEL


Přednáška vychází ze zkušeností a poznatků při spolupráci návrháře s řadou vývojových a výrobních společností. Bude prezentován metodický postup při návrhu DPS, výčet úkonů, na které nesmíme při návrhu zapomenout. Dále vypíchneme tipy a trik

10.00–10.45 h. Desky plošných spojů pohledem výrobce
Ondřej Horký, Gatema a.s.
Rozdíly v požadavcích na výrobu prototypových desek a sériové produkce, chyby v návrhu DPS
z pohledu výrobce, nejnovější trendy ve výrobě DPS očekávané i na domácím trhu.


10.45–11.40 h. Základy návrhu mikrovlnných obvodů od S do Z
Ing. Milan Hammer, Mil 1 s.r.o
Základy návrhu mikrovlnných obvodů od schématu až do návrhu desky plošných spojů -
prakticky, jednoduše a jasně (rozmisťování součástek, routování, dolaďovací prvky na
desce, atd.)


11.40–12.00 h. Přestávka


12.00–12.55 h. Ohříváme atmosféru, aneb jak funguje chladič
Ing. Pavol Cabúk, PhD.
Krátké zjednodušené povídání o základních fyzikálních principech chlazení z praktické
stránky, ukázky různých typů chlazení a jejich možností.


12.55–13.40 h. AMTECH ̶ využití robotiky v SMT výrobě
Nikola Hrbek, Tomáš Ševčík, Amtech, spol. s r.o.
Představení společnosti AMTECH, oblast SMT technologií a dávkování, robotiky a automatizace.
Případové studie využití automatizace a robotiky v SMT výrobě.


13.40 h. Losování cen, občerstvení


14.00 h. Ukončení semináře


Navíc: krátká prezentace mimo rámec semináře
14.00–14.30 h. PADS Professional – nová generace programu PADS pro návrh DPS
Ing. Radek Řezníček, CADware s.r.o.
PADS Professional jako nástupce klasického programu PADS je zcela nový program
odvozen od high-end systému Xpedition společnosti Mentor.

Vstup je možný pouze na základě registrace předem, vložné 950 Kč (bez DPH). Více informací a registrace: zde

Každý registrovaný účastník semináře obdrží po ukončení semináře volnou vstupenku na veletrh.



S ohledem na aktuální mezinárodní situaci šířící se epidemie nemoci COVID19 jsme byli nuceni přesunout konání veletrhu AMPER 2020 z plánovaného termínu 17.3.-20.3. 2020 do obvyklého termínu veletrhu AMPER 2021.

Seminář je určen pro zájemce o elektroniku, pracovníky z výzkumu, vývoje a výroby elektronického průmyslu, pro odborníky z technických univerzit, vývojových center a aplikační sféry v oblasti elektronických součástek, systémů, aplikací.
Seminář se uskuteční dne 19. 3. 2020, od 9 do 13 hodin, BVV Brno – pavilon P – sál P4

Program semináře:


9.00–9.30 h. Registrace

9.30–10.00 h. IMAPS a rostoucí význam pouzdření v elektronice
doc. Ing. Ivan Szendiuch, CSc., Fellow IMAPS,
Vysoké učení technické v Brně, FEKT, Ústav mikroelektroniky
Stručná informace o společnosti IMAPS, která šíří poznatky z oblasti mikroelektronických
technologií (vše od čipu až po systém) a která podporuje spolupráci mezi firmami a univerzitami.
Prezentovány budou také některé nové poznatky a aktivity z oblasti mikroelektronických
technologií.

10.00–10.30 h. Analog Devices nové obvody pro měření, řízení, napájení a komunikace
Ing. Karel Dohnal, AMTEK spol. s r.o.

10.30–10.50 h. Přestávka


10.50–11.20 h. Novinky v portfoliu HT-Eurep – M2M komunikace
Ing. Richard Pospíšil, HT-Eurep Electronic, spol. s r.o.
Zajímavé novinky v sortimentu HT-Eurep Electronic: GSM/GPS moduly Neoway, magnetické
senzory, převodníky USB na UART Silabs, obvody řízení el.motorů a měření energie Silergy,
izolované CAN budiče Maxim.

11.20–11.50 h. Vývoj, výroba a součástky, od nápadu až do uvedení výrobku na trh
Ing. Martin Pilný, Ryston Electronics s.r.o.
K distribuci součástek a vestavných řadičů z vlastního vývoje poskytujeme zákazníkům technické
informace a komplexní služby pro vývoj, zkoušky, zavedení do výroby a testování v ATE systémech
vlastní produkce, s propojením do QMS.

11.50–12.20 h Je složité rozpoznat nepůvodní elektronické součástky?
Ing. Petr Neumann, Ph.D., Ústav elektroniky a měření,
Fakulta aplikované informatiky, Univerzita Tomáše Bati ve Zlíně

Povědomí firem o výskytu a riziku nepůvodních elektronických součástek není mezi firmami stále tak rozšířené, aby v daleko větší míře než dosud, vedlo alespoň k základním opatřením snižujícím riziko průniku takových součástek do vyráběných sestav. Analytické metody demonstrované na praktických příkladech mohou pracovníkům z průmyslu poskytnout užitečnou představu o možné realizaci „odkláněcích“ opatření ve vlastní firmě. Prezentace se bude zabývat právě takovým příkladem z oblasti výkonových MOSFET tranzistorů.

12.20–13.00 h Losování cen, občerstvení

13.00 h. Ukončení semináře

Vstup je možný pouze na základě registrace předem. Více informací a registrace: zde

Každý registrovaný účastník semináře obdrží po ukončení semináře volnou vstupenku na veletrh.




Emulácia ZX-Spectrum na čipe ESP32 s výstupom VGA na základe ovládača od BitLuni. Ďakujem @bobricius za uverejnený link.

Ďakujem @bobricius, že tu uverejnil link na veľmi peknú emuláciu ZX-Spectrum na čipe ESP32.
Výsledok je veľmi zaujímavý v cene niekoľkých USD, čo stojí za vyskúšanie.
Projekt je dostupný na GitHube.

Vlastnosti:
  • Výstup VGA, 8 alebo 16 bitov
  • Beeper digitálny výstup
  • Presná emulácia Z80
  • Emulácia Spectrum 16/48 architektúry bez PSRAM
  • Emulácia Spectrum 128/+2/+3 architektúry s PSRAM
  • Podpora klávesnice PS/2
  • OSD na VGA: Konfigurácia a výber architektúry, ROM a SNA
  • Uloženie a nahrávanie na/z pásky
  • Načítanie snapshot SNA
  • Interná podpora SPIFFS

Odkazy:
Stránka projektu na GitHube



Ak ste milovníkom vinylov alebo máte doma starý nefunkčný gramofón? Tu je pomerne jednoduchý návod ako si presne riadiť otáčky otáčania pomocou Arduino Nano.

Tento návod je určený na prestavbu, resp. úpravu pre gramofóny s jednosmerným motorom Nidec s PWM riadením. Predpokladám, že úprava pre iný DC motor nebude problém. Ja mám doma nefunkčný gramofón s AC motorom, ale pozeral som podobné DC motorčeky na ebay alebo Aliexpress a našiel som ich už do 2-3 USD.

Rýchlosť otáčania je presne riadená pomocou digitálneho potenciometra IC (Digipot) umiestneného na riadiacej doske spolu s 2 Arduino Nano. Na reguláciu otáčok motora sa používa PWM a správnosť otáčok je indikovaná zelenou LED.

Nižšie je uvedený odkaz na schému vrátane aj odkazu na riadiaci program pre Arduino.

Schéma zapojenia




Zdrojový kód pre Arduino
Webová stránka Nidec pre motor 22H677E010


Ak by ste vedeli o podobnom projekte pre ridenie otáčok gramofónu s AC motorom, budem rád ak mi pošlete link alebo ho pridáte do komentárov. Vopred ďakujem.



Malé představení a návod na úpravu alfanumerických OLED displejů na seriové rozhraní včetně knihovny.

Alfanumerické OLED displeje


Obr.1 - ilustrační obrázek (vlastní fotku se mi nepodařilo udělat v obstojné kvalitě)



Motivace

OLED displeje asi nemá smysl představovat, všichni je určitě odněkud znáte. Existují různé varianty od malých grafických displejů s plochou kolem dvou centimetrů čtverečních až po obří televize. Jednou z odnoží jsou alfanumerické OLED displeje. Zajímat by vás mohli třeba z několika níže uvedených důvodů:

  • Moduly displejů jsou plně kompatibilní s klasickými LCD s driverem HD44780 a ekvivalenty. Lze tedy používat široce rozšířené knihovny.
  • Vzhled proti klasickým negativním LCD (bílá na modré, bílá na černé a pod.) je o třídu lepší. Stejně tak i kontrast je o několik řádů větší a černé pozadí je opravdu černé a neprosvítá.
  • Spotřeba oproti negativním LCD je nižší (jas ale nejde regulovat).
  • Displeje mají bohatší znakovou sadu (můžete si přepnout EN/Jap, EN/Ruj, EUR + řecké znaky, EUR + symboly)
  • Displeje umí pracovat v grafickém režimu, kde lze ovládat každý pixel individuálně
  • Driver displeje podporuje i sériové rozhraní (po úpravě jumperů na modulu displeje)
Osobně mi jako největší přínos přišlo sériové rozhraní, které zjednodušuje připojení v různých "bastl" aplikacích. Rád bych vás tedy seznámil s postupem jak modul upravit na sériové rozhraní a stručně i s komunikačním protokolem. Pro ty z vás, kteří budou mít odvahu použít můj amatérský kód je pak na konci připraven ovladač k displeji.

Varianty

Displeje, kterých se tento text týká jsou vybaveny driverem RS0010 nebo WS0010 (též jako OLED-0010). Lze je sehnat v TME například pod názvy REC000802*, REC001602*, REC002002*, REC004002*, DEP08*, DEP16* a pod. V GME jsou k sehnání dokonce i levnější s podobným označením WEH00*. Jejich cena se pohybuje od 200kč za 8x2 ke 350kč za 16x2. Úpravu rozhraní na SPI jsem testoval na variantě 0802 a 1202. S velkou pravděpodobností bude fungovat pro všechny dvouřádkové varianty. Nejsem si jist jestli lze upravit i čtyřřádkové displeje, neboť ty jsou vybaveny dvojicí driverů. Displeje se vyrábí ve 3V a 5V variantách. Můj kus REC001202AYPP5N (tedy 5V varianta) se rozbíhala na přibližně 1.8V. Domnívám se že 5V varianty jsou univerzální, schopné pracovat v 5V i 3V systémech. Smysl 3V variant mi trochu uniká - snad možná mají nižší spotřebu.

Úprava displeje 0802

Jumper označený L_CS_H spojuje ve výchozí konfiguraci CS pin s GND. Naše aplikace bude chtít s CS manipulovat a proto je jumper nutné odstranit a nechat rozpojený. Jumper označený H_PS_L (Parallel/Serial) je z výroby propojen s VCC a volí tak variantu paralelního rozhraní. My ho musíme přepájet do polohy "L", čímž vybereme sériové rozhraní. Z datasheetu k RS0010 lze dohledat že SCL (Clock) je DB5, SDI alias (MOSI) je DB7 a SDO (MISO) je DB6. Identifikace CS si vyžádala trochu "propípávání" a našel jsem jej na pinu 15 (viz obrázek). Zajímavé je, že jsem nikdy nenarazil na jediný datasheet k displeji, který by funkci jumperů a pinout pro sériové rozhraní jakkoli dokumentoval.


Obr.2 - Displej před úpravou (tedy v konfiguraci pro paralelní rozhraní kompatibilní s HD44780)




Obr.3 - Displej po úpravě na sériové rozhraní



Úprava displeje 1202

Obdobně lze upravit displej "1202". Pojmenování jumperu pro CS se drobně liší (CSH/CSL), ale je srozumitelné. Pinout se sériovým rozhraním je následující:

Pin displeje1212131415
SPIGNDVCCSCLSDOSDICS


Obr.3 - Displej po úpravě na sériové rozhraní, odpájený CS jumper (CSH/CSL nahoře) a jumper H_PS_L (vlevo) v poloze pro SPI.



Komunikační protokol

Nechci v této problematice zabředávat příliš hluboko, takže se pokusím stručně vyjádřit jen to nejnutnější. S displejem se komunikuje pomocí SPI. Driver čte data na vzestupnou hranu clocku, můžeme tedy použít SPI MODE0 a MODE3. Komunikace začíná sestupnou hranou CS a končí vzestupnou hranou. Jako první se posílá MSB. Formát zprávy je trochu "divný", ale v datasheetech je zakreslen správně a srozumitelně. Ze začátku komunikace se vždy posílají dva bity (RS a RW) a za nimi pak následuje jeden nebo více bytů dat. Takový formát není možné realizovat pomocí 8bit paketů a to částečně znemožňuje použití HW SPI na některých MCU. Je tedy na místě sáhnout po ručním ovládání GPIO, což sebou nese úskalí dodržení časových limitů komunikace (zvláště na rychlejších MCU). Význam prvních dvou bitů je následující:

  • RS - Read/Command bit, RS=0 znamená že posíláme příkaz, RS=1 znamená že posíláme data k zobrazování
  • RW - Read/Write bit, RW=0 znamená že budeme do driveru zapisovat, RW=1 znamená, že plánujeme číst
Několik vzorových zpráv vypadá následovně:

významformát zprávypoznámka
PříkazRS(0) + RW(0) + 1Byte(příkaz)celkem 10bit
1 Byte datRS(1) + RW(0) + 1Byte(data)celkem 10bit
n Byte datRS(1) + RW(0) + 1Byte(data1) + 1Byte(data2) + ... 1Byte(data n)celkem 2+n*8 bit
Čtení stavuRS(0) + RW(1) + 1Byte(dummy) + 1Byte(odpověď)celkem 18bit, MSB v odpovědi je busy bit, zbylá část je aktuální adresa kurzoru
Čtení pamětiRS(1) + RW(1) + 1Byte(dummy) + 1Byte(odpověď)celkem 18bit, nezkoušel jsem

Knihovna

Skládá se ze dvou dvojic souborů ws0010 a oled_v1. První z nich obsahuje fyzickou vrstvu komunikace, druhý obsahuje funkce pro ovládání displeje. Testoval jsem ji na STM32L0 (32MHz). Na pomalejších MCU je možné vyřadit funkci ws_delay(). Naopak na rychlejších MCU je potřeba delay prodloužit tak aby splňoval časové parametry komunikace (zapsané v záhlaví souboru). Portování knihovny na jiné architektury by mělo být snadné, neboť nevyužívá krom GPIO žádné HW prostředky. Komunikaci je možné libovolně přerušovat v kterékoli fázi.


archiv ke stažení:oled_v1.zip


Obr.4 - foto z testů





Poznámky

  • Datasheet k WS0010 inzeruje sériové rozhraní, obsahuje jeho timing i nákres, ale neobsahuje pinout (asi nepodstatná informace)
  • Datasheet k displeji REC001202A jde v nedbalosti ještě dál a má rovnou chybně pinout (naštěstí je to patrné na první pohled)
  • Při vypínání zůstávají na displeji několik sekund artefakty. Teoreticky je bude možné potlačit softwarovým vypnutím displeje před ztrátou napájení.

Odkazy a zdroje

www.elektromys.eu
| V1.00 5.1.2020 /
| By Michal Dudka (m.dudka@seznam.cz) /


Co všechno se dá dostat do Atmega8.


Sestavit výkonný a levný počítač pomocí moderních součástek není dnes už žádný problém. Ale použít k tomu zcela nevhodný a nevýkonný procesor - to je teprve ten pravý challenge! ... A proč zrovna ATmega8?

  • Je celkem levný,
  • snadno se používá,
  • mám jich nadpočetnou zásobu :-/
  • a je to dostatečně špatný nápad to dělat!


Schéma zapojení TQFP varianty
Schéma zapojení PDIP varianty
Kompletní návod, dokumentaci a silně inspirativní náladu najdete zde


Na brněnské akci OpenAlt 2019 jsme vyzpovídali Michala Hrušeckého z CZ.NIC ohledně nového routeru Turris MOX. Samozřejmě jsme se mu podívali pod pokličku a probrali nejen zajímavé řešení detekce připojených modulů Turris MOX.

Nahrávací technika i prostory nebyly to nejlepší, ale chtěli jsme využít kouzla okamžiku a nahrát pro vás po delší době další díl. Prosím omluvte zhoršenou kvalitu signálu.


Malá poznámka s demonstrací o vybraných low power režimech STM32L0

STM32L0 Low-power režimy I

Rodina STM32L0 je, jak jistě víte, určena pro "low-power" aplikace a asi nemá smysl ji nějak obšírně představovat. Mě osobně k ní přivedla kombinace několika faktorů. Byla to velmi příznivá cena variant v TSSOP pouzdře (STM32L011F4 lze koupit za přibližně 25kč) a neblahé zkušenosti se spotřebou 8bitových Attiny 1-series. Techniky, které může STM32L0 používat k optimalizaci spotřeby je celá řada a já s nimi nemám dost praktických zkušeností. Proto budu tento krátký tutoriál věnovat postupům jak snížit odběr v tzv. aktivním režimu (chcete-li "bdělém" stavu). Mnohdy totiž stačí srazit spotřebu na desítky uA a není třeba "trápit se" s režimy spánku (s nimiž je spotřeba ještě o řád nižší).

Stejně jako u většiny MCU má největší vliv na spotřebu taktovací frekvence ("clock"). Datasheet k STM32L011 na níž budu experimentovat uvádí spotřebu "až" 76uA/MHz (která je od praktické reality ale hodně vzdálená). Jako zdroj clocku máme krom 16MHz HSI (případně PLL), také MSI (Medium Speed) RC oscilátor. Jeho frekvenci je možné přepínat v sedmi krocích od 65kHz do 4.2MHz. Další snižování taktu jádru nebo periferiím lze docílit děličkami AHB a APB jako u všech STM. Slušnou kontrolu máme také nad vnitřním napěťovým regulátorem. Můžeme vybírat napětí pro digitální obvody čipu mezi 1.8V (tzv. Range1), 1.5V (Range2) a 1.2V (Range3). Se snižováním napětí klesá odběr a krom toho se také snižuje minimální napájecí napětí na kterém lze čip provozovat. Nad to všechno lze regulátor přepnout do tzv. Low-Power Run (LPR) módu a opět tím ušetřit další desítky uA. No a já si dovolím v několika krátkých prográmcích tyto funkce vyzkoušet a změřit při tom odběr. Veškeré ovládání je jednoduché a jedinou komplikací je zorientovat se v omezeních kdy lze kterou funkci využít. Což v praxi znamená posbírat podmínky různě roztroušené po datasheetu a nebo věřit, že jsem je správně shrnul v následujícím odstavci.

Omezení

  • Snížené napětí jádra (pod 1.8V) omezuje maximální frekvenci na níž smíte čip taktovat a některé kombinace napětí a frekvence vás nutí adekvátně zvětšit latenci pro přístup k flash paměti (přidat 1 "wait state"). Přesné limity najdete v tabulce níže.
  • Režim Low-Power Run smíte používat jen s taktem pod cca 130kHz a jen s napětím 1.5V (Range2). Navíc je omezen počet aktivních periferií (viz závěrečné poznámky).
  • Při napájecím napětí pod 2V je změnu frekvence o velký krok (víc jak o čtyřnásobek) nutné provést ve dvou krocích s prodlevou 5us. Například pokud chcete z výchozí frekvence 4.2MHz přejít na plný výkon (32MHz), musíte nejprve přepnout na 16MHz, na tomto kmitočtu vydržet alespoň 5us a teprve pak můžete přepnout na 32MHz.
  • Regulátor v Range 1 (napětí 1.8V) smíte použít pokud je napájecí napětí čipu větší jak 1.71V (v datasheetu je to formulováno velmi vtipně, viz závěrečné poznámky)

Napětí /
Frekvence
Range 1
Vdd > 1.71V
Range 2
Vdd > 1.65V
Range 3
Vdd > 1.65V
f > 16MHz 1WS - -
f = 8~16MHz 0WS 1WS -
f = 4.2~8MHz 0WS 0WS 1WS
f < 4.2MHz 0WS 0WS 0WS
f < 132kHz 0WS 0WS, LPR 0WS
Další omezení PLL<=96MHz PLL<=48MHz PLL<=24MHz,
Nelze mazat a
zapisovat Flash
Vysvětlivky:
- Zakázaná konfigurace
WS "Wait state"
LPR Low power run

PLL výstupní frekvence PLL
Vdd Napájecí napětí čipu


Testy

Další teorií vás nudit nebudu a rovnou se pustím do jednoduchých testů. Pro jednoznačnost zrekapituluji. Pracujeme na čipu STM32L011. Vzorové kódy využívají "LL" knihoven (HAL nemusím a STDper pro L0 nejsou). Napájecí napětí je 3.3V pokud nenapíšu jinak. Abychom mohli v různých režimech srovnávat spotřebu budeme ve všech příkladech blikat LEDkou na PA5 v rytmu 5Hz (tedy každých 100ms přepneme stav LED). Celý zdrojový kód je ke stažení v odkazech a nudnými kusy kódu (inicializaci pinů) vás nebudu obtěžovat. Čekací smyčku realizuji pomocí Systicku. Funkce LL_Init1msTick(SystemCoreClock) naplní strop Systicku odpovídající hodnotou aby přetékal každou milisekundu. Funkce LL_mDelay() pak vyčká odpovídající počet přetečení Systicku. Obě funkce jsou z knihovny "...utils.h". Protože se budeme během některých ukázek pohybovat s odběrem v řádu desítek uA, tak pro lepší objektivitu výsledků nastavíme všechny nepoužité piny (krom SWD rozhraní) do analogového módu. Výsledné spotřeby pro každou konfiguraci jsem shrnul do tabulky v závěru.

32MHz z PLL

V první ukázce rozběhneme čip na maximální frekvenci. V knihovně "...utils.h", je funkce LL_PLL_ConfigSystemClock_HSI(), která zjednodušuje nastavení clocku. Předhodíte ji parametry PLL a děliček pro APB a AHB a ona sama nastaví odpovídající latenci pro flash paměť, spustí PLL, přepne ho jako systémový clock (sysclk) a nastaví děličky. Z návratové hodnoty můžete zjistit zda proběhla úspěšně. Před jejím zavoláním si musíte pohlídat několik věcí sami. V prvé řadě musíte sami nastavit napěťový regulátor do Range 1 (1.8V), protože po startu čip běží v Range 2 (s clockem 2 MHz z MSI). Konfiguraci napětí provádí funkce LL_PWR_SetRegulVoltageScaling() jejíž argumenty jsou "...SCALE1" až "...SCALE3". Což je totéž jako Range 1 až Range 3 o nichž už padla zmínka. Škoda, že knihovny nedodržují terminologii z datasheetu. Přirozeně před voláním funkcí z PWR knihoven musíte do PWR pustit clock (jako všemu na STM). Před změnou clocku je potřeba ověřit že je regulátor v Range 1 a případně počkat (přepnutí může nějakou dobu trvat). Zda změna probíhá se můžete dozvědět z funkce/vlajky LL_PWR_IsActiveFlag_VOS().


// Taktujeme čip pomocí PLL na "plný výkon" (32MHz)
void clock_32MHz(void){
 ErrorStatus status;
 LL_UTILS_PLLInitTypeDef pll; // struktura pro konfiguraci PLL
 LL_UTILS_ClkInitTypeDef clk; // struktura pro konfiguraci AHB a APB děliček
 // PLLCLK = 16MHz * 4 / 2 = 32MHz (PLLVCO = 16*4 = 64MHz)
 pll.PLLDiv = LL_RCC_PLL_DIV_2; // 16MHz HSI dělíme 2 na 8MHz pro PLL
 pll.PLLMul = LL_RCC_PLL_MUL_4; // 8MHz pro PLL násobíme 4 na 32MHz
 clk.AHBCLKDivider = LL_RCC_SYSCLK_DIV_1; // Sysclkock nedělit
 clk.APB1CLKDivider = LL_RCC_APB1_DIV_1; // clock pro periferie nedělit
 clk.APB2CLKDivider = LL_RCC_APB2_DIV_1; // clock pro periferie nedělit
 // Přepneme regulátor do Range1 (Výchozí je Range2)
 LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR); // clock pro PWR kontrolér
 LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE1); // 1.8V pro jádro
 while(LL_PWR_IsActiveFlag_VOS()); // počkáme než změna napětí proběhne
 // zavoláme konfirugraci clocku (fce spustí PLL, nastaví latenci, přepne Sysclock na PLL)
 status=LL_PLL_ConfigSystemClock_HSI(&pll,&clk);
 // pokud vše proběhlo úspěšně, běžíme na 32MHz
 if(status==SUCCESS){SystemCoreClock = 32000000UL;}
}
 


16MHz z HSI

Taktovat čip z vnitřního 16MHz oscilátoru je velice jednoduchá záležitost. Stačí jej pomocí LL_RCC_HSI_Enable() zapnout, vyčkat než naběhne (indikuje funkce LL_RCC_HSI_IsReady()), nastavit latenci flash paměti pomocí LL_FLASH_SetLatency() a přepnout systémový clock pomocí LL_RCC_SetSysClkSource(). Protože nekonfiguruji napětí jádra, počítám s tím že čip běží s výchozí konfigurací, tedy v Range 2 (proto také nastavuji 1 Wait state).


// Taktujeme 16MHz z HSI, čip ve výchozím natavení (regulátor v Range 2)
void clock_16MHz(void){
 // rozběhnout HSI a počkat na jeho stabilizaci
 while(!LL_RCC_HSI_IsReady()){LL_RCC_HSI_Enable();}
 LL_RCC_HSI_DisableDivider(); // clock z HSI nedělit
 LL_FLASH_SetLatency(LL_FLASH_LATENCY_1); // V Range 2 je potřeba 1WS (v Range 1 stačí 0WS)
 LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_HSI); // přepnout systémový clock
 SystemCoreClock = HSI_VALUE;
}
 

Bude-li někomu z vás vadit latence flash paměti, může (nám už známým postupem) přepnout čip do Range 1. Takže jen pro kompletnost uvádím zdrojový kód. Jestli to má nějaké rozumné opodstatnění netuším, ale zajímalo mě jak to zahýbe se spotřebou.


// Taktujeme 16MHz z HSI, regulátor napětí přepneme do Range 1 (1.8V)
void clock_16MHzR1(void){
 // rozběhnout HSI a počkat na jeho stabilizaci
 while(!LL_RCC_HSI_IsReady()){LL_RCC_HSI_Enable();}
 LL_RCC_HSI_DisableDivider();  // clock z HSI nedělit
 // Přepnout napěťový regulátor do Range 1
 LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR); // clock pro PWR
 LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE1); // Nastavit napětí 1.8V
 while(LL_PWR_IsActiveFlag_VOS());  // počkat než se regulátor přepne
 LL_FLASH_SetLatency(LL_FLASH_LATENCY_0); // v Range 1 stačí 0WS (což je výchozí hodnota)
 LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_HSI); // přepnout systémový clock
 SystemCoreClock = HSI_VALUE;
}
 


Dovolím si věnovat malou pozornost děličce za HSI. Funkcí LL_RCC_HSI_EnableDivider() a LL_RCC_HSI_DisableDivider() můžete zapnout nebo vypnout děličku čtyřmi. Zajímavá bude asi hlavně v případě kdy HSI nepoužíváte jako clock pro jádro, ale pro LPTIM, LPUART nebo I2C.

1MHz z MSI

Nadpis je lehce zavádějící, protože MSI oscilátor má ve svém výběru frekvenci 1.048MHz, nikoli 1MHz (ale to by se hodně špatně četlo). Konfigurace je naprosto triviální. Čip má totiž po startu rozběhnutý MSI na frekvenci 2.096MHz (a bere z něj clock). Takže stačí pomocí funkce LL_RCC_MSI_SetRange() zvolit požadovanou frekvenci. Pokud nechceme do SystemCoreClock zapisovat frekvenci ručně, můžeme si pomoc makrem __LL_RCC_CALC_MSI_FREQ(), které ji za nás dopočítá. Když si ho prohlédnete, zjistíte, že frekvence MSI jsou násobky známé konstanty 65536 a tedy mocniny dvou.


// Taktuje čip 1.048MHz z MSI (MCU ve výchozím nastavení)
void clock_1MHz(void){
 LL_RCC_MSI_SetRange(LL_RCC_MSIRANGE_4); // zvolíme frekvenci MSI (1.048MHz)
 //while(!LL_RCC_MSI_IsReady()){LL_RCC_MSI_Enable();} // rozběhne MSI (lze vynechat pokud je čip ve výchozí konfiguraci - po startu)
 //LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_MSI); // přepne zdroj clocku na MSI (opět lze vynechat ve výchozí konfiguraci)
 //LL_FLASH_SetLatency(LL_FLASH_LATENCY_0); // Nastaví 0 Wait state pro flash (opět lze vynechat ve výchozí konfiguraci)  
 SystemCoreClock = __LL_RCC_CALC_MSI_FREQ(LL_RCC_MSIRANGE_4);
}


132kHz z MSI

Při naší cestě od vysokých taktovacích frekvencí k nižším, míjíme 132kHz. Tahle frekvence je zajímavá protože na ní už smíme přepnout regulátor do low power režimu. To lze provést funkcí LL_PWR_EnterLowPowerRunMode(). Před jejím voláním je ale dobré ohlídat si že je regulátor v Range 2. Zvláště pokud jste ho před tím měnili, jinak je v tomto režimu už po startu.


// Taktujeme čip na ~32.768kHz, regulátor v low-power, regulátor by měl být v Range 2
void clock_131kHz(void){
 LL_RCC_MSI_SetRange(LL_RCC_MSIRANGE_1); // zvolíme frekvenci MSI (132kz)
 //while(!LL_RCC_MSI_IsReady()){LL_RCC_MSI_Enable();} // rozběhne MSI (lze vynechat pokud je čip ve výchozí konfiguraci - po startu)
 //LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_MSI); // přepne zdroj clocku na MSI (opět lze vynechat ve výchozí konfiguraci)
 // Low power mód regulátoru lze zapnout jen v Range 2 (což je výchozí volba po startu čipu)
 //LL_FLASH_SetLatency(LL_FLASH_LATENCY_0); // Nastaví 0 Wait state pro flash (opět lze vynechat ve výchozí konfiguraci)
 LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);  // clock pro PWR doménu
 LL_PWR_EnterLowPowerRunMode(); // Přepneme regulátor do Low power módu (teoreticky teď máme limitované množství aktivních periferií)
 SystemCoreClock = __LL_RCC_CALC_MSI_FREQ(LL_RCC_MSIRANGE_1);
}
 


32.768kHz z MSI

Postupné snižování frekvence zakončíme na 32.768kHz. Další snižování ztrácí smysl, neboť dynamická složka odběru (závislá na frekvenci) je zanedbatelná ve srovnání se statickou složkou. Dál už na nás čekají jen režimy spánku nebo snižování napájecího napětí. Protože minimální frekvence MSI je 65.536kHz musíme využít AHB děličky a dělit dvěma. Opět můžeme regulátor přepnout do low power režimu. Další mikroampéru můžeme ušetřit deaktivací interní reference VREFINT. Po volání funkce LL_PWR_EnableUltraLowPower() bude během low power režimu (v němž běžíme) reference vypnutá. Tím přicházíme o BOR, PVD a interní teplotní senzor (což nám v tomto případě nevadí).


// Taktujeme čip na ~32.768kHz, regulátor v low-power, regulátor by měl být v Range 2
void clock_32kHz(void){
 LL_RCC_MSI_SetRange(LL_RCC_MSIRANGE_0); // přepneme MSI na 65.536kHz
 //while(!LL_RCC_MSI_IsReady()){LL_RCC_MSI_Enable();} // rozběhne MSI (lze vynechat pokud je čip ve výchozí konfiguraci - po startu)
 //LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_MSI); // přepne zdroj clocku na MSI (opět lze vynechat ve výchozí konfiguraci)
 //LL_FLASH_SetLatency(LL_FLASH_LATENCY_0); // Nastaví 0 Wait state pro flash (opět lze vynechat ve výchozí konfiguraci)
 LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_2); // Sysclock = 65.536/2 = 32.768kHz
 LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR); // clock pro PWR doménu
 LL_PWR_EnterLowPowerRunMode();  // Přepneme regulátor do Low power módu
 SystemCoreClock = __LL_RCC_CALC_MSI_FREQ(LL_RCC_MSIRANGE_0) / 2; // frekvence jádra
 LL_PWR_EnableUltraLowPower(); // Vypneme interní referenci VREFINT
}
 


Vyhodnocení

No a jak to všechno dopadlo ? Řekl bych že docela dobře. Protože STM poráží v těchto režimech ve spotřebě i 8bitové MCU řady Attiny.
Namátkou při 1MHz a 3.3V se dle datasheetu spotřeby pohybují:
Attiny24 - 600uA
Attiny13 - 500uA
Attiny1614 - 260uA
Srovnejte to s níže uvedenými výsledky našich pokusů.

FrekvenceZdroj
clocku
Napětí
regulátoru
Napájecí
napětí
spotřebapoznámka
32MHzPLL(HSI)Range 13.3V4.55mA
16MHzHSIRange 23.3V1.96mA
16MHzHSIRange 13.3V2.66mA
4MHzHSIRange 33.3V0.63mA
1MHzMSIRange 33.3V246uA
1MHzMSIRange 33.0V208uA
1MHzMSIRange 32.5V186uA
1MHzMSIRange 31.8V158uA
131kHzMSI Range 33.3V44uA
131kHzMSI Range 23.3V35uALow Power Run
32kHzMSI Range 23.3V21.1uALow Power Run
32kHzMSI Range 23.3V20.6uALow Power Run + ULP
32kHzMSI Range 23.0V20.0uALow Power Run + ULP
32kHzMSI Range 21.8V19.4uALow Power Run + ULP

Spotřeba v aktivích režimech

Závěrečné poznámky

  • Formulace "The voltage regulator outputs a 1.8 V voltage (typical) as long as the Vdd input voltage is above 1.71 V", kterou najdete v datasheetu, mi připadala velmi úsměvná.
  • O něco méně úsměvnější je poznámka "Please refer to the product datasheet for more details on voltage regulator and peripherals operating conditions". Já zmiňované detaily prostě nenašel...


STM32L011 na "bastldesce". Vyvedený reset na tlačítko a programátor je pro low-power experimenty víc než dobrý nápad.




Odkazy

Další tutoriály na www.elektromys.eu
By Michal Dudka (m.dudka@seznam.cz) 9.10.2019


ne ne ne, to není překlep. Příklad jak vaří SMT32. To bude Zdeněk Pohlreich koukat.

Bohužel ale kód není k dispozici. Tak pouze pro inspiraci.
Překlad: STM32 Automatický Omeletový Systém




V tomto návode vám ukáže, ako nakonfigurovať Visual Studio pre vývoj Arduino aplikácií.

Proč používat Visual Studio? Důvodů může být více. Například pokud máte rozsáhlejší projekt kde je Arduino pouze jeho část, nebo ze zvyku, kvůli širším možnostem VS. Rozhodnutí ponechám na vás.

Konfigurace prostředí
Visual Studio Arduino Debugger
Chci jen upozornit, že toto není plnohodnotný debugger. Nenašel jsem (zatím) způsob pro debugging včetně krokování. Nicméně je to určitě lepší způsob než má Arduino.
Pokud víte o plnohodnotném debuggeru, budu rád pokud nám pošlete link nebo to přidáte do diskuse.
Visual Micro web site
Arduino IDE for Visual Studio Module
Visual Micro ViKi

Stiahnite si free Visual Studio Community 2019


Návod ako nakonfigurovať populárne vývojové prostredie Visual Studio Code pre vývoj Arduino aplikácií, ako alternatívu k Arduino Desktop IDE alebo Arduino Web IDE.

Visual studio Code (VSC) je ve veľmi populárne IDE pre rôzne programovacie jazyky a použitia. V prípade použitia s Arduino mi to príde ako lepšie riešenie než originálne Desktop IDE alebo Web IDE or Arduina. Už len z dôvodu oveľa širších možností IDE ako majú originálne verzie.

Stiahnite si free Visual studio Code
PlatforIO PIO Unified Debugger

Přejít na stranu  1 2 3 ... 248 249 250
Prohledat MCU-mikroelektronika
Chatbox