- Labornetzteil AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: Wert zeitversetzt in mehrere Variablen schreiben

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

    Powerstation Test
    Tja da bin ich wieder...
    also beim senden (sobald ich den Taster anPC3 drücke) wird immer nur Wert1 gesendet und die Kontroll LED die mit dem Taster an geht, geht nach dem loslassen nicht mehr aus und es wir fleißig weider gesendet...
    als wenn der irgendwo festhängt.

    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 Merker As Bit                                           'Werte speichern: damit nur um 1 hochgezählt wird
    Dim Wert(200) As Word                                       'speichern des eigendlichen Wertes
    
    
    
    
    
    
    
    
    '-------------------------------------------------------------------------------
    'Programm:
    '-------------------------------------------------------------------------------
    
    Zähler = 1
    Merker = 0                                                  'Werte speichern: damit nur um 1 hochgezählt wird
    
    Do
    
    
    Start Adc                                                   'Starte analog Messung
    
    
    
    
    'Analogeingänge Auslesen:
    Analog_in0 = Getadc(0)                                      'Wert aus Analogeingang laden
    
    '-------------------------------------------------------------------------------
    'Merker zurücksetzen
    If Sekunden = 1 Then
    Merker = 0
    End If
    
    '-------------------------------------------------------------------------------
    'Werte Speichern:
     If Sekunden = 0 And Merker = 0 Then
     Toggle Portb.2                                             'Led umschalten zur kontrolle
     Wert(zähler) = Analog_in0
     Incr Zähler
     Merker = 1
     Print "Zähler: " ; Zähler
     End If
    
     '-------------------------------------------------------------------------------
    'Werte über RS232 Senden:
     If Pinc.3 = 0 Then
     Portb.3 = 1                                                '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 10
     Next
     Else
     Portb.3 = 0                                                'Led umschalten zur kontrolle
     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
    vielleicht hat ja jemand eine Idee.

    Tobias
    ...

  2. #12
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.09.2005
    Beiträge
    276
    'Werte über RS232 Senden:
    If Pinc.3 = 0 Then
    Portb.3 = 1 'Led umschalten zur kontrolle
    For Zähler = 1 To 200 Step + 1 'Zähler hochzählen
    Print "Wert " ; Zähler ; ": " ; Wert(zähler) 'und Wert senden
    Waitms 10
    Next
    End if
    Else
    Portb.3 = 0 'Led umschalten zur kontrolle


    Jede weite Antwort kostet eine flasche 'plöp'

    Den Rest Code habe ich nicht anbesehen.

    Gento

  3. #13
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Also ich kann die Zeile

    For Zähler = 1 To 200 Step + 1

    wegen dem + überhaupt nicht kompilieren lassen. Dein Code muss irgendwie anders aussehen.

    Weiter unten steht

    If Sekunden >= 5 Then
    Sekunden = 0
    Incr Minuten
    End If

    D.h., alle 5 Sekunden ist eine Minute um und der Wert wird abgespeichert. Ist das so gewollt (damit du schneller ein paar Werte hast)?

    Gruß

    Rolf

  4. #14
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    @Gento:
    das lässt sich nicht kompilieren, weil er das End If nicht findet.

    @for_ro:
    - das +1 ist bei mir kein Problem - wie hättest du es geschrieben?
    - die 5 Sekundenzeit ist so gewollt - zum testen - wird später wieder auf 60 geändert

    Tobias


    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 Merker As Bit                                           'Werte speichern: damit nur um 1 hochgezählt wird
    Dim Wert(200) As Word                                       'speichern des eigendlichen Wertes (470Werte?)
    
    
    
    '-------------------------------------------------------------------------------
    'Programm:
    '-------------------------------------------------------------------------------
    
    Zähler = 1
    Merker = 0                                                  'Werte speichern: damit nur um 1 hochgezählt wird
    
    Do
    
    Start Adc                                                   'Starte analog Messung
    
    'Analogeingänge Auslesen:
    Analog_in0 = Getadc(0)                                      'Wert aus Analogeingang laden
    
    '-------------------------------------------------------------------------------
    'Merker zurücksetzen
    If Sekunden = 1 Then
    Merker = 0
    End If
    
    '-------------------------------------------------------------------------------
    'Werte Speichern:
     If Sekunden = 0 And Merker = 0 Then
     Toggle Portb.2                                             'Led umschalten zur kontrolle
     Wert(zähler) = Analog_in0
     Incr Zähler
     Merker = 1
     Print "Zähler: " ; Zähler
     End If
    
     '-------------------------------------------------------------------------------
    'Werte über RS232 Senden:
     If Pinc.3 = 0 Then
     Portb.3 = 1                                                'Led umschalten zur kontrolle
     'Zähler = 1                                                 'Zähler zurücksetzen
     For Zähler = 1 To 10 Step + 1                              'Zähler hochzählen
     Print "Wert " ; Zähler ; ": " ; Wert(zähler)               'und Wert senden
     Waitms 10
     Next
     Else
     Portb.3 = 0                                                'Led umschalten zur kontrolle
     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
    ...

  5. #15
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    94
    Beiträge
    627
    oh ha...
    also jetzt geht´s und der Fehler war: ..... das +1
    ich weiß nicht warum er nicht meckert und ich hab das mein ich auch schon ein paar mal so benutzt aber irgendwie hat er damit ein Problem....

    ABER nun geht´s

    Danke an alle! Dann kann ich ja nun messen

    Tobias
    ...

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress