[ pajper1 @ 13.09.2017. 19:40 ] @
Imam neispravan merac radnih sati sa LCD-om nameran sam napraviti sa aduinom i oled imam link gde je neko to vec pravio da li bih mogao neko iskusniji da sagleda i posavetuje pozdrav Dragan.https://github.com/stuartpittaway/vdo-lcd-replacement
[ veselinovic @ 13.09.2017. 20:30 ] @
Napraviti brojac radnih sati je na prvi pogled vrlo jednostavno, ali...
Jedan problem ce zakomplikovati cijelu stvar, a to je kako pamtiti radne sate kad se ugasi motor.
Ima nekoliko pravaca za razmisljanje.
Najjednostavnije je koristiti interni eeprom za upis podataka, ali broj upisa u eeprom je vrlo ogranicen.
Sad, moze da se napravi sklop da detekciju nestanka napajanja, a uz arduino dodati neki kondenzator ( par hiljada uF) koji ce obezbijediti energiju za upis u eeprom. Ja sam to pravio i nisam zadovoljan radom, nekako nije to to.
Mozda se moze razmisljati na temu upisa na svakih recimo 15 minuta i brojati broj upisa ( lako se uradi) pa kad predje neki broj preci na drugu mem lokaciju. Dok napunis citav eeprom proci ce i rok trajanja motora.
Drugo je koristiti neki RAm i eksternu bateriju, pa kad smo vec tu kupiti RTC sa baterijom ( npr https://www.aliexpress.com/ite...b8-d790-4e2d-a257-e0da5d650d7b) i nesto malo RAM-a ( 60-tak bajtova sto je i vise nego dovoljno).
Trece koristiti neki FRAM o cemu Mikikg moze da napise roman.
Cetvrto, naizgled idealno rjesenje, napajati arduino uvijek a displej paliti na kontakt. E tu ostaje problem kad se mijenja akumulator, pa se vracamo na pocetak.

[ mikikg @ 13.09.2017. 21:22 ] @
Citat:
veselinovic
Trece koristiti neki FRAM o cemu Mikikg moze da napise roman.


Hehe :)

FRAM je opaka spravica, idealna za takve stvari "brojanja i pamcenja" necega.
Radni vek tj moguci broj upisa je sumanuto veliki, mnooooogo veci nego kod EEPROM, mislim da su negde i spominjali primer da ako se pise svake 1 sekunde u istu memorisku lokaciju da moze tako da se tera preko 30 godina :)
Moguce je upisivati preko 1 trillion (10^12) puta!

Dakle za sve situacije gde treba NV storage za podatke a da se ne koristi baterija, FRAM je zakon, besmisleno je koristiti bilo sta drugo.
Takodje je veoma brz, nema nikakvog "brisanja i cekanja" kao sto ima kod drugih memorija, to radi 1:1, kao RAM, kako posaljes podatak - tako je smesten.

Ja sam koristio SPI varijantu, to radi kao sat, on je od skora moja "default" komponenta koja ide uz sve MCU ;)
https://edevice.fujitsu.com/fj...MB85RS64-DS501-00012-6v0-Z.pdf

Programski "drajver" za FRAM je veoma prost, svodi se na 4 komande koje treba preko SPI da se salju/primaju i to je to!
Veoma prost za implementaciju, prostiji od bilo kog EE/Flash.
[ pajper1 @ 13.09.2017. 21:41 ] @
Nisam objasnio o cemu se ovde radi pa je stvar otisla u pogresnom pravcu...Postoji vec mikrokontroler ,eprom... problem je sa displejem koji je lcd na samoj plocici displeja je integrisan drajver,dekoder...on strada .Neko je imao problem i resio sa arduino nano i oled displejem moje je pitanje u vezi komponeti https://www.ebay.co.uk/sch/sis...p;_trksid=p2047675.m4096.l9146
kao i http://www.ebay.co.uk/itm/Comp...ies_ET&hash=item2c87d18dcf jer mogu naci ovo i kod nas ili da narucujem i oko fajlova koji su dati zasto dva fajla za displej?A jedan za arduino?
[ veselinovic @ 14.09.2017. 06:36 ] @
OK,
mada opsta prica nije za baciti.
Sad, hoce li to raditi ili nece moze ces saznati kad napravis.
Ja sam imao dosta problema sa tim gotovim programima, cesto su znali da ne rade korektno.
I da imas osnovni program i biblioteku koju je napisao ovaj covjek.
[ mikikg @ 14.09.2017. 11:13 ] @
I2C i SPI su nesto sto treba svakako poznavati i savladati na nekom izabranom MCU.
Kada se to zna, baratanje prikljucenim periferijama se svodi na tumacenje njenog DS i pisanja I/O funkcija za to.
Ima i brdo gotovih biblioteka za sve i svasta, mada je svakako savet da se napise svoj "drajver", nije to preterano strasno a usput se nauce neke stvari koje kasnije znace puno.

Jednom kada se I2C i/ili SPI periferija savlada, glavni main() deo program je veoma prost, prati vreme, ispisi na display, snimi u memoriju i to mu dodje to!

---

Ukoliko bi koristio FRAM, program se jos vise uproscuje, mozes opusteno da snimas svaki minut stanje tako da izbegavas kumulativnu gresku ako bi to radio na svaki sat ili komplikovao neku drugu logiku.
Tu se jedino postavlja pitanje sta se desava kada "nestane struje" kako ces to da hendlujes jer moze da se desi da bas u trenutku kada snimas podatke u memoriju da bas tad nestane struje i da dodje do korupcije podataka.
Jedno od standardnih resenja je da se prati ulazni napon (12V, tkz "power good" signal) i posto tu vec imamo neki regulator napona za 12->5V, postavi se malo veci elektrolit koji drzi napajanje jos recimo 1 sekundu posle nestanka dovodnog napona, taj signal se detektuje i tad uradis brzinsko snimanje u memoriju i "sigurno iskljucis" kontroler.


[Ovu poruku je menjao mikikg dana 14.09.2017. u 12:34 GMT+1]
[ mikikg @ 14.09.2017. 13:52 ] @
Kod takvih sklopova koji mere nesto u vremenu, veoma je bitno da se ispostuje pover-up i power-down procedura jer jednom ako omasi mora da se stopira i signalizira error i ne moze da nastavi dalje da radi, moguce je imati kopije podataka (moze gomila) i to nekako vratiti nazad sa nekom predikcijom maksimalne greske, eventualno logovati sve greske pa ako ih ima mnogo onda to nije dobro napravljeno : )
Iskoriste se razni brojaci u NV memoriskom prostoru koji mogu samo da broje pozitivno, 8bit, 16bit, 32bit, 64bit, 128bit, koliko god vam treba i imate takvih hiljdau+ na raspolaganju u jednom SOIC-8 kucistu sto je izuzetno korisna stvar sa kojom mozete da napravite bas fine i dobro osmisljene stvari sa jednim maleckim IC poput predhodno spomenutog Fujitsju FRAM.
BTW: FRAM nije skracenica od Feroelektricnog RAM nego od Fenomenalnog RAM : )
[ veselinovic @ 14.09.2017. 15:06 ] @
Citat:
mikikg
Jedno od standardnih resenja je da se prati ulazni napon (12V, tkz "power good" signal) i posto tu vec imamo neki regulator napona za 12->5V, postavi se malo veci elektrolit koji drzi napajanje jos recimo 1 sekundu posle nestanka dovodnog napona, taj signal se detektuje i tad uradis brzinsko snimanje u memoriju i "sigurno iskljucis" kontroler.



Bas kod ovakvog rjesenja mi se desilo ovo : http://www.elitesecurity.org/t496668-LM-arduino
Pobjegoh od tog rjesenja glavom bez obzira i smislih drugo.
Upisujem u eeprom dva bajta. Kad broj koji je upisan predje neku vrijednost ( svaki put se broj u epromu uveca za poznat broj) znaci da sam upisao x puta.
Onda izaberem iducu lokaciju u epromu i udri u krug.
Za punjenje cijelog eproma ce mi trebati preko 200 000 godina, s tim sto upisujem ne vise od 1000 puta na istu lokaciju.
Smatram da je to dovoljno.
[ mikikg @ 14.09.2017. 17:31 ] @
A kako znas do koje memoriske lokacije si stao, belezis zadnju adresu ili skeniras kod reseta celu memoriju pa "dokle si stigao"?
[ veselinovic @ 14.09.2017. 19:10 ] @
Miki,
imaju dvije strategije.
Prva- u startu ispraznim komlet memoriju ( upisem 00).
Pri inicijalizaciji skeniram sve i gdje nema 00 to je to.
Druga je da na adresi 00 i 01 pisem vazecu adresu.
druga traje krace, ali gubim dva bajta memorije.
Niti su mi vrijeme niti memorija kriticni, ali sam odabrao 2.
[ veselinovic @ 14.09.2017. 19:12 ] @
Kad smo vec kod eeproma, ja nisam pronasao nacin da pri programiranju arduina upisem u eeprom podatke.
Dovijam se da imam programce koje to radi, izvrsim ga jednom i onda unesem novi program.
[ dusans @ 14.09.2017. 19:57 ] @
Citat:
veselinovic:
Miki,
imaju dvije strategije.
Prva- u startu ispraznim komlet memoriju ( upisem 00).
Pri inicijalizaciji skeniram sve i gdje nema 00 to je to.
Druga je da na adresi 00 i 01 pisem vazecu adresu.
druga traje krace, ali gubim dva bajta memorije.
Niti su mi vrijeme niti memorija kriticni, ali sam odabrao 2.


Ima strategija koliko hoćeš...
Možeš koristiti varijantu binarne pretrage da bi pronašao prvu adresu koja sadrži 00,
za to ti ne trebaju dodatna dva bajta (o kojima takođe moraš voditi računa o broju upisa)
a o brzini u odnosu na prvu strategiju ne treba trošiti reči.
https://sr.wikipedia.org/sr-el...%D1%82%D1%80%D0%B0%D0%B3%D0%B0

[ mikikg @ 14.09.2017. 20:14 ] @
U vezi inicialnog popunjavanja, to je najlakse sa ifdef/define direktivama da se resi, napises tu rutinu za popunjavanje koja se odradi samo kada si setovao negde da to uradi, u suprotnom ne ukljucis tu opciju pa se ni taj code koji to radi ne ukljucuje u glavni izvrsni (BIN/HEX) fajl.
Mada bi kompajler trebao da bude pametan da sam to odluci ako imas definisanu funkciju a nisi je nigde pozvao (komentarisao si je) da je izbaci tj ne linkuje je u glavni HEX.

U sustini i ne moze drugacije, mora da postoji neko posebno malo programce koje to radi, cak iako je to nekako dostupno iz IDE iza toga se upravo to i radi samo je "sklonjeno" od korisnika.

Sve je to posledica posto kontroler nikako nema mehanizam ako nema program da nesto upise u externi EE/Flas, mora da mu se daju "instrukcije" a to je neko pomocno programce.

Kod ARM je malo drugacija situacija jer tamo moze preko JTAG interfejsa da se "cackaju" periferije i kad nema programa u MCU i upravo sluzi za popunjavanje tako nekih inicialnih vrednosti u NV memoriju.

[Ovu poruku je menjao mikikg dana 14.09.2017. u 23:43 GMT+1]
[ mikikg @ 14.09.2017. 20:37 ] @
@dusans
Tu ima jedna mala dodatna poteskoca sa binarnim pretrazivanjem a to je sto iz spoljasnje EE/Flash memorije ne mozes da citas po bit nego samo byte, pa u sustini se dodje opet na isto sto se brzine izvrsavanja tice.
Takodje se trosi vreme kod svakog prozivanja spoljne memorije, najgore je sa I2C jer je to bas sporo, nesto je bolja situacija sa SPI varijantom zbog brzeg clock.
Postoje i burst modovi za citanje/pisanje tih memorija, oni rade osetno brze ako u jednom prolazu treba da se iscita ili upise vise vezanih memoriskih lokacija, tada se stedi "komanda i adresa" kod transfera jednom kada se inicializuje sa pocetnom adresom.
[ veselinovic @ 14.09.2017. 20:55 ] @
Opet sam nedovoljno jasno izlozio problem.
Pazi, u interni eeprom zelim pri programiranju upisati neki sadrzaj. Kod PICa se to moglo.
[ mikikg @ 14.09.2017. 21:02 ] @
Znam tacno nasta mislis, ali ne moze drugacije.

Kod Microchip je to imalo, i za interni i za externi EE ali to sve rade "neke" funkcije koje se pozivaju u pozadani.
Za interni EE je to odradjivao programator a za externi neka od njihovih internih biblioteka.
Cak mislim da su u novijim verzijama XC kompajlera to izbacili kao posledica sto su izbacili podrsku za EE, a bila nekad pod HiTEC kompajlerima!
Nema vise u njihovm frejmwork podrska za EE, mora da se pisu svoje funkcije, i to su zaglupeli stvar jer su ostavili imena tih funkcija a nema code-a u njima! Pozoves funkciju, niko se ne "buni" a podataka nigde nema!
[ veselinovic @ 14.09.2017. 21:06 ] @
Pa nista onda.
imam mali program koji upisem u arduino.
On setuje parametre u interni eeprom.
Onda arduino reprogramiram novim programom, a podaci ostali u eepromu.
Cas posla je to.
[ goran_68 @ 15.09.2017. 06:52 ] @
Microchip XC ima sledeći makro kojim se eeprom lokacije inicijalizuju i to za vreme programiranja.

__EEPROM_DATA(0, 1, 2, 3, 4, 5, 6, 7);
[ mikikg @ 15.09.2017. 09:29 ] @
To vazi samo za interni EEPROM u PIC-u (programator to fizicki odradi), za externi ne znam kako se to radi i da li je uopste moguce na taj nacin odraditi, odkud oni znaju gde je, kako i koji IC povezan ...
A i ovo kad radi za interni EE, iskacu drugi problemi oko debugera, nesto im se adrese neke poremete, pokusavao to da resim i nisam uspeo, nesto ne radi doboro (ili ja ne znam da podesim), nije hteo da me slusa kada mu kazem koje lokacije da ne prepisuje ... nesto je ta cela funkcionalnost u nekom problemu ...
Mada ne koristim vise PIC-eve pa mi je malo lakse :)
[ mikikg @ 15.09.2017. 15:15 ] @
Hehe, pogledajte ovo, STM32F103 Blue Pill trenutno jeftiniji od ATmega328 Arduino Nano :)

http://www.ebay.com/itm/STM32F...m48725e00bc:g:ngMAAOSwygJXhGtV
http://www.ebay.com/itm/USB-Na...m2ef0647eb0:g:DkoAAOSwvYZZpOl0
[ veselinovic @ 15.09.2017. 16:46 ] @
Bogami si u pravu, i na aliju slicno

https://www.aliexpress.com/ite...2c-5681-4f7f-89c2-d59d979c9db3


https://www.aliexpress.com/ite...71-f7fe-4b0a-b38a-a536b9562c03
[ mikikg @ 16.09.2017. 01:24 ] @
Kao sto se vidi sve je slicno, samo sto je ispod haube 32bit masina koja radi opako dobro, postoje I/O nozice kojih kod STM32 ima vise, imaju razni registri i moduli za tajmer, A/D pa nadalje, stim sto ima recimo jedna od opakih opcija DMA kontroler koji barata memorijom prelepo i sinhrono sa dogadjaima periferije bez zauzeca CPU i to 12 DMA kanala kod ovog STM malca, "sve sa svim" moze da se ukrsti i da salje load data registra ili da cita, sve jedno je.
Dodatno NVIC kontroler za interapte koji moze da se mapira po zelji.
Ima vise RAM-a nego ATmega Flash-a.
Ima backup RAM od 20-ak bajtova koji se napaja i RTC sa Vbat
Vecina pinova su 5V toleratni inace su 3.3V.
CRC-32 kalkulator koji radi u 4 clock-a tu operaciju, 3 seriska porta, 2 SPI, jos svasta nesto, stim sto su i ovi njegovi PWM, A/D, RTC i ostali moduli napunjenim raznim opcijama koje nekad bas mogu da pomognu i rese problem koje smo uglavnom imali sa prehodnim generacijama procesora. Sve ove medjusobne kombinacije modula kada se upotrebe kako treba za neku relativno prostu aplikaciju trebaju da svedu glavnu main() petlju na prazno i da se sve (ili vecina) ustvari izkonfigurise preko modula kojima se tu upravlja ili ne upravlja preko interapt rutina i rade sami to sto treba na HW nivou.

Ovaj primer sa meracem radnih sati bi mogao da se napise u cca 20-ak linija za par interapt dogadjaja, sa praznim main(), jedino ima konfiguracija kontrolera i modula koja se jednokratno odradi kod reset i on nadalje svira sam svoj program ... Program Tvog Kompjutera :)



[ pajper1 @ 16.09.2017. 17:38 ] @
Pokusao bih da iskoristim vec dati link na sta bih trebao da obratim paznju pri nabavci oled Arduino 128X64 OLED LCD 0.96" I2C jer moze ovaj i Nano v3.0 sa ch340 usb drajverom Fully Compatible to Arduino Nano V3.0 ATmega328P-AU ?
[ mikikg @ 16.09.2017. 18:50 ] @
Nisi nam rekao da li imas source code za postojeci program ili trebas napisati program od pocetka?
Ako pises od pocetka program mozes uzeti bilo koji display pa shodno njemu prilagoditi potrebnu logiku.
[ pajper1 @ 17.09.2017. 06:58 ] @
Na linku pod LCDSH1106,LCDSH1106 i vdo-lcd-replacement.ino
[ mikikg @ 17.09.2017. 08:53 ] @
Aha, sad odprilike kontam sta se tu ustvari desava.

Tu postoji neka elektronika koja je radila to merenje vremena i koja je imala neki I2C display.
Taj display je crko i ne mozes da nadjes original.
Sad bi da na to sve da dodas jedan Arduino koji bi "presretao" I2C podatke, dekodirao te informacije i izbacio ih na drugi display o kome pricamo.
Usput bi ako moze da se nista dodatno ne kodira nego da iskoristis ove gotove .INO programe.

Tako? :)
[ pajper1 @ 17.09.2017. 09:32 ] @
Da da bas tako naci takav lcd je tesko osetljiv je i mislim da bi sa ovim arduino +oled bilo pravo resenje drugo imam problem koji trebam resiti i priliku da pocnem sa arduinom uopste.