 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
mosqito Član


Pridružen-a: Čet 07 Apr 2016 23:22 Prispevkov: 3517 Aktiv.: 31.76
|
Objavljeno: Sob Avg 13, 2022 11:57 pm Naslov sporočila: 8-pinski ARM in (simuliran) 16 segmentni prikazovalnik |
|
|
Tule bom opisal en primer uporabe 8 pinskega mikrokontrolerja. Morda komu prav pride za kakšen projekt.
Na STM32G031 z osmimi pini bomo obesili en OLED prikazovalnik velikosti 128x32 na I2C. Dva pina bosta še porabljena za Rx in Tx (UART), dva sta za debugiranje in dva za napajanje. Potem pa že zmanjka.
En tak "segment" je lahko dokaj fleksibilen in ni nujno, da je prikaz zgolj "butast" segment, ampak lahko načeloma sprogramiramo še kaj več. A o tem kasneje. Gremo lepo po vrsti.
Najprej osnovna shema (v priponki). Na vezju je dodana še rešitev zaradi težave z resetom, ki sem jo opisal tukaj.
Osnovna ideja je, da se več takih modulčkov "naštrika" enega za drugim in v celoti tvorijo večji prikazovalnik. Ker so OLED prikazovalniki dokaj poceni, se da potem s tem narediti npr. neko tablo na javnem prostoru, ki bo prikazovala neke informacije (npr. temperaturo, stanje kakovosti zraka, ...).
Omenjeno "štrikanje" gre tako, da se Tx enega modula poveže na Rx naslednjega. Pri izpisu na tako verigo potem ni treba drugega, kot da pošljemo string, vsak od modulov prikaže prvi znak, ki ga je sprejel, ki ga od stringa odreže in string pošlje naprej. Zelo enostavno se potem lahko doda še razne "komande" v obliki ESC sekvenc, podobno kot je bilo na starih printerjih.
Opis: |
|
 Download |
Ime datoteke: |
SegmentOled_sch.pdf |
Velikost datoteke: |
45.61 KB |
Downloadano: |
23 krat |
_________________ Always going the extra mile. |
|
Nazaj na vrh |
|
 |
Wrecker Član

Pridružen-a: Pet 11 Feb 2011 22:43 Prispevkov: 254 Aktiv.: 1.46
|
Objavljeno: Ned Avg 14, 2022 9:33 am Naslov sporočila: |
|
|
Prima da si se tega končno lotil. Bo zanimivo spremljat.
Mam takoj nekaj amaterskih vprašanj:
-Zakaj na reset pinu ne more biti samo en pullup upor? TX je nato itak push pull izhod in ga tisti upor nič ne bi motil?
-Ali bi lahko uporabil strategijo, da bi debbugirna pina v procesu razvoja uporabljal za debugiranje, na koncu pa bi ju namenil, da počneta še kaj preprostega in koristnega. Kodo - hex file pa bi se nato nalagalo preko uarta? Ali si tako nalagneje kode mogoče za ta procesor že kaj preizkusil? Kako je z bootom in resetom v tem primeru? Ali bi bilo to sploh možno?
-Če bi na primer 100 teh modulov, ki bodo krmilili prikazovalnik z led diodami zvezal zaporedno, koliko časa bi trajalo osveževanje od prvega do zadnjega? Ali je treba vmes še kakšne driverje ali kaj takega ali je tu to nepotrebno?
|
|
Nazaj na vrh |
|
 |
mosqito Član


Pridružen-a: Čet 07 Apr 2016 23:22 Prispevkov: 3517 Aktiv.: 31.76
|
Objavljeno: Ned Avg 14, 2022 9:35 am Naslov sporočila: |
|
|
Naslednji korak je bamestitev razvojnega okolja. Sam nekako nisem pristaš špageti kode, ki jo zgenerira cube za stm32. Po drugi strani pa je pisanje vsega iz nule tudi zrlo zamudno in praktično nesmiselno. Lahko pa uberemo eno srednjo pot, ki se mi zdi dokaj optimalna. Uporabili bomo pripravljene HAL knjižnice, inicializacijo in vse ostalo pa bomo pripravili sami.
Tule so navodila za namestitev brezplačnega ARM razvojnega okolja za STM32F0/G0/L0 in BlueNRG-1/2/LP/LPS:
https://www2.keil.com/stmicroelectronics-stm32/mdk
Po namestitvi je potrebna aktivacija s serisko številko, ki je na gornji spletni strani.
Nameščeni MDK je na osnovi različice "essentials", obstajata pa še plus in professional, ki pa sta plačljivi.
Primerjava različic:
https://www2.keil.com/mdk5/selector
_________________ Always going the extra mile. |
|
Nazaj na vrh |
|
 |
mosqito Član


Pridružen-a: Čet 07 Apr 2016 23:22 Prispevkov: 3517 Aktiv.: 31.76
|
Objavljeno: Ned Avg 14, 2022 10:30 am Naslov sporočila: |
|
|
Za programiranje in debugiranje rabimo mali, poceni vmesnik st-link. Na amzon/ebay se jih dobi za nekaj eur. Opcija je tudi samogradnja, za tiste ki bi se spuščali v tako smer... https://e.pavlin.si/2016/02/28/how-to-program-blank-stm32f1-with-stlink-v2-firmware/
Kdor se misli vsaj malo bolj ukvarjati z mikrokontrolerji STM32, pa priporočam nov stlink-v3mods:
https://www.st.com/en/development-tools/stlink-v3mods.html
Poleg SWD porta za programiranje in debugiranje ima še virtualni serijski port in tudi premostitev za ostale vmesnike, ki omogočajo nalaganje kode preko bootloaderja (poleg uart še SPI, I2C, CAN).
Zaloge hitro izginjajo. Pred enim tednom jih je bilo na mouserju še 860, zdaj pa ni nobenega. Ima jih digikey.
Par kosov sem naročil, tako da če kdo rabi, naj mi sporoči. Ceno sporočim, ko pride mimo carinskih kolobocij.
_________________ Always going the extra mile. |
|
Nazaj na vrh |
|
 |
mosqito Član


Pridružen-a: Čet 07 Apr 2016 23:22 Prispevkov: 3517 Aktiv.: 31.76
|
Objavljeno: Ned Avg 14, 2022 8:59 pm Naslov sporočila: |
|
|
Wrecker je napisal/a: |
Prima da si se tega končno lotil. Bo zanimivo spremljat.
Mam takoj nekaj amaterskih vprašanj:
-Zakaj na reset pinu ne more biti samo en pullup upor? TX je nato itak push pull izhod in ga tisti upor nič ne bi motil? |
Shema je bila na začetku bolj splošno naravnana in tako je tudi ostalo v tem primeru. Za dano aplikacijo je dovolj pullup, oz. še ta ni potreben v nekaterih primerih.
Wrecker je napisal/a: |
-Ali bi lahko uporabil strategijo, da bi debbugirna pina v procesu razvoja uporabljal za debugiranje, na koncu pa bi ju namenil, da počneta še kaj preprostega in koristnega. Kodo - hex file pa bi se nato nalagalo preko uarta? Ali si tako nalagneje kode mogoče za ta procesor že kaj preizkusil? Kako je z bootom in resetom v tem primeru? Ali bi bilo to sploh možno? |
Vsekakor je izvedljivo. Tudi če bi kaj zaklenil, imaš še vedno opcijo, da delaš "under reset", le ob zagonu/power-up moraš imeti definirane nivoje, da ostanejo pini na default vrednosti in te koda ne "prehiti" in ti spremeni funkcijo. V tem primeru si bi zaklenil dostop do SWD. Kar se tiče bootloaderja, je možno programirati preko UART ali I2C. Če bi šel piat lasten bootloader, pa je ta lahko tudi v internem RAM.
Wrecker je napisal/a: |
-Če bi na primer 100 teh modulov, ki bodo krmilili prikazovalnik z led diodami zvezal zaporedno, koliko časa bi trajalo osveževanje od prvega do zadnjega? Ali je treba vmes še kakšne driverje ali kaj takega ali je tu to nepotrebno? |
Če so "naštrikani" eden na drugega, jih komot povežeš enega na drugega (Tx1-Rx2, Tx2-Rx3, ...). Zakasnitev je v končni fazi odvisna bolj ali manj od hitrosti prenosa, saj je posredovanje naprej lahko bajt-po-bajt, vse pa dela DMA, tako da niti CPU nič ne obremeniš.
_________________ Always going the extra mile. |
|
Nazaj na vrh |
|
 |
mosqito Član


Pridružen-a: Čet 07 Apr 2016 23:22 Prispevkov: 3517 Aktiv.: 31.76
|
Objavljeno: Ned Avg 14, 2022 9:20 pm Naslov sporočila: |
|
|
Kdor sledi tej temi tudi aktivno, naj se prosim javi (lahko tudi kdaj kasneje, ko bi šel kdo gledat za nazaj).
Poleg inštalacije uVision-a priporočam še inštalacijo enega od pripomočkov za delo github repozitoriji. Super enostavna je "želvica", ki se sicer integrira v win shell in je dostopna preko desnega klika.
https://tortoisegit.org/
Kogar to moti, si lahko namesti https://desktop.github.com/
Če je pa tudi to preveč, pa bo za začetek zadoščalo že, da samo repozitorij prenesemo v obliki ZIP datoteke.
Rabili bomo STM32CubeG0 HAL Driver MCU Component, ki se nahaja tule:
https://github.com/STMicroelectronics/stm32g0xx_hal_driver
Prvi dve opciji sta dostopni preko desnega klika (ustvarimo si eno novo mapo, desnoklik in izberemo eno od opcij)...
Opis: |
|
Velikost datoteke: |
33.36 KB |
Pogledana: |
1 krat |

|
_________________ Always going the extra mile. |
|
Nazaj na vrh |
|
 |
mosqito Član


Pridružen-a: Čet 07 Apr 2016 23:22 Prispevkov: 3517 Aktiv.: 31.76
|
Objavljeno: Ned Avg 14, 2022 9:22 pm Naslov sporočila: |
|
|
Lahko pa na spletni strani izberemo zelen gumb "CODE" in eno od opcij (desktop, če smo ga namestili), ali pa download ZIP, če nimamo nič nameščenega.
Opis: |
|
Velikost datoteke: |
136.21 KB |
Pogledana: |
2 krat |

|
_________________ Always going the extra mile. |
|
Nazaj na vrh |
|
 |
mosqito Član


Pridružen-a: Čet 07 Apr 2016 23:22 Prispevkov: 3517 Aktiv.: 31.76
|
Objavljeno: Ned Avg 14, 2022 9:26 pm Naslov sporočila: |
|
|
Za naš primer sta potrebni mapi "inc" in "src".
Zdaj lahko pričnemo z novim projektom v uVision-u. Najprej poženimo našo novo lepo frišno inštalacijo. Pokaže se okno aplikacije, praviloma brez odprtih datotek v editorju.
Najprej kliknemo na "Pack installer":
Opis: |
|
 Download |
Ime datoteke: |
keil5_pack_installer.png |
Velikost datoteke: |
4.94 KB |
Downloadano: |
3 krat |
_________________ Always going the extra mile. |
|
Nazaj na vrh |
|
 |
mosqito Član


Pridružen-a: Čet 07 Apr 2016 23:22 Prispevkov: 3517 Aktiv.: 31.76
|
Objavljeno: Ned Avg 14, 2022 9:28 pm Naslov sporočila: |
|
|
Na levi strani izberemo "STM32G0 Series"...
Opis: |
|
Velikost datoteke: |
112.48 KB |
Pogledana: |
3 krat |

|
_________________ Always going the extra mile. |
|
Nazaj na vrh |
|
 |
mosqito Član


Pridružen-a: Čet 07 Apr 2016 23:22 Prispevkov: 3517 Aktiv.: 31.76
|
Objavljeno: Ned Avg 14, 2022 9:30 pm Naslov sporočila: |
|
|
Na desni strani pri izbiri "Keil::STM32G0xx_DFP" kliknemo na "Install". Ko Pack Installer opravi svoje delo, se gumb obarva v zeleno:
Opis: |
|
Velikost datoteke: |
44.41 KB |
Pogledana: |
1 krat |

|
_________________ Always going the extra mile. |
|
Nazaj na vrh |
|
 |
mosqito Član


Pridružen-a: Čet 07 Apr 2016 23:22 Prispevkov: 3517 Aktiv.: 31.76
|
Objavljeno: Ned Avg 14, 2022 9:32 pm Naslov sporočila: |
|
|
Zdaj lahko zapremo pack installer in v glavnem oknu IDE kliknemo na Project - New uVision project:
Opis: |
|
 Download |
Ime datoteke: |
keil5_new_project.png |
Velikost datoteke: |
5.8 KB |
Downloadano: |
2 krat |
_________________ Always going the extra mile. |
|
Nazaj na vrh |
|
 |
mosqito Član


Pridružen-a: Čet 07 Apr 2016 23:22 Prispevkov: 3517 Aktiv.: 31.76
|
Objavljeno: Ned Avg 14, 2022 9:39 pm Naslov sporočila: |
|
|
Izberemo si mapo na disku, kjer bo naš nov projekt shranjen, ga poimenujemo (npr ForumVaja1) in kliknemo OK. Pojavi se okno za izbiro MCU, kjer izberemo na vrhu (1) "Software packs" (za kake prastare ARM7 je izbira lahko tudi "Legacy / no RTE", če bi se kdo rad igral s to starino). V (2) Search lahko vpišemo stm32g0 in spodaj izberemo (3) STM32G031J6Mx ter kliknemo (4) OK.
V search lahko tudi vpišemo celoten part number za izbrani 8-pinski STM32: STM32G031J6M
Opis: |
|
Velikost datoteke: |
90.63 KB |
Pogledana: |
1 krat |

|
_________________ Always going the extra mile. |
|
Nazaj na vrh |
|
 |
mosqito Član


Pridružen-a: Čet 07 Apr 2016 23:22 Prispevkov: 3517 Aktiv.: 31.76
|
Objavljeno: Ned Avg 14, 2022 9:42 pm Naslov sporočila: |
|
|
Sedaj se pojavi okno "Manage Run-Time Environment", kjer izberemo le dve komponenti in sicer pod CMSIS obkljukamo "CORE" ter pod Device obkljukamo "Startup".
Kliknemo OK in pojavi se osnovno okno urejevalnika.
Zdaj lahko začnemo s programiranjem.
Opis: |
|
Velikost datoteke: |
164.84 KB |
Pogledana: |
2 krat |

|
_________________ Always going the extra mile. |
|
Nazaj na vrh |
|
 |
mosqito Član


Pridružen-a: Čet 07 Apr 2016 23:22 Prispevkov: 3517 Aktiv.: 31.76
|
Objavljeno: Ned Avg 14, 2022 9:50 pm Naslov sporočila: |
|
|
Na levi strani je pregled vse source kode. Na vrhu je naš projekt s svojim imenom, ki se nadaljuje z drevesno strukturo datotek z izvorno kodo. Vidimo, da imamo Device in CMSIS mapi, ki sta se dodali preko izbire v prejšnjem koraku. Če ju razširimo, v CMSIS ne bomo imeli (še) ničear v "Device" pa sta dve datoteki "Startup..." in "System...". To bi bilo enako tudi pri kakem drugem izbranem mikrokontrolerju.
Kako dodamo novo source kodo v projekt?
V projektu imamo zavihek "Source group 1". To lahko preimenujemo. Za zdaj kar pustimo kot je, le z desnim klikom na to mapco izberemo opcijo "Add new item to Group":
Opis: |
|
Velikost datoteke: |
74.54 KB |
Pogledana: |
2 krat |

|
_________________ Always going the extra mile. |
|
Nazaj na vrh |
|
 |
mosqito Član


Pridružen-a: Čet 07 Apr 2016 23:22 Prispevkov: 3517 Aktiv.: 31.76
|
Objavljeno: Ned Avg 14, 2022 9:55 pm Naslov sporočila: |
|
|
Pojavi se okno za izbiro nove komponente (datoteke). Najprej izberemo tip "C File" (1).
Tega poimenujemo (2) v main.c
Izberemo še, kam naj se shrani. Kliknemo na "tripikce" (3), pojavi se okno za izbiro mape.
Tu ustvarimo novo mapo (4) Make new folder in jo poimenujemo "src" (5). Tu notri bodo vse naše source datoteke.
Opis: |
|
Velikost datoteke: |
73.95 KB |
Pogledana: |
2 krat |

|
_________________ Always going the extra mile. |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 458 dni
Powered by phpBB © 2001, 2005 phpBB Group
|