Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

@PeterS - AVR32 LCD-Ausgabe stört Interrupt Bearbeitung Kategorie: CC-Pro Unit & Appl.Board (von Hannes24 - 22.01.2014 16:50)


Hallo,

ich möchte von der Netzspannung die beiden Scheitelpunkte nach dem Nulldurchgang
messen. Dabei gebe ich auf den ext.INT4 das Nullspannungssignal (im Bild gelb)
und starte nach Auslösen des IRQ zwei Timer die dann 5ms und 15ms später
(im Bild blau) den ADC auslesen.
Das funktioniert absolut stabil, solange keine LCD-Ausgabe stattfindet.
Findet eine LCD-Ausgabe statt und ein Hard- oder Software IRQ wird ausgelöst,
dann zittert das ADC Signal (blau) wie verrückt und eine präzise Messung ist nicht
mehr möglich.

Kann man der Abarbeitung eines Hard- oder Software IRQ oberste Priorität geben ?
Eine verzögerte oder unterbrochene LCD-Ausgabe spielt ja sowieso keine Rolle.







//--------------------------------------------------------------------------------
#define PORT_LED3 117                           // PortBit 117
#define PORT_LED4 119                           // PortBit 119

word x;


void main(void)
{

    Port_Attribute(10, PORT_ATTR_INPUT);        // P15 auf Eingang = Ext_Int4 (Nullsp)
    Port_Attribute(PORT_LED1,PORT_ATTR_OUTPUT|PORT_ATTR_INIT_LOW);        // LED 1
    Port_Attribute(PORT_LED2,PORT_ATTR_OUTPUT|PORT_ATTR_INIT_LOW);        // LED 2
    Port_Attribute(PORT_LED3,PORT_ATTR_OUTPUT|PORT_ATTR_INIT_LOW);        // LED 3
    Port_Attribute(PORT_LED4,PORT_ATTR_OUTPUT|PORT_ATTR_INIT_LOW);        // LED 4


    Irq_SetVect(INT_100HZ, ISR_10ms);               // Interrupt alle 10ms

    Irq_SetVect(INT_4, ISR_ZeroCrossing);           // Int4 setzen fĂĽr Nulldurchgang
    Ext_IntEnable(4,2);                             // Int4: Mode 2 = fallende Flanke

    Irq_SetVect(INT_TIMER0, ISR_Timer0);            // Timer0 IRQ, 5ms nach Nulldurchg.
    Irq_SetVect(INT_TIMER1, ISR_Timer1);            // Timer1 IRQ, 15ms nach Nulldurchg.

    LCD_Init();                                     // Display initialisieren
    LCD_ClearLCD();
    LCD_CursorOff();                                // Display Cursor ausschalten

    while(1)
    {
        x++;
    }



}

// -------------------------- IRQ Nulldurchgang (50Hz) ------------------------------
//
void ISR_ZeroCrossing(void)
{
    Timer_Set(0, TIM_128, 2579, TIMFLG_IRQ);    // 2579*1,939us = 5ms
    Timer_Set(1, TIM_128, 7736, TIMFLG_IRQ);    // 7736*1,939us = 15ms

    Irq_GetCount(INT_4);
}


// ----------------------- IRQ Timer0, 5ms nach Nulldurchgang ----------------------
// den ADC0 auslesen (=Scheitelpunkt der 1.Halbwelle)
//
void ISR_Timer0(void)
{
    Port_WriteBit(PORT_LED2,PORT_ON);
    Irq_GetCount(INT_TIMER0);
    Timer_Disable(0);
    Port_WriteBit(PORT_LED2,PORT_OFF);
}

// ----------------------- IRQ Timer1, 15ms nach Nulldurchgang ----------------------
// den ADC0 auslesen (=Scheitelpunkt der 2.Halbwelle)
//
void ISR_Timer1(void)
{
    Port_WriteBit(PORT_LED2,PORT_ON);
    Irq_GetCount(INT_TIMER1);
    Timer_Disable(1);
    Port_WriteBit(PORT_LED2,PORT_OFF);
}

// ---------------------------System IRQ 100Hz, alle 10ms --------------------------
//
void ISR_10ms(void)
{


    Port_WriteBit(PORT_LED1,PORT_ON);

    LCD_CursorPos(0x00);                        // dauert 1.2ms
    LCD_WriteWord(x, 5);

    Port_WriteBit(PORT_LED1,PORT_OFF);
    Irq_GetCount(INT_100HZ);

}




Bild2 02.jpg:


Bild3 02.jpg:





    Antwort schreiben


Antworten:

Re: @PeterS - AVR32 LCD-Ausgabe stört Interrupt Bearbeitung (von PeterS - 27.06.2014 10:56)
    Re: @PeterS - AVR32 LCD-Ausgabe stört Interrupt Bearbeitung (von Hannes24 - 28.06.2014 19:43)
        Re: @PeterS - AVR32 LCD-Ausgabe stört Interrupt Bearbeitung (von PeterS - 13.07.2014 11:08)
Re: @PeterS - AVR32 LCD-Ausgabe stört Interrupt Bearbeitung (von Torsten - 22.01.2014 17:59)
    Re: @PeterS - AVR32 LCD-Ausgabe stört Interrupt Bearbeitung (von Hannes24 - 22.01.2014 19:35)
        Re: @PeterS - AVR32 LCD-Ausgabe stört Interrupt Bearbeitung (von Torsten - 22.01.2014 20:42)