- Labornetzteil AliExpress         
Seite 4 von 5 ErsteErste ... 2345 LetzteLetzte
Ergebnis 31 bis 40 von 44

Thema: Wechselstrom mit Bascom messen

  1. #31
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    45
    Beiträge
    642
    Anzeige

    E-Bike
    Hallo Carlos,
    vielen Dank für deine Antwort, ich werde das mal ausprobieren sobald die ich Zeit dazu habe. Den Stromverlauf müsste ich eigentlich mit meinem Frequenzgenerator simulieren können.
    Leider fehlt mir bei den Umgang mit Arrays immer noch der Durchblick, obwohl ich die grundsätzliche Funktion schon verstehe.
    Wie muss ich denn in deinem Beispiel die Variablen deklarieren?
    Dim A as Byte
    Dim Tastmessungen as Byte
    Tastmessungen =20 '20 Messungen sollen gemacht werden
    dim W (20)as Single
    Dim Maxi as Single
    Dim Mini as single
    Dim spitzenstrom as single
    Dim Effektiv as Single ( wobei ich die Berechnung ja auf mehrere Zeilen aufteilen muss)


    Als Wait würde sich dann ja ein Wert von ca. 1ms oder kleiner anbieten.

    Das Programm an sich würde ich wohl in ein Unterprogramm verpacken was aus der Haupschleife heraus angesprochen wird, denn es sollen ja noch andere Sachen gemacht werden.

    MFG
    Neutro
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

  2. #32
    Neuer Benutzer Öfters hier
    Registriert seit
    21.04.2011
    Beiträge
    9
    Hallo Neutro
    Lass alle variablen as word bis deine effektivberechnungen , du solltest noch deine ausgabe zum lcd oder print noch formatieren mit z.b. print Fusing(effektiv , "#.##")
    dim tastmessungen as Byte 'sollte die gleiche grösse wie w haben
    dim w(20) as word ' getadc mag kein single
    dim Maxi as word '
    dim mini as word
    dim Spitzenstrom as word
    dim Effektiv as Single 'und alle andere variablen für die Berechnungen als single deklarieren
    Poste mal dein funktionierendes Bascom code
    Gruss Carlos

  3. #33
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    45
    Beiträge
    642
    Hallo Carlos,
    das Prog muss ich erst noch schreiben, das kann also noch ein paar Tage dauern bis ich soweit bin. Mir ging es hier ja zunächst mal
    um den grundlegenden Code wie eine ACV einzulesen ist. Aber da hast du mir schon mal auf jeden Fall weitergeholfen.
    Ob der Code dann auch wirklich mit der Hardware läuft wird dann wohl auch noch mal eine gewisse Zeit dauern, da ich ja noch erst
    Den Schaltplan und Layout erzeugen muss, dann nöch ätzen.....Das ganze befindet sich ja momentan noch alles erst in Planung.
    Ich werde mal versuchen das ganze vorab auf meinem Testboard auszuprobieren.
    Wie ich die Werte anzeigen und formatieren muss ist mir aber bekannt, das habe ich für Gleichspannungen schon öfters gemacht.
    auf jeden Fall werde ich euch weiterhin auf dem Laufenden halten. Darf ich dir bei Bedarf eine PN zukommen lassen?

    Viele Grüße
    Neutro
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

  4. #34
    Benutzer Stammmitglied
    Registriert seit
    19.07.2011
    Beiträge
    66
    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

  5. #35
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    45
    Beiträge
    642
    Hall Carlos,
    wenn ich deinen Code richtig verstehe werden also 20 Messungen gemacht weil das Array auf 20 Stellen begrenzt ist?
    wenn die 20 Stellen voll sind werden also die Min und Max werte bestimmt?
    Ich habe das ganze mal in einen vollständigen Code als unterprog eingebunden, allerdings lässt sich dein Abschnitt nicht fehlerfrei Compilieren, das Problem liegt in dieser Zeile:
    For A = 1 To Tastmessungen

    @Stfan1409:
    Danke für deinen Code, ich werde auch den mal Checken
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

  6. #36
    Neuer Benutzer Öfters hier
    Registriert seit
    21.04.2011
    Beiträge
    9
    Hallo
    Klar Kannst du mir eine PN schicken


    Zitat Zitat von Neutro Beitrag anzeigen
    Hall Carlos,
    wenn ich deinen Code richtig verstehe werden also 20 Messungen gemacht weil das Array auf 20 Stellen begrenzt ist?
    wenn die 20 Stellen voll sind werden also die Min und Max werte bestimmt?
    Ja so sollte der ablauf sein.
    Ich hab keine ahnung wieso du ein fehler bekommst , du solltest kompielierbaren code hier reinstellen, kann es sein das vergessen hast a as byte für die for schleiffe zu definieren?

  7. #37
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    45
    Beiträge
    642
    Ja, die Definition fehlte tatsächlich, aber dann wird die Zeile :
    Max(w(1) , M1 , Idx) Als fehler markiert (asignment error)

    Hier mal der ganze Code:


    $regfile = "m8def.dat"
    $crystal = 4000000
    $baud = 9600

    '-------------------------------------------------------------------------------
    'LCD Config

    Config Lcd = 16 * 2
    Config Lcdbus = 4
    Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5

    '-------------------------------------------------------------------------------


    'Variable setzen

    'print Fusing(effektiv , "#.##")
    Dim A As Byte
    Dim Tastmessungen As Byte
    Tastmessungen = 20 'sollte die gleiche grösse wie w haben
    Dim W(20) As Word ' getadc mag kein single
    dim Maxi as word '
    dim mini as word
    dim Spitzenstrom as word
    Dim Effektiv As Single 'und alle andere variablen für die Berechnungen als single deklarieren


    '-------------------------------------------------------------------------------
    'ADC Einstellungen

    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Start Adc

    '-------------------------------------------------------------------------------
    'Hauptprogramm

    Cls
    Cursor Off
    Upperline
    Lcd " ACV "
    Lowerline
    Lcd " Spannung "

    Wait 3
    Cls


    Do

    Gosub Spannungsmessung

    Loop


    Spannungsmessung:

    For A = 1 To Tastmessungen
    W(a) = Getadc(0) 'analogwert lesen und in W array speichern
    Next A
    Max(w(1) , M1 , Idx) 'aus W array Maximum wert raussuchen und speichern
    Maxi = M1 'Maximum wert in Variable maxi speichern
    Min(w(1) , M1 , Idx) 'aus W array Minimum wert raussuchen und speichern
    Mini = M1 'Minimum wert in Variable Mini speichern
    Spitzenstrom = Maxi-Mini
    'jetzt deine variable skalieren und dann
    Effektiv = Spitzenstrom / 2.82

    Upperline Fusing(effektiv , "#.##") 'hier ist jetzt der Spannungswert der umgerechnet werden muss!

    Return
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

  8. #38
    Neuer Benutzer Öfters hier
    Registriert seit
    21.04.2011
    Beiträge
    9
    hallo Neutro
    es fehlt
    dim M1 as word
    dim idx as word
    und das solltest du wechseln
    Upperline Fusing(effektiv , "#.##") 'hier ist jetzt der Spannungswert der umgerechnet werden muss!
    in
    upperline
    lcd Fusing(effektiv , "#.##")
    jetzt wird deine gosub siemlich schnell durchlaufen , du solltest mindestens ein waitms 1 in deine messschleife am besten wäre es wenn du ein timer benutzt mit 1 ms
    Geändert von Carlos76 (12.02.2012 um 17:00 Uhr)

  9. #39
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    45
    Beiträge
    642
    Danke für die Antwort,

    das mit dem Wait hatte ich glatt vergessen....
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

  10. #40
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Ein Wait ist nur nötig, wenn man sich auf so wenige Werte geschränkt. Sonst ist es eher besser mehr Werte des AD Wandlers zu nutzen, und nicht zu warten. Das Suchen nach Maximum und Minimum geht auch ohne alle Werte zu speichern, jeweils direkt nach der Messung. Dann ist es auch klein Problem nicht nur 20 Werte zu nutzen sondern z.B. 200 oder auch 1000.

    Ein Timer ist hier eher nicht angebracht. Eher schon der Interrupt vom AD Wandler: also den AD Wandler im Free running mode laufen lassen und dann die benötigte Zahl (ca. 200) an Samples auswerten. Das Programm kann dann auch noch was anderes machen während der Messung.

Seite 4 von 5 ErsteErste ... 2345 LetzteLetzte

Ähnliche Themen

  1. Gleich- oder Wechselstrom?
    Von freaky44 im Forum Elektronik
    Antworten: 10
    Letzter Beitrag: 26.01.2012, 20:26
  2. Wechselstrom Zähler ?
    Von Enten Züchte im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 08.01.2009, 13:38
  3. Gleichstrom --> Wechselstrom
    Von Haki im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 28.08.2008, 17:00
  4. Spannung Messen mit Attiyn26L und Bascom??
    Von Brantiko im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 12.01.2007, 06:06
  5. Schrittmotor mit Wechselstrom ansteuern!
    Von Frank im Forum Motoren
    Antworten: 6
    Letzter Beitrag: 26.05.2004, 20:41

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress