Atmel ATmega328 (a další z rodiny) a atomické čtení

Re:Atmel ATmega328 (a další z rodiny) a atomické čtení
« Odpověď #15 kdy: 28. 11. 2022, 08:28:41 »
tak hlavne arduino nie je urcene pre projekty, ktore su kriticke bud na stabilitu, alebo spolahlivost a rychlost. Od zaciatku su urcene skor na zaciatky programovania a vyucbu. Tomu zodpoveda aj vysledny kod. Na blikanie ledky, alebo meranie teploty, ci ovladanie ledky, motorckeka su idealne.
Do domacnosti na jednoduche projekty tiez. Nemusis velmi riesit hw, staci ti usb a program mas hotovy behom chvilky. Kniznice moze vytvarat ktokolvek a tomu zodpoveda obcas aj ich kod.
Stale je tu ale moznost pouzit len hw, a naliat si tam vlastny kod vytvoreny v asm.
Obcas sa desim toho, ked vidim, ze niekto si v arduine robi ovladanie kurenia, alebo projekty, kde zlyhanie moze mat fatalne nasledky.


Re:Atmel ATmega328 (a další z rodiny) a atomické čtení
« Odpověď #16 kdy: 28. 11. 2022, 11:09:28 »
Tak Arduino je jen nadstavba nad standardními vývojovými prostředky.
Takže komu u AVR třeba vadí jeho pomalé knihovny pro práci s porty, může klidně použít přímo funkce z avr-gcc.
Případně u ESP32 spustit kód napsaný v Arduinu pomocí funkcí  z freeRTOS na obou jeho jádrech.
Tedy klidně z Arduina použít jen setup() a loop() a zbytek napsat v avr-gcc nebo freeRTOS nebo ESP-sdk.

Re:Atmel ATmega328 (a další z rodiny) a atomické čtení
« Odpověď #17 kdy: 28. 11. 2022, 17:00:39 »
tak hlavne arduino nie je urcene pre projekty, ktore su kriticke bud na stabilitu, alebo spolahlivost a rychlost. Od zaciatku su urcene skor na zaciatky programovania a vyucbu.

Pozor, tohle není pravda. Arduino (Wiring) je od začátku určeno pro umělce, kteří chtějí rozblikat/rozhýbat svoje výtvory, aniž by se při tom museli zbytečně něco učit. To neučení je naopak jeden z explicitních cílů a dodnes je to v projektu vidět, odpovědi i na základní otázky jako třeba co za datový typ bere nebo vrací nějaká knihovní funkce musíte hledat ve zdrojáku.

Chodí k nám absolventi místní SOŠ kde Arduino k výuce používají, a je to fakt náročná práce je z té díry vyhrabat, naučit je správně uvažovat.

Wasper

  • ***
  • 120
    • Zobrazit profil
    • E-mail
Re:Atmel ATmega328 (a další z rodiny) a atomické čtení
« Odpověď #18 kdy: 28. 11. 2022, 19:19:08 »
Obcas sa desim toho, ked vidim, ze niekto si v arduine robi ovladanie kurenia, alebo projekty, kde zlyhanie moze mat fatalne nasledky.
Tak přiznávám bez mučení, tohle se týká i mě. Ale na svojí obranu musím podotknout, že maximální představitelná škoda, kterou je to hypoteticky schopné bez obsluhy napáchat, je vyplácání asi dvou kubíků vody z vodovodu přes vychlazovací smyčku, kterou ale ovládá mechanický termostatický ventil a tedy mimo dosah nespolehlivé čínské kopie.
Z čeho naopak mám (časem) strach je řídit tím IGBT na indukční pícku, to bude asi dost často barák bez proudu ;-)

Citace: Jakub Štech
Arduino (Wiring) je od začátku určeno pro umělce, kteří chtějí rozblikat/rozhýbat svoje výtvory, aniž by se při tom museli zbytečně něco učit. To neučení je naopak jeden z explicitních cílů a dodnes je to v projektu vidět,
Díky, takhle natvrdo řečeno mi to najednou zapadá do sebe a dává to smysl.

Bohužel asi je to asi dneska trend. Když jsem začínal, tak třeba k Atari bylo dost příruček (které jsme pokoutně kopírovali kde to šlo), ale třeba pro audio to začínalo vysvětlením funkce (Pokey, 4 kanály, děličky, posuvné registry) a pak popis jednotlivých registrů a pár jednoduchých příkladů.
Dnešní ekvivalent (a bohužel i to, co se učí děti) je "připoj na tyhle kolíky v DIN repráček a napiš v BASICu příkaz SOUND 100,20,5". A pochopit, co je za tím (a že zatím je něco netriviálního, s čím je potřeba počítat, počínaje spotřebou DS1820 při samplování, přes možnosti SPI/1w/I2C, jak reálně funguje vykreslování einku, že do toho serva jde PWM, že u toho ultrazvuku počítám dobu, než se vrátí echo apod.) se moc nenosí,  a když to člověka už zajímá, musí to složitě hledat.

Jako za mě jednoznačně malé bezvýznamné plus za referenci Atmelu. Zato Waveshare by zasloužilo...
« Poslední změna: 28. 11. 2022, 19:20:55 od Wasper »

Re:Atmel ATmega328 (a další z rodiny) a atomické čtení
« Odpověď #19 kdy: 28. 11. 2022, 19:29:25 »
Tak arduino jako HW ani jako libky ci IDE jsem nikdy nepouzil.. vzdy je to vlastni deska, vlastni kod a prime programovani.
Tak to chápu. Mě zatím Arduina celkem vyhovují (začínám znovu po hodně letech bastlit a už na to tak dobře nevidím, abych desky pro SMD kreslil ručně a pak to pájel pistolkou se smyčkou ze zvonkáče jako dřív, takže hotová deska docela pomůže), nakoupenou jich mám pěknou zásobu neoriginálních od Číňana tak různě za 1-2 eura a na nějakej větší podraz jsem zatím nenarazil (nepočítaje veselé historky z natáčení jako včerejší noc příjemně strávenou studiem referenčního manuálu, Arduinových knihoven a pak i assembleru, co leze z překladače ve snaze přijít na to, proč je výstup na e-Ink přes SPI nekompatibilní s použitím USART0 na debug - nakonec důvodem bylo to, že Nano získává 3.3V z FTDI, a ten eInk když překresluje, tak žere docela velké špičky, takže to celé šlo do resetu...), až na to, že jsem tak trochu nečekal, že doba pokročila a neoptimální jsou už knihovny na osmibity, no ;-)
Ale OK, beru to, že nejsem až tak divnej a tu obsluhu si napíšu vlastní.

BTW jak to tak čtu, je tu vlastně něco sehnatelného mezi Atmelem a RPi Zero, kde se dá snadno začít si hrát? Ta malina je třeba príma třeba na časosběrnou kameru, ale na malou meteostaničku mi přijde jako kanón na vrabce (a tam ani těch 200mA spotřeby v klidu moc nepotěší). Do myčky nebo ke kotli bude Arduino asi v pohodě, ale už třeba s tím einkem je dost trouble, když se nevejde do paměti ani videoramka, které jsou potřeba navíc dvě (ne, že by to nešlo to dorenderovávat za běhu, ale je to pakárna).

Ahoj,
za sebe muzu doporucit Raspberry Pi Pico, respektive RP2040. RAMka ma 264 kB, coz uz na hodne veci staci. Cena 119,- na ceskem eshopu. Na jednu desku flashnes picoprobe FW a druhou muzes debugovat.  Hlavni vyhoda je podle me ale Pico SDK, je pekne zdokumentovane s peknymi priklady oproti treba STM32 HAL nebo nedejboze esp-idf. Ma i par nevyhod jako pomale ADC, absence DAC, obecne periferie nejsou tak vymazlene jako treb u STM32.


Re:Atmel ATmega328 (a další z rodiny) a atomické čtení
« Odpověď #20 kdy: 29. 11. 2022, 08:33:57 »
Pozor, tohle není pravda. Arduino (Wiring) je od začátku určeno pro umělce, kteří chtějí rozblikat/rozhýbat svoje výtvory, aniž by se při tom museli zbytečně něco učit.
Asi som to nie celkom presne napisal. Ma to prilakat ludi k programovaniu, prave tym, ze si vedia rozblikat ledku behom chvilky. Niekomu to staci, a niekoho to namotivuje tak, ze sa tomu zacne seriozne venovat a prejde na ine prog. jazyky. A cim skor to urobi, tym lepsie prenho.
Ja napr. arduino pouzivam, ked chcem doma nieco rychle zbuchat (tie blikatka, hracky pre deti...), ale ked chcem nieco serioznejsie, tak to robim v Ccku.

... kterou ale ovládá mechanický termostatický ventil a tedy mimo dosah nespolehlivé čínské kopie.
Z čeho naopak mám (časem) strach je řídit tím IGBT na indukční pícku, to bude asi dost často barák bez proudu ;-)
A presne o tom to je. Sice to riadis arduinom, ale stale je tam ta poistka vo forme uplne zakladnych jednoduchych veci.
Horsi pripad by bol, keby tym arduinom si riadil aj tu vychladzovaciu smycku.
Tiez mam kurenie, aj tu smycku, aj klasicky bimetal na cerpadlo, aj klasicke Tcko (neviem ako sa to vola), ktore pusta vodu do vymenika, az ked je nahriata v krbe, Ale nad tym mam arduino s teplotnymi snimacmi, ktorymi sledujem, ci nahodou voda nema vysoku teplotu, a ci funguje vsetko ako ma.
Napr. aj svetla mam (zatial na stole) tak riesene. Viem ich zapnut a ovladat cez web, ale zaroven jednym rychlym prepnutim ich viem zapnut klasickym vypinacom.

Re:Atmel ATmega328 (a další z rodiny) a atomické čtení
« Odpověď #21 kdy: 29. 11. 2022, 19:07:34 »
Problém asi je, že každý pod pojmem "Arduino" vidí trochu něco jiného.
Někdo IDE  s pochybnými systémovými knihovnami s údajnou nutností hledat parametry funkcí ve zdrojáku, ( přitom stačí kouknout na jejich referenci v dokumentaci, kde jsou typy popsané ) jiný perfektní jednotné prostředí pro vytváření a správu náročných projektů s instalací na jedno kliknutí. ( což se o jiných toolchainech  nedá tak úplně říct )
Třeba taková Tasmota, což není zrovna školní projekt nebo hračka nějakého umělce-hudebníka má hlavní soubor pro překlad s názvem tasmota.ino
Což je Arduino, nepletu-li se.
Doma mi už několik zim řídí el. podlahové topení esp8266 s na hraným ESPeasy, což je taky projekt dělaný v Arduinu.
I to řízení IGBT lze jednoduše v Arduinu napsat - prostě použijete jen setup() a loop() a kód napíšete v čistém céčku.

_Jenda

  • *****
  • 1 605
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Atmel ATmega328 (a další z rodiny) a atomické čtení
« Odpověď #22 kdy: 30. 11. 2022, 01:42:54 »
Třeba taková Tasmota, což není zrovna školní projekt nebo hračka nějakého umělce-hudebníka má hlavní soubor pro překlad s názvem tasmota.ino
Nejen Tasmota. https://github.com/prusa3d/Prusa-Firmware#using-arduino

Wasper

  • ***
  • 120
    • Zobrazit profil
    • E-mail
Re:Atmel ATmega328 (a další z rodiny) a atomické čtení
« Odpověď #23 kdy: 30. 11. 2022, 05:50:35 »
I to řízení IGBT lze jednoduše v Arduinu napsat - prostě použijete jen setup() a loop() a kód napíšete v čistém céčku.
Mno, cynicky poznamenám, že když na 16MHz Arduinu samotnej digitalWrite() sežere plus mínus (nedohledával jsem časování všech instrukcí, co neznám, dostalo 1 takt) 52 taktů, tak ono ani nic jiného nezbude ;-) přitom když se to napíše normálně, tak jsou to takty přesně dva, to už se něco časovat dá. Tam se spíš bojím čistě HW kvality, že jakákoli chyba čínského výrobku, když by se náhodou zasekl s jedničkou na výstupu, může být za 3f můstkem opravdu efektní.

BTW místo setup() a loop() radši vyhodit celé core.a z linkování a rovnou můžu použít standardní main().

Ostatně i viz odkaz od Jendy u Průšy - WRITE z Firmware/fastio.h je použito na 268 řádcích, digitalWrite jen 23.

Re:Atmel ATmega328 (a další z rodiny) a atomické čtení
« Odpověď #24 kdy: 30. 11. 2022, 07:47:48 »
Cynicky poznamenám, že digitalWrite() klidně můžeme nechat klučíkům z kroužku radiotechniků nebo na časově nekritické operace.

Arduino vám klidně přeloží i něco jako tohle:

Kód: [Vybrat]

void setup() {
 
  DDRB = 0b11111111;       

}

void loop() {

  PORTB = 0xFF;
  PORTB = 0x00;

}

Zkuste si změřit frekvenci na některém pinu portu B...

A abych zůstal u původního tématu.
Ta vámi zmiňovaná knihovna fastIO.h je prošpikovaná mnou na počátku uváděným atomickým čtením z util/atomic.h

Re:Atmel ATmega328 (a další z rodiny) a atomické čtení
« Odpověď #25 kdy: 30. 11. 2022, 08:31:56 »
Problém asi je, že každý pod pojmem "Arduino" vidí trochu něco jiného.
Veru, niekto vyuziva priamo kniznice, iny len hw a komplet kod ma pisany v asm, dalsi vyuzije len bootloader a kod pise v C...
Ale ked sa bavime o arduine ako takom, tak vacsinou je to ta prva varianta.

Wasper

  • ***
  • 120
    • Zobrazit profil
    • E-mail
Re:Atmel ATmega328 (a další z rodiny) a atomické čtení
« Odpověď #26 kdy: 30. 11. 2022, 18:53:08 »
Arduino vám klidně přeloží i něco jako tohle:
...
Tak ono to staci napsat takhle a jde to i po bitech (prelozi se to na instrukce SBI a CBI, az na rezii loopu 4MHz), to same zjevne dela i WRITE z fastio. Navic volat to takhle v loop() je nestastne, nejen kvuli call a ret (to jsme na 2MHz), i kvuli  tomu ifu (dalsi 4 cykly, takze nesymetrickych 1,3MHz). Ale to uz se šťourame v detailech, podstatnejsi je ze z Arduino knihovnama to dá na nějakých 160kHz.
Navíc je fakt hloupé, že v referenci od toho digitalWrite vůbec není v notes and warnings poznámka, že je nešťastně pomalé a pro rychlejší přístup je třeba použít přímý přístup, to mi vadí mnohem víc než ta samotná pomalost. :)
Kód: [Vybrat]
#define nano_pin2port(pin) ( (pin)<8 ? &PORTD : (pin)<14 ? &PORTB : &PORTC )
#define nano_pin2mask(pin) ( (pin)<8 ? 1<<(pin) : (pin)<14 ? 1<<((pin)-8) : 1<<((pin)-14) )

__inline__ void nano_digital_write(int pin, int val)
{
    volatile uint8_t *out = nano_pin2port(pin);
    if (val) {
        *out |= nano_pin2mask(pin);
    } else {
        *out &= ~nano_pin2mask(pin);
    }
}