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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.