ARDUINO és a fal...(?)

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
FoxiMaxi
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2018. március 19. hétfő, 20:07

ARDUINO és a fal...(?)

HozzászólásSzerző: FoxiMaxi » 2018. március 19. hétfő, 21:11

Sziasztok!
Nem kívántam más témájába belekavarni, ezért gondolataimat, és persze a jelenlegi leküzdhetetlen problémám új témaként írom.
Immáron harminc éve foglalkozom mikrovezérlők programozásával kizárólag assambly nyelven. Az utóbbi időben leginkább a PIC család tagja voltak játékban. No de meghallva az idők szavát gondoltam egy nagyot, itt az ideje a C világot is felfedezni. Erre kézenfekvő megoldásnak látszott az ARDUINO környezet. Szemérmetlenül olcsó hardver, egyszerű fejlesztői környezet, támogatások...Az egyszerű és olcsó dolgok mindig gyanúsak, de bekaptam a horgot és vásároltam UNO-t Mini-t, Nano-t, meg néhány csecsebecsét az induláshoz. A játék részével hamar meg is lettem, de...
Akkor jöjjön a feketeleves. Nem kevesebbet szerettem volna mint egy 128x64 grafikus OLED kijelzőt munkára fogni. Mivel már túl vagyok a "mindent én" korszakon, hát éltem az elérhető szoftveres támogatással. Az ADAFRUIT-os dinoszaurusz egyszerűen nem akart lefordulni. Viszont találtam egy szubrutinokból álló kis mintát, ami elsőre elindult és a kijelzőre annak rendje és módja szerint kiírta a "welcome to Smart Prototyping" demo szöveget. Tetszett a dolog, mert nem kellett a program működésének tanulmányozásához a könyvtárrendszerek szövevényébe bonyolódni. Ott helyben szubrutinhívásokkal elérhetőek a függvények. Kár volt hátra dőlni...
Ugyanis rejtélyes hibák jelentek meg a program -void loop()- keretében. Ami biztos, hogy a string kezelése a rendszernek összeomlik. Nem száll el a proci, de adatfüggő hibajelenségek adódnak. Hosszas debug után az derült ki, hogy a 8x16-os karaktereket kiíró rutin meghívásával függnek össze a jelenségek. A karakterek bitmintáit egy jó nagy konstans tömbben tárolja. Na ennek a tömbnek az indexelése során történik valami, ami valószínű a változói területet összekócolja. Napokat szívtam már vele. Például..ha a tömböt numerikus értékkel címzem, tök jó. Ha az index egy változó, elromlik. Ha a tömbből két tömböt csinálok tök jó addig amíg csak az egyik felét címzem. Akár csak az elsőt, akár csak a másodikat akár többször is. Ha vegyesen, akkor hiba.
Nyilván a feladat már régen túl van a saját jelentőségén. Amennyi energiát már bele feccőltem, annyival assambler-ben már szőröstűl-bőröstül meglenne. A kérdés már ott tart, hogy egyáltalán ez a hardver-szoftver eszközrendszer alkalmas-e bármilyen kézben tartható alkalmazás megvalósításához? Élek a gyanúval, hogy csak az én ismereteim hiánya vitt zsákutcába, mert azért látni szép projekteket ezekkel a mütyürökkel.
Tehát, hogyan tudnék ennek a végére járni?
...

vargham
Pákabűvész
Hozzászólások: 227
Csatlakozott: 2014. január 8. szerda, 8:32
Kapcsolat:

Re: ARDUINO és a fal...(?)

HozzászólásSzerző: vargham » 2018. március 20. kedd, 4:26

A tömbök progmem-ben vannak?

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9904
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: ARDUINO és a fal...(?)

HozzászólásSzerző: Robert » 2018. március 20. kedd, 6:02

Fogadjunk:
UNO/Pro minire fejlesztesz és grafikus kijelzővel.

Azaz a SRAM-ból futottál ki :)
A dinamikus memóriafoglalás és a változók összecsúsztak....

Tipp/ok:
http://tavir.hu/konyv-tipushiba-1-string


Valamint jó lenne a programkódot is látni. Nem e függvényhívásból hívod meg újra és újra önmagát. Így elfogy a memória :)
http://www.tavir.hu - a gazda :)

FoxiMaxi
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2018. március 19. hétfő, 20:07

Re: ARDUINO és a fal...(?)

HozzászólásSzerző: FoxiMaxi » 2018. március 20. kedd, 10:55

Igen Uno/Mini volt a próbálkozások alanya, és mindkettő tök egyformán viselkedik. 328-as procival szereltek, miért is működne másként?
Igen, grafikus kijelző a drága. SSD1306 vezérlős 128x64. Dögével használt. Amúgy a kijelzővel semmi gond, teszi a dolgát.

Nos, hogy honnan fut vagy honnan nem...? Ez volt mindig is a gondom a C-vel mikrovezérlős környezetben. A fordító mit tesz be nekem kódnak....? Már az is furcsa, hogy egy ilyen feladatra 6-7kB futtatható kódot generál. Ebből a kétkaraktergenerátor tömb kb 2kB. Mert kettő van, az egyik a 6x8-as (kb 500byte) felbontáshoz, míg a másik a 8x16-hoz (kb 1500byte). Érdekes módon a 6x8 felbontású rutin nem okoz hibát.
Szóval a tömbök const unsigned char -ként vannak deklarálva. Ram-ba teszi...? Hogyan kényszerítsem rá, hogy ne tegye...?
Próbáltam megnézni, hogy a nagyok (ARDAFRUIT) hogyan csinálják. Na de aki azt mondja, hogy a C az olvasható.... :)
Az mondjuk még rendben is lenne, hogy az Arduino nem szereti a stringet...De nem úszod meg a használatát ha kijelzővel játszadozol. És a példa a végtelenségig le van egyszerűsítve. Kettő, néhány utasítást tartalmazó függvény. Ha ezt nem bírja a rendszer, akkor mit bír egyáltalán...? A legfájóbb az, hogy semmiféle fordítói hiba vagy üzenet nincs. Egyszerűen csak paraméterfüggően hibásan működik. Ez a legrosszabb ami csak lehet.
Idemásolom a linkjét az oldalnak. A progi túl hosszú lenne.

http://www.instructables.com/id/How-to- ... no-module/

vargham
Pákabűvész
Hozzászólások: 227
Csatlakozott: 2014. január 8. szerda, 8:32
Kapcsolat:

Re: ARDUINO és a fal...(?)

HozzászólásSzerző: vargham » 2018. március 20. kedd, 11:48

> Szóval a tömbök const unsigned char -ként vannak deklarálva. Ram-ba teszi...?
RAM-ba. Harvard architektúra, minden adat kötelezően az adatmemóriában van.

> Hogyan kényszerítsem rá, hogy ne tegye...?
Olvass utána: AVR progmem
Kezdésnek mondjuk ezeket:
https://www.arduino.cc/reference/en/lan ... s/progmem/
https://www.microchip.com/webdoc/AVRLib ... rings.html

FoxiMaxi
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2018. március 19. hétfő, 20:07

Re: ARDUINO és a fal...(?)

HozzászólásSzerző: FoxiMaxi » 2018. március 20. kedd, 16:06

Köszönöm szépen, este ki fogom próbálni. :)
Azért a fene megette az egészet, hogy a konstanst nem dugja alapból a ROM-ba. Assamblerben meg se fordul a fejben RAM helyet foglalni vele. Na mind1 is.
Aztán lehet megint csak az én alulinformáltságom, hogy "használható" dokumentációhoz nehéz hozzáférni. A tutoriálok meg a "kezdők" könyveivel teli a net, amik aztán legfeljebb billegtetnek egy lábat vagy beolvas egy potit. De emlékszem mekkora meglepetés volt belenézni az első .h vagy .cpp állományba a void loop() után. Arról nem is beszélve mit kerestem hogyan lehet saját könyvtárat csinálni. Szóval kicsit hiányolom azok támogatását akik már túl vannak az első For ciklus megírásán, valamilyen struktúrált alkalmazást írnának. Persze mindezt édes anyanyelvünkön.
Még egyszer köszi...és az eredményt mindenképpen közzé teszem. :)

vargham
Pákabűvész
Hozzászólások: 227
Csatlakozott: 2014. január 8. szerda, 8:32
Kapcsolat:

Re: ARDUINO és a fal...(?)

HozzászólásSzerző: vargham » 2018. március 20. kedd, 18:28

Még egyszer leírom: Ez a mikrokontroller Harvard architektúrájú, és nem Neumann. Adat csak az adatmemóriában lehet, kód pedig a kódmemóriában. A flash a kódmemória, a RAM az adatmemória. Tehát minden konstans bekerül a flash-ba, majd initkor az összeset átmásolja a RAM-ba. Ez az architektúra sajátja. Speciális utasításokkal elérheted, hogy a konstansok ne kerüljenek át a RAM-ba induláskor. Ezeket viszont nem is fogod tudni használni. Kell egy RAM-ban lefoglalt buffer, ahová szintén speciális utasításokkal mindig átmásolod a használni kívánt konstanst.
Dokumentáció:
Rákeresel az adott mikrokontroller adatlapjára + ott van a fentebb linkelt AVR Libc dokumentáció. Ezzel a kettővel bármit meg tudsz csinálni. Sokkal többet és jobban, mint a korlátozott Arduinoval.

FoxiMaxi
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2018. március 19. hétfő, 20:07

Re: ARDUINO és a fal...(?)

HozzászólásSzerző: FoxiMaxi » 2018. március 20. kedd, 21:24

Nos eljött az igazság pillanata! "...a gép forog, az alkotó pihen..." :)
Sikerült a végére járni és orvosolni a jelenséget. Még egyszer csak köszönni tudom a segítséget.
Persze nem csoda, hogy a szerencsétlen 2k RAM fejre állt a több mint 2k méretű tömböktől. Az már megint más kérdés, hogy a fordítónak ez miért nem veri ki a biztit. Biztos valami C örökség. Nagygépeken meg van dögivel erőforrás. Amúgy meg értem az architektúra különbségeket. :)

Köszönöm a linkeket is...így már könnyű...pardon valószínű könnyebb lesz. Mondjuk nekem meg se fordult a fejemben a Microchipnél keresni. Egy őskövület vagyok, az én agyamban még Atmel, Microchip, konkurencia...fogalmak laktak. Nyilván a világ nagyot fordult ha így összebútoroztak. A dokumentációs nehézségek mondjuk a hagyományos guglis keresgetésre vonatkoztak. Mert mit csinál az ember? Beüti a gugliba...Még szerencse, hogy idővel ráakad egy csapat hozzáértőre is. :)

vargham
Pákabűvész
Hozzászólások: 227
Csatlakozott: 2014. január 8. szerda, 8:32
Kapcsolat:

Re: ARDUINO és a fal...(?)

HozzászólásSzerző: vargham » 2018. március 21. szerda, 5:09

A Microchip pár éve megvette szőrőstől bőröstől az Atmelt.
https://www.microchip.com/announcements ... ires-atmel

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3231
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: ARDUINO és a fal...(?)

HozzászólásSzerző: kapu48 » 2018. március 21. szerda, 10:34

Ha magyarul könnyebb?
Itt is találsz segítséget:
http://www.elektromanoid.hu/arduino.html

FoxiMaxi
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2018. március 19. hétfő, 20:07

Re: ARDUINO és a fal...(?)

HozzászólásSzerző: FoxiMaxi » 2018. április 1. vasárnap, 21:57

Köszönöm a linket, igazán hasznos.
Közben sikerült túljutni a problémákon és a kis LCD-k igazán szépen működnek. Megcsináltam a 128x64-hez az SPI rutinokat, a 128x32-höz pedig az I2C-t. Nem tud sokat, csak egyszerű karakteres kiírás. Egyszerű alkalmazásokhoz ahol csak némi szöveget kell kiírni tökélete. Nem kell a "nagyok" szövevényes könyvtárait csatolni. Ha valakit érdekel, szívesen közkincsé teszem.
megcsináltam a könyvtáros verziókat is, bár kissé szívásos volt. Valahogy az IDE nem volt hajlandó a könyvtárat a forrás mappában megtalálni, csak az Arduino-ban. Pedig a fejlesztés és a debug célszerűen a forrásban történik és ha már minden jól megy akkor tettem volna csak az IDE mappába. Na de ez lehet megint csak az én bénázásom volt. :)

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9904
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: ARDUINO és a fal...(?)

HozzászólásSzerző: Robert » 2018. április 2. hétfő, 0:15

#include "valami" helyett <include <valami> és akkor a ino mellett keresi...
http://www.tavir.hu - a gazda :)


Vissza: “Arduino / C-nyelvű programozás (AVR-Duino, EthDuino, Arduino, Diecimila)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 2 vendég