Frequenzzählung mit PIC 12F675 und Komparator

OP #2197769
Lesenswert?

Hallo!
Ich bin gerade dabei, eine Frequenzzählungt mit einem PIC 12F675 mittels 
des internen Komparators zu realisieren. Es ist lediglich eine 
Unterscheidung zwischen 50Hz bzw. 51Hz notwendig. Dazu habe ich einen 
220/12 Trafo, welchen ich auf der Sekundärseite mit einem 
Spannungsteiler belaste, damit ich am PIC etwa 3V(eff) habe. Die beiden 
Pole sind auf den Komparatoreingang geschaltet. Nun will ich als ersten 
Test einfach eine LED jede Sekunde mittels der Netzfrequenz toggeln.
Der Code dazu ist unten angeführt.

Nun hab ich das Problem, dass die LED so schnell schaltet, dass sie 
eigentlich nur "gedimmt" ist. Wenn ich für Count einen Wert von 10000 
verwende, sind die Perioden der LED etwas länger als eine Sekunde.

Ich hab schon einiges ausprobiert, verstehe aber nicht, warum die 
Interrupts des Komparators so häufig auftreten. Das sollte doch nur alle 
10ms (bei einem Nulldurchgang) passieren.
Ich würde mich freuen, wenn jemand eine Idee oder einen Hinweis hätte.

Schönen Gruß,
Steve

CODE:

#include <frequenz1.h>
boolean on=false;
int16 count;

void init();
void led_off();
void led_on();
void led_toggle();


#int_COMP
void COMP_isr()
{   count++;
    clear_interrupt(INT_COMP);
}

void main()
{
   init();

   while(true){
      if(count>100)
      {  count=0;
         led_toggle();
      }
   }
}

void init()
{  setup_comparator(A0_A1);
   clear_interrupt(INT_COMP);
   enable_interrupts(INT_COMP);
   enable_interrupts(GLOBAL);
   count=0;
}

void led_off()
{  if(on)
   {  output_low(PIN_A5);
      output_low(PIN_A2);
      on=false;
   }
}

void led_on()
{    if(!on)
     {  output_low(PIN_A5);
        output_high(PIN_A2);
        on=true;
     }
}

void led_toggle()
{  if(on)
      led_off();
   else
      led_on();
}
Gast #2198036
Lesenswert?

Ein Comparator hat keine ST-Eingänge, daher hast Du kurz vor und kurz 
nach dem Nulldurchgang Zeiten, in denen der Comparator "zappelt". Leg 
COUT mal an einen Oszi, dann siehst Du das.

Workaround: Bau in die ISR eine Verzögerung ein.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren