Hallo Neutro,
habe gerade keine Hardware hier, also ist der Code ungetestet - kannst ja mal versuchen.

Analogeingang0 wird alle 800µs eingelesen.
wenn der Wert größer 2,5V also größer 512 ist, wird er zur Variable Mittelwert gerechnet.
gleichzeitig wird gezählt, wie oft gemessen wurde.

ist der Analogeingang0 gleich 512 oder kleiner, wird mit den vorher gemessenen Werten gerechnet,
d.h. Variable Mittelwert / Zaehler(wie oft gemessen wurde)

Danach wird das Ergebnis über RS232 ausgegeben($baud = 19200 )



Code:
'Wechselspannung messen / STFan 12.02.2012


'-------------------------------------------------------------------------------
'Konfiguration µC:
$regfile = "m8def.dat"                                      'AT-Mega8
$crystal = 8000000                                          '08 MHz
$baud = 19200

'-------------------------------------------------------------------------------
'8Bit Timer0: 50Hz bei 1Sekunde -> 20ms -> 25 Messungen in 20ms -> alle 0,8ms eine Messung also 1250 Messungen pro Sekunde
Config Timer0 = Timer , Prescale = 64
On Timer0 Timer0_isr
Const Timer0vorgabe = 156
Enable Timer0
Enable Interrupts


'-------------------------------------------------------------------------------
'Ein- Ausgänge:
Config Portc = Input


'-------------------------------------------------------------------------------
'Analogmessung
Config Adc = Single , Prescaler = Auto , Reference = Avcc


'-------------------------------------------------------------------------------
'Variablen
Dim Analog0 As Word
Dim Zaehler As Byte
Dim Mittelwert As Integer , Mittelwert2 As Single
Dim Merker As Byte                                          'Merker = 0 = analogwerte werden eingelesen
                                                             'Merker = 1 = Werte wurden berechnet
                                                             'Merker = 2 = Werte wurden ausgeben
Dim Spitzenwert As Single
Dim Effektivwert As Single


'-------------------------------------------------------------------------------
'Programm


Do

If Merker = 1 Then
Print "Mittelwert2: " ; Mittelwert2                         'Ausgabe des Mittelwert2

Spitzenwert = Mittelwert2 * 1.571                           'berechnen Spitzen wert
Print "Spitzenwert: " ; Spitzenwert

Effektivwert = Spitzenwert / 1.414                          'berechnen Effektivwert
Print "Effektivwert: " ; Effektivwert

Merker = 2
End If


Loop

'_______________________________________________________________________________





'...............................................................................
Timer0_isr:
Timer0 = Timer0vorgabe


Start Adc
Analog0 = Getadc(0)                                         'Analogwert messen
Stop Adc



If Analog0 > 512 Then
   Incr Zaehler
   Mittelwert = Mittelwert + Analog0
   Merker = 0

Else

   If Merker = 0 Then
      Merker = 1                                            'Damit nach den Messungen nur einmal der Mittelwert berechnet wird!
      Mittelwert2 = Mittelwert / Zaehler                    'Effektivwert berechnen
      Zaehler = 0                                           'Variable zurücksetzen
      Mittelwert = 0                                        'Variable zurücksetzen
   End If


End If

Return