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


von Zoltan G. (zgrad)


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.


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.