Hasicské stopky na mega2560

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Karo88
Příspěvky: 7
Registrován: 26 črc 2019, 01:15
Reputation: 0

Hasicské stopky na mega2560

Příspěvek od Karo88 » 13 říj 2023, 09:59

Ahojte,

Riešim hasické stopky na mega2560+wifi kde je daný kryštálhttps://techfun.sk/produkt/arduino-mega-wifi/
Viem že millis je nepresný tak by som uvítaľ nejaké nápady postrehy ako to správne urobiť. Nejaký vzorec nastavenie všetky postrehy sú vítané.

Ďakujem

Uživatelský avatar
gilhad
Příspěvky: 788
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Hasicské stopky na mega2560

Příspěvek od gilhad » 13 říj 2023, 10:36

Jak dlouhé časové úseky tím chceš měřit a jakou potřebuješ přesnost (a proč), že řešíš nepřesnost millis?
Případně nestačí prostě změřit třeba 1.000 sec, podělit napočítanýma millis 1.000.000UL a tou hodnotou pak násobit všechny výsledky měření?

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Hasicské stopky na mega2560

Příspěvek od ondraN » 13 říj 2023, 14:11

Karo88 píše:
13 říj 2023, 09:59
Ahojte,

.....
Viem že millis je nepresný tak by som uvítaľ nejaké nápady postrehy ako to správne urobiť. Nejaký vzorec nastavenie všetky postrehy sú vítané.

Ďakujem
Millis je tak přesný, jak je přesný krystal hodin arduina. Pokud ti ten na desce nevyhovuje a potřebuješ vyšší přesnost, kup si kalibrovaný krystalový oscilátor se stejným kmitočtem, jaký má krystal a použij ho místo něj.
Nebo si připoj GPS modul a synchronizuj si čas každou sekundu podle něj, přesněji už to snad nejde.

peterple
Příspěvky: 156
Registrován: 22 zář 2021, 20:20
Reputation: 0

Re: Hasicské stopky na mega2560

Příspěvek od peterple » 13 říj 2023, 19:43

Hej,millis je nepresná. Síce sa snažia tú chybu korigovať ale aj tak si myslím že na dlhé časy (týždne) to nebude kóšer.
V stopkách to robí bordel v tom že neviem koľká v poradí milisekunda má inú dĺžku ako tie ostatné.
Na mege máš ale kopu čítačov. Tak si nastav napríklad Timer1 podľa seba a môžeš si základný tick nastaviť presne. Tiež súhlasím s tým že ten kryštál čo je tam nie je nič moc. Keď som v minulosti robil hodiny tak som používal pomerne presné, k tomu určené časové kryštály s f 2^22 = 4194304Hz.
Ale nemyslím že by hasiči behali niekde týždeň, takže na to stačí aj ten 16.000Mhz

Dene Elanik
Příspěvky: 67
Registrován: 29 led 2020, 20:15
Reputation: 0

Re: Hasicské stopky na mega2560

Příspěvek od Dene Elanik » 13 říj 2023, 22:08

Kód: Vybrat vše

#include <timer.h>
#include <LiquidCrystal_I2C.h>

Timer<1, micros> timer; // create a timer with 1 task and microsecond resolution
unsigned long corr = 0;
LiquidCrystal_I2C lcd(0x23, 20, 4); 

bool _10ms(void *) {
corr += 1;
  
}

void setup() {
    lcd.init();                      // initialize the lcd
  lcd.backlight();

  // call the toggle_led function every 10000 micros 
  timer.every(10000, _10ms);
}

void loop() {
    lcd.setCursor(1, 0);
 lcd.print(corr);
  timer.tick(); // tick the timer
}

peterple
Příspěvky: 156
Registrován: 22 zář 2021, 20:20
Reputation: 0

Re: Hasicské stopky na mega2560

Příspěvek od peterple » 14 říj 2023, 11:52

Tak pozor takto nie!!!!!!

corr nie je volatile (musí byť). A prístup k premenej nie je atomický. Treba si naštudovať ako sa to robí. Stačí si pozieť zdroják millis.

Karo88
Příspěvky: 7
Registrován: 26 črc 2019, 01:15
Reputation: 0

Re: Hasicské stopky na mega2560

Příspěvek od Karo88 » 15 říj 2023, 23:01

peterple píše:
13 říj 2023, 19:43
Hej,millis je nepresná. Síce sa snažia tú chybu korigovať ale aj tak si myslím že na dlhé časy (týždne) to nebude kóšer.
V stopkách to robí bordel v tom že neviem koľká v poradí milisekunda má inú dĺžku ako tie ostatné.
Na mege máš ale kopu čítačov. Tak si nastav napríklad Timer1 podľa seba a môžeš si základný tick nastaviť presne. Tiež súhlasím s tým že ten kryštál čo je tam nie je nič moc. Keď som v minulosti robil hodiny tak som používal pomerne presné, k tomu určené časové kryštály s f 2^22 = 4194304Hz.
Ale nemyslím že by hasiči behali niekde týždeň, takže na to stačí aj ten 16.000Mhz
ono je problém vtom že na všetkých uno sa začali používať rezonátory, kryštál čo tam je tak je na komunikáciu.
Mega ich má až 6. Teraz otázka ako to správne napísať lebo nemám potuch, Lebo už som čital kopec článkov ako použiť timer ale niektoré si doslova odporujú. V tomto som úplny začiatočník..

Preto ak sa bude dať tak by som poprosil ako tá časť kódu má správne vyzerať.

Ďakujem

peterple
Příspěvky: 156
Registrován: 22 zář 2021, 20:20
Reputation: 0

Re: Hasicské stopky na mega2560

Příspěvek od peterple » 15 říj 2023, 23:36

Och, nečakaj že tu hodím funkčný kód konkurencii. Musí stačiť že píšem čo je špatne. Kód poslaný v predošlom príspevku má chyby čo som popísal. Po ich odstránení bude OK. Ak sa do toho neponoríš navždy zostaneš začiatočník. Doporučujem menej čítať blbosti a viac písať vlastné veci. Nejasnosti si vyjasniť na fóre.

Uživatelský avatar
gilhad
Příspěvky: 788
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Hasicské stopky na mega2560

Příspěvek od gilhad » 16 říj 2023, 00:33

Tak ono taky dost záleží na tom co a proč a jak chceš měřit.

Pokud někde děláš nějaký rychlý protokol taháním za jednotlivé piny a doba instrukce navíc ti to může rozhodit, tak to nejspíš programuješ v assembleru a s brutální znalostí všeho.

Pokud je to tak, že měříš třeba nějaké hasičské závody, po startu stiskneš tlačítko na svém dobrovolnickém bastlu, po průběhu cílem druhé a vítěz dostane diplom a věnec klobás, tak nestejně dlouhé milisekundy nemusíš řešit, protože to tak přesně nenamačkáš, během těch tří minut se ti nenakumuluje tolik chyb, kolik tam tím mačkáním vneseš sám a navíc ty chyby budou pro všechny soutěžící docela podobné - během sobotního odpoledne se ty podmínky tolik nezmění - takže nejrychlejší stejně bude mít nejlepší čas (a že všechny časy budou kvůli tepelné závislosti o 2.54321 ms vedle vadit nebude) :)

Kdyby šlo o zápis do Guinessovy knihy rekordů a chtěli jste ve dvoudenním maratonu o zlomek sekundy překonat loňský vítězný team z Aljašky, tak zase budete používat řádově dražší a přesnější techniku, protože vám to jinak stejně nikdo neuzná :)

Karo88
Příspěvky: 7
Registrován: 26 črc 2019, 01:15
Reputation: 0

Re: Hasicské stopky na mega2560

Příspěvek od Karo88 » 16 říj 2023, 11:14

peterple píše:
15 říj 2023, 23:36
Och, nečakaj že tu hodím funkčný kód konkurencii. Musí stačiť že píšem čo je špatne. Kód poslaný v predošlom príspevku má chyby čo som popísal. Po ich odstránení bude OK. Ak sa do toho neponoríš navždy zostaneš začiatočník. Doporučujem menej čítať blbosti a viac písať vlastné veci. Nejasnosti si vyjasniť na fóre.
Dosť mám nakodených iných projektov, ale nikdy so neriešil časovače. až takto.
Toto je čo som urobil, nápad ešte na nejaké doplnenie?

Kód: Vybrat vše

 
void init_timer1(void);
volatile unsigned long millis_counter=0;

void init_timer1(void){
 // Nastavenie časovača 1 na generovanie prerušenia každú 1 ms
  TCCR1A = 0; 
  TCCR1B = (1 << WGM52) | (1 << CS51) | (1 << CS50); // Režim CTC a preddeľovač 64
  OCR1A = 249; // Nastavenie hodnoty porovnania pre generovanie prerušenia každých 1 ms
  TIMSK1 = (1 << OCIE1A); // Povolenie prerušenia pri dosiahnutí hodnoty porovnania
 
}

ISR(TIMER1_COMPA_vect) {
  // Obsluha prerušenia časovača 1, ktorá sa vykoná každých 1 ms
  millis_counter++;
}

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 56 hostů