-         

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 32

Thema: Strom und Spannungsmessung

  1. #1
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9

    Strom und Spannungsmessung

    Anzeige

    Hallo
    Ich habe hier ein Programm was an einem ADC Eingang vom Mega32 die Spannung misst und an einem zweiten die Spannung die an einem Widerstand abfällt um daraus den Strom zu berechnen.
    Allerdings zeigt das LCD mir die Werte jeweils zwei mal an und ich weiß nicht wieso.
    Hier ist der Code
    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    Config Lcd = 20 * 4
    Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
    Config Lcdbus = 4
    
    Start Adc
    
    Declare Sub _spannungsmessung()
    Declare Sub _strommessung()
    Declare Sub _spannungsanzeige()
    Declare Sub _stromanzeige()
    Const Ref = 5 / 1023
    Dim Spannung As Single
    Dim Strom As Single
    Dim Volt As Single
    Dim Ampere As Single
    
    
    Main:
    Do
    
       Initlcd
       Cls
       Call _spannungsmessung
       Call _spannungsanzeige
       Call _strommessung
       Call _stromanzeige
    
    
    Loop
    End
    
    Sub _spannungsmessung
    Local W As Word
    W = Getadc(0.)
    Spannung = W * Ref
    Spannung = Spannung * 1
    Volt = Spannung
    End Sub
    
    Sub _strommessung
    Local S As Word
    S = Getadc(1.)
    Strom = S * Ref
    Strom = Strom / 100
    Ampere = Strom
    End Sub
    
    Sub _spannungsanzeige()
    Locate 1 , 1
    Lcd "Spannung  :"
    Locate 1 , 13
    Lcd Spannung
    End Sub
    
    Sub _stromanzeige()
    Locate 2 , 1
    Lcd "Strom     :"
    Locate 2 , 13
    Lcd Ampere
    End Sub
    Und hier ein Foto um das Problem zu zeigen.
    http://img684.imageshack.us/img684/6269/bilddk.jpg
    Was ich meine ist das z.B. 2x der Spannungswert angezeigt wird.

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Hallo Kampi,

    versuch die LCD-Ausgabe mal so:
    Locate 1 , 1
    Lcd "Spannung: " ; Spannung

    Sonstiges:
    - Initlcd gehört nicht in die Do-Loop Schleife, sondern davor.
    - Vor Loop würde ich eine kurze Pause setzen: Wait 1

    Gruß Dirk

  3. #3
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9
    Gut das klappt. Und wie kann ich es machen das er die Single Variable rundet oder so? Weil der stellt jetzt ca 12 oder mehr Stellen da und das ist mir zu lang.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    04.01.2004
    Beiträge
    317
    Das kannst Du mit folgendem Befehl machen.
    Du brauchst dazu noch eine String-Variable (im Beispiel SpannungSTR)
    Code:
    SpannungSTR = Fusing(Spannung , "#.###")
    Dies würde Dir die Werte mit 3 Stellen hinter dem Komma ausgeben.
    Du musst dann natürlich die String-Variable im Display anzeigen lassen.
    mfG Henry

  5. #5
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9
    Wie sieht das den Beispielhaft aus? Weil ich kann mir irgendwie grad nichts darunter vorstellen

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    04.01.2004
    Beiträge
    317
    Du musst eine zusätzliche Variable deklarieren:
    Code:
    Dim SpannungSTR as String
    Dann kommt nach dem messen der Spannung der genannte Befehl:
    Code:
    SpannungSTR = Fusing(Spannung , "#.###")
    und zur Anzeige auf dem Display schreibst Du dann z.B.:
    Code:
    Locate 1 , 1 
    Lcd "Spannung: " ; SpannungSTR
    mfG Henry

  7. #7
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9
    So das runden funktioniert allerdings wird die Spannung nun wieder doppelt dargestellt

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.01.2007
    Ort
    westliches Pannonien
    Beiträge
    123
    Hallo!

    Die Bascom Hilfe ist Dir ein Begriff?
    Such nach Fusing und ersetz einfach Print durch Lcd.

    MfG
    Rone

  9. #9
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9
    So ich habd en Code nun soweit fertig....außer die Formeln die müssen noch angepasst werden. Das ist er:

    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    Config Lcd = 20 * 4
    Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
    Config Lcdbus = 4
    
    Start Adc
    
    Declare Sub _spannungsmessung()
    Declare Sub _strommessung()
    Declare Sub _spannungsanzeige()
    Declare Sub _stromanzeige()
    Declare Sub _widerstandsmessung()
    Declare Sub _widerstandsanzeige()
    Const Ref = 5 / 1023
    Dim Volt As Single
    Dim Strom As Single
    Dim Ohm As Single
    Dim Spannung As Single
    Dim Voltstr As String * 2
    Dim Ampere As Single
    Dim Stromstr As String * 2
    Dim Widerstand As Single
    Dim Ohmstr As String * 2
    
    
    Initlcd
    Cls
    Main:
    Do
    
       Call _spannungsmessung
       Call _spannungsanzeige
       Call _strommessung
       Call _stromanzeige
       Wait 1
    
    Loop
    End
    
    Sub _spannungsmessung
    Local V As Word
    V = Getadc(0.)
    Spannung = V * Ref
    Spannung = Spannung * 1
    Volt = Spannung
    Voltstr = Fusing(volt , "#.&&")
    End Sub
    
    Sub _strommessung
    Local A As Word
    A = Getadc(1.)
    Strom = A * Ref
    Strom = Strom / 100
    Ampere = Strom
    Stromstr = Fusing(strom , "#.##")
    End Sub
    
    Sub _widerstandsmessung
    Local O As Word
    Local P As Word
    O = Getadc(2.)
    P = Getadc(3.)
    Widerstand = Spannung * 1
    Ohm = Widerstand
    End Sub
    
    Sub _spannungsanzeige()
    Locate 1 , 1
    Lcd "U = " ; Voltstr ; ""
    End Sub
    
    Sub _stromanzeige()
    Locate 2 , 1
    Lcd "I = " ; Stromstr ; ""
    End Sub
    
    Sub _widerstandsanzeige()
    Locate 3 , 1
    Lcd "R = " ; Ohm
    End Sub
    Allerdings zeigt mir das LCD die Sachen immernoch nicht richtig an. Zwischen U= und I= ist eine Leerzeile. Und die Bascom Hilfe hilft mir auch irgendwie nicht wirklich weiter, weil das Problem einfach nicht verschwindet.

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.01.2007
    Ort
    westliches Pannonien
    Beiträge
    123
    Hallo!

    Was mir mal so spontan ins Auge springt:
    Du definierst einen String mit 2 Zeichen:
    Dim Stromstr As String * 2
    Dann probierst Du 4 Zeichen da reinzuquetschen:
    Stromstr = Fusing(strom , "#.##")

    Ich find zwar keine Leerzeile,aber:
    Lcd "I = " ; Stromstr ; ""
    Vor und nach dem = ist sehr wohl ein Leerzeichen!

    Vielleichts hilfts weiter.

    MfG
    Rone

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

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