[uC in C] Interupt oplossing

Pagina: 1
Acties:

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Op dit moment heb ik gekozen om software matig een probleem op te lossen.

Het probleem dat ik heb geef ik hieronder grafisch weer:
Afbeeldingslocatie: http://www.parcye.com/quantim/situatie.jpg

De pulsen komen op een willekeurig moment en duren altijd 1ms. Het spannings niveau is op dat moment 5v en daarna 0v.

Ik wil een dat mijn interupt getriggerd wordt op het moment dat er geen pulsen meer komen. In mijn tekening is dat de blauwe lijn, dan is er geen data meer.

Op dit moment krijg ik bij ieder rood blokje (begin 0v) een interupt en ik wil slechts een interupt krijgen op het moment dat er geen data meer is.

De uiteindelijke bedoeling is om te tellen hoevaak er geen data meer komt.

Mijn bedachte oplossingen:
Met een timer van 1ms kijken of er in de 1ms dat de spanning 5v is een interupt is gegeven.

Dit heb ik geprobeerd door status aan te geven, TimerStatus = 0 if TimerStatus = 1, op het moment dat TimerStatus gelijk is aan 0 mag en er komt een interupt, dan weet ik dat het in de ms is gebeurd dat er 5v is. Echter is dit niet gelukt om dit werkend te krijgen, mede doordat ik niet weet wanneer me data begint weet ik niet of ik 0 of 1 als 5v status heb...

Wat zouden jullie doen?

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 21-02 23:50
Kun je dit niet schematiseren als een automaat, en het dan zo implementeren. Ik vind je verhaal een beetje te wazig om echt een fatsoenlijk concreet antwoord te kunnen geven..

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Korter uitgelegd:
Een puls trein, van 5v, 0v waarbij iedere puls 1ms duurt begint op een willekeurig moment, ik wil detecteren als deze afloopt, doormiddel van een interupt.

Afbeeldingslocatie: http://www.parcye.com/quantim/ideaal.jpg

Grijze lijn zou ideale situatie zijn.

[ Voor 22% gewijzigd door Parcye op 01-02-2004 19:36 ]

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • Lone Gunman
  • Registratie: Juni 1999
  • Niet online
je zou t op kunnen lossen door de pin een pin interrupt te laten genereren op de neergaande flank. Als die pin interrupt optreed, start je de hardware timer, en zet je de pin interrupt uit. Deze timer genereert na exact 1,5 ms een timer interrupt. Als de timer interrupt optreed, stop je de timer, en vervolgens kijk je naar de state van de pin (hoog of laag). Als ie laag is, dan is het clocksignaal gestopt. Als ie hoog is, dan is het clocksignaal nog bezig. Aan de hand daarvan kan je bv een var incrementen oid. Daarna zet je de pin interrupt weer aan.

plaatje:
Afbeeldingslocatie: http://www.vizzzion.org/~lonert/interrupt.jpg

wat psuedo c code:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int g_noclock;

int main()
{
   g_noclock = 0;

   pin_interrupt_edge = falling_edge;
   pin_interrupt_enable = true;
   global_interrupt_enable = true;

   while(1);
}

void pin_interrupt_routine()
{
   pin_interrupt_enable = false;
   timer_set(1,5 ms);
   timer_interrupt_enable = true;
}

void timer_interrupt_routine()
{
   if(pin == low) g_noclock++;
   timer_interrupt_enable = false;   
   pin_interrupt_enable = true;   
}

Experience has taught me that interest begets expectation, and expectation begets disappointment, so the key to avoiding disappointment is to avoid interest.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:03
Ik snap het plaatje van Parcye niet... :?

[ Voor 16% gewijzigd door Soultaker op 01-02-2004 21:31 ]


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Je zou ook, om evt eerder te detecteren dat het mis gaat, de tijd tussen een op en neergaande flank kunnen meten.

Is deze kleiner dan 1ms+/- jitter dan is je pulstrein er ook mee opgehouden.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1