mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Analog Comparator ISR toggelt wenn PSC läuft (At90PWM3)


Autor: Zoltan Grad (zgrad)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe einen Problem mit der Interrupt-Routine 
ISR(ANALOG_COMP_1_vect).

Das von mir verwendet IC AT90PWM3 besitzt drei analog Komparatoren und 
drei Power Stage Controller(PSC) zur PWM Signal Erzeugung. So lang alle 
PSCs deaktiviert sind, funktinieren die Interrupt-Routine aller analog 
Komparatoren wie erwartet: Bei jeder Flanke wird ein Interrupt 
ausgelöst.

Sobald aber der PSC aktiviert wird UND an dem Eingang des ACOMP1 0V 
anliegen wird die ISR(ANALOG_COMP_1_vect) ständig aufgerufen. Die beiden 
anderen analog Comparatoren arbetieten weiterhin wie gewünscht.

Der Analog Comparator wird mit Vref/2.13 = 1.20V verglichen. Als Vref 
ist der interne 2.56V Referenz gewählt mit einem externen Kondensator an 
AREF-Pin.


Die ISR selber sind sehr einfach gehalten und funktionieren bis auf den 
oben beschriebenen Betriebszustand.
ISR(ANALOG_COMP_0_vect)
{
   uart_putchar('A');
}
ISR(ANALOG_COMP_1_vect)
{
   uart_putchar('B');    // <- ??????
}
ISR(ANALOG_COMP_2_vect)
{
   uart_putchar('C');
}


Das Initialiesern des PSC:
void PSC_Init(unsigned int ot0,  unsigned int ot1)
{
   Start_pll_64_mega();   // start the PLL at 64 MHz
   Wait_pll_ready();

   OCR0RA = ot0;
   OCR0RB = ot1;
   PCNF0 = (1<<PMODE01) | (1<<PMODE00) | (1<<POP0) | (1<<PCLKSEL0) ;  /* fast clock input used */
   PFRC0A = 0;
   PFRC0B = 0;
   PCTL0 = (1<<PARUN0) | (1<<PCCYC0);

   OCR1RA = ot0;
   OCR1RB = ot1;

   PCNF1 = (1<<PMODE11) | (1<<PMODE10) | (1<<POP1) | (1<<PCLKSEL1);   /* fast clock input used */
   PFRC1A = 0;
   PFRC1B = 0;
   PCTL1 = (1<<PARUN1) | (1<<PCCYC1);

   OCR2RA = ot0;
   OCR2RB = ot1;
   PCNF2 = (1<<PMODE21) | (1<<PMODE20) | (1<<POP2) | (1<<PCLKSEL2);   /* fast clock input used */
   PFRC2A = 0;
   PFRC2B = 0;
//   PCTL2 = (1<<PCCYC2) | (1<<PRUN2) ; // PSC ist Master

   // connect the PSC waveform generator outputs to the port outputs
   PSOC0 = (1<<POEN0B) | (1<<POEN0A) ;
   PSOC1 = (1<<POEN1B) | (1<<POEN1A) ;
   PSOC2 = (1<<POEN2B) | (1<<POEN2A) ;
}

Starten des PSCs
void PSC_Start(void)
{
   PCTL2 = (1<<PCCYC2) | (1<<PRUN2) ;
}

Die code stammt von der Atmel Seite - AVR435:
http://www.atmel.com/dyn/products/app_notes.asp?part_id=3615
Ich habe die Code lediglich vom IAR-Compiler auf GCC portiert.


Meine Frage ist, worin der Zusammenhang zwischen dem Analog Comparator 
und dem Power Stage Controller liegen könnte. Es ist mir völlig unklar, 
warum der analog Komparator 1 bei 0V am ACMP1-Eingang und bei laufendem 
PSC ständig die ISR auslöst.


Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.