- 12V Akku mit 280 Ah bauen         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 26

Thema: Per A/D Konverter Spannung anzeigen lassen.

  1. #11
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Anzeige

    Praxistest und DIY Projekte
    Eine single reicht von
    1.5 x 10^–45 bis 3.4 x 10^38
    Das sollte reichen.
    Darstellen kann man das mit fusing

    dim einstring as String * 12
    dim einsingle as single
    einsingle = deine-Zahl
    einstring = fusing(einsingle, "#.##") ' für zwei dezimalstellen
    lcd einstring

    (type "Help" for help)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Zitat Zitat von Murus bei Mikrocontroller.net
    Autor: Mario Mauerer - Email gelöscht
    Datum: 18.09.2005 15:48

    --------------------------------------------------------------------------------

    Ok, das mit dem Modulo hat geklappt!!!
    A=2500 mod 1000
    für den Rest.

    Nur: Sobald die Zahl vor dem Komma zweistellig wird, verschiebt er das
    Komma nicht... Man sieht nur die erste Stelle der Zahl... Kann man das
    durch Kommaverschieben lösen, oder soll man mehr Platz einräumen?

    Herzlichen Gruss
    Mario
    Die Lösung steht hier doch schon!
    Zwei Stellen vor den Komma kannst du sowieso nur haben, wenn du am Eingang einen Spannungsteiler hast. Die maximale Spannung die du messen kannst ist 5V.
    Von daher hat PickNick dir schon den richtigen Code gegeben. Du kannst Fusing ja auf ##.## erweitern.
    Schon alleine weil der Code damit kleiner und schneller wird als mit er aufwendigen MOD-Funktion!

  3. #13
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    35
    Beiträge
    1.101
    hallo

    verstehe nicht genau was ihr meint, könntet ihr mir bitte mal ein gutes beispiel geben mit dem komma??


    gruß
    patrick

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Da sind viele Beispiele.

    Aber bitte:
    Du musst Single nehmen. Alles andere kennt kein Komma.
    Der ADC liefert 1024 Schritte bis 5V
    Das per Dreisatz umrechnen und am besten so formartieren wie PickNick es schon beschrieben hat.

    Wie sieht denn dein Code aus? Anhand deines Codes könnte man dich verbessern.

  5. #15
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    35
    Beiträge
    1.101
    ok

    hier der code:
    Code:
    ' ------------- Hier die üblichen RN-Control Anweisungen --------------
    $regfile = "m8def.dat"
    $hwstack = 32
    $framesize = 16
    $crystal = 16000000                                         'Quarzfrequenz
    $baud = 9600
    
    ' ------------- Ende der üblichen RN-Control Anweisungen --------------
    
    
    
    
    Config Portc = &B11111111
    Config Portb = &B11111111
    Config Adc = Single , Prescaler = Auto , Reference = Avcc   ' Adc einstellen
    Config Scl = Portc.5                                        'Ports fuer IIC-Bus
    Config Sda = Portc.4
    Const Rnkeylcd_slaveid_write = &H40                         'I2C SlaveAdresse
    Const Rnkeylcd_slaveid_read = &H41
    
    Dim Stemp As String * 100
    Dim Taste As Word
    Dim A As Word
    Dim B As Word
    Dim C As Word
    Dim W As Long
    
    Declare Sub Rnlcd_cursor(byval Spalte As Byte , Byval Zeile As Byte)
    Declare Sub Rnlcd_clr()
    Declare Sub Rnlcd(byval Text As String)
    Declare Sub Rnlcd_cr()
    Declare Function Rnlcd_getscan() As Word
    Declare Sub Rnlcd_scanmodus(byval Ein As Byte)              'Tastenscanmodus ein und ausschalten
    
    'Hauptprogramm
    
    
    I2cinit    'Warte bis LCD bereit
    
    Rnlcd_clr                                                   'Scanmodus ein
    
    Rnlcd_cursor 4 , 1
    Rnlcd "Willkommen"
    Rnlcd_scanmodus 1
    
    Start Adc
    
    
    Do
    
    Rnlcd_clr
    Rnlcd_cursor 1 , 1
    Rnlcd "Spg1:"
    
    W = Getadc(3)
    
    
    W = 5000 * W
    W = W / 10246
    Rnlcd_cursor 10 , 1
    Stemp = "" + Str(w)
    Rnlcd Stemp
    Rnlcd_cr
    
    
    If W < 32 Then
    Rnlcd_cursor 10 , 1
    Rnlcd "zu niedrig"
    End If
    
    Waitms 60
    Loop
    
    End
    
    
    '--------------------------------------------------------------
    'Einige spezielle I2C.Befehle für RN-KeyLCD als Funktion definiert:
    
    Sub Rnlcd_cursor(byval Spalte As Byte , Byval Zeile As Byte)       'Cursor setzen
    Local Befehle As String * 4
      Befehle = Chr(27) + Chr(79) + Chr(spalte) + Chr(zeile)
      I2csend Rnkeylcd_slaveid_write , Befehle , 4
    End Sub
    
    Sub Rnlcd_clr()                                             'LCD löschen
    Local Befehle As String * 2
      Befehle = Chr(12)
      I2csend Rnkeylcd_slaveid_write , Befehle , 1
    End Sub
    
    Sub Rnlcd_cr()                                              'LCD Zeilenvorschub
    Local Befehle As String * 2
      Befehle = Chr(13) + Chr(10)
      I2csend Rnkeylcd_slaveid_write , Befehle , 2
    End Sub
    
    Sub Rnlcd(byval Text As String)                             'Eine Art Print Befehl zum Ausgeben von Text
    Local Le As Word
      Le = Len(text)
      I2csend Rnkeylcd_slaveid_write , Text , Le
    End Sub
    
    Function Rnlcd_getscan() As Word                            'Scancode als Word abfragen
    Local Lscan As Byte
    Local Hscan As Byte
    
    
      I2cstart
      I2cwbyte Rnkeylcd_slaveid_read
      I2crbyte Lscan , Ack
      I2crbyte Hscan , Nack
      I2cstop
    
      If Hscan.7 = 1 Then                                       'AScii Modus
         Rnlcd_getscan = Lscan
      Else
         Rnlcd_getscan = Hscan * 256
         Rnlcd_getscan = Rnlcd_getscan + Lscan
      End If
    End Function
    
    Sub Rnlcd_scanmodus(byval Ein As Byte)                      'Tastenscanmodus ein und ausschalten
    Local Befehle As String * 3
      Befehle = Chr(27) + Chr(119) + Chr(ein)
      I2csend Rnkeylcd_slaveid_write , Befehle , 3
    End Sub
    erstmal so denn ich habe eigentlich drei batterie blöcke.

    gruß
    patrick

  6. #16
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    35
    Beiträge
    1.101
    hallo

    hier habe ich noch mal was probiert.

    hier der code:

    Code:
    ' ------------- Hier die üblichen RN-Control Anweisungen --------------
    $regfile = "m8def.dat"
    $hwstack = 32
    $framesize = 16
    $crystal = 16000000                                         'Quarzfrequenz
    $baud = 9600
    
    ' ------------- Ende der üblichen RN-Control Anweisungen --------------
    
    
    
    
    Config Portc = &B11111111
    Config Portb = &B11111111
    Config Adc = Single , Prescaler = Auto , Reference = Avcc   ' Adc einstellen
    Config Scl = Portc.5                                        'Ports fuer IIC-Bus
    Config Sda = Portc.4
    Const Rnkeylcd_slaveid_write = &H40                         'I2C SlaveAdresse
    Const Rnkeylcd_slaveid_read = &H41
    
    Dim Stemp As String * 100
    Dim Taste As Word
    Dim A As Long
    Dim B As Long
    Dim C As Long
    Dim S As Single
    
    Declare Sub Rnlcd_cursor(byval Spalte As Byte , Byval Zeile As Byte)
    Declare Sub Rnlcd_clr()
    Declare Sub Rnlcd(byval Text As String)
    Declare Sub Rnlcd_cr()
    Declare Function Rnlcd_getscan() As Word
    Declare Sub Rnlcd_scanmodus(byval Ein As Byte)              'Tastenscanmodus ein und ausschalten
    
    'Hauptprogramm
    
    
    I2cinit    'Warte bis LCD bereit
    
    Rnlcd_clr                                                   'Scanmodus ein
    
    Rnlcd_cursor 4 , 1
    Rnlcd "Willkommen"
    Rnlcd_scanmodus 1
    
    Start Adc
    
    
    Do
    
    Rnlcd_clr
    Rnlcd_cursor 1 , 1
    Rnlcd "Spg1:"
    
    A = Getadc(1)
    
    
    Print Fusing(s , "#.##")
    A = 5000 * A
    A = A / 1024
    Rnlcd_cursor 10 , 1
    Stemp = "" + Str(a)
    Rnlcd Stemp
    Rnlcd_cr
    
    
    
    
    Waitms 60
    Loop
    
    End
    
    
    '--------------------------------------------------------------
    'Einige spezielle I2C.Befehle für RN-KeyLCD als Funktion definiert:
    
    Sub Rnlcd_cursor(byval Spalte As Byte , Byval Zeile As Byte)       'Cursor setzen
    Local Befehle As String * 4
      Befehle = Chr(27) + Chr(79) + Chr(spalte) + Chr(zeile)
      I2csend Rnkeylcd_slaveid_write , Befehle , 4
    End Sub
    
    Sub Rnlcd_clr()                                             'LCD löschen
    Local Befehle As String * 2
      Befehle = Chr(12)
      I2csend Rnkeylcd_slaveid_write , Befehle , 1
    End Sub
    
    Sub Rnlcd_cr()                                              'LCD Zeilenvorschub
    Local Befehle As String * 2
      Befehle = Chr(13) + Chr(10)
      I2csend Rnkeylcd_slaveid_write , Befehle , 2
    End Sub
    
    Sub Rnlcd(byval Text As String)                             'Eine Art Print Befehl zum Ausgeben von Text
    Local Le As Word
      Le = Len(text)
      I2csend Rnkeylcd_slaveid_write , Text , Le
    End Sub
    
    Function Rnlcd_getscan() As Word                            'Scancode als Word abfragen
    Local Lscan As Byte
    Local Hscan As Byte
    
    
      I2cstart
      I2cwbyte Rnkeylcd_slaveid_read
      I2crbyte Lscan , Ack
      I2crbyte Hscan , Nack
      I2cstop
    
      If Hscan.7 = 1 Then                                       'AScii Modus
         Rnlcd_getscan = Lscan
      Else
         Rnlcd_getscan = Hscan * 256
         Rnlcd_getscan = Rnlcd_getscan + Lscan
      End If
    End Function
    
    Sub Rnlcd_scanmodus(byval Ein As Byte)                      'Tastenscanmodus ein und ausschalten
    Local Befehle As String * 3
      Befehle = Chr(27) + Chr(119) + Chr(ein)
      I2csend Rnkeylcd_slaveid_write , Befehle , 3
    End Sub
    könnte das jemand mal bitte probieren müsste mir mal die Bascom vollversion kaufen.

    danke.

    gruß
    patrick

  7. #17
    Murus
    Gast
    Also das Fusing funktioniert bei mir hinten und vorne nicht... Er rechnet irgendwie trotzem nicht mit Nachkommastellen, aber die Anzeige funktioniert...
    Komisch, ich gucks dann später nochmals an.

    Zudem bräuchte er 22%Speicher. Der Modulo braucht 14%....

    Gruss
    Mario

  8. #18
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    35
    Beiträge
    1.101
    haste noch mal das von picknick probiert??

  9. #19
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    @patti16,
    und was geht nicht?
    Zunächst ein Tipp: Je größer der Variablentyp, desto mehr Programmspeicher wird gebraucht. Also immer nur den Typ nehmen, der max. nötig ist.
    Du willst Spannungen bis 5V mit dem ADC messen.
    Der ADC liefert Werte von 0V bis 5V in 1024 Schritten.
    Also erstmal 5V geteilt durch 1024 rechnen. Ergibt: 0,00488. Das wieder mal 1024 ergibt 4,99712. Ich denke den Fehler kann man verzeihen.
    Jeder Wert des ADC steht also für rund 5mV.
    Wenn du mit A den Wert des ADC einliesst und ihn mit 0,00488 multiplizierst, hast du die gemessene Spannung in Volt.
    Du kannst das ganze auch in mV ausrechnen lassen und dann durch 100 teilen um auf Volt zu kommen.
    Aber im Prinzip ist das nicht weiter als Dreisatz.

    Dim A as Word
    Dim B as Single
    Dim C as Single
    B=0,00488
    start adc
    a=getadc(3)
    C=A*B 'die gemessene Spannung in Volt
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Ich würd den ADC anders einstellen:
    Config Adc = Free, Prescaler = Auto
    Mit Free kannst du etwas schneller messen. Und das Programm macht das ja dauerhaft. Die Reference musst du nicht angeben, wenn es Avcc ist.

  10. #20
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    35
    Beiträge
    1.101
    hallo

    also das mit der messung klappt auf jeden fall aber das problem ist nun das ich das nicht mir komma in volt angzeigt bekomme

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests