Gradnja napredne ure z esp32

Vse v zvezi z gradnjo napredne ure.

Gradnja napredne ure z esp32

OdgovorNapisal/-a LiPo » 06 Apr 2022, 14:22

A ne bi izbral najprej funkcije:
Jaz sem misli tole:
ESP32 : CPU , WIFI in BT
DS3231: RTC
NEO-6m:GPS
DCF77 modul : ? DCF
se kaj?

Cpu ima dva jedra. Eno jedro bi bilo za obdelavo casa.
Drugo jedro za prikaz casa ... Multiplex.. itd.
Uporabniški avatar
LiPo
 
Prispevkov: 1248
Pridružen: 04 Apr 2015, 16:30
Kraj: LJUBLJANA
Zahvalil se je: 57 krat
Prejel zahvalo: 179 krat
Uporabnika povabil: cimabella
Število neizkoriščenih povabil: 35

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a s54mtb » 06 Apr 2022, 14:54

ESP32-C3 mini modul je (preverjeno) dober. Ima wifi in ble5, pa še usb kontroler.

Sicer pa, brez veze, da to pišem, ker bo itak pristalo v smetnjaku :)
Always going the extra mile.
https://www.buymeacoffee.com/s54mtb
Uporabniški avatar
s54mtb
 
Prispevkov: 14710
Pridružen: 15 Jan 2015, 00:10
Zahvalil se je: 2183 krat
Prejel zahvalo: 6096 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a VolkD » 06 Apr 2022, 15:06

LiPo je napisal/-a:A ne bi izbral najprej funkcije:
Jaz sem misli tole:
ESP32 : CPU , WIFI in BT

Nebi, v bistvu urni del že rišem.
Ni pa nobene škode, če imamo dve različni osnovi.
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: 67631
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20695 krat
Prejel zahvalo: 10572 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a LiPo » 06 Apr 2022, 20:28

AMPAK.....
zakaj se izbere pot, ki je NI.
FM31256 ima zunanji kristal. Ja? Odstopanje teh RTC je zelo veliko. Poleg tega je to neka exsotika...
Sem predlagal zelo dober RTC z vgrajem kristalom!

Imeti dva procesorja nima smisla. To je bilo že večkrat povedano.
ATMEGA128 je ok izbira. Samo v čem pa bo pisan program? Arduino? Če ja, potem spet ni ok izbira, ker je omejeno podprt. Žal.
Napajanje?

Skratka, pa smo spet pri ESP32...
V parih minutah sem na mizi zlotal ESP32 z dop matrix led (max7219 8x32 pik).
Poslal program gor in to je to..
Napajalnik je mikro usb.
Uporabniški avatar
LiPo
 
Prispevkov: 1248
Pridružen: 04 Apr 2015, 16:30
Kraj: LJUBLJANA
Zahvalil se je: 57 krat
Prejel zahvalo: 179 krat
Uporabnika povabil: cimabella
Število neizkoriščenih povabil: 35

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a kose19 » 06 Apr 2022, 20:40

LiPo je napisal/-a:Skratka, pa smo spet pri ESP32...
V parih minutah sem na mizi zlotal ESP32 z dop matrix led (max7219 8x32 pik).
Poslal program gor in to je to..
Napajalnik je mikro usb.


Ali bi šlo pošiljati podatke na uart?
kose19
 
Prispevkov: 555
Pridružen: 19 Jan 2015, 18:01
Kraj: Kobarid
Zahvalil se je: 56 krat
Prejel zahvalo: 170 krat
Uporabnika povabil: s54mtb
Število neizkoriščenih povabil: 175

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a LiPo » 06 Apr 2022, 20:43

Ja. Itak ze sedaj gredo zaradi debuga.
Aja.. seveda connect na wifi in nastavitev ure preko ntpja.
Uporabniški avatar
LiPo
 
Prispevkov: 1248
Pridružen: 04 Apr 2015, 16:30
Kraj: LJUBLJANA
Zahvalil se je: 57 krat
Prejel zahvalo: 179 krat
Uporabnika povabil: cimabella
Število neizkoriščenih povabil: 35

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a kose19 » 06 Apr 2022, 21:18

Domnevam, da ima tudi prednaložen nek firmweare oz se ga lahko naloži, da se lahko na njegov wifi povežeš in mu nastaviš podatke za domače omrežje?
Na wemos D1 mini imam eno od verzij iz letscontrolit.com
kose19
 
Prispevkov: 555
Pridružen: 19 Jan 2015, 18:01
Kraj: Kobarid
Zahvalil se je: 56 krat
Prejel zahvalo: 170 krat
Uporabnika povabil: s54mtb
Število neizkoriščenih povabil: 175

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a LiPo » 06 Apr 2022, 21:22

kose19 je napisal/-a:Domnevam, da ima tudi prednaložen nek firmweare oz se ga lahko naloži, da se lahko na njegov wifi povežeš in mu nastaviš podatke za domače omrežje?
Na wemos D1 mini imam eno od verzij iz letscontrolit.com


ESP32 je vse v enem. Podpira Arduino. Primerov je pa kolikor hoceš.
Tukaj je nek primer:
https://www.youtube.com/watch?v=Xj0NXzh0vXg
Uporabniški avatar
LiPo
 
Prispevkov: 1248
Pridružen: 04 Apr 2015, 16:30
Kraj: LJUBLJANA
Zahvalil se je: 57 krat
Prejel zahvalo: 179 krat
Uporabnika povabil: cimabella
Število neizkoriščenih povabil: 35

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a VolkD » 06 Apr 2022, 21:35

LiPo je napisal/-a:Skratka, pa smo spet pri ESP32...
V parih minutah sem na mizi zlotal ESP32 z dop matrix led (max7219 8x32 pik).
Poslal program gor in to je to..
Napajalnik je mikro usb.
Super, torej imaš rešen problem.
Zdaj pa pusti ostale, da naredimo kot nam je ljubše.
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: 67631
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20695 krat
Prejel zahvalo: 10572 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a kose19 » 07 Apr 2022, 06:19

VolkD je napisal/-a:
LiPo je napisal/-a:Skratka, pa smo spet pri ESP32...
V parih minutah sem na mizi zlotal ESP32 z dop matrix led (max7219 8x32 pik).
Poslal program gor in to je to..
Napajalnik je mikro usb.
Super, torej imaš rešen problem.
Zdaj pa pusti ostale, da naredimo kot nam je ljubše.

Mene pa ta ESP32 zanima.
kose19
 
Prispevkov: 555
Pridružen: 19 Jan 2015, 18:01
Kraj: Kobarid
Zahvalil se je: 56 krat
Prejel zahvalo: 170 krat
Uporabnika povabil: s54mtb
Število neizkoriščenih povabil: 175

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a LiPo » 07 Apr 2022, 06:40

kose19 je napisal/-a:
VolkD je napisal/-a:
LiPo je napisal/-a:Skratka, pa smo spet pri ESP32...
V parih minutah sem na mizi zlotal ESP32 z dop matrix led (max7219 8x32 pik).
Poslal program gor in to je to..
Napajalnik je mikro usb.
Super, torej imaš rešen problem.
Zdaj pa pusti ostale, da naredimo kot nam je ljubše.

Mene pa ta ESP32 zanima.


Poglej si ta primer:
https://www.google.com/amp/s/www.instru ... _page=true
Potem pa sestavi...
Uporabniški avatar
LiPo
 
Prispevkov: 1248
Pridružen: 04 Apr 2015, 16:30
Kraj: LJUBLJANA
Zahvalil se je: 57 krat
Prejel zahvalo: 179 krat
Uporabnika povabil: cimabella
Število neizkoriščenih povabil: 35

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a VolkD » 07 Apr 2022, 19:26



Še malo razlage kaj vidimo v tem videu.
Najprej je na tipkovnico naslonjen ESP32. Modra LED spremeni stanje vsako sekundo. Zelen kabel je povezan na PC-ja. Preko tega kabla gre napajanje za ESP32, istočasno pa ESP32 pošilja po njem informacijo o trenutni uri. Pravzaprav kar o celotnem času. Ta informacija gre sicer preko USB, a na ploščici z ESP32 imamo UART/USB konverter. To pa pomeni, da informacijo lahko dobimo tudi na nivoju UART-a. Uro lahko gledamo v terminalskem oknu. Zgornje okno - vsaka sekunda je nova vrstica.
Za primerjavo imamo uro, ki nam jo posreduje stran: https://dayspedia.com/time/online/
Levo spodaj je arduino okno in del kode. Da ne bo pomote, koda je z interneta, moj delček je le dodatek, ki prepriča modro LED da utripa. To kar je v kodi še mojega, je ime in geslo dostopne WiFi domače točke, a ta del kode nimam namena deliti z vami.

Igračo, ki so jo naredili drugi, se torej da iz čistega niča poustvariti v manj kot enem popoldnevu.

No zdaj grem pa delat mojo uro, bo trajalo malo dlje, bo pa znalo delat tudi brez interneta :) In pa še nekaj - moja bo!
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: 67631
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20695 krat
Prejel zahvalo: 10572 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a LiPo » 07 Apr 2022, 20:50

VolkD je napisal/-a:

Še malo razlage kaj vidimo v tem videu.
Najprej je na tipkovnico naslonjen ESP32. Modra LED spremeni stanje vsako sekundo. Zelen kabel je povezan na PC-ja. Preko tega kabla gre napajanje za ESP32, istočasno pa ESP32 pošilja po njem informacijo o trenutni uri. Pravzaprav kar o celotnem času. Ta informacija gre sicer preko USB, a na ploščici z ESP32 imamo UART/USB konverter. To pa pomeni, da informacijo lahko dobimo tudi na nivoju UART-a. Uro lahko gledamo v terminalskem oknu. Zgornje okno - vsaka sekunda je nova vrstica.
Za primerjavo imamo uro, ki nam jo posreduje stran: https://dayspedia.com/time/online/
Levo spodaj je arduino okno in del kode. Da ne bo pomote, koda je z interneta, moj delček je le dodatek, ki prepriča modro LED da utripa. To kar je v kodi še mojega, je ime in geslo dostopne WiFi domače točke, a ta del kode nimam namena deliti z vami.

Igračo, ki so jo naredili drugi, se torej da iz čistega niča poustvariti v manj kot enem popoldnevu.

No zdaj grem pa delat mojo uro, bo trajalo malo dlje, bo pa znalo delat tudi brez interneta :) In pa še nekaj - moja bo!


NO, sj se da...
Skoda, da ne nadaljuješ od tukaj...
VFD in NIXI cevi so sigurno zanimive.
Edino v kodi ne uporabljaj DELAY(1000). Primer, kako se NE PIŠE dobre kode.
Uporabniški avatar
LiPo
 
Prispevkov: 1248
Pridružen: 04 Apr 2015, 16:30
Kraj: LJUBLJANA
Zahvalil se je: 57 krat
Prejel zahvalo: 179 krat
Uporabnika povabil: cimabella
Število neizkoriščenih povabil: 35

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a VolkD » 07 Apr 2022, 20:54

To je samo za poskus in koda ni moja!
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: 67631
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20695 krat
Prejel zahvalo: 10572 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a VolkD » 08 Apr 2022, 11:51

VolkD je napisal/-a:Najprej je na tipkovnico naslonjen ESP32. Modra LED spremeni stanje vsako sekundo. Zelen kabel je povezan na PC-ja. Preko tega kabla gre napajanje za ESP32, istočasno pa ESP32 pošilja po njem informacijo o trenutni uri. Pravzaprav kar o celotnem času. Ta informacija gre sicer preko USB, a na ploščici z ESP32 imamo UART/USB konverter. To pa pomeni, da informacijo lahko dobimo tudi na nivoju UART-a. Uro lahko gledamo v terminalskem oknu.

V skoraj enem dnevu ni videti razhajanj med ESP lokalnim oscilatorjem in uro z interneta. ESP32 se z uro na internetu sinhronizira le ob startu, potem pa laufa glede na lasten takt.
ESPura.jpg


Zaenkrat kar dobro kaže. In to brez RTC-ja.
Nimate dovoljenj za ogled prilog tega prispevka.
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: 67631
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20695 krat
Prejel zahvalo: 10572 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a s54mtb » 08 Apr 2022, 12:17

Razlike je toliko:
razlika.jpg
Nimate dovoljenj za ogled prilog tega prispevka.
Always going the extra mile.
https://www.buymeacoffee.com/s54mtb
Uporabniški avatar
s54mtb
 
Prispevkov: 14710
Pridružen: 15 Jan 2015, 00:10
Zahvalil se je: 2183 krat
Prejel zahvalo: 6096 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a VolkD » 08 Apr 2022, 12:24

Ne bom ugasnil še par dni in bomo videli koliko se bo nabralo.
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: 67631
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20695 krat
Prejel zahvalo: 10572 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a LiPo » 08 Apr 2022, 15:58

Meritev je napacna.
In s tem brez smisla.
Popravi izhodni signal na 100 ms on. 900 off.
In primerjaj z ppsom Gps-a.
Seveda na zacetku in potem ciklicno..
Uporabniški avatar
LiPo
 
Prispevkov: 1248
Pridružen: 04 Apr 2015, 16:30
Kraj: LJUBLJANA
Zahvalil se je: 57 krat
Prejel zahvalo: 179 krat
Uporabnika povabil: cimabella
Število neizkoriščenih povabil: 35

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a VolkD » 09 Apr 2022, 10:40

ESPura1.jpg
Razlika se veča. Ne mnogo, a se.
Ocenjujem, da bo v enem tednu pridelal celo sekundo. Torej eno minuto na leto.
Pri tem je treba vedeti, da tale esp32 nima nobenega RTC čipa. Referenca ure je kar clock procesorja. Sinhronizacija z internetno uro se v danem programu naredi samo ob inicializaciji.
Nimate dovoljenj za ogled prilog tega prispevka.
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: 67631
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20695 krat
Prejel zahvalo: 10572 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a VolkD » 09 Apr 2022, 10:42

Seveda se da program popraviti, da se sinhronizacija naredi bolj pogosto. A pozor! Ne tega delati prepogosto. V fazi testiranja sem zadevo resetiral kar nekajkrat. Gotovo bo več kot 20x v dobre pol ure. In potem je nehalo delat. Zbanali so me! Prevečkrat v enoti časa sem pobiral uro. Prijazen e-mail z obrazložitvijo dogajanja je rešil problem.
No če vzamemo, da je zelo približno izmerjena natančnost 1s na teden, bo za prikaz take ure, ki kaže tudi sekunde, dovolj, da pokličemo in se sinhroniziramo na internetno uro, enkrat na teden.
Če pa prikazujemo zgolj ure in minute, pa bo dovolj recimo 4x na leto.
Pri tem seveda sploh ni potreben RTC čip!
Bolj enostavno ne more biti.
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: 67631
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20695 krat
Prejel zahvalo: 10572 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a VolkD » 09 Apr 2022, 10:53

Kljub temu se nisem odločil, da bi delal uro na tem principu. Razlog je ravno WiFi.

V program je namreč potrebno vpisati kar nekaj podatkov:
°Ime serverja, kamor hodimo po uro. Ni nujno, da je ta server vedno na razpolago. Nekateri izginejo, drugi se pojavljajo. Eni so res zanesljivi, se pa zgodi, da pride do time-out-a. Lahko se zgodi, kot meni, da te banajo in potem je potrebna telovadba ali menjava serverja.
°V program je treba vpisati ime dostopne točke WiFi-ja. Torej, če tako uro vzamemo in jo podarimo nekomu imamo s tem problem nastavljanja dostopne točke. Ob spremembi imena te dostopne točke (se lahko zgodi zaradi raznih razlogov), nam sinhronizacija neha delati. Potreben je torej ponoven vnos novega podatka o imenu dostopne točke. Če nimamo svoje dostopne točke, ampak je od soseda, ali javna v kakršni koli obliki, je problem še malo bolj kompleksen.
°V program je treba vpisati tudi geslo, da dostop do dostopne točke WiFi-ja. To seveda predstavlja dodatno varnostno tveganje. Še posebej nerodno postane, če je lasten dostop tako urejen, da se zaradi varnosti, geslo menja dnevno.

Zadeva ima torej razen dobrega, tudi nekaj pomanjkljivosti.

Vsekakor pa lahko na zelo enostaven način zadovolji kar precej uporabnikov.
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: 67631
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20695 krat
Prejel zahvalo: 10572 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a VolkD » 09 Apr 2022, 10:56

Ker vidim, da je LiPo najbolj zagret za tako uro, predlagam, da tole pelje dalje.
Bi bilo pa fino, da se naredi tako, da bodo vsi naši izdelki na nek način kompatibilni med seboj. Več o tem, bom še napisal.
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: 67631
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20695 krat
Prejel zahvalo: 10572 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Gradnja napredne ure z esp32

OdgovorNapisal/-a Protoncek » 09 Apr 2022, 11:36

No, wifi ne more biti razlog, da nek čip “vržes v smeti”. Vse naprave, ki delajo na wifi imajo možnost vpisovanja wifi podatkov, ponavadi preko njihove web strani v načinu AP. Če bi tako gledali, ne bi dobili nobenega modulčka z wifi: Sonoff, tuya, ……. Tako pa večina pametnih naprav teče ravno na wifi povezavo, ker je najpreprosteje in jo vsi imajo.
Software kot tasmota, esphome….imajo narejeno tako, da v primeru, ko se nekaj časa ne poveže na wifi samodejno začne delati v načinu AP, kjer lahko vpišeš podatke, ali pa ga zelo preprosto lahko sprožiš sam.
Da bi nekdo dnevno spreminjal wifi geslo še nisem zasledil. Če pa že, verjemi, da takemu ne boš podarjal te ure, ker potem to niso posamezniki ampak firme, korporacije… tak naj pa doda GPS modul, pa je, če jo že mora imeti :D
Uporabniški avatar
Protoncek
 
Prispevkov: 6495
Pridružen: 17 Jan 2015, 20:41
Kraj: Mengeš
Zahvalil se je: 807 krat
Prejel zahvalo: 1010 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 207

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a Cloud » 09 Apr 2022, 11:48

Kolikor jaz vem ima ESP32 že vgrajen RTC. Za povezavo na wifi narediš, da ko se prižge se 30 sec poizkuša povezati na znano (znana) omrežja, če mu to ne rata se postavi v AP način in odpre konfiguracijsko stran. Za serverje mu tudi lahko postaviš listo kjer bo pač šel po vrsti če ne bodo dosegljivi.


Je pa opcija da se da na vezje reed stikalo ali pa samo hall senzor in se ga veže na gpio. Če želiš konfigurirati daš zraven magnet in priklopiš napajanje, takrat se ESP prižge v AP načinu za konfiguracijo.
Cloud
 
Prispevkov: 2978
Pridružen: 18 Mar 2015, 08:24
Kraj: Ljubljana
Zahvalil se je: 154 krat
Prejel zahvalo: 374 krat
Uporabnika povabil: BraneZ
Število neizkoriščenih povabil: 23

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a VolkD » 09 Apr 2022, 12:49

No v mojem programu ne vem če se RTC v ESP32 uporablja. Mislim, da ne.
Drugače pa,...Cloud, fino povedano. Naštel si praktično vse kar je še za narediti.
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: 67631
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20695 krat
Prejel zahvalo: 10572 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a VolkD » 10 Apr 2022, 08:13

ESPura2.jpg

No, če dispeju prikazujemo le ure in minute, smo še vedno točni. Je pa drugače že za celo sekundo zamika. Zaostaja.
Nimate dovoljenj za ogled prilog tega prispevka.
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: 67631
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20695 krat
Prejel zahvalo: 10572 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a VolkD » 10 Apr 2022, 08:15

Cloud je napisal/-a:Kolikor jaz vem ima ESP32 že vgrajen RTC.
Veš mogoče kako se RTC nastavi in kako se potem podatke bere z njega ?
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: 67631
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20695 krat
Prejel zahvalo: 10572 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a Lojz » 10 Apr 2022, 08:41

Cloud je napisal/-a:Kolikor jaz vem ima ESP32 že vgrajen RTC.

V dokumentaciji nisem našel. Niti ne vem kako bi ura delovala, ko odklopiš napajanje. Nikjer namreč ne najdem pina za zunanjo baterijo, ki jo ponavadi uporablja RTC.

Cloud je napisal/-a:Je pa opcija da se da na vezje reed stikalo ali pa samo hall senzor in se ga veže na gpio. Če želiš konfigurirati daš zraven magnet in priklopiš napajanje, takrat se ESP prižge v AP načinu za konfiguracijo.

Ali ni za to dovolj tipka/stikalo? ;)
Lep pozdrav!
Lojz
Uporabniški avatar
Lojz
 
Prispevkov: 1313
Pridružen: 06 Mar 2015, 22:40
Kraj: Koroška
Zahvalil se je: 247 krat
Prejel zahvalo: 571 krat
Uporabnika povabil: Proteus
Število neizkoriščenih povabil: 54

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a LiPo » 10 Apr 2022, 08:55

Esp32 ima vgrajen RTC, ki se vecinoma uporablja za
Sleep mode.
Za baterijsko napajan RCT pa je bolje imeti nameski chip.
Npr. Ds3231, ki ima vgrajen kristal.
Uporabniški avatar
LiPo
 
Prispevkov: 1248
Pridružen: 04 Apr 2015, 16:30
Kraj: LJUBLJANA
Zahvalil se je: 57 krat
Prejel zahvalo: 179 krat
Uporabnika povabil: cimabella
Število neizkoriščenih povabil: 35

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a Lojz » 10 Apr 2022, 08:56

Lojz je napisal/-a:
Cloud je napisal/-a:Kolikor jaz vem ima ESP32 že vgrajen RTC.

V dokumentaciji nisem našel. Niti ne vem kako bi ura delovala, ko odklopiš napajanje. Nikjer namreč ne najdem pina za zunanjo baterijo, ki jo ponavadi uporablja RTC.

Ups, se opravičujem. Očitno ima RTC. Opis. Celo nekaj SRAM-a! (stran 12).
Nimate dovoljenj za ogled prilog tega prispevka.
Lep pozdrav!
Lojz
Uporabniški avatar
Lojz
 
Prispevkov: 1313
Pridružen: 06 Mar 2015, 22:40
Kraj: Koroška
Zahvalil se je: 247 krat
Prejel zahvalo: 571 krat
Uporabnika povabil: Proteus
Število neizkoriščenih povabil: 54

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a VolkD » 11 Apr 2022, 22:55

ESP32Ura.jpg
Ja tole je pa zdaj že kriza.
In baje sem imel srečo in moj primerek celo dobro dela.
RTC bo torej tudi v tem primeru nuja.
Nimate dovoljenj za ogled prilog tega prispevka.
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: 67631
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20695 krat
Prejel zahvalo: 10572 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a LiPo » 12 Apr 2022, 05:34

VolkD je napisal/-a:
ESP32Ura.jpg
Ja tole je pa zdaj že kriza.
In baje sem imel srečo in moj primerek celo dobro dela.
RTC bo torej tudi v tem primeru nuja.


Okolje za testiranje je neprimerno.
Odstopanje ure web browserja od interne ure PC-ja je lahko tudi 1s.
Izpis preko serijskega terminala teče v zanki in se izpisuje, ko pač se.
Rezultat pa je tak kot je. Treba bo pocakat na odstopanje vsaj 60 s.


Ce vzamemo odstopanje 1s/dan je to 11.57 ppm oz. 6,08 minute/leto.
Kar ni slabo za uro ob upostevanju zgornjih dejstev,
Recimo DS3231 ima +-2 ppm.
Uporabniški avatar
LiPo
 
Prispevkov: 1248
Pridružen: 04 Apr 2015, 16:30
Kraj: LJUBLJANA
Zahvalil se je: 57 krat
Prejel zahvalo: 179 krat
Uporabnika povabil: cimabella
Število neizkoriščenih povabil: 35

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a VolkD » 12 Apr 2022, 08:34

Drži. Časovni jitter je pri take vrste meritve lahko velik. No, da bi bil velik celo minuto pa spet ne. Sploh pa ne vsakič.
Jaz sem sicer dal samo sliko ekrana, če bi dal video, bi se dalo zaključiti, da ta je jitter dokaj konstantno enak in majhen.
Neka huda meritev to seveda ni, je pa dovolj dobro za primerjavo (na začetku sta bila sinhrona) in oceno situacije.

In seveda se strinjam, da je za tako napisan program kot je, to kar precej dobro. Ura v ESP32 se je sinhronizirala z internetno zgolj na začetku, potem pa zadeva deluje dalje na podlagi lastnega clocka. Več sinhronizacij, bi zadevo bistveno izboljšalo.
Je pa zgornja ocena dovolj, da se odločimo kako pogosto naj se zadeva sinhronizira preko interneta. Po moje bo 2 do 3x dnevno res več kot dovolj.
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: 67631
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20695 krat
Prejel zahvalo: 10572 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a VolkD » 12 Apr 2022, 11:21

ESP32Ura1.jpg

Vedno slabše je.

Bom moral poskusiti kaj se zgodi, če ga malo segrejem.
Nimate dovoljenj za ogled prilog tega prispevka.
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: 67631
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20695 krat
Prejel zahvalo: 10572 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a LiPo » 12 Apr 2022, 18:38

VolkD je napisal/-a:
ESP32Ura1.jpg

Vedno slabše je.

Bom moral poskusiti kaj se zgodi, če ga malo segrejem.

Rukni kovinski pokrovcek iz modula in izmeri frekvenco kristala.
To bo bolj natačno.


Ali pa uporabi yat termina in izpisuj zraven logiranega časa tudi cas podatka.
Uporabniški avatar
LiPo
 
Prispevkov: 1248
Pridružen: 04 Apr 2015, 16:30
Kraj: LJUBLJANA
Zahvalil se je: 57 krat
Prejel zahvalo: 179 krat
Uporabnika povabil: cimabella
Število neizkoriščenih povabil: 35

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a LiPo » 12 Apr 2022, 19:57

Predelal sem program, ki vzame NTP čas in ga izpiše na serijski port.

PC cas je seveda tudi nastavlne preko NTP.
Rezultat je na priloženi sliki.
Odstopanje je do +- 10ms.
Narejen je bil kratek test z sinhronizacijo ntp.
PRIMERJAVA.png
Nimate dovoljenj za ogled prilog tega prispevka.
Uporabniški avatar
LiPo
 
Prispevkov: 1248
Pridružen: 04 Apr 2015, 16:30
Kraj: LJUBLJANA
Zahvalil se je: 57 krat
Prejel zahvalo: 179 krat
Uporabnika povabil: cimabella
Število neizkoriščenih povabil: 35

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a aly » 14 Apr 2022, 14:01

Živjo,

da ne bo kdo predolgo odkrival tople vode, jaz sem vzel EleksTube IPS Clock, lahko original ali kitajsko kopijo. :_waiting
Vsaka ima par felerjev v HW, ki jih je fino najprej odpraviti, ni pa nujno.
Potem oddrsaš na tale moj projekt: https://github.com/aly-fly/EleksTubeHAX ;)

Vklopiš funkcije ki jih želiš, skompajlaš in naložiš gor. Dela tip-top.

Na kratko, funkcije:
- WiFi
- WPS pushbutton
- NTP za točen čas
- Geolocation za časovni pas
- hardverski timekeeping v RTC (podpora dveh čipov)
- DS18B20 temperaturni senzor
- RGB LED baclight
- 6x TFT IPS dispjay
- poljubne slike za uro, prednaložene v file system
- ...
Lahko pa kodo razbiješ in ven pobereš kar rabiš in iz tega narediš nekaj povsem novega. :D

Slika
Štrom je lajf :)
Uporabniški avatar
aly
 
Prispevkov: 517
Pridružen: 16 Jan 2015, 11:21
Kraj: Domžale/ Vodice
Zahvalil se je: 139 krat
Prejel zahvalo: 125 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 31

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a VolkD » 14 Apr 2022, 14:15

aly, čestitke!

Čestitke tudi Smitty.
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: 67631
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20695 krat
Prejel zahvalo: 10572 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a aly » 14 Apr 2022, 15:11

Cloud je napisal/-a:Kolikor jaz vem ima ESP32 že vgrajen RTC. Za povezavo na wifi narediš, da ko se prižge se 30 sec poizkuša povezati na znano (znana) omrežja, če mu to ne rata se postavi v AP način in odpre konfiguracijsko stran. Za serverje mu tudi lahko postaviš listo kjer bo pač šel po vrsti če ne bodo dosegljivi.
Je pa opcija da se da na vezje reed stikalo ali pa samo hall senzor in se ga veže na gpio. Če želiš konfigurirati daš zraven magnet in priklopiš napajanje, takrat se ESP prižge v AP načinu za konfiguracijo.

Ali pa tako kot sem jaz naredil, če se po 20 sek ne poveže na shranjen WiFi, požene WPS Push-button mode in na routerju pritisneš tipko. Fertik :)
Štrom je lajf :)
Uporabniški avatar
aly
 
Prispevkov: 517
Pridružen: 16 Jan 2015, 11:21
Kraj: Domžale/ Vodice
Zahvalil se je: 139 krat
Prejel zahvalo: 125 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 31

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a LiPo » 15 Apr 2022, 17:35

Projekt je super.
Samo mislim,da je prekompleksen za domačo izdelavo.
Uporabniški avatar
LiPo
 
Prispevkov: 1248
Pridružen: 04 Apr 2015, 16:30
Kraj: LJUBLJANA
Zahvalil se je: 57 krat
Prejel zahvalo: 179 krat
Uporabnika povabil: cimabella
Število neizkoriščenih povabil: 35

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a forest70 » 21 Apr 2022, 18:07

Bolj minimalistično se ne da. :mrgreen:
If you pay in bananas, you got monkeys.
Uporabniški avatar
forest70
 
Prispevkov: 3026
Pridružen: 14 Jan 2015, 00:11
Kraj: Koper
Zahvalil se je: 512 krat
Prejel zahvalo: 764 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 142

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a forest70 » 22 Apr 2022, 09:10

Še da pojasnim kako deluje:
V setup se
povežem na WiFi,
vzamem uro iz NTP stržnika,
kreiram nov task v drugem procesorju, kjer ob vsaki polni minuti odtolče v Morsevi abecedi uro v obliki 20:21
V loop zanki se pa vsako sekundo izpisuje čas na serijski port
If you pay in bananas, you got monkeys.
Uporabniški avatar
forest70
 
Prispevkov: 3026
Pridružen: 14 Jan 2015, 00:11
Kraj: Koper
Zahvalil se je: 512 krat
Prejel zahvalo: 764 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 142

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a LiPo » 22 Apr 2022, 09:15

forest70 je napisal/-a:Še da pojasnim kako deluje:
V setup se
povežem na WiFi,
vzamem uro iz NTP stržnika,
kreiram nov task v drugem procesorju, kjer ob vsaki polni minuti odtolče v Morsevi abecedi uro v obliki 20:21
V loop zanki se pa vsako sekundo izpisuje čas na serijski port


Ta z Morse kodo je ql.
Samo ni tolk uporabnikov, ki bi znali to prepoznat...
Uporabniški avatar
LiPo
 
Prispevkov: 1248
Pridružen: 04 Apr 2015, 16:30
Kraj: LJUBLJANA
Zahvalil se je: 57 krat
Prejel zahvalo: 179 krat
Uporabnika povabil: cimabella
Število neizkoriščenih povabil: 35

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a VolkD » 22 Apr 2022, 09:22

Pozabil si povedati, da gre morse na LED. Mogoče bi bilo fino, da daš tole na piskalč ? :)
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: 67631
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 20695 krat
Prejel zahvalo: 10572 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a forest70 » 22 Apr 2022, 09:28

VolkD je napisal/-a:Pozabil si povedati, da gre morse na LED. Mogoče bi bilo fino, da daš tole na piskalč ? :)

Kaj da me žena ubije ?? :mrgreen:
If you pay in bananas, you got monkeys.
Uporabniški avatar
forest70
 
Prispevkov: 3026
Pridružen: 14 Jan 2015, 00:11
Kraj: Koper
Zahvalil se je: 512 krat
Prejel zahvalo: 764 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 142

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a forest70 » 22 Apr 2022, 09:29

LiPo je napisal/-a:
forest70 je napisal/-a:Še da pojasnim kako deluje:
V setup se
povežem na WiFi,
vzamem uro iz NTP stržnika,
kreiram nov task v drugem procesorju, kjer ob vsaki polni minuti odtolče v Morsevi abecedi uro v obliki 20:21
V loop zanki se pa vsako sekundo izpisuje čas na serijski port


Ta z Morse kodo je ql.
Samo ni tolk uporabnikov, ki bi znali to prepoznat...

Če kdo rabi, lahko objavim klaso za morse
If you pay in bananas, you got monkeys.
Uporabniški avatar
forest70
 
Prispevkov: 3026
Pridružen: 14 Jan 2015, 00:11
Kraj: Koper
Zahvalil se je: 512 krat
Prejel zahvalo: 764 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 142

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a s54mtb » 22 Apr 2022, 10:59

Jaz imam kar v enem timerju...

Koda: Izberi vse
/**
  ******************************************************************************
  * @file    morse.c
  * @brief   Morse generator module
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; COPYRIGHT(c) 2016 S54MTB</center></h2>
  *
  ******************************************************************************
  */
#include "morse.h"
#include "command.h"
#include <stdio.h>
#include <string.h>  // strcmp
#include <ctype.h>   // toupper
#include <stdlib.h>
#include "usbd_cdc_if.h"
#include "settings.h"
#ifndef NOAUDIO
  #include "audio.h"
#endif

extern TIM_HandleTypeDef htim14;
extern settings_t settings;

//static char CW_message_text[CW_MAX_MSG_LENGTH];
Morse_Status_t MS;


/**
   * @brief CW Table
    *             Sequence start is marked with zero bit
   */

//#define CW_special      0x8000    /// Inidcates special sequence or command in CW generator
//#define CH_special      0x80     /// Inidcates special sequence or command in CW generator
//enum
//{
//   CW_SPC_AA,
//   CW_SPC_AR,
//   CW_SPC_AS,
//   CW_SPC_BK,
//   CW_SPC_BT,
//   CW_SPC_CL,
//   CW_SPC_CT,
//   CW_SPC_DO,
//   CW_SPC_KN,
//   CW_SPC_SK,
//   CW_SPC_SN,
//   CW_SPC_SOS,
//   CW_SPC_BRK
//};

const morse_t morse_keys[] =
{
      {'A', 0xfff9},   ///    11111111 111110011
      {'B', 0xffe8},   ///    11111111 11101000
      {'C', 0xffea},   ///    11111111 11101010
      {'D', 0xfff4},   ///    11111111 11110100
      {'E', 0xfffc},   ///    11111111 11111100
      {'F', 0xffe2},   ///    11111111 11100010
      {'G', 0xfff6},   ///    11111111 11110110
      {'H', 0xffe0},   ///    11111111 11100000
      {'I', 0xfff8},   ///    11111111 11111000
      {'J', 0xffe7},   ///    11111111 11100111
      {'K', 0xfff5},   ///    11111111 11110101
      {'L', 0xffe4},   ///    11111111 11100100
      {'M', 0xfffb},   ///    11111111 11111011
      {'N', 0xfffa},   ///    11111111 11111010
      {'O', 0xfff7},   ///    11111111 11110111
      {'P', 0xffe6},   ///    11111111 11100110
      {'Q', 0xffed},   ///    11111111 11101101
      {'R', 0xfff2},   ///    11111111 11110010
      {'S', 0xfff0},   ///    11111111 11110000
      {'T', 0xfffd},   ///    11111111 11111101
      {'U', 0xfff1},   ///    11111111 11110001
      {'V', 0xffe1},   ///    11111111 11100001
      {'W', 0xfff3},   ///    11111111 11110011
      {'X', 0xffe9},   ///    11111111 11101001
      {'Y', 0xffeb},   ///    11111111 11101011
      {'Z', 0xffec},   ///    11111111 11101100
      {' ', 0xffef},   ///    11111111 00000000
      {'0', 0xffdf},   ///    11111111 11011111
      {'1', 0xffcf},   ///    11111111 11001111
      {'2', 0xffc7},   ///    11111111 11000111
      {'3', 0xffc3},   ///    11111111 11000011
      {'4', 0xffc1},   ///    11111111 11000001
      {'5', 0xffc0},   ///    11111111 11000000
      {'6', 0xffd0},   ///    11111111 11010000
      {'7', 0xffd8},   ///    11111111 11011000
      {'8', 0xffdc},   ///    11111111 11011100
      {'9', 0xffde},   ///    11111111 11011110
      {'.', 0xff95},  ///   11111111 10010101
      {',', 0xffb3},  ///   11111111 10110011
      {':', 0xffb8},  ///   11111111 10111000
      {'?', 0xff8c},  ///   11111111 10001100
      {39,  0xff9e},  ///   11111111 10011110  --- Apostrophe
      {'-', 0xffa1},  ///   11111111 10100001  --- Minus=Hyphen
      {'/', 0xffd2},  ///   11111111 11010010
      {'(', 0xffad},  ///   11111111 10101101
      {')', 0xffad},  ///   11111111 10101101
      {'{', 0xffad},  ///   11111111 10101101
      {'}', 0xffad},  ///   11111111 10101101
      {'[', 0xffad},  ///   11111111 10101101
      {']', 0xffad},  ///   11111111 10101101
      {34,  0xff92},  ///   11111111 10010010 --- Quotation "
      {'@', 0xff9a},  ///   11111111 10011010
      {'=', 0xffd1},  ///   11111111 11010001
      {'<', 0xffff},  ///   special - set char time to 1 dit
      {'>', 0xffff},  ///   special - set char time to 3 dit
//      {   CH_special | CW_SPC_AA   , CW_special |   CW_SPC_AA   },  ///      --->   AA, New line   .-.-
//      {   CH_special | CW_SPC_AR   , CW_special |   CW_SPC_AR   },  ///      --->   AR, End of message   .-.-.
//      {   CH_special | CW_SPC_AS   , CW_special |   CW_SPC_AS   },  ///      --->   AS, Wait   .-...
//      {   CH_special | CW_SPC_BK   , CW_special |   CW_SPC_BK   },  ///      --->   BK, Break   -...-.-
//      {   CH_special | CW_SPC_BT   , CW_special |   CW_SPC_BT   },  ///      --->   BT, New paragraph   -...-
//      {   CH_special | CW_SPC_CL   , CW_special |   CW_SPC_CL   },  ///      --->   CL, Going off the air ("clear")   -.-..-..
//      {   CH_special | CW_SPC_CT   , CW_special |   CW_SPC_CT   },  ///      --->   CT, Start copying   -.-.-
//      {   CH_special | CW_SPC_DO   , CW_special |   CW_SPC_DO   },  ///      --->   DO, Change to wabun code   -..---
//      {   CH_special | CW_SPC_KN   , CW_special |   CW_SPC_KN   },  ///      --->   KN, Invite a specific station to transmit   -.--.
//      {   CH_special | CW_SPC_SK   , CW_special |   CW_SPC_SK   },  ///      --->   SK, End of transmission (also VA)   ...-.-
//      {   CH_special | CW_SPC_SN   , CW_special |   CW_SPC_SN   },  ///      --->   SN, Understood (also VE)   ...-.
//      {   CH_special | CW_SPC_SOS   , CW_special |   CW_SPC_SOS},  ///      --->   SOS, Distress message   ...---...
//      {   CH_special | CW_SPC_BRK   , CW_special |   CW_SPC_BRK},  ///      --->   SOS, Distress message   ...---...
};

#define CW_NOKEYFOUND      0xffff


/**
   * @brief Init for Morse engine
   * @param None
   * @param None
   * @retval None
   */
void Morse_Init(void)
{
   //settings.cw_message.message = CW_message_text;
   HAL_TIM_Base_Start_IT(&htim14);
}


/**
   * @brief This function initializes and start the morse processor
   * @param None
   * @param None
   * @retval None
   */
void Morse_start(void)
{
   MS.MPS_message_idx = 0;            // Counter for characters in message
   MS.MPS_pause = 0;                     // No pause for start!
   MS.MPS_repeat_counter = 0;   
   MS.timebase = 0;
   MS.duration = 0;
   MS.MorsePorcessroStage = MPS_GetChar;
   MS.CharSpacing = 3;                  // Normal spacing, changed by "<" and ">"
}


/**
   * @brief Stop morse generator
   * @param None
   * @param None
   * @retval None
   */
void Morse_stop(void)
{
#ifndef NOAUDIO
  Audio_Run(0);   
#endif
   
   HAL_GPIO_WritePin(MORSE_PORT, MORSE_PIN, (settings.out.polarity == 1) ? GPIO_PIN_SET : GPIO_PIN_RESET);
   MS.MorsePorcessroStage = MPS_Stop;
}

/**
   * @brief Restart the morse processor -> fresh start if previously running
   * @param None
   * @param None
   * @retval None
   */
uint32_t Morse_Restart(void)
{
   uint32_t running = (MS.MorsePorcessroStage != MPS_Stop);
   if (running)
   {
      Morse_stop();
      Morse_start();
   }
   return running;
}


/**
   * @brief Set outputs to "DAH"
   * @param None
   * @param None
   * @retval None
   */
void Morse_SetDah(void)
{
   if (settings.out.cw) HAL_GPIO_WritePin(MORSE_PORT, MORSE_PIN, (settings.out.polarity == 1) ? GPIO_PIN_RESET : GPIO_PIN_SET);
#ifndef NOAUDIO
   if (settings.audio.cw) Audio_Run(1);
#endif
}


/**
   * @brief Set outputs to "DIT"
   * @param None
   * @param None
   * @retval None
   */
void Morse_SetDit(void)
{
   if (settings.out.cw) HAL_GPIO_WritePin(MORSE_PORT, MORSE_PIN, (settings.out.polarity == 1) ? GPIO_PIN_RESET : GPIO_PIN_SET);
#ifndef NOAUDIO
   if (settings.audio.cw) Audio_Run(1);
#endif
}

/**
   * @brief Reset all outputs
   * @param None
   * @param None
   * @retval None
   */
void Morse_SetNil(void)
{
   HAL_GPIO_WritePin(MORSE_PORT, MORSE_PIN, (settings.out.polarity == 1) ? GPIO_PIN_SET : GPIO_PIN_RESET);
#ifndef NOAUDIO
   Audio_Run(0);
#endif
}


/**
   * @brief This function is periodically called from Timer 14 interrupt
   * @param None
   * @param None
   * @retval None
   */
void Morse_processor(void)
{
   // 1kHz here!
  if (MS.MorsePorcessroStage != MPS_Stop)
   {
    //
      MS.timebase++;
      if (MS.timebase > MS.MPS_pause)
      {
        /////////////////////////////////////////////////HAL_TIM_Base_Stop_IT(&htim14);
         MS.timebase = 0;
         MS.duration += MS.MPS_pause;  // message duration
         switch (MS.MorsePorcessroStage)
         {
            case MPS_GetChar :  // get next char from message and convert to key sequence
               MS.MPS_pause =  1;
                  Morse_SetNil();
          if (settings.cw_message.message[MS.MPS_message_idx] == '<')
               {  // Set char space to 1 dit
                  MS.CharSpacing = 1;
                  MS.MPS_message_idx++;
               } else if (settings.cw_message.message[MS.MPS_message_idx] == '>')
               {  // set char space to 3 dit
                  MS.CharSpacing = 3;
                  MS.MPS_message_idx++;
               }
               if (MS.MPS_message_idx >= strlen(settings.cw_message.message))
               {  // end of string
                  //MS.MPS_message_idx = 0;
                  MS.MorsePorcessroStage = MPS_Space;
               } else
               {
                  if (settings.cw_message.message[MS.MPS_message_idx] == 0x20) // space
                  {
                     MS.MorsePorcessroStage = MPS_Space;
                  }
                  else
                  {
                     MS.MPS_CurrentKey =   // Get character from message and convert to key
                              Morse_CharToKey(settings.cw_message.message[MS.MPS_message_idx]);                            
                     MS.MPS_key_idx = 0x8000;
                     while (MS.MPS_CurrentKey & MS.MPS_key_idx)
                        MS.MPS_key_idx>>=1; // find zero bit in key sequence               
                     MS.MPS_key_idx>>=1; // shift right one to initial dit/dah bit
                     MS.MorsePorcessroStage = MPS_SetOutput;             
                  }
               }
            break;
               
            case MPS_SetOutput :
               if (MS.MPS_CurrentKey & MS.MPS_key_idx)
               {
                  MS.MPS_pause = settings.cw_message.dottime * 3;
                  Morse_SetDah();
               }
               else
               {
                  MS.MPS_pause = settings.cw_message.dottime;
                  Morse_SetDit();
               }
              MS.MorsePorcessroStage = MPS_NextKey;            
            break;
               
            case MPS_NextKey:
               Morse_SetNil();
              MS.MPS_pause = settings.cw_message.dottime;
              MS.MPS_key_idx>>=1;
              if (MS.MPS_key_idx == 0)
               {  // finished through key sequence
                  MS.MPS_message_idx++;
                  if (settings.cw_message.message[MS.MPS_message_idx] > 0)
                  { // next char in message
                     MS.MPS_pause = settings.cw_message.dottime * MS.CharSpacing;  // wait 1 or 3 dits at the beginning of the char
                    MS.MorsePorcessroStage = MPS_GetChar;
                  }
                  else
                  { // message finished, check for repetition
                     MS.MPS_repeat_counter++;
                     if ((settings.cw_message.repeat>0) &   // repeat finished
                              (MS.MPS_repeat_counter>=settings.cw_message.repeat))
                     {
                        MS.MorsePorcessroStage = MPS_Stop;
                     }
                     else
                     {
                        // Check if message until now did not exceed duration
                        if (1000*settings.cw_message.msgperiod > MS.duration)
                          MS.MPS_pause = 1000*settings.cw_message.msgperiod - MS.duration;
                        else // set word space (7 dots time)
                        {
                           MS.MPS_message_idx = 0;   // Restart the message
                           MS.duration = 0;        // Reset duration counter
                           MS.MorsePorcessroStage = MPS_GetChar;
                           MS.MPS_pause = 7*settings.cw_message.dottime; // wait one space
                        }
                     }
                  }
               }
               else
               {
                  
                  MS.MorsePorcessroStage = MPS_SetOutput;
               }
            break;
            
            case MPS_Space:  // space ---> 7x dit time
               Morse_SetNil();
              MS.MPS_pause = settings.cw_message.dottime*7;
              MS.MorsePorcessroStage = MPS_NextKey;   
            break;
            
            default: MS.MorsePorcessroStage = MPS_Stop;
               
         }  /* switch (MS.MorsePorcessroStage) */
         
      }  /* if (MS.timebase > MS.MPS_pause)  */
               
  } /*  if (MS.MorsePorcessroStage != MPS_Stop)  */
   /////////////////////////////////HAL_TIM_Base_Start_IT(&htim14);
}


/**
   * @brief This function checks if character ch is valid CW char (has CW key in morse_keys[] table)
   * @param ch - character
   * @retval 0 - no valid char found, 1 - valid char in table
   */
int Morse_Valid_Char(char ch)
{
   int i;
   int valid = 0;
   
   for (i = 0; i<sizeof(morse_keys)/sizeof(morse_t); i++)
   {
      if (ch == morse_keys[i].ch) valid = 1;
   }
   return valid;   
}




/**
   * @brief This function returns CW key from morse_keys[] table
   * @param ch - character
   * @retval key from CW table or
   */
uint16_t Morse_CharToKey(char ch)
{
   int i;
   
   for (i = 0; i<sizeof(morse_keys)/sizeof(morse_t); i++)
   {
      if (ch == morse_keys[i].ch) return morse_keys[i].key;
   }
   return CW_NOKEYFOUND;   
}



Koda: Izberi vse
/**
  ******************************************************************************
  * @file    morse.h
  * @brief   Morse generator module header file.
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; COPYRIGHT(c) 2016 S54MTB</center></h2>
  *
  ******************************************************************************
  */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __MORSE_H__
#define __MORSE_H__

#include "stm32f0xx.h"                  // Device header
#include "settings.h"

#ifdef __cplusplus
 extern "C" {
#endif
   
#define MORSE_PIN         GPIO_PIN_0
#define MORSE_PORT      GPIOA

#define AUTORUN_SEL0PIN         GPIO_PIN_1
#define AUTORUN_SEL1PIN         GPIO_PIN_2
#define AUTORUN_SEL2PIN         GPIO_PIN_3
#define AUTORUN_SEL0PORT       GPIOA
#define AUTORUN_SEL1PORT       GPIOA
#define AUTORUN_SEL2PORT       GPIOA

typedef struct
{
   char          ch;
   uint16_t      key;
} morse_t;

typedef enum  // Morse processor stages
{
   MPS_Stop,
   MPS_GetChar,
   MPS_SetOutput,
   MPS_NextKey,
   MPS_Space,
} MPS_t;

typedef struct
{
   MPS_t MorsePorcessroStage;
   uint32_t timebase, duration;
  int MPS_repeat_counter;
  int MPS_message_idx;
  int MPS_key_idx;
  int MPS_pause;
  uint16_t MPS_CurrentKey;
   uint8_t  CharSpacing;   // "<" set to 1, ">" set to 3 --- for AA, AR, SK ...
} Morse_Status_t;

void Morse_Init(void);
void Morse_processor(void);
int Morse_Valid_Char(char ch);
uint16_t Morse_CharToKey(char ch);
void Morse_start(void);
void Morse_stop(void);
uint32_t Morse_Restart(void);

   
#ifdef __cplusplus
}
#endif

#endif /* __MORSE_H__ */

/************************ (C) COPYRIGHT S54MTB *****END OF FILE****/
Always going the extra mile.
https://www.buymeacoffee.com/s54mtb
Uporabniški avatar
s54mtb
 
Prispevkov: 14710
Pridružen: 15 Jan 2015, 00:10
Zahvalil se je: 2183 krat
Prejel zahvalo: 6096 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a LiPo » 23 Apr 2022, 19:33

Super.
Samo to je aplikativni del..
Prikaz z morsejevo abecedo... Super
Kaj pa klasicna kukavica?
Zvonenje.. mehansko in simuilacija elektronskega gonga
In seveda ura, ki govori.
Uporabniški avatar
LiPo
 
Prispevkov: 1248
Pridružen: 04 Apr 2015, 16:30
Kraj: LJUBLJANA
Zahvalil se je: 57 krat
Prejel zahvalo: 179 krat
Uporabnika povabil: cimabella
Število neizkoriščenih povabil: 35

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a tilz0R » 26 Apr 2022, 09:07

forest70 je napisal/-a:Še da pojasnim kako deluje:
V setup se
povežem na WiFi,
vzamem uro iz NTP stržnika,
kreiram nov task v drugem procesorju, kjer ob vsaki polni minuti odtolče v Morsevi abecedi uro v obliki 20:21
V loop zanki se pa vsako sekundo izpisuje čas na serijski port


Čakej - dual-core rabiš za ta piece of algo?
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 2402
Pridružen: 17 Jan 2015, 23:12
Kraj: Črnomelj
Zahvalil se je: 264 krat
Prejel zahvalo: 767 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: Gradnja napredne ure z esp32

OdgovorNapisal/-a LiPo » 26 Apr 2022, 09:16

tilz0R je napisal/-a:
forest70 je napisal/-a:Še da pojasnim kako deluje:
V setup se
povežem na WiFi,
vzamem uro iz NTP stržnika,
kreiram nov task v drugem procesorju, kjer ob vsaki polni minuti odtolče v Morsevi abecedi uro v obliki 20:21
V loop zanki se pa vsako sekundo izpisuje čas na serijski port


Čakej - dual-core rabiš za ta piece of algo?


Vaja dela mojstra. Mojster vajo...
Ravno dva jedra sta zelo uporabna pri casovnih aplikacijah.
Na enem skrbis za tocen cas. Na drugem pa to prikazujes na displaju. Recimo 10k na sekundo.
Uporabniški avatar
LiPo
 
Prispevkov: 1248
Pridružen: 04 Apr 2015, 16:30
Kraj: LJUBLJANA
Zahvalil se je: 57 krat
Prejel zahvalo: 179 krat
Uporabnika povabil: cimabella
Število neizkoriščenih povabil: 35

Naslednja

Vrni se na Gradnja napredne ure

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost