- 3D-Druck Einstieg und Tipps         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 23

Thema: HFS 300 und HFS 301 Funkübertragung

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    36
    Beiträge
    1.614
    Anzeige

    E-Bike
    Ne Manchesterkodierung wäre sicher was feines, aber wie erzeugen?
    so: (es geht sogar schon getestet)

    Code:
    $regfile = "m8def.dat"
    $crystal = 7372800
    
    Declare Function M2b(byval Minput As Word) As Byte
    Declare Function B2m(byval Binput As Byte) As Word
    
    Dim W As Byte
    Dim W2 As Word
    Dim I As Byte
    Dim I2 As Byte
    Dim S As String * 16
    
    W = M2b(&B0110011001100110)
    W2 = B2m(&B01010101)
    
    Function M2b(byval Minput As Word) As Byte
    
       For I = 0 To 15 Step 2
          I2 = I / 2
          Select Case Minput.i
             Case 1 : M2b.i2 = 0
             Case 0 : M2b.i2 = 1
          End Select
       Next
    
    End Function
    
    Function B2m(byval Binput As Byte ) As Word
    
       For I = 7 To 0 Step -1
          Select Case Binput.i
             Case 0 : S = S + "01"
             Case 1 : S = S + "10"
          End Select
       Next
    
       B2m = Binval(s)
    
    End Function
    
    End
    jaja ich fühl mich schon mies wegen dem benutzten String aber liefert mir ne bessere Möglichkeit ich hatte nu kein bock mehr

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Soviel kappier ich davon leider nicht, noch nciht.
    Also ich habs jetzt mal mit folgenden Scripts getestet:

    Code:
    $baud = 1200
    Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portb.0 , Db6 = Portb.1 , Db7 = Portb.2 , E = Portb.3 , Rs = Portb.4       ' Natürlich so wie es wirklich angeschlossen ist (4-Bit-Modus)
    Config Lcd = 16 * 2
    Config Portb = Input
    Ein Alias Portb.0
    Initlcd
    Display On
    Cursor Off
    Cls
    Dim A As Byte
    
    Do
    Home
    A = Waitkey()
    If A = 49 Then
    Lcd "IN: 1"
    End If
    If A = 50 Then
    Lcd "IN: 2"
    End If
    Loop
    Code:
    $baud = 1200
    Do
    Print "1"
    Print "1"
    Waitms 200
    Print "2"
    Print "2"
    waitms 200
    Loop
    Das ganze funktioniert jetzt, da doppeltes senden etc. ganz gut, immerhin empfange ich das signal in der Etage über mier und auf meiner Etage, jedenfalls bis auf zwei stellen die vermutlich einfach ungünstig liegen, weil man dann schräg durch ne Stahlbetonmauer durch muss. Außerdem muss man sagen, dass mein Zimmer eine art Funkloch ist

    wenn man die Signale jetzt 5mal sendet würde das für ne Fernbedienung reichen, aber leicher nicht für ne vernünfitge/stabile serielle verbindung.

    Leider habe ich das Manchester-script noch nciht ganz kappiert, aber werde mich Morgen nochmal damit beschäftigen.

    MFG Moritz

  3. #13
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    OK hab mir deinen Code nochmal angesehen und jetzt auch kappiert wie er arbeitet, hätte ich selber nie hinbekommen, deshalb danke.
    Aber wenn man es sich mal genau anschaut merkt man doch, dass es eigentlich einfach ist, wenn man die ganzen befehle kennen würde...

    Danke, und berichte mal wie es um deine Übertragung steht.
    Ich habe nochmal mit dem Autor der Seite, die von Dino-Dieter empfohlen wurde geredet und der hat mir dann gesagt, dass er einen Asutausch des KOndensators nciht empfiehlt, und das er es auf 75 Meter inklusive Wände etc. gebracht hat (Rekord), allerdings mit häufigem senden, der gleichen Daten, klingt vielversprechend.

    Ich werde dein Prog mal ausprobieren, aber vermutlich erst am Wochenende, keine Zeit...

    MFG Moritz

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Hm, jetzt stellt sich mir wieder ne neue Frage. Ich weiß jetzt zwar, wie ich aus nem Manchester Word nen Byte mache, aber wie bringe ich den AVR dazu dieses eine Word aus dem ganzen geflackere rauszulesen?

    Vermutlich muss ich ja erst ein byte einlesen, dann ganz schnell das nächste, aber wie/wann soll ich damit anfangen?

    MFG Moritz

    (Ja, im Moment für ich Selbstgespräche )

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    36
    Beiträge
    1.614
    könnte man, wenn man den sender dazu bringt ein langen impuls vorauszuschicken, mit bitwait machen

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  6. #16
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Das habe ich schonmal gehört, dass man dann absichtlich einen Bit-Fehler produziert, allerdings kann ich mit darunter nix vorstellen, wie würde man sowas umsetzen?

  7. #17
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    36
    Beiträge
    1.614
    du schickst: 1 (normal) und dann dein signal mit manchester

    und beim empfänger guckste mit nem int am besten wann am modul ne 1 anliegt und empfängst ab dann mit input z.b.
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  8. #18
    Gast
    Beim Empfang von Funksignalen besteht das Problem, das Nutzsignal vom Rauschen zu unterscheiden. Zum Verständnis: Wenn man mit einem Radio ein Band (UKW manchmal auch als FM bezeichnet, oder KW oder MW manchmal auch als AM bezeichnet) manuell durchläuft, hört man manchmal nur Rauschen, oder Rauschen überlagert mit einem Sender oder auch nur einen Sender.

    Zum Erkennen des Nutzsignals kann man den Abstand der Flanken messen. Liegt der Abstand der Flanken innerhalb einer Toleranz, ist das Signal ein Nutzsignal, sonst ein Rauschen.

    Die Erkennung des Nutzsignals kann per Polling erfolgen oder über Interrupt (Interruptauslösung, wenn Empfängerausgang eine Flanke ausgibt).

    Leider kenne ich nur damit aus, wie man mit einem normalen Port des AVRs eine Funkstrecke betreibt. Dafür läuft die Funkstrecke mit jeden beliebigen AVR! Im folgenden beschreibe ich, wie man mit normalen Ports eine Funkstrecke aufbaut:

    Du mußt ein Protokoll festlegen. In dem festgelegt wird, aus wievielen Bits das Paket besteht, ob Start- oder und Stopbits verwendet werden, ob Paritätsbits verwenden werden, wenn ja in welcher Bitposition, ob eine Prüfsumme verwendet wird usw. Die Bits werden manchesterkodiert.

    Anhand des Protokolls kann du den Empfänger sagen, was er mit den einzelnen gültigen Bits machen soll.

    z.B.:

    Ein Paket besteht aus 12 Highs, einem Startbit und einem Datenbyte.
    Die 12 Highs dienen als Einschwingung.
    Das Startbit ist ein Low.
    Das Datenbyte wird so festgelegt:
    MSB LSB
    Bit Bit Bit Bit Bit Bit Bit Bit
    7 6 5 4 3 2 1 0
    --------------------------------------> Zeit

    Zuerst wird also das MSB gesendet.


    Der Empfängerausgang von ELV HFS 301 ist 1bittig. Man zählt die Highs, die aufeinander folgen. Sind es 10 oder gar 12, dann könnte das folgende Bit ein Startbit sein. Ist dieses Bit ein Low, so ist man einigermaßen sicher, dass man das Startbit erkannt hat. Die folgenden gültigen Bits schiebt man in ein 8Bit-Register. Beachte, das 1. Byte ist MSB. Ist das Register voll, hat man dann das Datenbyte, das man an ein Port schicken könnte.

    Zum Thema Reichweitenoptimierung:
    Fakt 1: Je größer der Abstand zwischen Sender u. Empfänger, umso größer das Rauschen;
    Fakt2: Je schwächer das Funksignal, umso schwieriger ist die Einschätzg des Empfängers, was Nutzsignal und was Rauschen ist.
    Fakt3: Funkbedingungen sind nicht immer gleich, weil das Rauschen ein chaotisches Signal ist.


    1. Möglichkeit
    Paket viele Male senden. Irgendwann wird der Empfänger ein Paket erfolgreich empfangen. Fragt sich nur wann.

    2. Möglichkeit
    Den Flankenabstand vergrößern. Senkt aber die Datenrate.

    3. Möglichkeit
    Die Toleranzgrenzen des Empfängers erhöhen. Erhöht aber die Wahrscheinlichkeit, Datenmüll zu empfangen. Abhilfe: Verwenden von Paritätsbits, Stopbits und Prüfsummen.

    Ich hoffe mit meinem kleinen Beitrag, Dir geholfen zu haben.

    MfG

    Wolfram Hubert

  9. #19
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Danke, das hört sich in der Theorie ja alles schön an, aber wie kann ich das umsetzen. Mir wäre natürlich schon viel daran gelgen die RS232-Schnittstelle nutzen zu können und nicht ein komplett neues Datenprotokoll mit Zeitfenster etc. schreiben zu müssen, das kann ich (noch) nciht.

    Eine 1 zu senden und diese über einen Interrupt auszuwerten klingt logisch, aber die 1 muss doch eine bestimmte länge haben, ich will doch cniht bei jeder ein (schließlich flackert das ganze ja) einen Interrupt auslösen und vor allem, wie erkenne ich, dass diese ein eine "richtige" ist. Dadurch, dass sie besonders lang ist? Wie kriege ich des dann hin, im INterrupt die Länge eines Singans zu ermittlen und bei entsprechender länge sofort die nächsten 2 Bytes einzulesen?

    MFG Moritz

  10. #20
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Sorry, wenn ich jetzt nerve, aber ich denke viele Leute brauchen mal eine arbeitende PrintToManchseter... Funktion, also bitte helft mir.

    Würde es so funktionieren (Empfänger)?
    Und würde Bitwait nicht ständig ein Bit beim Flackern empfangen?

    Code:
    $baud = 2400
    
    '#######################
    '# LCD-Konfigurationen #
    '#######################
    
    Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portb.0 , Db6 = Portb.1 , Db7 = Portb.2 , E = Portb.3 , Rs = Portb.4       ' Natürlich so wie es wirklich angeschlossen ist (4-Bit-Modus)
    Config Lcd = 16 * 2
    Initlcd
    Display On
    Cursor Off
    Cls
    
    '#######################
    '#      Variablen      #
    '#######################
    
    Declare Function M2b(byval Minput As Word) As Byte
    Dim A As Word
    Dim B As Byte
    Dim I As Byte
    Dim I2 As Byte
    
    '#######################
    '#    Hauptprogramm    #
    '#######################
    
    Do
    Home
    Bitwait Portd.1 , Set
    A = Inkey()
    If A > 0 Then
    B = M2b(a)
    Lcd "IN: " ; Chr(b)
    End If
    Loop
    
    '#######################
    '#     Funktion(en)    #
    '#######################
    
    Function M2b(byval Minput As Word) As Byte
    
       For I = 0 To 15 Step 2
          I2 = I / 2
          Select Case Minput.i
             Case 1 : M2b.i2 = 0
             Case 0 : M2b.i2 = 1
          End Select
       Next
    
    End Function
    End
    MFG Moritz

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress