Arduino zero RTC

se ddebbo utilizzare millis facendo del polling non so mai se prdo del tempo

uint32_t lastMillis = 0;
uint32_t miaBaseTempi = 0;
...
...
if ( millis() - lastMillis => 10 ) {
   miaBaseTempi ++
lastMillis = millis();
}

così miaBaseTempi viene incrementata ogni 10 ms ... poi tu te l'aggiusti come ti pare con il GPS.

Guglielmo

P.S.: ovvio che il loop() deve durare MENO di 10 ms o il tutto salta.

Se invece vuoi fare una cosa completamente indipendente da millis() usa la libreria SAMD_TimerInterrupt per creare un interrupt legato ad un Timer dedicato e fare con quello il tuo orologio.

Guglielmo

}


uint32_t lastMillis = 0;
uint32_t miaBaseTempi = 0;
...
...
if ( millis() - lastMillis => 10 ) { // puo succedere ce sono passati piu di 10 ms 
//perche magari allo scadere dei 10 ms stavo facendo un adc di 4 sensori
   miaBaseTempi ++
lastMillis = millis();
}
vedro la libreria timer ..
certo che potendo aggiungere quella istruzione non appesantirei nulla ...

... e NON cambieresti nemmeno nulla ... staresti SOLO duplicando millis() e allora usa quello!

Possibile che NON ti è chiaro che, se usi lo stesso meccanismo che fa avanzare millis ha SOLO una copia di millis?

Fatti il TUO timer e aggiustatelo come ti pare.

Guglielmo

si ma non posso variare il valore di millis a piacimento in quanto
millis viene usato nel programma parecchie volte

... e allora crea un tuo timer, con la precisione che ti occorre e richiami un interrupt che incrementa la tua variabile, indipendentemente da tutto.

Guglielmo

ho risolto con la mia idea
modificato delay.c

void SysTick_DefaultHandler(void)
 {
  extern uint32_t VKK_ZXC; // mia base tempi
   // Increment tick count each ms
   _ulTickCount++;
   VKK_ZXC++;
   tickReset();
 }
mio programma

uint32_t VKK_ZXC = 3333333;

void setup() //  inizio setup -----------------------------------------------------------------------------inizio swtup
{
 
  vt2 = millis(); // questo non c'entra

VKK_ZXC = 600000000;
```void loop() // Inizio mio pgm--------------------------------------------------------------------------imizio pgm
``` Serial.print(millis());
 Serial.print("  ");
 Serial.println(VKK_ZXC);

il risultato
10910483  600910483
10910484  600910483
10910484  600910483
10910484  600910483
10910484  600910483
10910485  600910484
10910485  600910484

funziona ho cosi una variabile che posso leggere e scrivere a piacimento senza richiamare 
alcuna funzioned alcuna libreria
sono accettate critiche e migliorie 

digita o incolla il codice qui

digita o incolla il codice qui

Ciascuno si fa male come preferisce ... :roll_eyes:

Al primo aggiornamento del "core" devi rimetterci le mani o non funziona più nulla ...

... regola generale: MAI mettere direttamente le mani nei files del "core", ma trovare sempre un'altra strada perché ... prima o poi qualche cosa va storta.

Vedi un po' tu ...

Guglielmo

uso platformio per quel che riguarda le librerie non le aggiorna sui progetti esistenti
credo non ne sono sicuro che non aggiorni neanche i files core
communquue nel mio codice riportero le modifiche fatte dovessi rifarle

la prossima sara molto piu triste ..
porte seriali su due pin non facenti parte di arduino

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.