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?
Esim. picbasic plus 2.00 editorilla tehtynä
Serout portb.2,6, [#testi]
Keskeytyksillä vai miten?
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.
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..
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.