Hur synca en tid? (trådlöst mellan två arduinosar)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
FormerMazda
Inlägg: 6442
Blev medlem: 27 februari 2006, 14:59:36
Ort: Asby (Östergötland)

Hur synca en tid? (trådlöst mellan två arduinosar)

Inlägg av FormerMazda »

Håller ju på med startgrans-projektet, och har kommer en bra bit faktiskt.
Får ju granen att agera som tänkt, jag har koll på om det sker tjuvstart, och hur för tidigt man startade. Men såklart har jag mätning på reaktionstid iväg.

Sen ska ju tiden mellan start och mål mätas, och även slutfart med hjälp av dubbla fotoceller i slutet med känt avstånd.

Nu till nöten, målet är 201meter bort.
Kabel skulle underlätta i koden, men 201meter kabel är praktiskt knöligt på många vis.

Jag är inne på en trådlös lösning, och jag har köpt ett gäng NRF24L01+ ( Länk till ungefär typ )
Men då kommer direkt en fråga om timing? All tidräkning baserar jag på millis() i Arduinon, denna returnerar hur många millisekunder arduinion varit spänningssatt.
Att starta master-arduino och målslav-arduino exakt samtidigt lär inte gå. Att skicka vad masterns millis() är till slaven för att beräkna en diff lär ju också skita sig då kommandon ska utföras och data skickas mm. Det lär diffa en del helt enkelt.

Spontana tankar och idéer på hur jag ska lyckas synka detta?

En dålig idé jag har är att startgranen ställs upp och startas. Sen ansluter man en kabel mellan granen och målarduinon och utför nån typ av sync där man låter en digital I/O utföra sync.
Kruxet är om man hamnar i en tankevurpa i programmet och trycker på reset på nån enhet, då måste ju sync ske igen, och det suger ju när målarduinon är 201meter bort..
Användarvisningsbild
Glenn
Inlägg: 36565
Blev medlem: 24 februari 2006, 12:01:56
Ort: Norr om Sthlm
Kontakt:

Re: Hur synca en tid? (trådlöst mellan två arduinosar)

Inlägg av Glenn »

kan du inte ha en RTC i båda och sen synkar man dom vid start genom en inbyggd funktion och kabel ?

Då kan ju målgångsenheten läsa tiden från sin RTC, och den lär ju inte ha ändrat sig speciellt mycket.
Användarvisningsbild
FormerMazda
Inlägg: 6442
Blev medlem: 27 februari 2006, 14:59:36
Ort: Asby (Östergötland)

Re: Hur synca en tid? (trådlöst mellan två arduinosar)

Inlägg av FormerMazda »

Har haft lösa tankar kring RTC.

Men hur fungerar en sån? En pryttel som ger sin tid via nåt seriellt? Batteribackupat? Hur upplöst är tiden?
Användarvisningsbild
adent
Inlägg: 4245
Blev medlem: 27 november 2008, 22:56:23
Ort: Utanför Jönköping
Kontakt:

Re: Hur synca en tid? (trådlöst mellan två arduinosar)

Inlägg av adent »

Ansult en GPS till vardera enheten och använd klocka och PPS-puls ut från GPS:en så får du utmärkt synkning.

Lite overkill, men inte så dyrt numera.

MVH: Mikael
Användarvisningsbild
Glenn
Inlägg: 36565
Blev medlem: 24 februari 2006, 12:01:56
Ort: Norr om Sthlm
Kontakt:

Re: Hur synca en tid? (trådlöst mellan två arduinosar)

Inlägg av Glenn »

Det är väldigt varierande, var länge sen jag labbade med en RTC men den jag körde (från maxim tror jag) pratade I2C och hade batteribackup.
Användarvisningsbild
Icecap
Inlägg: 26628
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Hur synca en tid? (trådlöst mellan två arduinosar)

Inlägg av Icecap »

En möjlighet jag har använd:
Ta en DS323x (finns olika modeller med olika interface).

Det är en serie väldigt exakta RTC (±2 minuter/år) och de har en möjlighet att ge ut pulser med t.ex. 1 sek.

Jag har denna puls in på en interruptpinne och kan då faslåsa en intern klocka till denna så att jag får ut 1,000ms tider.

Själva programdelen är enkel och det enda du egentligen behöver är själva pulsen, att läsa klockan är i grunden likgiltig, det viktiga är att pulserna kommer.

När du väl har denna exakta klocka kan du sedan synka via kommunikationen.

GPS med puls är bra också, pulsen kan "snabbas upp" på samma sätt.

Och hur styr man då denna faslås? Jag utgår ifrån att det är 1ms som gäller.
Ha en word-variabel (16 bit eller mer).
Start en 16-bit timer med ställbar tid.
Räkna ut ung. rätt tid som grundvärde, då går det snabbare att få lås på fasen.
* Vid varje puls ska variabeln nollas MEN SE NEDAN FÖRST!
* Vid varje timer-interrupt ska variabeln räknas upp med 1.
* Om variabeln är över 999 när pulsen kommer ska timerns delning ökas en aning (jag tar 1 steg).
* Om variabeln är under 999 när pulsen kommer ska timerns delning minska en aning (jag tar 1 steg).

Man använder då variabeln som ms-värde MEN filtrerar så att vid värden över 999 ställer man svaret till 999.

Hela sekunder räknas upp med pulserna.

Jag testade detta sätt i en skylt och resultatet blev kanonbra. µC'n kör enbart med intern klocka och jag testade att värma och kyla den och i båda fall avvek den en aning och låste igen utan problem.
Användarvisningsbild
FormerMazda
Inlägg: 6442
Blev medlem: 27 februari 2006, 14:59:36
Ort: Asby (Östergötland)

Re: Hur synca en tid? (trådlöst mellan två arduinosar)

Inlägg av FormerMazda »

Googlar man på arduino och rtc så hittar man att DS3231 är att föredra och färdiga bibliotek finnes.

Med detta skulle man kunna ha denna rtc på alla enheter, sen vid uppsättning utföra en sync innan utplacering och sen kan man räknamed att alla enheter går lika under dagen.
Dock bara ner på sekunden, där är min tanke nu och jobbar. hur får jag millisekundsnogrannhet då?

Edit: Icecap har svarat en hel harrang! :D Den ska studeras. Snart.
Användarvisningsbild
Andax
Inlägg: 4379
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: Hur synca en tid? (trådlöst mellan två arduinosar)

Inlägg av Andax »

Som adent skrev så har många (även mycket billiga) gps mottagare en 1PPS signal. Det är en digital puls som är väldigt noggrann och som är aktiv när vid varje hel sekund. Låter du den signalen gå in på en interrupt-pinne och läser av alternativt nollställer din millisekundräknare så har du global tid med millisekundupplösning vid både start och mål.
ElectricNooB
Inlägg: 600
Blev medlem: 26 juli 2011, 20:58:06

Re: Hur synca en tid? (trådlöst mellan två arduinosar)

Inlägg av ElectricNooB »

Håller med GPS stämmorna, vore coolt, "äh, dom är GPS styrda bara" :P
Overkill ja, men det löser många problem och coolhetsfaktorn går som sagt inte att förneka!
ie
EF Sponsor
Inlägg: 1371
Blev medlem: 23 oktober 2006, 13:12:57
Ort: Tyresö

Re: Hur synca en tid? (trådlöst mellan två arduinosar)

Inlägg av ie »

Om du har möjlighet att synka enheterna (via direktkontakt) före eller efter, så räcker det med noggrannheten i kristallen till processorn (+/- 50ppm typ) för att ligga inom 0,4s drift/h. Använd en timer i CPUn som räknare (med lite interupt och så för att hantera overflow).

En RTC behövs inte och inte heller den är noggrannare än den kristall som driver den.
Användarvisningsbild
FormerMazda
Inlägg: 6442
Blev medlem: 27 februari 2006, 14:59:36
Ort: Asby (Östergötland)

Re: Hur synca en tid? (trådlöst mellan två arduinosar)

Inlägg av FormerMazda »

Har funderat en del nu, och en sak slog mig. Hela mitt befintliga program, som nu är mer eller mindre klart, baseras på den millisekundsräknaren ( millis() ) som räknar upp från poweron/reset.

Så även om GPS-idén skulle fungera så kan jag ju bara vara säker på att dom är syncade på en sekund. Inte vilken sekund. Vilket gör det svårt att räkna ut ET, alltså hur lång tid hela sträckan tog att köra. Skulle tro att den tiden är allt mellan .. inte en aning, men runt 10 sekunder kanske.

Möjligt att GPS-tid med sekund tick är en lösning.

Kabelsync vid uppstart är som sagt möjligt. Problemet blir om nån enhet resettas, för då resettas väl även millis()? Och då måste kabelsync ske igen vilket då är rätt knöligt.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4745
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Hur synca en tid? (trådlöst mellan två arduinosar)

Inlägg av Swech »

Om slaven endast skickar stopkommando till mastern så behöver bara mastern sköta tidtagningen.

Du lär väl knappast behöva bättre upplösning än 0.05 sek- 0.1 sek?

Swech
Användarvisningsbild
FormerMazda
Inlägg: 6442
Blev medlem: 27 februari 2006, 14:59:36
Ort: Asby (Östergötland)

Re: Hur synca en tid? (trådlöst mellan två arduinosar)

Inlägg av FormerMazda »

Slaven uppgift blir att skicka speedtrap och målgång för respektive bana.
Men slaven kan å andra sidan själv räkna ut slutfarten och när målgång registrerats så skickas bara vilken sida och slutfart i klartext.
Som du säger, allt som allt kanske det diffar som sämst 100ms? Och det må vara försumbart i dessa samanhang, det är ju ingen seriös racing i det avseendet och diffen är ju lika för båda banorna.

Kanske är så att jag snöat in på att få ET på millisekunden..

Vad är gisnningen på att det tar i tid för följande:
* Mastern detekterar varje banas start och sätter en respektive starttid för detta.
* Mastern ställer sig i nån typ av loop eller liknande och väntar på seriell data från slav om målgång.
* Så fort seriell data är mottagen så sätts sluttid för banan. (sluttid - starttid = ET)

Så fördröjningen blir vad master/slav tar för själva seriella pratet och sen om radiomodulerna i sig har nån naturlig fördröjning?

Kanske är dags att labba lite. :)
Användarvisningsbild
FormerMazda
Inlägg: 6442
Blev medlem: 27 februari 2006, 14:59:36
Ort: Asby (Östergötland)

Re: Hur synca en tid? (trådlöst mellan två arduinosar)

Inlägg av FormerMazda »

Såg förresten att du Swech hade snajsiga radiomoduler. http://swechtrading.se/zencart/index.ph ... cts_id=614
Vet du om nån skillnad på dessa mot de jag har? https://www.sparkfun.com/products/691
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4745
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Hur synca en tid? (trådlöst mellan två arduinosar)

Inlägg av Swech »

Mina går på annan frekvens. 433MHz
Jag gissar också att de går längre än dina, dina är specade till 100 meter

Swech
Skriv svar