Hulp gevraagd met pulstrein meten.

Alle vragen m.b.t digitale schakelingen m.b.v. losse i.c's
en oplossingen m.b.v. PIC processoren.
Plaats reactie
Peter Oors
Berichten: 80
Lid geworden op: zo 26 sep 2004, 22:27
Locatie: Helmond. .

Hulp gevraagd met pulstrein meten.

Bericht door Peter Oors »

Met PicBasic Pro zijn me al vele hobbyprojekten goed afgegaan.
Nu loop ik tegen het volgende probleem aan:

Ik wil met de 16F628 en de 16F819 op 20 MHz pulsen meten.
De pulsen hebben dezelfde lengte, 104 us.
91 us hoog en 13 us laag of 13 us hoog en 91 us laag.
Met het PulsIn commando kun je dit doen, doch....
Dit commando heeft kennelijk veel tijd nodig om dit te berekenen.
1 puls gaat wel, in een pulstrein verslikt hij zich.
In assembler kan dit (denk ik) vrij simpel, ik kan dit totaal niet.

Zou iemand mij hiermee vooruit willen helpen.

Bij voorbaat dank.
Joeri Fr
Berichten: 744
Lid geworden op: wo 29 sep 2004, 18:22
Locatie: Brugge (B). .. .

Bericht door Joeri Fr »

Ik weet niet of je wel zo hoog kan.
20MHz kloksnelheid aan 4 tikken per bewerking geeft je nog 5 MHz.
Je wenst waarschijnlijk wel resolutie van 1µs gezien je 13µs en 91µs vermeldt.
Gezien je volgens Shannon-theorema dubbel zo snel moet samplen als je hoogste frequentie moet je dus aan 2MHz samples nemen.
Dit gaat de pic niet kunnen volgen, ook niet in assembler.
Heb je al eens geprobeerd met een signaal met f factor 10 of 100 lager?
Peter Oors
Berichten: 80
Lid geworden op: zo 26 sep 2004, 22:27
Locatie: Helmond. .

Bericht door Peter Oors »

Het moet kunnen.
Door diverse fabrikanten wordt de PIC gebruikt om zulke pulstreinen te decoderen. Meestal wordt er een kristal van 16MHz gebruikt.
Ik wil verschillende toepasingen gaan maken waar wel vraag naar is, maar wat door de fabrikanten niet gemaakt wordt (te kleine markt).

Het signaal hoeft ook niet op de us nauwkeurig gemeten te worden.
Over het algemeen is plus en min 3us voldoende.
Je hebt een aantal soorten pulsen die op een datalijn kunnen voorkomen.
13us hoog/93us laag 10-16us hoog en 90-96us laag detekteren.
93us hoog/13us laag
58us hoog/58us laag
100us hoog/100us laag
Qua pulsbreedte liggen deze verschillende pulsen ver van elkaar.
Is de informatie duidelijk?
Joeri Fr
Berichten: 744
Lid geworden op: wo 29 sep 2004, 18:22
Locatie: Brugge (B). .. .

Bericht door Joeri Fr »

pulsin heeft een resolutie van 2us bij 20MHz.
normaalgezien moet dit dan gaan.
Het commando meet wel maar 1 pulsbreedte en slaat die dan op in de var die je wenst.

dus bij 20MHz:

for i = 0 to a
pulsin portx.X, 1, breedte_H
treinH=breedte_H
next i

en dan heb je in de array de 'hoog' duur gesaved voor elk van het aantal pulsen dat je wil tellen.
Gezien je een vast periode hebt in je signaal heb je automatisch de laagwaarde ook.
Is het zoiets dat je wil doen?

Of wil je werken met ADCIN? Hier heb je de mogelijkheid om het signaal in te lezen in stapjes die je zelf kan bepalen. Dit moet zeker lukken.

Assembler kan ik niet...
Laatst gewijzigd door Joeri Fr op do 12 jan 2006, 9:12, 1 keer totaal gewijzigd.
Peter Oors
Berichten: 80
Lid geworden op: zo 26 sep 2004, 22:27
Locatie: Helmond. .

Bericht door Peter Oors »

Dit ga ik morgen eens proberen.
Ik laat je wat weten of het al dan niet lukt.
Bedankt voor de hulp zover.
Peter Oors
Berichten: 80
Lid geworden op: zo 26 sep 2004, 22:27
Locatie: Helmond. .

Bericht door Peter Oors »

Het werkt...... maar.
Met pulsin zit ik op het randje van goed en fout.
Vandaag met een goede scoop gemeten tot hoever het nog goed gaat.
Tussen het einde van de te meten puls en het einde van het pulsin commando zit ca. 12us.
Daarom gaat het bij mij meestal fout.

In assembler kan dit heel veel beter, alleen ik weet niet hoe.

Op de te meten puls van 91us hoog en 13us laag zit nog een tolerantie van enkele us, dat kan ik nou net niet hebben.
Heb nu een simpele routine gemaakt die kijkt hoe lang een puls hoog blijft.
Hij meet dit in stapjes van 2us (bij 20MHz).
Ik meet 6 of 7 (maal de 2us) is 12 of 14us, dit is perfekt.
Nu nog controleren of een complete pulstrein ook nog goed gaat.

Hoe meet je met ADCIN een puls, heb je een voorbeeld?
Joeri Fr
Berichten: 744
Lid geworden op: wo 29 sep 2004, 18:22
Locatie: Brugge (B). .. .

Bericht door Joeri Fr »

Ik heb hier geen grijpklaar voorbeeld.
Je kunt met adcin werken door eerst je defineosc 20 in te stellen.
(beter ware met 40 als je zo'n kristal hebt. En nog beter is een 18F pic te gebruiken voor zoiets).
dan define adc_sampleus 2
adcon1 = 0 (analoge ingang op portA)
for i = 1 to 50
adcin 0, A
trein = A
next i

net zoals bij een scoop kun je ook de resolutie instellen met define adc_bits 8, 10 of 12

Maar dit staat mooi in de handleiding. Kijk eens op de website van melabs. daar kun je hem downloaden.

Als het niet lukt, laat maar iets weten.
Joeri Fr
Berichten: 744
Lid geworden op: wo 29 sep 2004, 18:22
Locatie: Brugge (B). .. .

Bericht door Joeri Fr »

Goed te weten dat je een antwoord hebt gevonden op het melabs forum...
Plaats reactie