Osnove in programiranje mikrokrmilnikov

Arduino je pojav za katerega bi težko rekli, da opisuje samo HW ali samo SW, zato mu tu namenajm poseben prostor.

Moderator: tilz0R

Osnove in programiranje mikrokrmilnikov

OdgovorNapisal/-a Lovro7 » 02 Maj 2024, 23:19

Že nekaj časa se ukvarjam z arduinoti, mikrokrmilniki na sploh. Informacije so raztresene po internetu in popijeje kar dosti živcev, da jih najdeš. Rad bi se tudi zahvalil @PPG78 za pomoč in spodbudo k objavi te teme. Upam da vam bo ta tema koristila, lahko tudi napišete svoje izkušnje…, da bodo vse informacije na enem mestu.


Z arduinotom smo se srečali praktično vsi elektroniki začetniki, profesionalci… tako da ga že poznate.
Arduino mikrokrmilniki so narejeni iz Atmel-ovih čipov. Arduino uno, nano, micro… uporabljajo ATmega328p mikrokrmilnik. Na njem je naložen bootloader, ki skrbi da lahko naložimo svoj program preko UART pinov (TXD, RXD). Arduino se poveže na računalnik preko usb kabla, ki uporablja drug protokol. Kaj sedaj?
Originalni arduinoti uporabljajo ATmega8 za komunikacijo med USB in UART. Kloni pa uporabljajo znani FT232R čip.

Kaj pa ko imamo projekt, kjer nam je škoda cele arduino plošče ampak hočemo programirati v ArduinoIDE?
V tem primiru kupimo ATmega328 in mu dodamo 16MHz kvarc in 2 22pF kondenzatorja. Ampak to žal ni vse. Če hočemo uporabljati arduinoIDE moramo naložiti bootloader. Celotnega postopka ne bom razlagal bom pa pripel link: https://youtu.be/B5HT5IKcprE?si=A1ieVjN4nfkAYFrU
Potrebujemo pa še en arduino ali pa ISP programator.
Za programiranje pa je tako: lahko uporabite drug arduino in povežete pin 1,2 na arduinotu z RX in TX čipa. Potem napišete kodo in jo naložite na arduino. Lahko pa uporabite namenski programator (USB to UART converter). Lahko ga kupite ali pa izdelate sami. V prilogo bom naložil načrt.

Obstaja arduino knjižica Mighty, kjer so bootloaderji tudi za druge atmelove mikrokrmilnike. Podrobnosti so na youtubu in git-hubu.

Lahko pa se zgodi da imamo kodo v .hex obliki ali pa da moramo dobiti še tista 2kb prostora, ki ju zasede bootloader. Kaj potem?
To pa je bolj kompliciran postopek.

Prvo bom razložil teorijo, potem pa samo nalaganje kode.

Če hočemo naložiti kodo brez bootloaderja mora biti v .hex formatu. V arduinoIDE lahko to dosežemo tako, da kodo izvozimo (export). Za nalaganje kode je več programov npr: avrdude, atmel studio 7… jaz uporabljam avrdude.
Avrdude je zahteven za začetnike, saj nima grafičnega umestinka. Za to pa so naredili dodatek avrdudess. Ta program ponuja grafični umestnik.
Avrdudess: https://github.com/ZakKemble/AVRDUDESS

V primiru da uporabljamo ORIGINAL ARDUINO! kot programator izberemo “arduino”. Če pa imamo KLON! pa “arduino: FT232R connected to ISP”. Če imamo drug programator izberemo tega. Potem izberemo datoteke, in kaj naj z njimj naredi. Spodaj ima še nekaj funkciji, ki jih ne bom posabaj razlagal. Desno zgoraj izberemo kateri mikrokrmilnik želimo sprogramirati. Potem pa pridemo do “fuse & lock bits”. Tu se bo malo zakompliciralo, vendar brez skrbi:

Razložil bom L fuse bajt na ATmega328 in 16. TI SE RAZLIKUJEJO PRI TIPIH MIKROKRMILNIKOV, ZATO PREVERITE DATASHEET. Atmel ima Lfuse ponavadi v 8. Poglavju. Zapisujejo se v hex obliki (0x11…).
Ta 2 čipa imata vgrajen 8MHz kalibriran oscilator.

ZA INFORMACIJO: arduino z (ATmega328) ima Lfuse 0xff (11111111).

Lfuse vsebuje podatke o uri mikrokrmilnika.
0 POMENI DA JE VAROVALKA PROGRAMIRANA, 1 POMENI DA NI PROGRAMIRANA!!!

Lfuse:
1. Bit: CKDIV8: deli frekvenco z 8
2. Bit: CKOUT: signale iz ure pošlje na določen pin
3. Bit: SUT1
4. Bit: SUT2: nastavljo koliko časa po ponovni pridobitvi napajanja ali po spustitvi tipke RESET začne izvajati kodo. Informacije o času so v datasheetu.
5-8. Bit: izbira ure/oscilatorja


ATmega328:
5-8. Bit:
1111/1000 zunanji kristalni oscilator nizke moči
0111/0110 “full swing cristsl oscilator”
0101/0100 zunanji 128kHz RC oscilator
0010 kalibriran(8MHz) integriran oscilator
0000 zunanja ura

Novi pridejo z: 0_10 0010 (0x_2). _ je zato, ker v datasheetu nisem zasledil 2. Bita.

ATmega16:
5-8 bit:
1111/1010 zunanji kristalni oscilator/keramični oscilator nizke moči
1001 zunanji nizkofrekvenčni kristalni oscilator
1000/0101 zunanji RC oscilator
0100/0001 integriran kalibriran RC 8MHz oscilator
0000 zunanja ura.

Novi pridejo z: 0_100001 (0x_1). _ je zato, ker v datasheetu nisem zasledil 2. Bita.

Kasneje bom dodal še razlago hfuse.

Pa smo prebrodili čez težji del. Sedaj pa sledijo programatorji:
Imamo več programatorjev vendar vsi delujejo na isti način. Podatke iz USB porta prevedejo v ISP(in system programing) protokol. Lahk kupimo programator iz kitajske za par €. Imamo pa tudi programator, ki ga je razvil S56FPW. Vezja pa so se prodajala v tej temi: https://www.s5tech.net/viewtopic.php?f=25&t=25612&p=309955&hilit=Isp#p309955
Ta prgramator ima FT232R, ki skrbi za USB-UART komunikacijo in ATmega8 ki je mikrokrmilnik.

Ker sem imel doma drug material pa sem se odločil za razvoj svojega programatrja:
Kot prejšni bo uporabljal FT232R za komunikacijo, samo da bo namesto ATmega8 uporabljal ATmega328. Ubistvu bo to oskubljen arduino. Ker USB-UART pretvornik že imam bom naredil vezje samo z ATmega328, bom pa dodal oba načrta.
Ta programator pa je potrebno še pripraviti na delovanje:
Najprej naložimo bootloader.
Nato ga priključimo prek usb kabla na računalnik, kjer odpremo arduinoIDE. Gremo pod file(datoteka) in izberemo sketches(primiri) in ga naložimo na arduino.
Potem izberemo tools(orodja) in kliknemo “programer”. Izberemo Arduino as Isp. S tem smo pripravili programator.

3. Programator pa je arduino vendar lahko pride do kakšnih težav. Ampak naj vas ne bo strah.
O arduinotu nimam kaj dosti za povedati. Postopek je isti kot pri mojem programatorju, samo da se začne pri 2. Koraki saj je bootloader že naložen. Lahko se uporablja konektor 2x3 na robu plošče ali pa pin 13, 12, 11.

V primiru da večkrat uporabljate mikrokrmilnike priporočam programator, da 1x na leto nekaj sprogramirate pa je tudi arduino vredu.

Temo sem objavil danes, ker sem ravno dobil idejo kaj vse moram zajet. V nasprotenem primiru bi polovico pozabil :_banghead . V soboto ko pridem do računalnika pa bom naložil vse priponke.
To je bila samo teorija, ko bom stvari preizkusil bom napisal nov prispevek in popravil morebitne napake.

To je zelo kompleksen post, z veliko informacijami zato me prosim obvestite če sem kaj zgrešil/se zmotil.
Vse je lahko žarnica, če je dovolj toka. http://lovro7.eu/index.html
Uporabniški avatar
Lovro7
 
Prispevkov: 293
Pridružen: 11 Feb 2024, 20:19
Kraj: Velenje (Šmartno ob Paki)
Zahvalil se je: 121 krat
Prejel zahvalo: 86 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 6

Re: Osnove in programiranje mikrokrmilnikov

OdgovorNapisal/-a S56FPW » 03 Maj 2024, 09:15

Lovro7 je napisal/-a:
Pa smo prebrodili čez težji del. Sedaj pa sledijo programatorji:
Imamo več programatorjev vendar vsi delujejo na isti način. Podatke iz USB porta prevedejo v ISP(in system programing) protokol. Lahk kupimo programator iz kitajske za par €. Imamo pa tudi programator, ki ga je razvil S56FPW. Vezja pa so se prodajala v tej temi: https://www.s5tech.net/viewtopic.php?f=25&t=25612&p=309955&hilit=Isp#p309955
Ta prgramator ima FT232R, ki skrbi za USB-UART komunikacijo in ATmega8 ki je mikrokrmilnik.

Na moji platici se lahko uporabi katerakoli atmega , 8, 168, 328 verjetno tudi atmega88 ki je pa še nisem probal
tukaj so pa gerberji in nekaj slikic https://lea.hamradio.si/~s56fpw/dir/isp/isp.html
http://lea.hamradio.si/~s56fpw/
Uporabniški avatar
S56FPW
 
Prispevkov: 917
Pridružen: 26 Jan 2015, 23:00
Kraj: Ljubljana
Zahvalil se je: 260 krat
Prejel zahvalo: 502 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 97

Re: Osnove in programiranje mikrokrmilnikov

OdgovorNapisal/-a zanka » 03 Maj 2024, 09:24

Na klonih je večinoma CH340, saj je cenejši. Original ima ATmega16U2 ali ATmega8U2. Pišem za najbolj prepoznaven Arduino UNO.
Arduino UNO ima konektor označen z ICSP, s katerim je mogoče sprogramirati bootloader za ATmega328, v primeru zamenjave obstoječega ATmega328 z drugim (npr. skurjen)

CKDIV8 se v izogib programiranju teh varovalk lahko nastavi tudi programsko. Če ni potrebe po točnem taktu, ni potrebe po dodatnem kristalu. Meni z integriranim taktom in CKDIV8 deluje UART na 2400b/s. Ni hitro, je pa uporabno. Sicer pa sta frekvenci kristala 11,0592 MHz oziroma 14,7456 MHz primernejši od 16 MHz za hiter UART.
Uporabniški avatar
zanka
 
Prispevkov: 3733
Pridružen: 17 Mar 2016, 00:16
Kraj: SI-8000
Zahvalil se je: 138 krat
Prejel zahvalo: 502 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 98

Re: Osnove in programiranje mikrokrmilnikov

OdgovorNapisal/-a reber » 03 Maj 2024, 11:52

Največ preprostih projektov sem naredil kar na ATtiny13A, bootloader se naloži, ampak če pravilno razumem samo zaradi določanja frekvence in nekaterih fuse bitov (ki so zame večinoma neznanka).
Nalaganje preko ISP, programator Arduino Uno as ISP, nekaj takega, preko 6 pinskega konektorja, ki ga dodam na vsako platko ali projekt, ki jo naredim za ta mali kontrolerček.
Ne spomnim se točno kdaj, kupil sem jih večjo količino, nekajkrat, tako da se jih je nabralo ene 500, ene pol sem jih porabil, mislim da so bili okoli 0,50USD, ali še nekaj manj.

Za kaj več, sem iskal nekaj v smislu 328 kot na kitajskih arduinotih, enkrat sem dobil tudi ATMEGA8L-8AU za pod 1USD, ampak jih arduino ne prepozna, poskusil sem preko podnožja, nisem spajkal nikamor. Sedaj čakajo, da jih nekako usposobim, verjetno je nekaj podobnega kot pri ATtiny13A SMD verzija, ki so bili nekaj s prednstavljenimi fuse biti in jih arduino ni prepoznal.

Pred kratkim sem za test naročil LGT8F328P na platkah https://vi.aliexpress.com/item/1005006135420639.html po 1,13USD, nisem še imel časa sprobat, samo čipe nikjer nisem videl ceneje.

S samimi Arduino platkami, ki so že narejene, nikoli ni bilo težav, v mislih imam kitajske klone ali verzije. Za marsikateri projekt je uporaba teh platk rahlo nerodna, razen v primeru micro in nano verzije, ki se kar cela montira namesto čipa na osnovno platko, ki si jo naredimo. Za projekt, ki se ga izdela v več kosih, ki ni več butična količina, poiščem poceni uC in jih poskusim uporabiti, za preproste zadeve je večinoma dovolj nekaj v smislu Unota, torej od Mega8 naprej.

Tema je zanimiva, vsaj začetek je obetaven, bi bilo zelo dobrodošlo, da se nadaljuje in obdela nekatere podrobnosti s katerimi imamo težave.
Sporočila sprejemam na e-mail objavljen na www.reber.si
Uporabniški avatar
reber
 
Prispevkov: 2170
Pridružen: 17 Mar 2015, 20:30
Kraj: Bled
Zahvalil se je: 246 krat
Prejel zahvalo: 814 krat
Uporabnika povabil: s54mtb
Število neizkoriščenih povabil: 255

Re: Osnove in programiranje mikrokrmilnikov

OdgovorNapisal/-a zanka » 03 Maj 2024, 16:05

reber je napisal/-a:... bootloader se naloži, ampak če pravilno razumem samo zaradi določanja frekvence in nekaterih fuse bitov (ki so zame večinoma neznanka).

AVR ima flash (kot ROM), RAM, FUSE in EEPROM. Omenjen flash je (po proizvodnji) prazen. Napolni se preko "Serial Programming Mode" ali preko "Self Programming Mode".
Serial PM je način, kjer se mu flash pobriše in se ga sprogramira od začetka preko SPI.
Self PM je način, kjer se mu del flash-a pobriše in se ga sprogramira od neke meje naprej. Pred to mejo se nahaja omenjeni bootloader. Njegov namen je sprogramirati samega sebe.

Če se AVR programira preko Serial PM (preko SPI), potem bootloader ni potreben. Bootloader je potreben, kadar se ga želi sprogramirati preko UART (kar počne Arduino). Čeprav sedaj razmišljam, čemu so sploh šli v to, če pa imajo na plošči ATmega16U2, ki bi lahko programiral preko SPI ...

Tudi STM32 ima po proizvodnji prazen flash, vendar ima tudi ROM, kjer je naložen bootloader. Ob zagonu, če je flash prazen, skoči na bootloader in ga je mogoče tudi programirati preko USB, UART ...
Uporabniški avatar
zanka
 
Prispevkov: 3733
Pridružen: 17 Mar 2016, 00:16
Kraj: SI-8000
Zahvalil se je: 138 krat
Prejel zahvalo: 502 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 98

Re: Osnove in programiranje mikrokrmilnikov

OdgovorNapisal/-a VolkD » 03 Maj 2024, 16:58

zanka je napisal/-a:Tudi STM32 ima po proizvodnji prazen flash, vendar ima tudi ROM, kjer je naložen bootloader. Ob zagonu, če je flash prazen, skoči na bootloader in ga je mogoče tudi programirati preko USB, UART ...
Za to je potreben vsaj še en dodaten pogoj in sicer pravilno postavljena zastavica, ki omogoča programiranje preko UART. Večinoma je ta zastavica pri novem nastavljena tako, da se to da, ni pa nujno. Sem že imel take pri katerih to ni šlo. Šele sprememba zastavice preko njihovega programatorja je omogočila ta način.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 66289
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 19666 krat
Prejel zahvalo: 10117 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 254

Re: Osnove in programiranje mikrokrmilnikov

OdgovorNapisal/-a Lovro7 » 03 Maj 2024, 17:07

reber je napisal/-a:Tema je zanimiva, vsaj začetek je obetaven, bi bilo zelo dobrodošlo, da se nadaljuje in obdela nekatere podrobnosti s katerimi imamo težave.


To je bil namen teme, da lahko na enem mestu najdeš vse o mikrokrmilnikih in programiranju.

V 1. Postu sem označeval bite z 1-8. To sem naredil zaradi lažje predstave, v resnici se označujejo tako (po vrsti od prvega do zadnejega):
7.
6.
5.
4.
3.
2.
1.
0.


Pa še nekaj informaciji glede pisanja kode.
Pri večini če ne vseh mikrokrmilnikih se vhodi/izhodi označujejo z P(port), oznaka porta(a, b, c…) in na koncu številka pina. Primir imena pina je PORTC7.

V arduinoIDE določimo način delovanja pina z funkcijo pinMode(pin, INPUT/OUTPUT). V C programskem jeziku pa določimo tako:
Koda: Izberi vse
DDRC7 = 1;    //DDR+ ime pina = 1/2

TEGA NE DOLOČAMO V ZANKI!
1: IZHOD
0: VHOD

Lahko naredimo da cel port izpiše binarno število. To je koristno pri D/A pretvornikih.
Koda: Izberi vse
PORTB = 500;    //na portu b izpiše:111110100


Tak način programiranja je možen tudi v arduinoIDE. Uporaben je ko potrebujemo velike hitrosti preklapljanja na pinih. Uporaba funkcije digitalWrite() porabi veliko časa in dopušča maksimalno hitrost do okoli 148kHz. Način, ki sem ga opisal zdaj pa dopušča hitrosti do 2,78MHz
9BA906F9-D175-462A-89AA-2EBCED34B359.jpeg

D69E1A81-F0DA-4039-B8C7-89704EE2FAD7.jpeg

2. Slika je funkcija digitalWrite().

Tukaj je primer kode blink sketch:
Koda: Izberi vse
Void setup(){
DDRC7 = 1;
}

Void loop(){
PORTC7 =  1;
delay(1000);
PORTC7 = 0;
delay(1000);
}
Vse je lahko žarnica, če je dovolj toka. http://lovro7.eu/index.html
Uporabniški avatar
Lovro7
 
Prispevkov: 293
Pridružen: 11 Feb 2024, 20:19
Kraj: Velenje (Šmartno ob Paki)
Zahvalil se je: 121 krat
Prejel zahvalo: 86 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 6

Re: Osnove in programiranje mikrokrmilnikov

OdgovorNapisal/-a Lovro7 » 03 Maj 2024, 18:19

Da ne bo zmede bom dodal še 2 primira Lfuse bajtov:
7: 1
6: 0
5: 0
4: 0 ->8

3: 1
2: 1
1: 1
0: 1 ->f
To se zapiše kot 0x8f

7: 0
6: 1
5: 1
4: 0 ->6

3: 1
2: 0
1: 0
0: 1 ->9
To se zapiše kot 0x69
Vse je lahko žarnica, če je dovolj toka. http://lovro7.eu/index.html
Uporabniški avatar
Lovro7
 
Prispevkov: 293
Pridružen: 11 Feb 2024, 20:19
Kraj: Velenje (Šmartno ob Paki)
Zahvalil se je: 121 krat
Prejel zahvalo: 86 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 6

Re: Osnove in programiranje mikrokrmilnikov

OdgovorNapisal/-a Lovro7 » 03 Maj 2024, 20:57

Sedaj pa bom razložil še Hfuses (high fuse). Low skrbijo za nastavitve ure, high pa za delovanje mikrokrmilnika:
7. Bit: OCDEN “on chip debuging enable” (ponavadi je izklopljen-1)
6. Bit: JTAGEN “joint test action grup enable” (v primiru da je aktiven zasede cel C port na ATmega328)
5. Bit: SPIEN “SPI enabled” (če hočemo programirati preko ISP mora biti aktiven-0)
4. Bit: WTDON (aktiven-0 je v primiru, ko želimo da lahko gre uC v sleep mode)
3. Bit: EESAVE “EEPROM save” (žal nisem našel več podatkov, tako da če kdo ve naj napiše)
2. Bit: BOOTSZ1 “boot size 1”
1. Bit: BOOTSZ0 “boot size 0” (določata prostor namenjen bootloaderju)
0. Bit: BOOTRST (normalno 1, spomin v bootu poveže na reset pin. S tem se izbriše ob pritisku reset tipke.

Tabela možnosti 1. in 2. bita:
Koda: Izberi vse
BOOTSZ1    BOOTSZ0
0                0           Največji prostor (normalno)
0                1
1                0
1                1
Vse je lahko žarnica, če je dovolj toka. http://lovro7.eu/index.html
Uporabniški avatar
Lovro7
 
Prispevkov: 293
Pridružen: 11 Feb 2024, 20:19
Kraj: Velenje (Šmartno ob Paki)
Zahvalil se je: 121 krat
Prejel zahvalo: 86 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 6

Re: Osnove in programiranje mikrokrmilnikov

OdgovorNapisal/-a reber » 04 Maj 2024, 10:00

Čisto slučajno sem naletel na tale video: https://www.youtube.com/watch?v=9IFSPqSr6t8 kjer opisuje Holtek uC, ki so cenejši,
v komentarjih so omenili še kitajski CH32V003F4P6, ki je res poceni https://vi.aliexpress.com/item/1005005977377855.html
in menda zmogljiv... za obe omenjeni alternativi proti AVR in Arduino, je potrebno uporabiti drugačno "orodje"... najbrž se splača, če gre za količino.
Sporočila sprejemam na e-mail objavljen na www.reber.si
Uporabniški avatar
reber
 
Prispevkov: 2170
Pridružen: 17 Mar 2015, 20:30
Kraj: Bled
Zahvalil se je: 246 krat
Prejel zahvalo: 814 krat
Uporabnika povabil: s54mtb
Število neizkoriščenih povabil: 255

Re: Osnove in programiranje mikrokrmilnikov

OdgovorNapisal/-a tilz0R » 04 Maj 2024, 20:53

VolkD je napisal/-a:
zanka je napisal/-a:Tudi STM32 ima po proizvodnji prazen flash, vendar ima tudi ROM, kjer je naložen bootloader. Ob zagonu, če je flash prazen, skoči na bootloader in ga je mogoče tudi programirati preko USB, UART ...
Za to je potreben vsaj še en dodaten pogoj in sicer pravilno postavljena zastavica, ki omogoča programiranje preko UART. Večinoma je ta zastavica pri novem nastavljena tako, da se to da, ni pa nujno. Sem že imel take pri katerih to ni šlo. Šele sprememba zastavice preko njihovega programatorja je omogočila ta način.


To ni res. Tvoj problem je bil povezan z "reflashing", po tem, ko si že naložil novo kodo.

Sicer pa, da se naslovim na originalni post. Super razloženo, a obstaja po mojem mnenju resen problem. Atmel AVR čipi so stari, slabi, predvsem pa zelo dragi. Arduino prodaja boardov z temi čipi je praktično nična. Enostavno jih je povozil čas in obstajajo boljše rešitve, tudi Atmelove, če hočete biti na Atmelu.

8-bitniki izumirajo, 32-bitniki pa niso nič bolj komplicirani od 8-bitnika. To je objektivna zadeva. Kdor to zanika, laže sam sebi. Da povem primer, ko sem začel z MCU-ji: Študent, 0 denarja, programator 50€, development kit tako-tako, debugger ne obstaja. Ko sem kupil programator od VolkD, sem po nesreči zaj****l fuse bite in je CPU pričakoval zunanji kristal. Kaj sedaj?

Super post, a predlagam, da ga naredite na kakšnem drugem Arduino hardware-ju. Predvsem pa je pomembno, da Arduino je danes le še software, hardware je pa lahko Atmel, Espressif, NXP, ST, ...
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 2372
Pridružen: 17 Jan 2015, 23:12
Kraj: Črnomelj
Zahvalil se je: 262 krat
Prejel zahvalo: 762 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: Osnove in programiranje mikrokrmilnikov

OdgovorNapisal/-a Lovro7 » 04 Maj 2024, 21:35

tilz0R je napisal/-a:
VolkD je napisal/-a:
zanka je napisal/-a:Tudi STM32 ima po proizvodnji prazen flash, vendar ima tudi ROM, kjer je naložen bootloader. Ob zagonu, če je flash prazen, skoči na bootloader in ga je mogoče tudi programirati preko USB, UART ...
Za to je potreben vsaj še en dodaten pogoj in sicer pravilno postavljena zastavica, ki omogoča programiranje preko UART. Večinoma je ta zastavica pri novem nastavljena tako, da se to da, ni pa nujno. Sem že imel take pri katerih to ni šlo. Šele sprememba zastavice preko njihovega programatorja je omogočila ta način.


To ni res. Tvoj problem je bil povezan z "reflashing", po tem, ko si že naložil novo kodo.

Sicer pa, da se naslovim na originalni post. Super razloženo, a obstaja po mojem mnenju reset problem. Atmel AVR čipi so stari, slabi, predvsem pa zelo dragi. Arduino prodaja boardov z temi čipi je praktično nična. Enostavno jih je povozil čas in obstajajo boljše rešitve, tudi Atmelove, če hočete biti na Atmelu.

8-bitniki izumirajo, 32-bitniki pa niso nič bolj komplicirani od 8-bitnika. To je objektivna zadeva. Kdor to zanika, laže sam sebi. Da povem primer, ko sem začel z MCU-ji: Študent, 0 denarja, programator 50€, development kit tako-tako, debugger ne obstaja. Ko sem kupil programator od VolkD, sem po nesreči zaj****l fuse bite in je CPU pričakoval zunanji kristal. Kaj sedaj?

Super post, a predlagam, da ga naredite na kakšnem drugem Arduino hardware-ju. Predvsem pa je pomembno, da Arduino je danes le še software, hardware je pa lahko Atmel, Espressif, NXP, ST, ...


Z arduinotom sem začel zaradi tega, ker večina ljudi ko začne z mikrokrmilniki začne z arduinotom. Tudi sam sem še praktično začetnik.
Se pa strinjam da je 8bitne mikrokrmilnike malo povozil čas. Za neko zalivanje ali kaj podobnega pa so še vedno verjetno najboljša izbira. Z ATmega328 sem naredil krmiljenje za MIG varilni aparat in je čisto dosti. Če kdo potrebuje takšno krmiljenje mi lahko piše na zs in bom dal načre.

Atmel pa sem uzel za primir, ker jih najbolj poznam, je pa podobno pri vseh.

Bi pa prosil da nekdo razloži še E in LB fuse bite, saj nisem našel veliko informaciji
Vse je lahko žarnica, če je dovolj toka. http://lovro7.eu/index.html
Uporabniški avatar
Lovro7
 
Prispevkov: 293
Pridružen: 11 Feb 2024, 20:19
Kraj: Velenje (Šmartno ob Paki)
Zahvalil se je: 121 krat
Prejel zahvalo: 86 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 6

Re: Osnove in programiranje mikrokrmilnikov

OdgovorNapisal/-a forest70 » 06 Maj 2024, 06:35

Lovro7 je napisal/-a:Arduino mikrokrmilniki so narejeni iz Atmel-ovih čipov. Arduino uno, nano, micro… uporabljajo ATmega328p mikrokrmilnik.

To že dolgo ni res. Poleg tega so z "Arduino" zmešali kup stvari med seboj.
1. Arduino IDE.
2. Arduino knjižnice.
3. Arduino kot hardver.

Kot IDE je zame dosti boljše okolje Visual studio code + Platformio
Poleg Arduino knjižnic obstaja cel kup drugih (CMSIS, STM32Cube, libopencm3, Zephyr RTOS in še jih je) in med seboj se jih ne da mešat.
Pri hardverju pa je ATmega 328 samo eden od mikrokrmilnikov, ki jih podpira Arduino. Obstaja cel kup bordov, ki imajo druge mikrokrmilnike kot so: STM32, ESP32, Lpc ...
Že dolgo je od tega kar sem pesedlal iz ATmege na ESP32, ki ima ogromno resursov (WiFi, BT, 4M Flash, 320K RAM, 2 procesorja, ki delujeta na 240 MHz) vendar ima eno veliko pomankljivost in sicer DEBUG
Sicer obstaja nek hardver za to, samo dela kakor dela.
Na koncu sem pristal na STM32, ki ima v svojem naboru mikrokontrolerjev različne resurse. Programator ST-Link je poceni in deluje samo s tremi žičkami. Seveda deluje tudi fantastično Debug.
Brez slednjega se mi zdi skoraj nemogoče programirat.
Res priporočam, da se znebite dinozavra 328 in presedlate na kaj bolj sodobnega.
Sedaj bodo nakateri rekli, saj je za ta projekt 328 čisto dovolj, res je, tudi stm32 je za ta projekt čisto dovolj, ker za zapolnit vse resurse pri obeh je kar zahtevna naloga.
Programira se oba enako v enakem okolju, torej za uporabnika je vseeno kateri mikrokontroler uporablja.
Toliko.
If you pay in bananas, you got monkeys.
Uporabniški avatar
forest70
 
Prispevkov: 2980
Pridružen: 14 Jan 2015, 00:11
Kraj: Koper
Zahvalil se je: 511 krat
Prejel zahvalo: 721 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 139

Re: Osnove in programiranje mikrokrmilnikov

OdgovorNapisal/-a VolkD » 06 Maj 2024, 07:05

forest70 je napisal/-a:Res priporočam, da se znebite dinozavra 328 in presedlate na kaj bolj sodobnega....
...

...Programira se oba enako v enakem okolju, torej za uporabnika je vseeno kateri mikrokontroler uporablja.

Verjetno se tega presedlanja marsikdo boji. Povsem neupravičeno. Bo več kot leto dni kar sem v internetni delavnici čisto praktično pokazal kako je to enostavno. Z ATMega168 (ATMega328) sem imel narejeno prikazovanje ure. Torej narejen že delujoč HW in SW.
HW: V načrtu sem zbrisal mikrokontroler ATMega168 in namesto njega narisal ST32F031. Potem sen povezal vse nožice na povezave, ki so zaradi brisanja prejšnjega uC-ja ostale v zraku. No te povezave sem kasneje malo spreminjal med seboj tako, da mi je uspelo narediti enostransko vezje (torej nič križanj povezav).
SW: Spremenil sem datoteko z definicijami povezav signalov z nožicami. Verjeli ali ne, a program se je prevedel s prve in tudi deloval v polni funkcionalnosti.

Torej ni nek baw bau. Star svet imaš lahko takoj na vrtu, zraven je pa še ogromno resursov, ki vabijo, da jih izkoristiš.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 66289
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 19666 krat
Prejel zahvalo: 10117 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 254

Re: Osnove in programiranje mikrokrmilnikov

OdgovorNapisal/-a Lovro7 » 14 Jun 2024, 17:49

Tukaj je še en zanimiv playlist z ogromno informacijami o delovanju mikrokrmilnikov

https://youtube.com/playlist?list=PLNyfXcjhOAwOF-7S-ZoW2wuQ6Y-4hfjMR&si=0Gjxw8sPox4BzAog
Vse je lahko žarnica, če je dovolj toka. http://lovro7.eu/index.html
Uporabniški avatar
Lovro7
 
Prispevkov: 293
Pridružen: 11 Feb 2024, 20:19
Kraj: Velenje (Šmartno ob Paki)
Zahvalil se je: 121 krat
Prejel zahvalo: 86 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 6


Vrni se na Arduino

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost