Küsimus:
Kui täpne on pulseIn () ajastus?
Peter Bloomfield
2014-02-20 17:03:18 UTC
view on stackexchange narkive permalink

Olen PWM-põhise binaarandmete kodeeringu töötlemiseks kasutanud funktsiooni pulseIn () . See sobib hästi impulsside eristamiseks, mis on oluliselt erineva pikkusega, nt. 500us vs 1500us. See teeb selle enam kui piisavaks tavaliste infrapunade haldamiseks.

Kuid ma tahan luua oma infrapunase süsteemi, mis suudaks kasutada rohkem kui 2 impulsi pikkust, et andmeedastus toimuks kiiremini. Ideaalis tahaksin kaheksakodeerimiseks kasutada 8 erinevat impulsi pikkust (nt 200us, 400us, 600us jne).

Olen märganud pulseIn tagastatud väärtuste üsna olulisi erinevusi () küll (+/- 10%). Ma eeldan, et vähemalt osa sellest on sisse viidud infrapunasaatja ja vastuvõtja moodulitega, kuid mul pole selle kontrollimiseks piisavalt häid seadmeid.

Eeldusel, et suudan seda välist viga leevendada, on pulseIn () on tõenäoliselt piisavalt täpne selliste sarnaste impulsside eristamiseks?

Kaks vastused:
#1
+11
mpflaga
2014-02-21 09:38:55 UTC
view on stackexchange narkive permalink

Funktsioon pulsein () on väga kahjulik, kuna see on kõva silmus ja tagastab arvu * oletatavad kellaaja tsüklid, mis kuluvad ühe silmuse jaoks

  ... // oodake impulsi peatumine ((* portInputRegister (port) & bit) == stateMask) {if (numloops ++ == maxloops) tagastab 0; width ++;} // teisendab näidu mikrosekunditeks. Silmus on kindlaks määratud // 20 kellatsükli pikkuseks ning serva // ja tsükli alguse vahel on umbes 16 kella. Seal on mõni tõrge, mille on sisestanud // katkestuste käitlejad.return clockCyclesToMicroseconds (laius * 21 + 16); 

Kõige täpsem meetod PIN-i ajastamise jäädvustamiseks on funktsioon INPUT CAPTURE FEATURE. Vaadake seda näidet. See võimaldab maksimaalse eraldusvõimega sisendhõivet 1x protsessoris ja sisendnõela iga serv hõivab taimeri kella väärtuse loodud katkestusteenusest lugemiseks. See võimaldab ka taimeri ülevoolu katkestada, et säilitada suurt absoluutset aega, jäädvustada. Kuna 1x veereb üsna kiiresti. Hõived salvestavad aja massiivi, et seda lugeda peaahelas.


Kui infrapunaliidese signaalide jaoks on tüüpiline teek shirriff / Arduino-IRremote teek. Kui sellel on mitu demot, mis loevad ja saadavad IR demoduleeritud signaalist. Võimaldada ehitada oma kavandi visand. See kood loob algselt taimeri katkestuse, mis küsitleb sisendnõela määraga, mis määratakse järgmiselt:

  #define USECPERTICK 50 // mikrosekundit iga katkestuse märgi kohta  

IRremote.h faili. Oma eesmärkidel olen selle muutnud 25-ks. Kust ma seda veel leian, võivad vaheldumisi puuduvad impulsivood.

Pange tähele, et demoduleerimine on kõige paremini teostatav IR-vastuvõtjas, mis omakorda väljastab selle huvipakkuva signaali. Kuhu lisada natuke tausta. Tüüpilise 38KHz modulatsiooni kasutamine võrdub minimaalse eraldusvõimega 26,3uS impulsi tsükli kohta. sherriffi raamatukogu näitab tavaliselt, et enamik baude või bitte on suurusjärgus 10+ impulssi. Mis näivad vastavat teie soovitud ajastustele.

mikroteraapia / Arduino-IRremote kahvli töö parandab vastuvõttu, asendades tihvti taimeri katkestuse küsitluse PinChangeInterruptsi kasutamisega. Selle olen ühendanud omaenda mpflaga / Arduino-IRremote kahvliga, mis lisab veel mitmeid funktsioone.

Nii et võite kasutada mis tahes ülaltoodud teeke. Või looge oma rakendus, mis kasutab servade jäädvustamiseks ühte järgmistest.

  1. küsitlused taimeri sündmusel (nt 50uS)
  2. lööb mikrosid () PinChangeInterrupt
  3. kasutab täpse aja haaramiseks sisendtõmbe katkestusi
Geniaalne vastus. Arduino-IRremote on väga kvaliteetne raamatukogu. Kergesti loetav ja palju läbimõeldud disainiga, mis tähendab, et see on väga usaldusväärne.
#2
+2
TheDoctor
2014-02-20 20:22:36 UTC
view on stackexchange narkive permalink

Siin on mõned testi pulseIn testiandmed. Üks Arduino saatis arvatavasti 14-tolliseid impulsse ja teine ​​sülitas need andmed välja:

18,18,18,12,18,18,18,18,18,18,18 , 18,18,18,18,18,18,24,19,18,18,18,18,18,24,18,18,18,19,18,18,12,18,18,19,18 , 18,18,18,18,18,18,18,18,18,18,19,18,19,24,18,18,18,18,18,18,18,24,18,18,18 , 18,18,18,18,18,18,18,18,18,18,19,18,18,18,18,18,18,18,18,18,18,19,18,18,18 , 11,18

Nagu näete, pole impulsid sugugi täpsed. Aeg oleks täpsem, kui saatmise ja vastuvõtmise otsad oleksid koostatud või isegi nende enda protsessoritele alla laaditud.



See küsimus ja vastus tõlgiti automaatselt inglise keelest.Algne sisu on saadaval stackexchange-is, mida täname cc by-sa 3.0-litsentsi eest, mille all seda levitatakse.
Loading...