16f84A

Onnistuuko 16F84A:lla RS-232 sarjamuotoisen signaalin synkronoitu siirto ja pulssinpituuden mittaaminen samaan aikaan, vai onko timeri siiron käytössä.

Esim. picbasic plus 2.00 editorilla tehtynä
Serout portb.2,6, [#testi]

Keskeytyksillä vai miten?
4349
Äänestä

Muut lukivat myös

Vastaukset 4

Vanhimmat

Käytä -628 sarjaa, parempi ja halvempi.

- onko pakko olla synkroninen siirto?
- jos pulsseja voi hukata, etkö voi mitata ensin ja siirtää erikseen?

Onnistuisi ehkä kittanasti jos varais timer0 ja rb0 puhtaasti pulssinleveyden mittaamiseen ja toteuttaisi sarjaliikenteen softalla pääloopissa. Kesketyksellä mitattaisiin pulssinleveyttä. 84A-puuttuu kunnollinen capture yksikkö, rb0 kait ajaa saman asian. Viivet pitäis ottaa huomioon, näkee simulaattorilla, ja silloinkin olisi vaarana että liikennöinti ei pysy synkissä. Pienellä baudratella paremmin.

Äänestä
  • Tällä hetkellä toteutettu sillen, että mittaa pulssin ja sen jälkeen lähettää, huonona puolena on, että joka toinen pulssi jää mittaamatta kun sen aikana tapahtuu lähetys.

    ohjelma joka lukee tietoa vaatii sen "muodossa"
    38400,8,n,1

    käyttääkö tuo picbasic:n serout käsky timeriä, miten jos keskeytyksellä hoitaa sen pulssin mittauksen timerin kanssa ja lähetyksen nop(asm) käskyllä.

    Jos joltain onnistuis tuo asm:n vääntö sillein, että siirto ja mittaus onnistuisi yhtään pulssia hukkaamatta voisin ajatella pienen korvauksen lahjoittamista.

    Siis pitäisi pystyä mittaamaan pulssin pituutta joita tulee max. 75kpl sekunnissa ja lukea a/d muuntimelta 12 bittinen arvo ja lähettää synkroituna sarjasiirtona pinnii muodossa 65536,4096

    Tämä tekee sen, mutta hukkaa joka toisen pulssin.
    Device 16F84A
          DECLARE XTAL 20
          CONFIG WDT_OFF , HS_OSC , PWRTE_ON
          dim A as word
          dim J as word
          dim MAXLO as word
          Alku:
          if portb.3 = 1 then Alku
          low portb.4
          high portb.5
          Loop:
          A = Pulsin portb.0, 0
          low portb.5
          loop1:
          if portb.6 = 0 then goto loop1
          high portb.4
          delayus 1
          low portb.4
        J = 0
          FOR MAXLO = 1 TO 12
          J = J

    Äänestä

  • umpelo kirjoitti:

    Tällä hetkellä toteutettu sillen, että mittaa pulssin ja sen jälkeen lähettää, huonona puolena on, että joka toinen pulssi jää mittaamatta kun sen aikana tapahtuu lähetys.

    ohjelma joka lukee tietoa vaatii sen "muodossa"
    38400,8,n,1

    käyttääkö tuo picbasic:n serout käsky timeriä, miten jos keskeytyksellä hoitaa sen pulssin mittauksen timerin kanssa ja lähetyksen nop(asm) käskyllä.

    Jos joltain onnistuis tuo asm:n vääntö sillein, että siirto ja mittaus onnistuisi yhtään pulssia hukkaamatta voisin ajatella pienen korvauksen lahjoittamista.

    Siis pitäisi pystyä mittaamaan pulssin pituutta joita tulee max. 75kpl sekunnissa ja lukea a/d muuntimelta 12 bittinen arvo ja lähettää synkroituna sarjasiirtona pinnii muodossa 65536,4096

    Tämä tekee sen, mutta hukkaa joka toisen pulssin.
    Device 16F84A
          DECLARE XTAL 20
          CONFIG WDT_OFF , HS_OSC , PWRTE_ON
          dim A as word
          dim J as word
          dim MAXLO as word
          Alku:
          if portb.3 = 1 then Alku
          low portb.4
          high portb.5
          Loop:
          A = Pulsin portb.0, 0
          low portb.5
          loop1:
          if portb.6 = 0 then goto loop1
          high portb.4
          delayus 1
          low portb.4
        J = 0
          FOR MAXLO = 1 TO 12
          J = J

    "Siis pitäisi pystyä mittaamaan pulssin pituutta joita tulee max. 75kpl sekunnissa"

    "lukea a/d muuntimelta 12 bittinen arvo"

    mitähän aijot tehdä? ei taida picissäs riittää edes pinnit noihin kaikkiin..

    Äänestä

  • karik kirjoitti:

    "Siis pitäisi pystyä mittaamaan pulssin pituutta joita tulee max. 75kpl sekunnissa"

    "lukea a/d muuntimelta 12 bittinen arvo"

    mitähän aijot tehdä? ei taida picissäs riittää edes pinnit noihin kaikkiin..

    low portb.4
    high portb.5
    if portb.6 = 0 then goto loop1
    A = Pulsin portb.0, 0
    Serout portb.2,6, ["A",#A, "B",#J]
    if portb.3 = 1 then goto Alku

    Tosta näkee mitkä pinnit ovat käytössä(RB0,RB2,RB3,RB4,RB5,RB6)

    Ohjelman käytössä on 6 pinniä

    3 = a/d muuntimen lukuun
    1 = pulssin lukuun
    1 = lähetys com porttiin
    1 = mittauskäskyn aloitus

    Eli hyvin näyttäis riittävän, siis max. 75kpl sekunnissa, ei 75:ttä kanavaa.

    Systeemi on jo toiminnassa, ainoa huono puoli siinä on, että se hukkaa joka toisen pulssin.

    Tällä hetkellä itse lukuohjelma laskee hukatun pulssin keston ensimmäisen ja kolmannen pulssin erotuksesta, eikä se ole kovin tarkka arvo, vaikka pulssien pituus on lähes lineaarisesti pienenevää.

    Pulsseja pitäisi pystyä mittaamaan 2us tarkkuudella ja 20mhz kiteellä se onnistuu.

    Äänestä

Kommentoi aloitusta


umpelo kirjoitti:

Onnistuuko 16F84A:lla RS-232 sarjamuotoisen signaalin synkronoitu siirto ja pulssinpituuden mittaaminen samaan aikaan, vai onko timeri siiron käytössä.

Esim. picbasic plus 2.00 editorilla tehtynä
Serout portb.2,6, [#testi]

Keskeytyksillä vai miten?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu