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







Zitieren


Lesezeichen