Analog Comparator ISR toggelt wenn PSC läuft (At90PWM3)

OP #513533
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.
1
ISR(ANALOG_COMP_0_vect)
2
{
3
   uart_putchar('A');
4
}
5
ISR(ANALOG_COMP_1_vect)
6
{
7
   uart_putchar('B');    // <- ??????
8
}
9
ISR(ANALOG_COMP_2_vect)
10
{
11
   uart_putchar('C');
12
}


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

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

13
   OCR1RA = ot0;
14
   OCR1RB = ot1;
15

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

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

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

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

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

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