Jump to content

Arduino DIY projekti


AndrisBB
 Share

Recommended Posts

Pa lielam 4 varianti:

* Raksti C bez jebkadam abstrakcijam. Lai ieslegtu GPIO bus tada stila PORT_A->ODR = 0x01; 

* Izmanto LL (Low Level) HAL biblioteku. Butiba plani wapperi ap regjistriem. 

https://www.st.com/content/ccc/resource/technical/document/user_manual/2f/71/ba/b8/75/54/47/cf/DM00105879.pdf/files/DM00105879.pdf/jcr:content/translations/en.DM00105879.pdf

__STATIC_INLINE void LL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint32_t PinMask)

{

WRITE_REG(GPIOx->ODR, READ_REG(GPIOx->ODR) ^ PinMask);

}

 

* Izmanto pilno HAL biblioteku. Ka mana video piemera.

Reku laba gramata https://leanpub.com/mastering-stm32

* Raksti pats savu HAL biblioteku.(Domaju ka bezjedzigs variants)

 

 

Assableri isti neredzu kur tur pielietot


Pirms 10 minūtēm , Jurkins teica:

Kad es pirmo reizi ieslēdzu arduino, man bija liels pārsteigums arī par tiem 734 baitiem dēļ "blinka".

Nu uz STM tur ir diezgan daudz koda lai tikai tiktu lidz main funkcija. Parkopet flashu uz ram, setupot pulkstenjus, utt.

Link to comment
Share on other sites

Pirms 13 minūtēm , AndrisBB teica:

uz STM tur ir diezgan daudz koda

Nu jā, arduino jau dara to pašu tikai krietni mazākā mērā.

Link to comment
Share on other sites

Pamēģinot vienkāršu Blinky applikāciju izmantojot HAL un LL bibliotēkas, tāds minimāls kods aizņem:

 

LL:

/home/andris/Documents/Demo/Toolchain/bin/arm-none-eabi-size build/Blinky.elf
   text    data     bss     dec     hex filename
   1636      12    1564    3212     c8c build/Blinky.elf

 

HAL:

/home/andris/Documents/Demo/Toolchain/bin/arm-none-eabi-size build/Blinky.elf
   text    data     bss     dec     hex filename
   4356      20    1572    5948    173c build/Blinky.elf

 

Sanāk ka HAL aizņem 3 reizes, LL 10 reizes mazāk kā Arduino layers, lai tika paslēdzelētu GPIO

 

Reāli jau protams, jo lielāka applikācija mazāk nozīmes tam HAL bibliotēku lielumam.

 

Labots - AndrisBB
  • Patīk 2
Link to comment
Share on other sites

  • 1 year later...
ivans39

labdien vai ir kādam pieredze granulu degļa kontroliera {smadzenes} izgatavošanā uz ARDUINO platēm var būt varētu padalīties ,shēmas,sketch un programmas priekš arduino,

paldies

Link to comment
Share on other sites

AndrisBB

Ja tu domā hex failu tad nē.

Labākais ko tu vari dabūt būs pārvēst viņu assambly instrukcijās un tad no tā sadalīt fukkcijās utt.

  • Patīk 1
Link to comment
Share on other sites

AndrisBB

Un kur tu to .hex failu dabuji? .elf fails gadījumā turpat nav?

Link to comment
Share on other sites

ivans39

ar avrdude  nolasiju no arduino mega 2560 granulu degļa,ierakstot atpakaļ citā mega 2560 pieslādzot pie degļa viss strādā ,

elf fails nav

Link to comment
Share on other sites

ivans39

lasit           avrdude.exe -p atmega2560 -c wiring -PCOM12 -b115200 -Uflash:r:'printer_firmware'.hex:i   

 ierakstit   avrdude.exe -p atmega2560 -c wiring -PCOM12 -b115200 -D -Uflash:w:'printer_firmware'.hex:i

Link to comment
Share on other sites

AndrisBB

Neko vairāk arī neizdarīsi. Vari ar visādiem tūļiem (kautvai online) pārvērst uz ASM instrukcijām. Gudrākie tūļi visdrīzāk sadalīs pa funkcijām, atpazīs ciklus utt. Tad vari manuāli izpētīt ko kura funkcija dara un iedot nosaukumus utt. Bet nu oriģinālu kodu jau tu tur nedabusi.

Link to comment
Share on other sites

Jurkins

Off: Man reiz bija baigais pārsteigums, kad granulu katlā ieraudzīju 2560-to atmegu. Neatceros, vai atmegai varēja kaut kādu fusi  ieslēgt, lai nevar nolasīt. Škiet, ka bija.

Labots - Jurkins
Link to comment
Share on other sites

  • 8 months later...

Šodien īpaši nav ko darīt un sen neesu čakarējies ar mikrokontrolieriem, tapēc domāju jātsvaidzina atmiņa.

 

Kautkad senāk Nordic man iedeva pāris šos USB puļķus, bet tā arī nekad nebiju pat izņēmis viņus no maisiņa. Jāpamēģina kautko uztaisīt.

2902521-40.jpg

 

Pa lielam nekā uz viņiem nav, reset poga, user poga, 2 LED un pats nRF52840 MCU, kurā ir arī 2.4hmz radio. 

Debuggera uz viņa nav, bet ir bootloaders, kas var paņemt firmwāri pa taisno no USB. Itkā OK, bet par nekādu debuggošanu tur var nesapņot, jāpaļaujas tīri uz printf'iem, kas nav nekāda aršana. Domāju jāpamēģina dabūt viņu pie dziesmas ar ārējo debuggeru. It kā ir Segger J-Link Pro (kuru aizņēmos no darba), bet tas būtu pārāk garlaicīgi.

Tapēc jāpamēģina vai darbojas ar STMicroelectrinics ST-Link. Tie man krājumos lielā daudzumā, pārsvarā nogriezti no Nucleo dev platēm.

 

Figura2.png

 

Problēma tik tāda ka tie nRF52840 izmanto iekšējo LDO un DC/DC konverteri (pat 2 pārus). Paņem 5V no USB un tad atkarībā no konfigurācijas [REGOUT0], pārveido uz ko vajag. Un pa defaulto tie ir 1.8V. Kas diezko labi nestrādās ar ST-Link. Par laimi konfigurācija saglabāta FLASH reģionā un kamēr to nepārraksta, tikmēr paliks tur tas ko iebūvētais būtloaders bij salicis, kas ir 3.3v. Ja netīšām sanāks pārrakstīt, tad vainu pūs jāmeklē kautkāds logic level šifters, vai arī jāvelk ārā J-Link, kas var pielāgoties kam vajag.

 

nRF52840-power-schematics.png

 

 

 

 

 

 

 

 

To ST-Link var pārflašot ar J-Link firmwāri ja baigi gribās, bet automātiska voltāžas līmeņu pielāgošanās tāpat nebūs.

  • Patīk 2
Link to comment
Share on other sites

Saspraudu un izskatās ka kautkāda dzīvība sāk parādīties.

 

openOCD nāk jau ar configu priekš ST-Link un nRF52 un izskatās ka pat strādā.

andris@andris-Precision-5510:~/Documents/Tools/openocd/tcl$ openocd -f ./interface/stlink.cfg -f ./target/nrf52.cfg 
Open On-Chip Debugger 0.11.0-rc1+dev-00001-g0dd3b7fa6-dirty (2020-12-12-03:01)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'.
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD

nRF52 device has a CTRL-AP dedicated to recover the device from AP lock.
A high level adapter (like a ST-Link) you are currently using cannot access
the CTRL-AP so 'nrf52_recover' command will not work.
Do not enable UICR APPROTECT.

Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : clock speed 1000 kHz
Info : STLINK V2J35M26 (API v2) VID:PID 0483:374B
Info : Target voltage: 0.007838
Error: target voltage may be too low for reliable debugging
Info : nrf52.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : starting gdb server for nrf52.cpu on 3333
Info : Listening on port 3333 for gdb connections

 

Tāpat arī gdb var piekonektēties

 

andris@andris-Precision-5510:~/zephyr-sdk-0.11.4/arm-zephyr-eabi/bin$ ./arm-zephyr-eabi-gdb /home/andris/Documents/Projects/__ZEPHYR_PROJECTS/nrf52_haptic/build/zephyr/zephyr.elf 
GNU gdb (crosstool-NG 1.24.0.37-3f461da-dirty) 8.3.1
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "--host=x86_64-build_pc-linux-gnu --target=arm-zephyr-eabi".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /home/andris/Documents/Projects/__ZEPHYR_PROJECTS/nrf52_haptic/build/zephyr/zephyr.elf...
(gdb) target remote localhost:3333
Remote debugging using localhost:3333
arch_cpu_idle () at ../zephyr/arch/arm/core/aarch32/cpu_idle.S:107
107		cpsie	i
(gdb) monitor reset halt
target halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x00000e94 msp: 0x20000720
(gdb) b main
Breakpoint 1 at 0x3c (2 locations)
(gdb) continue
Continuing.
Note: automatically using hardware breakpoints for read-only addresses.

Breakpoint 1, main () at zephyr/include/generated/syscalls/device.h:32
32		compiler_barrier();
(gdb) step
halted: PC: 0x000003fa
30		dev = device_get_binding(LED0);
(gdb) 


Pamēģināju caur VS Code un arī darbojas. Debug konfig fails

 

{
    "version": "0.3.12",
    "configurations": [
        {
            "cwd": "${workspaceRoot}",
            "executable": "./build/zephyr/zephyr.elf",
            "name": "Debug Microcontroller",
            "device": "nrf52",
            "request": "launch",
            "type": "cortex-debug",
            "servertype": "openocd",
            "configFiles": [
                "/home/andris/Documents/Tools/openocd/tcl/interface/stlink.cfg",
                "/home/andris/Documents/Tools/openocd/tcl/target/nrf52.cfg"
            ],
            "armToolchainPath": "/home/andris/Documents/Tools/gcc-arm-none-eabi-10-2020-q4-major/bin",
            "gdbPath": "/home/andris/zephyr-sdk-0.11.4/arm-zephyr-eabi/bin/arm-zephyr-eabi-gdb",
            "preLaunchCommands": []
        }
    ]
}

 

 

 

 

 

 

 

 

 

 

 

IMG_20211211_165821.jpg

Screenshot from 2021-12-11 17-09-32.png

Labots - AndrisBB
  • Patīk 1
Link to comment
Share on other sites

 

Šodien nokonfigurēju Zephyr OS projektu un dabuju pie dzīvības Bluetooth (BLE)

Uztaisiju nelielu servisu ar 5 propertijiem (Charestiristic). Katrs propertijs ieslēgs vienu GPIO uz laiku milisekundēs.

Ja nu kādam interesanti, tad kods te: https://github.com/AndrisBB/HapticGloves

 

Pagaidām kontrolēju caur Android appu, nekā īpaši interesanta.

 

Pie GPIO slēgsies 5 motoriņi (kuru pagaidām man vēl nav), kurus varēs ieslēgt/izslēgt no applikācijas.

Screenshot_2021-12-13-16-29-49-870_com.macdom.ble.blescanner.jpg

Link to comment
Share on other sites

https://www.elecrow.com/wiki/index.php?title=GPRS/GSM_Shield_v1.0

 

Modulis vienkārš pat pa sevi, turklāt ss-ā iegādājos.

 

Uztaisīju vienkāršu apziņošanas sistēmu, uzraksi SMS ar grupas nosaukumu un tekstu un no sd kartē esošajām telefonu grupām pārsūtās saņēmējiem, saņēmēji var nosūtīt Yes\No replay, kā arī log faili un citi sīkumi.

 

zemāk, paneļi kurus izmantoju, lai sastakotu uzparikti.

https://www.lemona.lv/datu-uzglabasanas-modulis-ir-savienojams-ar-arduino.html

https://www.ashop.lv/radiotehnikas-komponentes/arduino-komponentes/arduino-display/service:LCD1602-with-buttons/uid:1076318801

 

Nākamais ko vajadzētu izdarīt ir DIY barošanas ķēde ar akumulatoru, bet korpusu gan laikam būs no pusdienu kastītes jātaisa, jo nav trīsDē printera.

 

Labots - soks
  • Patīk 1
Link to comment
Share on other sites

Kāds varbūt var ieteikt modili LiPo baterijas lādēšanai un mikrokontroliera barošanai?

Kautko līdzīgu šim tik kompaktāku 

https://hobbycomponents.com/power/998-lipo-charging-with-step-up-boost-converter-module

 

Baterija visdrīzāk maziņa, kautkas no šāda tipa.

https://www.farnell.com/datasheets/2618857.pdf

 

Vai arī pašam būs jātaisa pcb?

Link to comment
Share on other sites

Biju izmantojis dažos projektiņos šo te - https://www.electan.com/sparkfun-power-cell-lipo-chargerbooster-p-6867-en.html


 

EDIT:  sorry, paskatījos uzmanīgāk - produkts vairs netiek tirgots.

 

EDIT 2:  tava ideja par savu PCB nemaz nav slikta. Mūsdienās ir pieejama vesela čupa IC kuros jau ir apvienots buck/boost un BMS vienā. 

Piemēram, no mūsu vācu drauga krājumiem:

 

Labots - Artanis
  • Patīk 1
Link to comment
Share on other sites

Pirms 44 minūtēm , Artanis teica:

Biju izmantojis dažos projektiņos šo te

Jāpapēta tos IC, varbūt jāuztaisa pašam savu versiju.

Link to comment
Share on other sites

Pirms 50 minūtēm , AndrisBB teica:

Vai no ON_1 vada kas nāk no MCU, tur vajag to pirmo pretestību?

Spriežot pēc čipa datasheet, nē nevajag.

 

Izteikšu minējumu, ka shēmas autors to rezistoru tur ielicis, lai samazinātu kaut kādu potenciālo zemfrekvences troksni uz signāla ieejas (tikai minējums). Tur jāskatās, ar ko bija paredzēts to ON signālu padot oriģinālajā izpildījumā priekš tās shēmas. Bet, atbildot uz jautājumu - nē, tas rezistors tur ir lieks normālā pielietojumā.

Labots - Artanis
Link to comment
Share on other sites

Man tagad vajag uztaisīt nelielu PCB priekš 5 micro vibro motoriem. 

Variants ir izmantot to IC, vai arī vienkārši MOSFET'u.

Otrais variants varētu būt mazliet kompaktāks (arī lētāks), ja salasa mazākus komponentus.

Tākā te https://www.precisionmicrodrives.com/ab-001-discrete-driver-circuits-for-vibration-motors

 

Kuru variantu izvēlētos? 

 

Link to comment
Share on other sites

Nezinot, kas tas par produktu un kādi tam ir implementācijas kritēriji (attālums no plates līdz izpildmehānismam, individuālu komponentu nomainīšanas iespēja remonta gadījumā, utml.), es visdrīzāk sliektos uz vienkāršāko risinājumu ar pieciem mosfetiem vai low-voltage SSR (atkarībā no komutējamās strāvas), un tos pa taisno raustītu no izvēlētā proča IO piniem. Kamdēļ sarežģīt dzīvi, kā saka. Bet nu es negribu bakstīt ar pirkstu debesīs, nezinot kopējo uzdevumu.

Labots - Artanis
Link to comment
Share on other sites

Uzdevums nav nekāds, es te pats čakarējos.

Vajag pieslēgt 5 micro motorus pie nrf52840. Vadu garums no motora līdz PCB max 20cm, nekādi ierobežojumi nav.

Vajag kompaktu. Tie MAX IC tāpat nesanāks nekas kompakts.

Link to comment
Share on other sites

Tev tas NFR ir OEM izpildījumā, vai kaut kāds development boards? Žēl, ka tie ir 80mA motoriņi. Būtu 50mA, varētu pa taisno no GPIO piniem barot.

Link to comment
Share on other sites

Uztaisiju PCB ar MOSFET'iem. Pagaidām 4x4cm. Ja strādās, tad būs jāsaliek kompaktāku variantu.

 

Screenshot from 2021-12-18 18-32-19.png

Link to comment
Share on other sites

  • 2 weeks later...

PCB tā arī pirms ZSV neatnāca, kautvai samaksāju par DHL 2 dienu sūtīšanu.

 

Nu nekas, tikmēr jāpačakarējas ap kodu.

 

Problēma ko tagad mēģinu risināt ir ieslēgšana/izslēgšana. Doma ir izmantot vienu pogu/GPIO, lai kontrolētu vai devaiss ir ieslēgts vai izslēgts. Izslēgtā stāvoklī MCU vienkārši sēž zemākajā power modē - CPU izslēgts, RAM izslēgts, viss izslēgts. Pamodināt var tikai ar GPIO interruptu (šinī gadījumā).

Pogas interrupts pamodina CPU, ja poga tiek turēta ilgāk par 2 sekundēm, tad MCU uzskata ka jāieslēdzas, ja poga tiek atlaista, tad atgriežas DEEP SLEEP modē.

Izslēgt var pogu paturot 3 sekundes.

 

State mašīnas diagramma. Pagaidām strādāju tik pie ieslēgšanas/izslēgšanas.

 

 

 

 

 

 

 

 

SystemState_stage_1.jpg

Link to comment
Share on other sites

Pēdējākajā Zephyr OS versijā (2.7.99) viņi ir pielikušo State Machine Framework, tapēc izmantošu to.

https://docs.zephyrproject.org/latest/guides/smf/index.html

 

Pašreizējo kodu var redzēt te:

https://github.com/AndrisBB/HapticGloves/tree/0.1_reset_functionality

 

Tas cik ilgi poga nospiesta ir implementēts diezgan glupi, vienkārši skaita tikšķus, bet būs jāutaisa kautkas "gudrāks" ar taimeriem.

 

Kad pieslēdz bateriju, sistēma uzreiz aizet DEEP SLEEP modē (ja poga nav nospiesta)

*** Booting Zephyr OS build v2.7.99-2727-g770732fe92fa  ***
[00:00:00.303,131] <inf> main: Starting main app thread ...
[00:00:00.309,082] <inf> state: reset_entry
[00:00:00.313,629] <inf> state: reset_entry: Button is not pressed, going into DEEP SLEEP
[00:00:00.322,113] <inf> state: reset_exit
[00:00:00.326,599] <inf> state: deep_sleep_entry
[00:00:00.331,573] <inf> state: deep_sleep_run: Should go sleep after this

 

Ja patur pogu 2 sekundes, tad MCU resetojas un pārslēdzas uz ADVERISE modi.

[00:00:00.304,443] <inf> main: Starting main app thread ...
[00:00:00.310,394] <inf> state: reset_entry
[00:00:00.314,910] <inf> state: reset_run
[00:00:00.419,372] <inf> state: reset_run
[00:00:00.523,742] <inf> state: reset_run
[00:00:00.628,112] <inf> state: reset_run
[00:00:00.732,482] <inf> state: reset_run
[00:00:00.836,853] <inf> state: reset_run
[00:00:00.941,223] <inf> state: reset_run
[00:00:01.045,593] <inf> state: reset_run
[00:00:01.149,963] <inf> state: reset_run
[00:00:01.254,333] <inf> state: reset_run
[00:00:01.358,703] <inf> state: reset_run
[00:00:01.463,073] <inf> state: reset_run
[00:00:01.567,443] <inf> state: reset_run
[00:00:01.671,813] <inf> state: reset_run
[00:00:01.776,184] <inf> state: reset_run
[00:00:01.880,554] <inf> state: reset_run
[00:00:01.984,924] <inf> state: reset_run
[00:00:02.089,294] <inf> state: reset_run
[00:00:02.193,664] <inf> state: reset_run
[00:00:02.298,034] <inf> state: reset_run
[00:00:02.302,337] <inf> state: Turning device full on
[00:00:02.307,830] <inf> state: reset_exit
[00:00:02.312,316] <inf> state: advertise_entry

 

 

 

 

 

Pamēriju enerģijas patēriņu DEEP SLEEP modē.

Mērījumiem izmantoju STM x-nucleo-lpm01a 

https://www.st.com/en/evaluation-tools/x-nucleo-lpm01a.html

 

 

 

 

IMG_20211227_173714.jpg

  • Patīk 1
Link to comment
Share on other sites

DEEP SLEEP modē vidēji sanāk ap 11uA pie 3.3V

 

 

Screenshot from 2021-12-27 17-42-32.png

ADVERTISE modē, vienkārši MCU darbojas ar 64MHz fekvenci, viens LED (to optimizēsim ar PWM) un Bluetooh izslēgts - baigi trokšņains, CPU sledzas iekšā/ārā. Tas būs jāpieslīpē, bet vidēji 3789 uA.

 

 

Screenshot from 2021-12-27 17-47-32.png

Link to comment
Share on other sites

Sanāk ka ar šo mazo 350mAh bateriju, vajadzŗtu izvilkt:

* Izslēgts - 24 000 stundas

* Pus ieslēgtā modē, bez Bluetooth - 74 stundas

 

2750-00.jpg 

Link to comment
Share on other sites

pirms 21 stundām , AndrisBB teica:

ar šo mazo 350mAh bateriju, vajadzŗtu izvilkt

Tu neaizmirsti pieskaitīt 5-15% li-po pašizlādi mēnesī (atkarībā no uzstādīšanas lokācijas temperatūras).

Link to comment
Share on other sites

P.S. Neredzu tavā shēmā nekādu de-bounce kapacitatoru pogām..?

P.S.S. Cepuri nost, ka ar šo visu darbojies un mācies!

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...