- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Wert zeitversetzt in mehrere Variablen schreiben

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627

    Wert zeitversetzt in mehrere Variablen schreiben

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,
    ich möchte "mal eben" über Nacht einen Wert messen oder besser die Veränderung.
    Der Wert kommt über den Analogeingang und soll in Variable1 geschrieben werden. Ca 30min später soll nochmal der Analogeingang gemessen werden und der Wert in Variable2 geschrieben werden.
    Am nächsten Tag möchte ich alle Variablen über RS232 ausgeben.

    Wie kann ich den Wert nach und nach in die verschiedenen Varablen schreiben?

    Also:

    If Minuten = 30 then
    Variable1 = Analog_in0
    End if


    und wie sag ich das beim nächsten mal Variable2 drann ist?

    Vielen Dank schon mal,
    Tobias
    ...

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.09.2005
    Beiträge
    276
    z.B. so

    Dim Temperatur(200) As Byte
    Dim Zähler AS Byte

    Zähler=0
    Do
    If Minuten = 30 then
    Temperatur(Zähler) = Analog_in0
    Incr(Zähler)
    End if
    Loop

    lg Gento

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Nur aufpassen, dass du mit dem Index 1 anfängst, weil Temperatur(0) nicht definiert ist.
    Also Incr Zähler einfach vor das Abspeichern setzen.

    Gruß

    Rolf

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.09.2005
    Beiträge
    276
    Sorry hatte übersehen das die Indexierung bei 1 beginnt.
    Gento

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    Hallo,
    vielen Dank für die superschnelle Antwort!
    Habs noch nicht getestet - kommt gleich.

    Kann ich das so senden:

    'Werte über RS232 senden:
    If Pinc.3 = 1 Then
    Zähler = 1 'Zähler zurücksetzen
    For Zähler = 1 To 200 Step + 1 'Zähler hochzählen
    Print "Wert " ; Zähler ; ": " ; Wert(zähler) 'und Wert senden
    Waitms 50
    Next
    End If

    Muss die Wartezeit rein?

    Tobias
    ...

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.09.2005
    Beiträge
    276
    50 mSek ist ein wenig viel aber ginge.

    Entsprechend im eigenen PC-Programm Timeout setzen.

    Gento

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    also irgendwie wird die Variable Zähler nicht hochgezählt: Am Anfang hab ich Zähler = 1 geschrieben und über RS232 wird immer Zähler2 gesendet....
    Hat da einer eine Idee? Hier mal das Prog.:

    Code:
    '-------------------------------------------------------------------------------
    'Konfiguration µC:
    
    $regfile = "m8def.dat"                                      'AT-Mega8
    $crystal = 3686400                                          'Quarz: 3.6864 MHz
    $baud = 9600                                                'Baudrate der UART: 9600 Baud
    
    
    'Analogmessung
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    
    'TIMER
    On Timer1 Ontimer1overflow                                  'Timer1-Interruptroutine deklarieren
    Config Timer1 = Timer , Prescale = 1024                     '3686400Hz/1024=3600Hz
    Enable Timer1
    Timer1 = 61935                                              'Sofort Timer1-Überlauf (Bei 16 Bit: 65535+1=0)
    Enable Interrupts
    
    
    '-------------------------------------------------------------------------------
    'Ein- Ausgänge:
    
    DdrB = &B111111                                            '1 Ausgang, 0 Eingang = Pin PB5-0 als Ausgang
    Ddrc = &B0000000                                            '1 Ausgang, 0 Eingang = Pin PC6-0 als Eingang
    Ddrd = &B00000000                                           '1 Ausgang, 0 Eingang = Pin PD7-0 als Eingang
    
    
    
    
    
    '-------------------------------------------------------------------------------
    ' Variablen
    '-------------------------------------------------------------------------------
    Dim Analog_in0 As Word                                      '=0-1023 vom Analogeingang
    
    
    
    'Timer
    Dim Stunden As Byte
    Dim Minuten As Byte
    Dim Sekunden As Byte
    
    'Speicherplätze
    Dim Zähler As Word                                          'zum Werte hochzählen
    Dim Wert(200) As Word                                       'speichern des eigendlichen Wertes
    
    
    
    
    
    
    
    
    '-------------------------------------------------------------------------------
    'Programm:
    '-------------------------------------------------------------------------------
    
    
    Do
    
    
    Start Adc                                                   'Starte analog Messung
    Zähler = 1
    
    
    
    'Analogeingänge Auslesen:
    Analog_in0 = Getadc(0)                                      'Wert aus Analogeingang laden
    
    
    '-------------------------------------------------------------------------------
    'Werte Speichern:
     If Sekunden = 0 Then
     Toggle Portb.2                                             'Led umschalten zur kontrolle
     Wert(zähler) = Analog_in0
     Incr Zähler
     Print "Zähler: " ; Zähler
     End If
    
     '-------------------------------------------------------------------------------
    'Werte über RS232 senden:
    ' If Pinc.3 = 1 Then
    ' Toggle Portb.3                                             'Led umschalten zur kontrolle
    ' Zähler = 1                                                 'Zähler zurücksetzen
    ' For Zähler = 1 To 200 Step + 1                             'Zähler hochzählen
    ' Print "Wert " ; Zähler ; ": " ; Wert(zähler)               'und Wert senden
    ' Waitms 50
    ' Next
    ' End If
    
    '-------------------------------------------------------------------------------
    
    '-------------------------------------------------------------------------------
    'UHR einstellen:
    
     'Minuten +
     'If Pind.3 = 1 And Minuten <= 59 Then
     'Minuten = Minuten + 1
     'Waitms 300
     'End If
    
     'Stunden+
     'If Pinc.2 = 1 And Stunden <= 23 Then
     'Stunden = Stunden + 1
     'Waitms 300
     'End If
    
    
    Loop
    
    
    
    '-------------------------------------------------------------------------------
    'Sprungmarken
    '-------------------------------------------------------------------------------
    Ontimer1overflow:                                           'Timer1-Interruptroutine
      'Nächster Überlauf soll in einer Sekunde sein:
      Timer1 = 61936                                            'Überlauf nach 65535, also: 65535+1-3600=61936
    
      Incr Sekunden
    
      If Sekunden >= 5 Then
        Sekunden = 0
        Incr Minuten
      End If
    
      If Minuten >= 60 Then
          Minuten = 0
          Incr Stunden
      End If
    
      If Stunden >= 24 Then
            Stunden = 0
      End If
    
    
      Print "Zeit: " ; Stunden ; " : " ; Minuten ; " : " ; Sekunden ; " Uhr"
      Print "Analog_in0: " ; Analog_in0                         'Analog Eingangswert senden
      Toggle Portb.0                                            'blink LED zum testen
    Return
    
    
    
    'Anzeige:
    'Home Upper                                                  'in die obere zeile gehen
    ' Cls : Lcd "Anzahl: " + Str(tuer_1_zaehler)                 'Anzahl Türöffnungen
    'Home Lower                                                  'in die untere zeile gehen
    'Lcd "Uhrzeit: " + Str(stunden) ; ":" + Str(minuten) ; ":" + Str(sekunden)
    
    
    Return
    ...

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Setz mal Zähler=1 vor die Do...Loop

    Gruß

    Rolf

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.09.2005
    Beiträge
    276
    Do
    Start Adc 'Starte analog Messung
    Zähler = 1
    usw

    Zähler=1 muß vor Do stehen als Inizialisierung ist das gedacht.

    Gento

    Edit: da war einer schneller

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    das war aber ein überflüssiger Fehler

    vielen Dank nun geht es

    Tobias
    ...

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests