- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 30 von 30

Thema: Softwareseitige UHR ?

  1. #21
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Anzeige

    Praxistest und DIY Projekte
    Timer1 = 68569
    Der Wert geht nur bis 65536. Benutz doch das Programm RNAVR.
    Dim Month/Day/Hour/... As Word
    Byte geht bis 256. Das reicht also locker für Minuten, Stunden, Tage, ...
    Word verbraucht mehr Speicher (Auch wenn der M128 relativ gesehen genug hat).

    Aber ich verstehe immer noch nicht, was du mit HEX willst. Du arbeitest doch mit Dezimalzahlen!

  2. #22
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360
    Ich kenn leider keinen Bascom Befehl wie in Delphi IntToStr mit dem man einen Numerischen wert Byte, Word... in einen String umwandeln kann.
    Und dann weiß ich leider auch nicht wie ich mehrere String in einen großen Packe.

    Das mit dem Byte werde ich machen.
    RNAVR werde ich mir herunterladen. (Die Zeit ist aber trotzdem noch relativ genau )

    Ich bin nur auf Hex() gekommen weil dazu in der Hilfe steht das er eine Numerische Var. in einen String umwandelt. Bin ich drübergestolpert

  3. #23
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360
    Das RNAVR ist ein Super Tool! Läuft Perfekt im Sekundenrhythmus!

  4. #24
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Ich kenn leider keinen Bascom Befehl wie in Delphi IntToStr mit dem man einen Numerischen wert Byte, Word... in einen String umwandeln kann.
    STR()

    Ich bin nur auf Hex() gekommen weil dazu in der Hilfe steht das er eine Numerische Var. in einen String umwandelt.
    Kann ich mir so nicht vorstellen. Aber mit STR() wirst du sicherlich Erfolg haben.

    Beachte in der hilfe auch den Punkt See Also. Da stehen verwandte Befehle oder die Gegenstücke zum Befehl.
    Vielleicht ist es dir auch eine Hilfe eine Liste aller Befehle auszudrucken. Wenn man die Befehle vor Augen hat, kann man sich in etwa vorstellen, was sie wohl bewirken könnten und in der Hilfe nachschauen was sie wirklich machen und dann ggf unter See Also den richtigen Befehl finden.

    Eine weitere (aber meist auch mühsame) Möglichkeit ist das durchsuchen des Forums. Fast alles wurde schon einmal behandelt.

    Du benutzt den Befehl Print im Listing. Hast aber zuvor keine Baudrate eingestellt. Wie du siehst geht es trotzdem. Im Menü von Bascom unter Options/Compiler ist eine Baudrate eingestellt.
    Dort sind auch viele andere Einstellungen möglich. z.B. Welcher AVR verwendet wird, welcher Quarz, Stackwerte, LCD-Pins.
    Immer wenn du im Programm nicht gesondert angibst, was du verwendest werden diese Einstellungen genommen.

    Im Prinzip könntest du dir auch:
    $regfile = "m128def.dat"
    $crystal = 16000000
    sparen. Wenn es nicht angegeben wird, werden die Compilersettings genommen.
    Aber das erleichtert nicht grade das nachvollziehen für andere. Und wenn du mal einen falschen Chip einstellst funktioniert das Program ggf. nicht mehr.
    Oder wenn du viele verschiedene AVR-Typen hast, weisst du nachher nicht mehr, welches Programm für welchen AVR war.

    Dies nur als kleinen Tipp zu Bascom.

    Du könntest die Baudrate im Listing auch angeben, ohne das du sie brauchst.
    So lange kein RS232-Befehl wir Print oder so kommt, wird Bascom "unnötige" Einstellungen einfach nicht beachten.

    Die Angabe der Taktfrequenz ist auch dann erst relevant, wenn du was zeitabhäniges programmierst. Wobei ein Timer nicht zeitabhänig ist, den muss man zuvor schon ausrechnen. Die Befehle Wait oder auch Print benötigen nur die Frequenzangabe.
    Wait 1 wartet im Programm (ungefähr) eine Sekunde. Damit Bascom weiss, wie lange ein Takt dauert muss die Frequenz angegeben werden oder es wird auf die Compilersettings zurückgegriffen.

  5. #25
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Das RNAVR ist ein Super Tool! Läuft Perfekt im Sekundenrhythmus!
    100%ig perfekt auch nicht. Nach einigen Tage wirst du ein paar Sekunden Abweichung feststellen.
    Das liegt zum einen an der Genauigkeit des Quarz, aber auch an der Berechnung des Prescalers und Preload.
    Wenn der Timer aufgerufen wird, werden erstmal ein paar Takte benötigt um die Register zu sichern.
    Um dieses Problem kümmert sich aber Bascom. Aber bevor der Timer wieder mit dem berechneten Wert aufgeladen wird, sind schon ein paar µS vergangen, die zuvor nicht berechnet wurden.

  6. #26
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360
    Bekomme leider immer noch folgendes:
    1:23:8 statt 01:23:08
    was um himmels willen mache ich falsch?!?

    Und wie kann ich die Strings in einen großen packen???

    Das mit dem $baud ist mir bewusst ich bin grad nur an einer Demo und da hab ich es mir erlaubt das wegzulassen.

    PS: Mein aktueller Source:
    Code:
    $regfile = "m128def.dat"
    $crystal = 16000000
    $baud = 9600
    
    Config Timer1 = Timer , Prescale = 256
    Enable Timer1
    On Timer1 Tini
    Enable Interrupts
    
    Dim Tresult As String * 8
    Dim Dresult As String * 8
    
    Dim D1 As String * 2
    Dim D2 As String * 2
    Dim D3 As String * 2
    Dim Year As Byte
    Dim Month As Byte
    Dim Day As Byte
    Dim Hour As Byte
    Dim Minute As Byte
    Dim Second As Byte
    
    minute = 58
    
    Do
     '....Hauptprogramm
    Loop
    End
    
    Tini:
     Timer1 = 3036
     Second = Second + 1
     If Second = 60 Then Gosub Addminute
     If Minute = 60 Then Gosub Addhour
     If Hour = 24 Then Gosub Addday
     If Day = 30 Then Gosub Addmonth
     If Month = 12 Then Gosub Addyear
    
    
     D1 = Format(str(second) , "00")
     D2 = Format(str(minute) , "00")
     D3 = Format(str(hour) , "00")
    
     Print Hour ; ":" ; Minute ; ":" ; Second
    ' Tresult = Hour + ":" + Minute + ":" + Second
    
    ' Print Tresult
    Return
    
    Addminute:
     Minute = Minute + 1
     Second = 0
    Return
    
    Addhour:
     Hour = Hour + 1
     Minute = 0
    Return
    
    Addday:
     Day = Day + 1
     Hour = 0
    Return
    
    Addmonth:
     Month = Month + 1
     Day = 0
    Return
    
    Addyear:
     Year = Year + 1
     Month = 0
    Return

  7. #27
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360
    Zitat Zitat von Marco78
    Das RNAVR ist ein Super Tool! Läuft Perfekt im Sekundenrhythmus!
    100%ig perfekt auch nicht. Nach einigen Tage wirst du ein paar Sekunden Abweichung feststellen.
    Das liegt zum einen an der Genauigkeit des Quarz, aber auch an der Berechnung des Prescalers und Preload.
    Wenn der Timer aufgerufen wird, werden erstmal ein paar Takte benötigt um die Register zu sichern.
    Um dieses Problem kümmert sich aber Bascom. Aber bevor der Timer wieder mit dem berechneten Wert aufgeladen wird, sind schon ein paar µS vergangen, die zuvor nicht berechnet wurden.
    das bissen ist egal die Uhrzeit wird alle 2 Tage via RS232 ins Modul gesendet.

  8. #28
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Ich müsste jetzt erst nachschauen um es genau zu sagen, aber ich bin der Meinung du musst Seconds usw. erst als String umwandelt und dann formartieren.
    Evtl geht es mit Fusing einfacher?!

    Das mit Baud hab ich auch nur erzählt, weil man es erstmal wissen muss, das es so ist. So lange etwas funktioniert ist ja alles ok, aber irgendwann fragt man sich warum es auf einmal nicht mehr geht.

    So, ich muss jetzt ins Bett. Viel Spaß noch beim testen.

  9. #29
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360
    werde ich testen.

    gute nacht.

  10. #30
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360
    So format funktioniert alles wunderbar. (Fehler in der Ausgabe der Daten )

    The Final Code:
    Code:
    $regfile = "m128def.dat"
    $crystal = 16000000
    $baud = 9600
    
    Config Timer1 = Timer , Prescale = 256
    Enable Timer1
    On Timer1 Tini
    Enable Interrupts
    
    Dim Tresult As String * 8
    Dim Dresult As String * 8
    
    Dim D1 As String * 2
    Dim D2 As String * 2
    Dim D3 As String * 2
    Dim S As String * 2
    Dim Year As Byte
    Dim Month As Byte
    Dim Day As Byte
    Dim Hour As Byte
    Dim Minute As Byte
    Dim Second As Byte
    
    minute = 58
    
    Do
     '....Hauptprogramm
    Loop
    End
    
    Tini:
     Timer1 = 3036
     Second = Second + 1
     If Second = 60 Then Gosub Addminute
     If Minute = 60 Then Gosub Addhour
     If Hour = 24 Then Gosub Addday
     If Day = 30 Then Gosub Addmonth
     If Month = 12 Then Gosub Addyear
    
    
     D1 = Format(str(second) , "00")
     D2 = Format(str(minute) , "00")
     D3 = Format(str(hour) , "00")
    
     Tresult = D3 + ":" + D2 + ":" + D1
    
     Print Tresult
    Return
    
    Addminute:
     Minute = Minute + 1
     Second = 0
    Return
    
    Addhour:
     Hour = Hour + 1
     Minute = 0
    Return
    
    Addday:
     Day = Day + 1
     Hour = 0
    Return
    
    Addmonth:
     Month = Month + 1
     Day = 0
    Return
    
    Addyear:
     Year = Year + 1
     Month = 0
    Return


    Danke @ all wirklich super forum!


    Mfg
    Tobi

    //EDIT: Ich geh nu au ins bett :erschöpf:

Seite 3 von 3 ErsteErste 123

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad