- LiFePO4 Speicher Test         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 23 von 23

Thema: Fragen zu Programmtimings; Dauer von Codezeilen berechnen

  1. #21
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.12.2005
    Beiträge
    161
    Anzeige

    Powerstation Test
    ich habe jetzt mal ein wenig rumgespielt und nur den Teil der Abrfage der RS232 Daten vom Fremdgerät gemacht.
    Das ist der Code:
    Code:
    $regfile = "m8def.dat"
    $crystal = 3686400
    $baud = 9600
    
    
    
    Dim Olcd(40) As Byte                                        'Asciizeichenarray vom Fremdgerät
    
    Dim A As Byte
    Dim I As Byte
    
    Dim Oegt1 As Byte
    Dim Oegt2 As Byte
    Dim Oegt3 As Byte
    Dim Oegt4 As Byte
    
    Dim Ogas1 As Byte
    Dim Ogas2 As Byte
    Dim Ogas3 As Byte
    Dim Ogas4 As Byte
    
    Dim Orpm1 As Byte
    Dim Orpm2 As Byte
    Dim Orpm3 As Byte
    Dim Orpm4 As Byte
    Dim Orpm5 As Byte
    
    Dim Onc1 As Byte
    Dim Onc2 As Byte
    Dim Onc3 As Byte
    
    Dim Odata(16) As Byte At Oegt1 Overlay
    
    Declare Sub Odatensenden
    Declare Sub Odatenlesen
    Declare Sub Lcdvisual
    
    Config Lcd = 20 * 4
    Config Lcdpin = Pin , E = Portd.3 , Rs = Portd.2 , Db7 = Portd.7 , Db6 = Portd.6 , Db5 = Portd.5 , Db4 = Portd.4
    
    Config Serialin = Buffered , Size = 45
    
    Enable Interrupts
    
    Cursor Off
    
    
    
    Do
    
    If Ischarwaiting() = 1 Then Odatenlesen
    'Gosub Odatensenden
    Waitms 10
    Gosub Lcdvisual
    
    
    
    
    Loop
    
    
    
    '---------------------------
    Odatenlesen:
    
    A = Inkey()
    If A = 128 Then
        For I = 1 To 41
        Olcd(i) = Inkey()
        Next
    End If
    
    
    Oegt1 = Olcd(4)
    Oegt2 = Olcd(5)
    Oegt3 = Olcd(6)
    Oegt4 = Olcd(7)
    
    Ogas1 = Olcd(13)
    Ogas2 = Olcd(14)
    Ogas3 = Olcd(15)
    Ogas4 = Olcd(16)
    
    Orpm1 = Olcd(20)
    Orpm2 = Olcd(21)
    Orpm3 = Olcd(22)
    Orpm4 = Olcd(23)
    Orpm5 = Olcd(24)
    
    Onc1 = Olcd(32)
    Onc2 = Olcd(33)
    Onc3 = Olcd(34)
    
    
    Return
    '---------------------------
    
    
    
    '--------------------------
    Lcdvisual:
    
    
    Locate 1 , 6
    Lcd Chr(oegt1) ; Chr(oegt2) ; Chr(oegt3) ; Chr(oegt4) ; "C"
    
    
    Locate 1 , 16
    Lcd Chr(ogas1) ; Chr(ogas2) ; Chr(ogas3) ; Chr(ogas4)
    
    
    Locate 2 , 6
    Lcd Chr(orpm1) ; Chr(orpm2) ; Chr(orpm3) ; Chr(orpm4) ; Chr(orpm5)
    
    
    Locate 2 , 16
    Lcd Chr(onc1) ; Chr(onc2) ; Chr(onc3) ; "V"
    
    
    Return
    '----------------------------
    
    
    '----------------------------
    Odatensenden:
    
    Baud = 4800
    Print "Orbitdaten" ; Chr(odata(1) , 16)
    Baud = 9600
    Return
    '--------------------------------
    
    End
    Komisch ist aber, wenn ich "Gosub Odatensenden" "aktiviere" kommt mir so einiges durcheinander und das Display zeigt zeitweise andere Datensätze aus dem Array an.

    Wenn ich nun in meine (schon recht) vorhandene komplexe Anwendung diesen Teil hier implementiere dann hab ich glaub ich ein Problem. Wenn es jetzt schon mit nicht richtig funktioniert.

    Oder wo habe ich den Fehler drin? Ist das nun ein Timingproblem?

  2. #22
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Priorisierte Interupts habe ich meiner Auffassung nach, wenn ich die Prioritäten der einzelnen Interupts selbst definieren kann ....
    Ja ok, dann hast Du natürlich recht, ich dachte du meinst Prioritäten allgemein

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  3. #23
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    hmmm ... das möcht mir nicht so recht gefallen:

    A = Inkey()
    If A = 128 Then
    For I = 1 To 41
    Olcd(i) = Inkey()
    Next
    End If

    du beschreibst hier die Variable mit dem Inkey der UART, egal ob da
    nun Daten drin stehen oder nicht, dann nämlich mit 0.
    Ich verwende die buffered Variante der UART nicht gern.

    Bedenke: die UART ist im verhältniss zum Controller schneckenlangsam.

    es gibt da 2 Varianten, du kannst den Controller so lange anhalten bis er
    empfangen hat z.B. per waitkey Befehl
    oder du verwendest den UART Interrupt bei Empfang und lässt den
    Knubbel derweil was anderes machen
    Vor den Erfolg haben die Götter den Schweiß gesetzt

Seite 3 von 3 ErsteErste 123

Berechtigungen

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

Labornetzteil AliExpress