Tai mano pirmas eksperimentas radio dažnių generavime. Todėl labai jau nekritikuokite. Viskas prasidėjo nuo signalizacijos siustuvėlio, kurio nesugebėjau paleisti. Poto iš kinijos nusipirkau pirmą pasitaikiusi mikroscheminą kuris generuoja aukštus dažnius. Tai buvo TXC101, 300-1000MHz transmitter. Kuris gali veikti kaip savarankiškas prietaisas, o gali veikti valdomas mikrokontrolerio. Poto vėl buvo viskas užmiršta, kol kitame projekte liko vietos PCB (nes jos dabar didelės). Taip ir gimė šis visiškai žalias projektas su klaidom.
Schema paprasta- MCU (ATMEGA8), sintezatorius TXC101, biški pasyvių element ir dviejų tranzų stiprintuvas. Mažesnis tranzistorius tai kažkas su užrašu “7Y 1”, kas savo ruožtu gali būti: MMBR941, MMBR951 kas visai tinkama (arba ten visai ne tokia detalė, nors lupau iš kažko aukštadažnio), o didesnis buvo BLT50, kas gerai 470MHz, bet tikriausiai negerai prie 900MHz. Tačiau visiškai tranzo patikrinti prie aukštesnio dažnio nepavyko, nes traukiojant laidus ir jungiant visokiausias apkrovas tranzistorius biški užkaito ir jau nebeveikė. Toliau eksperimentus dariau be galinio tranzo…
(foto pasididina)
Continue reading →
Monthly Archives: March 2017
ARM:0002 versija B, TXT LCD
Kol kas visiškai neapsisprendžiau kokia “baze” remtis programuojant STM32 mikroschemą. Dabar tik eksperimentuoju ir paprasčiausiai pakartojau senesnį ARM projektą su tekstiniu LCD ekranėliu. Kol kas nebraidžiojau optimizacijos pinklėse ir naudojausi kažkieno sukurtais primityvais, kurie gana griozdiški viduje. Tačiau šaip – ne taip pavyko paleisti.
(dešinėje skaičiukas kur neaiškus tai fotikas pagavo momentą kai keičiasi reikšmė)
Kokios iškilo bėdos? Pagrindinė bėda buvo suvokti kaip galima duomenų pinus operatyviai perprogramuoti iš OUTPUT į INPUT. Pas mano naudojamas bibliotekas ten naudojamos griozdiškos struktūros. Ir aišku tingėjau skaityti instrukcijas.
Pradinė užduotis buvo, kad LCD gali būti prijungtas prie bet kurios kojos, bet poto teko supaprastinti, kad visdėlto jungiasi prie to pačio banko. Čia išlindo pirmas skirtumas tarp atmelio SAM7 ir STM32. Pas atmelį PIO kojos bent jau 32, priklauso vienam bankui. Gana logiška- CPU tai 32 bitų ir vienu smūgiu galima pakeisti 32 kojas. Pas STM32 kojos suskirstytos po 16 kiekvienam bankui. Kas baisiau, rodos viduje ten dar suskirstyta po 8 bitus ir išmaukyti tie bitai kažkokia tvarka. Aišku, gal galima skirtingus bankus valdyti skirtingais laikrodukais, o gal taupyti elektrą ir gal juos išjunginėti? Tačiau dingsta paprastumas… Kodėl taip padaryta aš nežinau. Bet man nepatiko.
A! dar kažkaip užmiršau, kad mano LCD tai 5V technologija, o STM32 tai 3V. Tai vieną vakarą prasikankinau be reikalo. Kažkaip galvojau, kad mano testinis ekranėlis veikia su 3V maitinimu.
ARM:0001 versija B arba STM32
Kažkada gavau Atmelio ARM šroto. O dabar gavau ST produkcijos beveik šroto. Tiksliau pamačiau, kai metė į šiukšlyną “paletėlę”* su STM32 čipais. Dalis čipų nukrito neatgaunamai, o keliasdešimt buvo sugauta ir parkeliavo namo. Tai buvo STM32F103RET6 – 512kB flash ROM, 64kB RAM ir 64 plonos kojos (gana daug kojų palinko gelbėjimo operacijos metu) … LEDų mirkčiojimui pats tas čipukas. 🙂
Gryni čipai neveikia, todėl sukurpiau savo PCB. Ji gavosi kraupiai raudona. Dar pakeliui nupirkau kinišką dev boarduką su mažesniu čipuku. Bet PCB iš kinijos atėjo greičiau. Į tą UNIBUS dalį nereikia kreipti dėmesio, čia eksperimentai- ten nebesiekia Eagle free softas ir ta dalis PCB kaip ir nesinaudojasi. Ten “menas” gerberiuose.
Aišku padariau kaip minimum dvi klaidas. Abi gana lengvai pataisomos- užmiršau RESET liniją patempti į pliusą. Ir panašus patempimas reikalingas prie USB jei jį naudoti. Ten reikėtu statyti gal net tranzu valdomą pull-up.
Apie softą kita šneka. Kažkaip seniokiškai piktybiškai nenorėjau jokio IDE. Man užteko tų “user friendly” nesamonių. Tik oldskūlas, tik hardkoras. Žodžiu dabar kompiliuojasi iš to pačio notepado- ir AVR ir STM ir atmelio ARMas. Ir iš ten pat ir programuojasi.
Kad ir ką nešnekėtu vartotojai- nėra labai patogaus softo. Kažkaip eina tendencija, kad jei reikia pamirksėti LEDą, tai reikia į čipuką supusti visa operacinę sistemą ir krūvas pričindalų… Aišku periferiją reikia suprogramuoti ir kuo toliau, ji sudėtingesnė. Bet dėti šimtus eilučių chaotiško kodo? ST išleido gerą įdėją- grafinį periferijos konfiguratorių STM Cube, ten aš jo sugeneruoto kodo nesugebėjau netik suprasti, bet ir sukompiliuoti su gcc. Poto skaičiau nemūsiškus forumus ir atsiliepimai buvo ne kokie… Matyt tokie oldfagai rašė.
Todėl teko pažaisti kokius trys vakarus ir pavyko visdėlto paleisti MCU kojas taip, kad jos duotu kažkokius signalus.
Deja, nepavyko svetimų bibliotekų privesti tiek, kad nerodytu nei vieno warning. Man nepatinka warningai…
gcc version 5.4.1 20160919 (release) [ARM/embedded-5-branch revision 240496] (GNU Tools for ARM Embedded Processors)
Building file: stm32f10x_vector.o
Invoking: MCU C Compiler
arm-none-eabi-gcc -Os -Wall -fno-strict-aliasing -fmessage-length=0 -fno-builtin -mthumb -mcpu=cortex-m3 -MMD -MP -ffunction-sections -fdata-sections -I ../src -I ../src/includes -I ../libSTM32F103 -I ../libSTM32F103/inc -MF objs/stm32f10x_vector.d -MT objs/stm32f10x_vector.d -c ../src/includes/stm32f10x_vector.c -o objs/stm32f10x_vector.o
../src/includes/stm32f10x_vector.c:114:4: warning: taking address of expression of type 'void'
&_estack, // The initial stack pointer
^
Finished building: stm32f10x_vector.oBuilding target: blinky_stm32f103.elf
Invoking: MCU Linker
arm-none-eabi-gcc -Wl,--gc-sections,-Map=blinky_stm32f103.map -Os -Wall -fno-strict-aliasing -fmessage-length=0 -fno-builtin -mthumb -mcpu=cortex-m3 -MMD -MP -ffunction-sections -fdata-sections -L ../ -T ../loaders/stm32.ld -I ../src -I ../src/includes -I ../libSTM32F103 -I ../libSTM32F103/inc objs/main.o objs/stm32f10x_it.o objs/stm32f10x_vector.o ../libSTM32F103/Release/libstm32f103.a -oblinky_stm32f103.elf
Finished building target: blinky_stm32f103.elf
Visas source kodas čia, su visom bibliotekom.
*) jei kas nesuprato, “paletelė” tai toks plastikinis laikiklis mikroschemom. Kaip šitas iš to pačio šaltinio:
Tik čia daugiau kojų turinti mikroschema STM32F205ZGT6 (1M flash, 132kb RAM ir 144 kojos…) biški per daug.