Protkoll für die Vernetzung von RFM12,01,02 Modulen

www.comwebnet.de
Verfügbare Informationen zu "Protkoll für die Vernetzung von RFM12,01,02 Modulen"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: avrnix - Wigbert - Eisbaeeer - Kurzschluss - stevensen - Thilo - Knickohr
  • Forum: www.comwebnet.de
  • Forenbeschreibung: AVR Mikrocontroller und Elektronik - Forum - www.comwebnet.de
  • aus dem Unterforum: RF12 Transceiver Modul
  • Antworten: 107
  • Forum gestartet am: Mittwoch 25.10.2006
  • Sprache: deutsch
  • Link zum Originaltopic: Protkoll für die Vernetzung von RFM12,01,02 Modulen
  • Letzte Antwort: vor 16 Jahren, 5 Monaten, 7 Tagen, 8 Stunden, 32 Minuten
  • Alle Beiträge und Antworten zu "Protkoll für die Vernetzung von RFM12,01,02 Modulen"

    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 19.08.2007, 10:55

    Protkoll für die Vernetzung von RFM12,01,02 Modulen
    Hier sollen eure Wünsche erörtert werden wie die Kommunikation zwichen den Modulen erfolgen soll.

    Das Protokoll soll so Aufgebaut sein das es Flexibel ist und auch wie das Internet Protokoll mit Adressen arbeitet.

    Jedes Modul soll eine statische oder dynamische Adresse (2 Byte ) bekommen.

    Die Adresse 0000 soll eine Broadcast anfrage an alle Module sein und Fragen welche Adresse hast du und wer bist du ( Tranceiver , Empfänger, Sender, mit der Adresse ( 2 Byte ).

    Es sollen neben Messwerte, Steuerinfos, auch Texte übermittelt werden.




    Beispiel : 11111111 | Absenderadresse | Zieladresse |Messeinheit|Messwert|Info-Text|Steuerung|Längeder Daten|Checksum|00000000

    Jetzt stellt sich mir die Frage wie soll das Protokoll aufgebaut sein?
    Wer hat Vorschläge ?



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 19.08.2007, 11:44


    Als Beispiel sollte man annehmen:

    1 Master verwaltet einen Empfänger , ein Sender und einen Transceiver

    - Die Behandlung ist Unterschiedlich

    Empfänger: Die Adresse muss handisch im Master angegeben werden
    Das heißt er kann nur zur Steuerung verwendet werden.

    Sender: Kann nicht gesteuert werden, kann allerdings dem Master Werte
    übermitteln und sagen ich kann nicht Empfangen.

    Transceiver: Möglichkeit zur Steuerung und Messung -> Dialog möglich!
    Bekanntgabe und Zuweisung von Adressen Möglich!

    Dadurch ergibt sich auch eine Art Priorität der Übermittlung Sender müssen eine Höhere Priorität haben als Transceiver, weil dem den Tranceiver abfragen kann.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 22.08.2007, 17:35

    Datenpaket Slaveadresse
    Hallo,

    es ist vorgesehen RFM12- Splitter in diesem Forum zu stellen,
    Einerseits um jeden User Code-Bausteine zu Verfügung zu stellen,
    andererseits, um nicht so viel in eine "Sackgasse "zu investieren.

    Vielmehr sollen diese Beispiele zu eigenem Handeln anregen

    Rufzeichen:
    Um jeden Slave eines RFM12 Netwerkes anzusprechen
    wird jedem Slave eine Adresse gegeben.
    In meinen Fall wird generell jeder Slave vom Master gerufen.
    Jeder Slave kann ja mehrehre Sensordaten liefern.
    Anbei mal eine "Rufzeichen"- Aufbereitung.
    Es wird folgendes Paket gesendet:

    Paketlänge-Text-Checksum.

    Die Paketlänge wird für dem Slave zum Interrupt-gesteuerten-
    Datenpaketempfang benötigt. Checksum zum Test
    Code: '###################################################################################
    '
    '   RFM12-Splitter
    '
    ' Dies ist die Datenpaketeinstellung am Beispiel Rufzeichen
    '

    ' Einfach "mein Rufzeichen" eintragen
    '
    'Protokoll:
    'Stringlänge-Text-Checksum (Stringlänge = Text + 2, Checksum von Stringlänge + Text)
    '
    '
    'von Wigbert Picht
    '
    '###################################################################################


    Dim Coll(15) As Byte
    Dim Ruf_sende As String * 10 At Coll Overlay
    Dim Laenge As Byte
    Dim Lean As Byte
    Dim L as Byte
    Dim Count As Byte

    Dim Rufzeichen As String * 10
    Dim C As Byte
    Dim Ruf As String * 10

    '###################################################################################

    Rufzeichen = "Wigbert"                                      'mein Rufzeichen

    '###################################################################################
    Do
    'in der Routiene einbauen
    Laenge = Len(rufzeichen)
    Laenge = Laenge + 2
    Lean = Laenge +52                  'Empfänger -50
    L = Asc(Lean)
    Ruf = Chr(L) + Rufzeichen
    C = Checksum(ruf)
    Ruf_sende = Ruf + Chr(c)
    'Datenpaket wird aufgerufen und gesendet
    For Count = 1 To Laenge
    Print Coll(count) ; "-";
    Next Count

    'Testausgabe
    Print " "
    Print Chr(coll(1))

    Waitms 100
    Loop


    das ganze kann natürlich mit mehrehren Rufzeichen erweitert werden.
    Ein Sammelruf würde ich nicht empfehlen,
    da sowieso nur ein Gerät senden sollte



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 22.08.2007, 22:13


    :D Ist ja nicht schlecht für den Anfang -

    Das Rufzeichen muß vorher im Slave sein oder nicht und dient als Adresse, sehe ich das richtig?

    Mit dem Sammelruf kann man eine Zufallzahl nehmen wann es Sendet und dann gibt es eine Wiederholung, das sollte allerdings dann kein Proble, mehr darstellen.

    Deine Methode hat was , was ich noch nicht bedacht habe Netze!

    Jedes Rufzeichen kann ein Netz mit eigener Adresse darstellen
    Rufzeichen+Adresse. So kann man mehre Adressen haben in verschiede Netze die Autonom Arbeiten! Gute Idee, Wigbert :-)

    ich würde sagen das man Byte versendet und sagt was das ist ( Daten,String etc. ) spart Rechenkapazität und vereinfacht die Übertragung.

    Stelle dir vor ein RFM12 könnte sich beim Master anmeldten und eine Adresse beziehen wäre doch super oder nicht?

    Durch den Sammelruf kann er feststellen ob er alle Slaves hat.

    Im diesen Zusammenhang würde ich gern wissen was du unter Master und Slave verstehst. Was muss der MAster haben und können und was der Slave?

    Soll der Master Datenanzeigen können und der Slave nicht, oder gilt das nur wohin die Daten hinkommen ?

    Oder wir nennen es Aktive Netzelemente und Passives Netzelemet.
    Wobei Aktive - Datenverarbeitet und Darstellen kann ( Monitoring ) und Einfluss nimmt auf die Passivelemente.

    Die Passivelemente - können nur Daten aufnehmen oder Verarbeiten oder zum Master schicken. Werden gesteuert vom Master bzw. Geben Daten zum Master ( bei nur Sender z.B. )

    Was denkst du ?


    :)



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 22.08.2007, 23:01


    Hallo,

    erstmal war die Idee entstanden jeden Slave eine Adresse zu verpassen
    mit einfachen Handling. Deshalb ein String für die Adresseneingebung.
    Jeder Slave hat dann sein Rufzeichen. Die werden auch dort hinterlegt.

    Aus dem Zwischenspeicher werden dann sowieso Byte's ausgelesen uund per Funk übertragen.

    Bei Messwerten werde ich wahrscheinlich kein String sondern Byte
    zwischenspeichern.

    Der Master (RFM12+Computer+Datenlogger) steuert alles. Er empfägt Daten und sendet Befehle.
    Dadurch ist eine Funkdisziplin hergestellt.

    Also Master fragt Messwerte vom Slave ab
    Slave sendet Messwerte an Master
    Master sendet Schaltbefehle, Ausgabe usw...

    ich denke das ich demnächst den Interruptgesteuerten Empfang
    vorstellen kann.

    Übrigens:

    ----Besser machen ist einfacher als neu erfinden----



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 23.08.2007, 08:36


    Ok, Verstanden, du arbeitest nur mit RFM12 und jeder bekommt ein anders Rufzeichen( besser 2 Byte nehmen ).

    Der Datenlogger läuft mit einen EEPROM oder im Speicher vom Master.
    Jetzt müssten wir wissen wie man in mit BASCOM auf einer SDCARD speichert (AVR DOS ).

    Gibts bei dir in BASCOM zu AVR DOS Beispiele wie man auf einer SDCARD zugreifen kann ?

    Dann wäre das eine Protable Lösung der Daten :-)

    Man sollte um es besser zu machen die Rahmenbedingungen abstecken:

    -- was will man wie erreichen und warum?
    -- und dann wie soll es erreicht werden ?

    Wie soll der Kommunikationsablauf sein und wie sieht das Protokoll aus:

    |Rufzeichen|Daten| das war es , oder ?

    soll noch was hinzukommen?



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 23.08.2007, 09:42


    -- was will man wie erreichen und warum?
    -- und dann wie soll es erreicht werden ?
    Meine RFM12-Geräte wird sich in Grenzen Halten und es werden bstimmt
    keine 100 Stück oder so kommunizieren müssen.
    Im Hintergrund denke ich immer an "Hausbus"
    Heizung ,Jalousie usw.
    Und das Protokoll sollte realistisch funktionieren.

    Ich befürchte eine Art Funknetz Router- und Slavefunktion
    könnte auf Grund ihrer Komplexität schwierig werden.

    Aber:

    ----nichts ist unmöglich----



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 23.08.2007, 10:17


    Dann reicht ja ein einfaches Protokoll aus. Vergebe einfach eine als Rufzeichen eine Nummer ist dann einfacher in der Verwaltung, reicht dann ja auch ein Byte aus.

    Wenn es Module gibt die mit Batterie arbeiten könnte man ein Byte zur Zustandserkennung einbauen.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 24.08.2007, 19:49


    Hallo,
    Für meine zukünftige Master-Slave Kommunikation wurden für die Erstellung und Übertragung von Datenpaketen 2 Testcode entworfen.
    Ziel wird es sein eine Master gesteuerte Kommunikation aufzubauen.
    Prinzip:
    Master ruft Slave
    Slave sendet Daten an Master
    Master sendet Befehle an Slave

    Master:
    eingegebenen String (Adresse oder Datenpaket)
    Code:
    '  Rufzeichen

      Rufzeichen = "Forum01"                                    'mein Rufzeichen oder sonst ein String

    ' #########################################################################

      Sendetext                                                 'Sub Stringverarbeitung zum Datenpaket
                                                                'später in Schleife
    ' #########################################################################



    mit Stringlänge und Check vervollständigen. So das folgendes Paket
    gesendet wird: Code: Sub Sendetext                                               'Aufbereitung des Text="Teststring"
     Sendedata = Rufzeichen                                     'welcher String gebraucht wird
     Laenge = Len(sendedata)
     Lean = Laenge + 2
     La = Laenge + 52                                           '50 Bei Empfänger subtrahieren
     Ruf = Chr(la) + Sendedata
     C = Checksum(ruf)
     Text = Ruf + Chr(c)
    'Print Text                                                 'Testprint
    'Print L ; sendedata ; C;
    End Sub

    Längenbyte- Stringbyte-Stringbyte-…………-Checkbyte

    Das Längenbyte bestimmt die Sendedatenlänge.
    Code:  For Count = 1 To Lean                                     'Veriable Länge duch Stringberechnung
      'For Count = 1 To Maxchar
        Rf12_ready                                              'hier kann das gesendete Datenpaket eingesehen werden
        'Print Rfdata(count) ; "-";
        Temp = &HB800 + Rfdata(count)
        Temp = Rf12_trans(temp)
      Next Count

    Slave:
    interruptgesteuertes Auslesen des Datenpaketes und zwischenspeichern.
    Dabei wird wiederum aus dem ersten Byte die Empfangsdatenlänge errechnet.
    Code:  Ffit_handler:

     Temp = Rf12_trans(&Hb000)                                  'Empfangsbyte lesen
     Rfdata(count) = Temp

     Empfangslen = Rfdata(1) - 50                               'Stringlänge aus erstes Datembyte errechnen
     If Count > Empfangslen Then
     'If Count >= Maxchar Then
      Rxt = 1                                                   'Flag für Ausgabe
      Temp = Rf12_trans(&Hca81)                                 'FIFO + SYNC Erkennung wieder scharf machen
      Temp = Rf12_trans(&Hca83)
      ' Rücksetzen auf 1 in Sub Ausgabe
      Else
      Incr Count                                                'ansonsten nur zähler erhöhen
     End If
    Return


    In einer Sub wird der Check durchgeführt und der gewonnene Textstring ausgegeben
    Code: Sub Ausgabe
     If Rxt = 1 Then                                            'If Count >= Länge String Then
      Disable Interrupts
      Arraychar = ""
      For Count = 1 To Empfangslen                              'byte aus Zwischenspeicher auslesen
      Arraychar = Arraychar + Chr(rfdata(count))
      Next Count
      Laenge = Len(arraychar)                                   'Stringlänge ermitteln
      Laenge = Laenge - 1
      Empfangstext = Left(arraychar , Laenge)                   'Stringausgabe  ohne Checksumme
      Cc = Checksum(empfangstext)                               'Checksumme von empfangenen String berechnen
      F = Rfdata(empfangslen)                                   'Checksumme vom Datenpaket
       If F = Cc Then
       Kennung = 1                                              'wenn empfangene Checksumme mit errechnete gleich, dann K.= 1
       End If
      Ll = Laenge - 1
      Ausgabetext = Mid(arraychar , 2 , Ll)
      Print Ausgabetext                                         'Ausgabetext ohne Laenge und check
      Print F                                                   'Testprint
      Print Cc
      Count = 1
      Rxt = 0
      End If
      Enable Interrupts
    End Sub

    Eine weitere Sub dient zur Erkennung der hinterlegten Adresse.
    Code: '#########################################################################
    '######   Slaveadresse
    '#########################################################################

    Rufzeichen = "Forum01"                                      'mein Rufzeichen


    Code:
    Sub Erkennung
    If Kennung = 1 Then                                         'Bin ich gemeint?
     If Ausgabetext = Rufzeichen Then
     Portd.5 = 1                                                'Ich bin gemeint
     Kennung = 0
     Else
     Portd.5 = 0                                                'später goto wohin auch immer
     End If
    End If
    End Sub

    Der Textstring wird ordnungsgemäss verarbeitet. Kommt immer richtig an.
    Seltsamerweise werden aber verschiedene Werte der Checksumme empfangen.
    Nicht falsche sondern unterschiedliche (letzte Ziffer),find ich aber noch heraus

    Die Software wurde auf Pollinboard getestet(10 Mhz von RFM12)

    Softwarelink: von Avrnix eintragen

    demnächst werde ich mich mit "Funkprotokoll" beschäftigen

    Hinweis:
    ------für Erweiterung der Testcode wird die Bascom Demoversion nicht mehr reichen-------



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 25.08.2007, 08:53

    Netzwerk MAster-Slave Kommunikation
    Hier der versproche LINK zu den beiden BASCOM Programmen
    MASTER und SLAVE für den RFM12 Tranceiver.

    http://www.comwebnet.de/seite48.html

    Anregungen und Fehlermeldung Lösungen sind gerne gesehen!


    :D



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 25.08.2007, 17:57


    Hallo Leute,
    hab das Problem mit der Checksumme gelöst.
    Beim Master einfach ein Leerstring in den "Raum" hinterhersenden
    und die Lean um 1 erhöhen
    Code: '##########################
    Sub Sendetext                                               'Aufbereitung des Text="Teststring"
     Sendedata = Rufzeichen                                     'welcher String gebraucht wird
     Laenge = Len(sendedata)
     Lean = Laenge + 3                                         '+1
     La = Laenge + 52                                           '50 Bei Empfänger subtrahieren
     Ruf = Chr(la) + Sendedata
     C = Checksum(ruf)
     Text = Ruf + Chr(c)
     Text = Text + " "                                          'Folgestring ,wird beim Empfänger nicht verarbeitet
    'Print Text                                                  'Testprint
    'Print L ; Sendedata ; C;
    End Sub

    Bitte:

    Text = Text + " "
    einfügen
    Lean = Laenge + 3
    ändern

    Wigbert



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 26.08.2007, 10:22


    Hi,

    im Slave wurden noch ein paar Einstellungen geändert
    Code: $hwstack = 40                                               ' default use 32 for the hardware stack
    $swstack = 40                                               'default use 10 for the SW stack
    $framesize = 40


    un die im Interrupt die Zeile geändert
    Code: If Empfangslen < Count Then
    kennt wohl nur kleiner als...

    nun sollte der Code durchlaufen



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 26.08.2007, 16:43


    Hi,

    ich habe die Master-Slave Code durch überarbeitete Varianten ersetzt.
    Im Rufzeichen steht jetzt:
    Code:
      Rufzeichen = "Forum02"                                    'mein Rufzeichen oder sonst ein String

    und sollte unter:

    http://www.comwebnet.de/seite48.html

    zu finden sein.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 27.08.2007, 19:42


    Hi,

    hab im Master-Code einen Timer integriert und in den o.g. Link durch
    den alten ersetzt
    Der Timer wird benötigt für die Sendezyklen.

    Im Rufzeichen sollte dann stehen:
    Code:
    '  Rufzeichen

      Rufzeichen = "Forum02"                                    'mein Rufzeichen oder sonst ein String

      'mit Timer



    als Timerkontrolle wird durch
    Code: Toggle Portb.0 

    durchgeführt



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 27.08.2007, 20:39


    Hallo Wigbert,

    warum ist jetzt ein Timer drinne ?
    :roll:



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 27.08.2007, 20:52


    weil der Timer im Hintergrund alle Zyklen steuern wird,
    und keine Zeit mit Wait vertrödelt werden soll.
    Ich brauch einfach ein Grundtakt.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 06.09.2007, 12:03


    Hallo

    Kapier ich auch nicht. Der Timer zählt nur bis 5 und setzt sich dann wieder auf 0 ?
    Für was ist der Timer angedacht?

    ------- edit ----------------------------------
    Tja so ist es, wenn man während dem Posten noch was anderes machen muss.
    Dann ist es auch möglich, einen vorhandenen Timer mit 25ms zu nutzen.

    Grüße Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 06.09.2007, 15:12


    Ok,
    war ein bischen verfrüht den Timer reinzustellen.
    Der Timer wiederholt alle 5 Sek. den Sendemodus.
    Oder ruft nach 1 Sek den nächsten Slave auf.
    Also:
    Sende Slave 01
    Empfang(5 Sek) kein Slave?
    Sende Slave 01
    .....

    es wird 3 x ein Slave gerufen

    oder
    der Timer
    springt nach dem Empfang 1 Sek später zum nächsten Slave.

    mir gefällt bis jetzt nur mein Einsprung nicht.

    das wait sollte sowieso raus.

    Die jetzige Einstellung Toggelt im 5 Sek takt, läuft auch auf mein rfm 12
    Der Timer zählt 1 Sek und wird auf 5 Sek erhöht

    @Eisbeer
    >Tja so ist es, wenn man während dem Posten noch was anderes machen muss
    verstehe ich nicht



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 06.09.2007, 19:28


    Ich schätze mal mit dem TIMER könnte man auch ein Zähler mit einbauen und dann nach einen gewissen Zählerstand den nächsten Slave anrufen.

    Vielleicht für ein Slave nicht sinnvoll, aber bei mehren schon.
    In der Hauproutine könne man dann noch was anderes bewerkstelligen als nur das Warten. Ist ja alles noch am Anfang.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 06.09.2007, 19:46


    Vielleicht noch ein weiterer Hintergedanke:
    Master und Slavecode werden ja irgendwann ähnlich aussehen,teilweise
    zumindest.
    Und beim Slave sollen zwischendurch ja Messungen durchgeführt werden.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 11.09.2007, 16:50


    Also, ich habe gestern angefangen, den Code auszuprobieren.
    Als erstes ist mir aufgefallen, dass der IRQ nur beim Empfänger benutzt wird. Ich hatte bis jetzt mit anderen Funktionen zu tun und mich noch nicht allzuviel mit dem RFM12 beschäftigt.

    Nachdem ich das Pollin Board benutzt habe und es einige Probleme mit dem RFM12 Modul gab, hab ich es vom Board runtergerupft und auf einer externen Lochraster aufgesteckt. Verbunden wird das ganze jetzt über die 40-Pol Leiste vom Pollin Board. Ausserdem hat es Ports vom Atmega belegt, die ich für was anders gebraucht habe.

    Gestern hat es dann nicht mehr geklappt. Ich muss jetzt systematisch nach dem Problem suchen. Ich werd beim Sender anfangen und erstmal kontrollieren, ob das Senden funktioniert.

    Die Ansätze hier gefallen mir gut. Ich werd mal versuchen, was beizusteuern. Vor allem das mit dem Timer und dem Takt. Der Controller soll auch bei mir noch mehr tun.

    Grüße Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 12.09.2007, 08:50


    Hallo Eisbaeer,

    Also mit den Pollinboard gibt anscheined Probs wenn der Optokoppler eingebaut wurde.
    Hast du die Master und Client Version genommen die Wigbert geschrieben hat ?

    Laut seinen Aussagen soll es klappen, ich habe es leider noch nicht ausprobiert, muss noch ein weiteres Testboard bauen. :oops:

    Jo wäre Klasse wenn man doch die Erfahrungen austauschen könnte und so was wie ein Allgemein benutzbares Protokoll erschaffen zu können.

    :D

    Zu Thema Sendet der Sender gibts hier auch noch Tips im Forum!



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 12.09.2007, 16:19


    avrnix hat folgendes geschrieben:

    Zu Thema Sendet der Sender gibts hier auch noch Tips im Forum!

    Kein Problem, bin Funkamateur 8)

    Zum Austausch. Auf jeden Fall werd ich mich da einbringen. Leider hab ich nicht jeden Tag die Zeit dazu, auch wenn ich gerne würde.
    Aber wird schon.

    Grüße Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 12.09.2007, 19:39


    Eisbaeeer hat folgendes geschrieben:

    Kein Problem, bin Funkamateur 8)

    Zum Austausch. Auf jeden Fall werd ich mich da einbringen. Leider hab ich nicht jeden Tag die Zeit dazu, auch wenn ich gerne würde.
    Aber wird schon.

    Grüße Eisbaeeer

    Es erwartet ja keiner das es ein Fulltimejob wird 8)
    Wigbert ist auch Funkeramateur :shock:

    Also es wird schon, wenn alle was machen und helfen, kommen schöne Projekte zustande. [b] Step by Step [\b]



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 13.09.2007, 06:30


    avrnix hat folgendes geschrieben:
    Also es wird schon, wenn alle was machen und helfen, kommen schöne Projekte zustande. [b] Step by Step [\b]

    Ja denk ich auch, dass da schöne Sachen zusammenkommen.

    Ich werde meine Steuerung für die Wärmepumpe ersetzen. Da gibt es auf dem Markt nix gescheites. In den Räumen (Wohnen (Kachelofen), Bad, Kinderzimmer, usw.) wird ein GLCD 128x64 die ganzen Infos anzeigen und die Zentrale bedienen, natürlich mit einem RFM12 angebunden :?

    Das Projekt will ich dann Open-Source machen.
    Was jetzt schon geht:
    - DCF Uhr
    - Temperatursensoren 1-wire (DS18S20)
    - GLCD 128x64
    - Uhrenbaustein PF8583

    So, dass das nicht Offtopic wird, werd ich das Projekt in die andere Rubrik schreiben.

    Grüße Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 14.09.2007, 09:03


    Hallo Leute,

    da ich jetzt Auswärts tätig bin, wird sich diesen Monat noch hinziehen, kann das Projekt zeitlich nicht wie gewollt fortgefürt werden.

    Über Zuarbeiten wäre ich dankbar.

    Aber immer den Grundgedanken
    Mastersteuerung
    beachten.

    Sonst macht bitte ein neuen Tread auf.

    @ Eisbeer
    Code: 'interrupt niRQ                                         'warten auf nIRQ ,später mal   

    wenn Du das meinst, soweit war ich noch nicht.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 14.09.2007, 21:24


    Zitat:
    @ Eisbeer
    Code: 'interrupt niRQ                                         'warten auf nIRQ ,später mal   

    wenn Du das meinst, soweit war ich noch nicht.

    Ich meinte diese Zeilen:
    Code:
    Config Int1 = Rising
    On Int1 Ffit_handler
    Enable Int1
    Enable Interrupts

    Ist das jetzt der nInt oder der nIRQ Anschluss?
    Ich versuch mal selbst zu beantworten, der nIRQ?

    Ich habe jetzt mal ein "altes" Programm genommen und nachgesehen, was über die RS232 kommt:



    Code: <n>;-F-o-r-u-m-0-2-¦- -v-<31>-â-<16>-ÿ-®-Ï-¿-[--ú-¨--<15>-Z-ì-ð-ú-"-<b>-ø--<r>

    Das kam dabei raus.
    Mal sehen, wie weit ich heute Abend noch komme :-)

    Grüße Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 14.09.2007, 22:01


    Hi Eisbeer,
    bevor ich was durcheinander bringe, also meine Master und Slave
    Code sollten schon laufen. Wobei der Master im regelmässiger
    Periode sendet. Der Master wird später die niRQ Überwachung bekommen.
    Code: 'interrupt niRQ                                         'warten auf nIRQ ,später mal   
    (ist jetzt noch nicht in Master Code enthalten,
    Ist bei periodischen senden ja noch nicht notwendig)

    Der Slave empfängt interruptgesteuert.
    Code: Enable Int1                                                 
    Config Int1 = Rising
    On Int1 Ffit_handler
    Enable Interrupts.
    Empfangsinterrupt

    Der Master sendet ein Byte zuviel(wird beim Slave nicht erkannt
    da das 1. Byte die Empfangslänge begrenzt).Dieses "sinnlose" Byte
    soll einfach das letzte Datenbyte beim Master aus den Buffer schieben.

    Wenn Du jetzt den Empfänger mit 32 Byte eingestellt hast(alter Code?)
    kann es passieren, das er nach den Nutzbyte noch "Müll" empfängst.

    Irgendwann sollten bis auf einige Abweichungen der Maste und Slave
    Code zu einen Code verschmelzen.
    Ich hab das schrittweise aufgebaut und so werde ich das fortführen
    da 1. die Demoversion an ihre Grenzen stösst und 2. sollte das
    eigentlich den "Start" erleichtern.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 14.09.2007, 22:11


    Wigbert hat folgendes geschrieben:
    Code: 'interrupt niRQ                                         'warten auf nIRQ ,später mal   
    (ist jetzt noch nicht in Master Code enthalten,
    Ist bei periodischen senden ja noch nicht notwendig)

    Der Slave empfängt interruptgesteuert.
    Code: Enable Int1                                                 
    Config Int1 = Rising
    On Int1 Ffit_handler
    Enable Interrupts.
    Empfangsinterrupt



    Ja das ist klar, im Master ist ja kein Interrupt aktiviert, ergo kein Interrupt in Benutzung.
    Beim Empfänger also nIRQ vom RFM12 an INT1 vom Atmega.
    Ich hab mit dem Oszi gemessen und bekomme keine Interruptauslösung vom RFM12. Ich empfange aber mit dem "alten" Programm die Daten.

    Dann sollte der RFM12 den nIRQ Ausgang auf High setzen, wenn ein Gültiges Signal empfangen wird, oder nicht?



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 14.09.2007, 22:38


    Musste erst mal überlegen sorry.

    Der Empfänger nutzt den Interrupt des FFIT.
    FFIT an int 1 wie im Pollinboard.Geh mal mit dem Oszi daran.

    Der nIRQ Pin sollte schalteten wenn der Empfangsbuffer leer ist, damit nicht zu früh gesendet wird.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 14.09.2007, 22:53


    Ich noch mal,
    am nIRQ Pin tut sich bei mir anscheinend auch nichts.
    Muss mal die Einstellungen prüfen,
    aber am FFIT sind schön die Interrupts zu sehen.

    hab noch mal im Forum nachgelesen
    >dann sollte and der nIRQ (=SDO) Leitung kurze Impulse im
    Baudratentakt zu sehen sein.
    das wär der SDO pin am rfm 12



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 16.09.2007, 09:46


    Ok, dann stimmt was noch nicht. Muss ich mal auf die Suche gehen. Ich bekomme am FFIT ein dauerndes +5V Signal. Nach dem Reset geht das kurz auf 0V. Dann wieder auf 5V.
    Heute Nachmittag gehe ich mal auf Suche.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 16.09.2007, 10:20


    seh mal nach ob in den Code

    Code: Sub Rf12_ready
      Reset Spi_cs
      While Spi_sdo = 0                                         'In der Sim. auf 1 stellen
      Wend
    End Sub

    eine 0 bei While Spi_sdo steht.

    Hatte ich auch schon mal vergessen nach der Sim umzustellen



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 17.09.2007, 17:05


    Wigbert hat folgendes geschrieben: seh mal nach ob in den Code

    Code: Sub Rf12_ready
      Reset Spi_cs
      While Spi_sdo = 0                                         'In der Sim. auf 1 stellen
      Wend
    End Sub

    eine 0 bei While Spi_sdo steht.

    Hatte ich auch schon mal vergessen nach der Sim umzustellen

    Hab ich nachgesehen. Die Einstellung stimmt. Irgend wo ist noch der Hund drin. Der Interrupt an INT1 liegt jetzt bei mir wie beim Pollin Board auf DCLK/CFIL/FFIT.

    So hab ich den RFM12 angeschlossen:

    SDO --> MISO
    FSK --> mit 10k an 5V
    DCLK --> INT1
    SCK --> SCK
    SDI --> MOSI

    GND --> GND
    VDD --> VDD
    ANT --> Antenne

    Der "alte" Empfangscode tut, der Sendecode auch.
    Am CLK kommt sauber das 10 MHz Rechtecksignal.

    Hat noch jemand eine Idee?



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 17.09.2007, 17:27


    Hi Eisbeer,
    kannst Du mir mal eine Mail schicken,
    ich hätte Dir gerne ein einfacheren Code geschickt



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 21.09.2007, 21:54


    Ok, ich bin ein Stück weiter.
    Nachdem ich die beiden Controller etwa 20cm auseinander betrieben habe, funktioniert der INT1.
    Ich bekomme jetzt in regelmäßigen Abständen eine Übertragung.



    -------------------EDIT----------------------------------

    Ich vermute dass es noch ein Problem in der Sub gibt.
    wenn ich das Waitms 10 rausnehme, bekomme ich kein Empfang in regelmäßigen Abständen.

    Code: Ffit_handler:
      Toggle Portd.6
      Waitms 10
      Temp = Rf12_trans(&Hb000)                                 'Empfangsbyte lesen
     Rfdata(count) = Temp

     Empfangslen = Rfdata(1) - 50                               'Stringlänge aus erstes Datembyte errechnen/ -50 wegen Steuerzeichen bei Print
     If Empfangslen < Count Then
     'If Count >= Maxchar Then
      Rxt = 1                                                   'Flag für Ausgabe
      Temp = Rf12_trans(&Hca81)                                 'FIFO + SYNC Erkennung wieder scharf machen
      Temp = Rf12_trans(&Hca83)
      ' Rücksetzen auf 1 in Sub Ausgabe
      Else
      Incr Count                                                'ansonsten nur zähler erhöhen
     End If
    Return
    Das Toggle ist meine Schleifenkontrolle



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 21.09.2007, 22:40


    Hi Eisbeer,

    Deine Gedankengänge sind meiner Meinung nicht richtig.
    Wenn an Int 1 ein Interrupt ausgelöst wird, beginnt der Datenempfang.
    Bei Einsatz von Wait verpasst der Empfänger was.
    Es muss einfach bei jeden Byte ein Interrupt bei Fft_handler zu erkennen sein.
    Ich hab auf den Oszi an den o.g. Pins richtig ein Datenpaket ähnlich
    "Morsezeichen" als Abbild.

    Ich hab meine Code vielfach auf 2 Schaltungsvarianten geladen.
    Lief immer.

    Wir müssen das Problem wohl nächste Woche per Mail intensiv angehen.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 04.10.2007, 11:18


    So
    Nun bin ich ein Stück weiter.
    Mein Empfänger bekommt einen Interrupt.
    Wenn ich das Modul aber längere Zeit laufen lasse (>24h) funktioniert der Empfänger nicht mehr. Ich vermute einen Stack Überlauf. Denn nach einem Reset funktioniert alles wieder wunderbar. Ich werde mir einen Zähler einbauen, um dem Problem auf die Schliche zu kommen.

    Mir sind die Abläufe im Modul noch nicht ganz klar. Da muss ich mal ins Datenblatt abtauchen.

    Bei den Tests hatte ich Probleme mit der Deklaration "String"
    Diese macht es schwieriger, mit den Bytes weiterzuarbeiten.

    Meint ihr, dass es sinnvoll ist, das ganze als String zu deklarieren oder soll nur für die Kennung String verwendet werden und dann für die Nutzdaten Byte?

    Grüße Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 04.10.2007, 11:37


    Ich persönlich stehe auf einen Datentype - alles String oder alles Byte -

    Man könnte die Kennung auch als Byte versenden ( ASCII ) und die daten dann als Byte.

    Zu den aussetzer , wäre vielleicht ein Watchdog ( gibts im AVR ) interessant.
    den muss man alle paar Sec ( max 2s ) zurücksetzen, das würde bedeuten , wenn der AVR hängt , das in nach einer Zeit von 2 Sec der Controller resettet wird.

    Hier mal ein Beispiel aus der Bascom Hilfe ( Config Watchdog )

    $regfile = "m48def.dat" ' specify the used micro

    $crystal = 4000000 ' used crystal frequency

    $baud = 19200 ' use baud rate

    $hwstack = 32 ' default use 32 for the hardware stack

    $swstack = 10 ' default use 10 for the SW stack

    $framesize = 40 ' default use 40 for the frame space



    Config Watchdog = 2048 'reset after 2048 mSec

    Start Watchdog 'start the watchdog timer

    Dim I As Word

    For I = 1 To 1000



    Print I 'print value

    'Reset Watchdog

    'you will notice that the for next doesnt finish because of the reset

    'when you unmark the RESET WATCHDOG statement it will finish because the

    'wd-timer is reset before it reaches 2048 msec

    Next



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 04.10.2007, 16:00


    Hi Eisbeer,

    nun hast Du mich auf den linken Fuss erwischt.
    Ich bin mir mit den Stack auch nicht sicher, wobei mein Code länger
    wie 24 Stunden lief.
    Kann man den Stack nicht in der Sim anzeigen lassen?



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 04.10.2007, 18:44


    Hallo Wigbert,

    Was meinst du mit Stack ?

    Der Stack müsste doch auch abgebaut werden, oder sehe ich jetzt was Falsch ?

    P.S: Morgen werde ich mal meine RF12 ausprobieren

    1x mit eine M32 und M8

    dann stelle ich mal doofe Fragen - lol :wink:



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 04.10.2007, 19:33


    Ich les mich mal durch das RN-Wissen:

    http://www.roboternetz.de/wissen/index.php/Bascom_Inside

    Wird interessant:
    * Bei jedem Interrupt werden schon mal 32 Byte HW-Stack sicher verbraten, nur, um alle Register zu sichern.
    * Jedes "LOCAL" Data verbraucht Frame-Space in seiner Größe + 2 byte auf dem Soft-Stack
    * Jeder Parameter einer "SUB" braucht 2 Byte SoftStack + die Datengröße, wenn zusätzlich "byval" angegeben ist.
    * datenkonversionen Zahl --> string brauchen die Stringlänge ( PRINT !)

    Mal sehen, was dabei raus kommt.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 04.10.2007, 19:57


    Hi,
    doofe Fragen gibt es wohl kaum.

    Der Stack wird auch ordentlich abgebaut, wenn der Befehl ordentlich
    beendet wird, oftmals werden aber Testcode schnell mal umgeschrieben.
    Deshalb sollte man z.B. Sprünge auf ein Minimum begrenzen,
    und lieber ein Flag setzen.

    Welche Funktion welchen Stack "verbraucht" ist mir schon aus
    Wicki bekannt.

    Ist meine Frage aber immer noch nicht beantwortet,
    ob ich in der Sim der Stacküberlauf sehen kann.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 04.10.2007, 21:17


    Kann ich dir nicht beantworten, ob man das in der Simulation sieht.

    Ich hätte aber noch eine Frage zum letzten Byte im String.
    Ich habe jetzt eine feste Länge definiert.

    Code: Dim text(8) as Byte

    Ich habe für jedes Byte einen festen Wert vergeben (durchnummeriert).
    Beim Empfangen stimmen alle Bytes, bis auf das letzte.
    Das zeigt ständig einen anderen Wert.
    Ist das bei Euch auch so oder liegt das an meinen Timern?
    Sollte ich während der Senderoutine die Interrupts und Timer beenden und danach wieder starten?

    Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 04.10.2007, 21:22


    Hatten wir schon mal,
    schieb beim Senden ein sinnloses Byte hinterher,
    und ignorier das beim Empfang.
    Ich nehme mal an beim Senden muss ein Byte nachgeschoben werden,
    um das vorletzte Byte ordentlich aus dem Buffer auszulesen und zu
    senden.

    Läuft dein Mega 32 ( L-Type ?)mit 8MHz ? was für ein Wert hast den den RFM12 Modul eingestellt 10 ( C0E0 )oder 5 MHz (C0C0) , welchen Hex Wert im Programm ? Und Mega läuft über den RFM12 Quarz ?

    Datenblatt : S. 22 Punkt 14 -> http://comwebnet.co.funpic.de/seite48.php



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 04.10.2007, 21:31


    Ok, jetzt wo du es erwähnst, habe ich das schon einmal gelesen und erinnere mich daran.
    Ein Byte verschenken :-)

    Ich habe das gerade auch noch getestet, um sicherzugehen, dass es nicht an den Timern liegt.

    Im Moment stoße ich den Empfang in der Schleife Do an. Nur wenn ich ein


    Code: Call Rf12_rxdata(maxchar)   

    mache, wird mein Interrupt ausgelöst.
    Wie stellt man es an, dass der RFM eigenständig ein Interrupt auslöst?

    Sozusagen ständiger Empfang und nur auslesen, wenn ein Interrupt ansteht?

    Komisch ist, dass die Laufzeiten unterschiedlich sind, bis sich mein Programm aufhängt. Ein Watchdog ist nicht die Lösung, da dreht man an den Folgen, nicht an der Ursache.

    Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 04.10.2007, 21:55


    Also nach meinem Code "lauert" der RFM 12 auf Daten, und der Interrupt
    leitet die Leseprozedur ein.
    Du willst sicher den Empfang initialisieren der Controller soll dann
    was auderes machen und im Hintergrund QRV sein.
    Hab ich noch nicht ausprobiert, sollte aber gehen.
    Init vorher einleiten.

    Drück mal nach Compile STRG+W und vergleich mal die Stack.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 04.10.2007, 22:09


    Ich hab ein bischen mehr im AVR, aber hier mal die komplette Ausgabe:

    Code: Report       : EMPFAENGER_RFM12
    Date         : 10-04-2007
    Time         : 22:02:27

    Compiler     : BASCOM-AVR LIBRARY V 1.11.8.3
    Processor    : M32
    SRAM         : 800 hex
    EEPROM       : 400 hex
    ROMSIZE      : 8000 hex

    ROMIMAGE     : 28BE hex  -> Will fit into ROM
    ROMIMAGE     :  10430 dec
    FLASH USED   :  31  %
    BAUD         : 19200 Baud
    XTAL         : 8000000 Hz
    BAUD error   : 0.16%

    Stack start  : 85F hex
    Stack size   : C8 hex
    S-Stacksize  : C8 hex
    S-Stackstart : 798 hex
    Framesize    : C8 hex
    Framestart   : 6CF hex
    Space left   :  1324  dec

    LCD DB7      : PORTB.7
    LCD DB6      : PORTB.6
    LCD DB5      : PORTB.5
    LCD DB4      : PORTB.4
    LCD E        : PORTB.3
    LCD RS       : PORTB.2
    LCD mode     :  4  bit

    --------------------------------------------------------------------------------
    Variable                         Type            Address(hex)   Address(dec)
    --------------------------------------------------------------------------------
    HWSTACK                          Word              005D          93
    SWSTACK                          Word              001C          28
    FRAME                            Word              0004          4
    COMPARE0                         Byte              005C          92
    PWM                              Byte              005C          92
    COUNTER0                         Byte              0052          82
    TIMER0                           Byte              0052          82
    COUNTER2                         Byte              0044          68
    TIMER2                           Byte              0044          68
    COMPARE2                         Byte              0043          67
    ADCD                             Word              0024          36
    COUNTER1                         Word              004C          76
    TIMER1                           Word              004C          76
    CAPTURE1                         Word              0046          70
    COMPARE1A                        Word              004A          74
    PWM1A                            Word              004A          74
    PWM1B                            Word              0048          72
    COMPARE1B                        Word              0048          72
    PWM0                             Byte              005C          92
    ERR                              Bit               0006          6
    HOUR                             Byte              0060          96
    MINUTE                           Byte              0061          97
    SECOND                           Byte              0062          98
    DAY                              Byte              0063          99
    MONTH                            Byte              0064          100
    YEAR                             Byte              0065          101
    WEEKDAY                          Byte              0066          102
    WEEKDAY_S                        String            0067          103
    MONAT                            String            006A          106
    TFWW                             Single            006E          110
    TFHW                             Byte (8)          0072          114
    TFAU                             Single            007A          122
    TFMK                             Single            007E          126
    TFSV                             Single            0082          130
    TFSR                             Single            0086          134
    TFHV                             Single            008A          138
    TFLR                             Single            008E          142
    TFRS1                            Single            0092          146
    TFRS2                            Single            0096          150
    TFID1                            Byte (8)          009A          154
    TFID2                            Byte (8)          00A2          162
    WPE                              Bit               00AA          170
    PMK                              Bit               00AA          170
    PKK                              Bit               00AA          170
    MIA                              Bit               00AA          170
    MIZ                              Bit               00AA          170
    PZI                              Bit               00AA          170
    SPZ                              Bit               00AA          170
    WPBSZ                            Byte              00AB          171
    PMKBSZ                           Byte              00AC          172
    PKKBSZ                           Byte              00AD          173
    SAST                             Bit               00AA          170
    PZIBSZ                           Byte              00AE          174
    RST1                             Byte              00AF          175
    RST2                             Byte              00B0          176
    I                                Byte              00B1          177
    J                                Byte              00B2          178
    COUNT                            Byte              00B3          179
    TEMP                             Word              00B4          180
    RFDATA                           Byte (8)          00B6          182
    TEXT                             Byte (8)          00B6          182
    S                                String            00BE          190
    T4                               String            00C9          201
    T6                               Single            00D4          212

    --------------------------------------------------------------------------------
    Constant                         Value
    --------------------------------------------------------------------------------
    SREG                             &H3F
    SPH                              &H3E
    SPL                              &H3D
    OCR0                             &H3C
    GIMSK                            &H3B
    GICR                             &H3B
    GIFR                             &H3A
    TIMSK                            &H39
    TIFR                             &H38
    SPMCR                            &H37
    SPMCSR                           &H37
    TWCR                             &H36
    MCUCR                            &H35
    MCUSR                            &H34
    MCUCSR                           &H34
    TCCR0                            &H33
    TCNT0                            &H32
    OSCCAL                           &H31
    SFIOR                            &H30
    TCCR1A                           &H2F
    TCCR1B                           &H2E
    TCNT1H                           &H2D
    TCNT1L                           &H2C
    OCR1AH                           &H2B
    OCR1AL                           &H2A
    OCR1BH                           &H29
    OCR1BL                           &H28
    ICR1H                            &H27
    ICR1L                            &H26
    TCCR2                            &H25
    TCNT2                            &H24
    OCR2                             &H23
    ASSR                             &H22
    WDTCR                            &H21
    UBRRHI                           &H20
    UCSRC                            &H20
    EEARH                            &H1F
    EEARL                            &H1E
    EEDR                             &H1D
    EECR                             &H1C
    PORTA                            &H1B
    DDRA                             &H1A
    PINA                             &H19
    PORTB                            &H18
    DDRB                             &H17
    PINB                             &H16
    PORTC                            &H15
    DDRC                             &H14
    PINC                             &H13
    PORTD                            &H12
    DDRD                             &H11
    PIND                             &H10
    SPDR                             &H0F
    SPSR                             &H0E
    SPCR                             &H0D
    UDR                              &H0C
    USR                              &H0B
    UCSRA                            &H0B
    UCR                              &H0A
    UCSRB                            &H0A
    UBRR                             &H09
    UBRRL                            &H09
    ACSR                             &H08
    ADMUX                            &H07
    ADCSR                            &H06
    ADCH                             &H05
    ADCL                             &H04
    TWDR                             &H03
    TWAR                             &H02
    TWSR                             &H01
    TWBR                             &H00
    INT1                             7
    INT0                             6
    INT2                             5
    IVSEL                            1
    IVCE                             0
    INTF1                            7
    INTF0                            6
    INTF2                            5
    TOIE0                            0
    OCIE0                            1
    TOIE1                            2
    OCIE1B                           3
    OCIE1A                           4
    TICIE1                           5
    TOIE2                            6
    OCIE2                            7
    TOV0                             0
    OCF0                             1
    TOV1                             2
    OCF1B                            3
    OCF1A                            4
    ICF1                             5
    TOV2                             6
    OCF2                             7
    SPMIE                            7
    ASB                              6
    ASRE                             4
    BLBSET                           3
    PGWRT                            2
    PGERS                            1
    SPMEN                            0
    SELFPRGEN                        0
    SE                               7
    SM2                              6
    SM1                              5
    SM0                              4
    ISC11                            3
    ISC10                            2
    ISC01                            1
    ISC00                            0
    JTD                              7
    ISC2                             6
    EIH                              5
    JTRF                             4
    WDRF                             3
    BORF                             2
    EXTRF                            1
    PORF                             0
    FOC0                             7
    WGM00                            6
    COM01                            5
    COM00                            4
    WGM01                            3
    CS02                             2
    CS01                             1
    CS00                             0
    WGM01                            7
    COM1A1                           7
    COM1A0                           6
    COM1B1                           5
    COM1B0                           4
    FOC1A                            3
    FOC1B                            2
    PWM11                            1
    PWM10                            0
    ICNC1                            7
    ICES1                            6
    CTC11                            4
    CTC10                            3
    CTC1                             3
    CS12                             2
    CS11                             1
    CS10                             0
    FOC2                             7
    PWM2                             6
    COM21                            5
    COM20                            4
    CTC2                             3
    CS22                             2
    CS21                             1
    CS20                             0
    RPDD                             7
    RPDC                             6
    RPDB                             5
    RPDA                             4
    ACME                             3
    PUD                              2
    PSR2                             1
    PSR10                            0
    WDTOE                            4
    WDE                              3
    WDP2                             2
    WDP1                             1
    WDP0                             0
    EERIE                            3
    EEMWE                            2
    EEWE                             1
    EERE                             0
    EEPE                             1
    PA7                              7
    PA6                              6
    PA5                              5
    PA4                              4
    PA3                              3
    PA2                              2
    PA1                              1
    PA0                              0
    DDA7                             7
    DDA6                             6
    DDA5                             5
    DDA4                             4
    DDA3                             3
    DDA2                             2
    DDA1                             1
    DDA0                             0
    PINA7                            7
    PINA6                            6
    PINA5                            5
    PINA4                            4
    PINA3                            3
    PINA2                            2
    PINA1                            1
    PINA0                            0
    PB7                              7
    PB6                              6
    PB5                              5
    PB4                              4
    PB3                              3
    PB2                              2
    PB1                              1
    PB0                              0
    DDB7                             7
    DDB6                             6
    DDB5                             5
    DDB4                             4
    DDB3                             3
    DDB2                             2
    DDB1                             1
    DDB0                             0
    PINB7                            7
    PINB6                            6
    PINB5                            5
    PINB4                            4
    PINB3                            3
    PINB2                            2
    PINB1                            1
    PINB0                            0
    PC7                              7
    PC6                              6
    PC5                              5
    PC4                              4
    PC3                              3
    PC2                              2
    PC1                              1
    PC0                              0
    DDC7                             7
    DDC6                             6
    DDC5                             5
    DDC4                             4
    DDC3                             3
    DDC2                             2
    DDC1                             1
    DDC0                             0
    PINC7                            7
    PINC6                            6
    PINC5                            5
    PINC4                            4
    PINC3                            3
    PINC2                            2
    PINC1                            1
    PINC0                            0
    PD7                              7
    PD6                              6
    PD5                              5
    PD4                              4
    PD3                              3
    PD2                              2
    PD1                              1PD0 =0
    DDD7                             7
    DDD6                             6
    DDD5                             5
    DDD4                             4
    DDD3                             3
    DDD2                             2
    DDD1                             1
    DDD0                             0
    PIND7                            7
    PIND6                            6
    PIND5                            5
    PIND4                            4
    PIND3                            3
    PIND2                            2
    PIND1                            1
    PIND0                            0
    RXC                              7
    TXC                              6
    UDRE                             5
    FE                               4
    OR                               3
    DOR                              3
    PE                               2
    U2X                              1
    MPCM                             0
    RXCIE                            7
    TXCIE                            6
    UDRIE                            5
    RXEN                             4
    TXEN                             3
    CHR9                             2
    UCSZ2                            2
    RXB8                             1
    TXB8                             0
    URSEL                            7
    UMSEL                            6
    UPM1                             5
    UPM0                             4
    USBS                             3
    UCSZ1                            2
    UCSZ0                            1
    UCPOL                            0
    SPIE                             7
    SPE                              6
    DORD                             5
    MSTR                             4
    CPOL                             3
    CPHA                             2
    SPR1                             1
    SPR0                             0
    SPIF                             7
    WCOL                             6
    SPI2X                            0
    ACD                              7
    ACBG                             6
    ACO                              5
    ACI                              4
    ACIE                             3
    ACIC                             2
    ACIS1                            1
    ACIS0                            0
    REFS1                            7
    REFS0                            6
    ADLAR                            5
    MUX4                             4
    MUX3                             3
    MUX2                             2
    MUX1                             1
    MUX0                             0
    ADEN                             7
    ADSC                             6
    ADFR                             5
    ADIF                             4
    ADIE                             3
    ADPS2                            2
    ADPS1                            1
    ADPS0                            0
    TWINT                            7
    TWEA                             6
    TWSTA                            5
    TWSTO                            4
    TWWC                             3
    TWEN                             2
    TWI_TST                          1
    TWIE                             0
    TWGCE                            0
    AS2                              3
    TCN2UB                           2
    OCR2UB                           1
    TCR2UB                           0
    _DATE_FORMAT                     0
    _DATE_SEPARATOR                  92
    _RTSCTS                          0
    _RTSCTS1                         0
    _CHIP                            23
    _RAMSIZE                         2048
    _ERAMSIZE                        1024
    _SIM                             0
    _XTAL                            8000000
    _BUILD                           11182
    _COMPILER                        90
    _HWMUL                           1
    _ROMSIZE                         32768
    _DOSFILEWRITE                    0
    _DOSDIRWRITE                     0
    RF12FREQ                         433.92
    RF12BAUD                         19200
    MAXCHAR                          8
    _GLCD_PORT                       &H15
    _GLCD_PORT_DDR                   &H14
    _GLCD_PORT_IN                    &H13
    _GLCD_PORTM                      &H1B


    --------------------------------------------------------------------------------
    Warnings:
    --------------------------------------------------------------------------------
    HWSTACK                          not used
    SWSTACK                          not used
    FRAME                            not used
    COMPARE0                         not used
    PWM                              not used
    COUNTER2                         not used
    COMPARE2                         not used
    ADCD                             not used
    PWM0                             not used
    TFID1                            not used
    TFID2                            not used
    WPE                              not used
    PMK                              not used
    PKK                              not used
    MIA                              not used
    MIZ                              not used
    PZI                              not used
    SPZ                              not used
    WPBSZ                            not used
    PMKBSZ                           not used
    PKKBSZ                           not used
    SAST                             not used
    PZIBSZ                           not used
    RST2                             not used
    TEXT                             not used
    T4                               not used
    T6                               not used


    Ich komm warscheinlich nur weiter, wenn ich mich ins Datenblatt einlese. Die INIT ist beim Beispiel Programm anders. Ich werd das mal zerpflücken. Hier mal ein Auszug aus dem Programmbeispiel.
    Ich werd mir das Datenblatt mal unter das Kopfkissen legen :-)



    Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 04.10.2007, 22:28


    Hier mal meine Stackwerte des Tranceivercodes

    Report : RF12TRANCEIVER
    Date : 10-04-2007
    Time : 22:14:23

    Compiler : BASCOM-AVR LIBRARY V 1.11.8.3,
    Processor : M8
    SRAM : 400 hex
    EEPROM : 200 hex
    ROMSIZE : 2000 hex


    ROMIMAGE : F2E hex -> Will fit into ROM
    ROMIMAGE : 3886 dec
    FLASH USED : 47 %
    BAUD : 19200 Baud
    XTAL : 9216000 Hz
    BAUD error : 0.%

    Stack start : 45F hex
    Stack size : 80 hex
    S-Stacksize : 28 hex
    S-Stackstart : 3E0 hex
    Framesize : 14 hex
    Framestart : 3CB hex
    Space left : 791 dec

    >Ich werd mir das Datenblatt mal unter das Kopfkissen legen

    schöne Träume



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 05.10.2007, 07:54


    Hallo

    heute morgen beim Frühstück:
    Entweder bin ich noch nicht wach, oder ich verstehe Basic nicht mehr.

    Code:
    Sub Rf12_init:
      Waitms 150
      Temp = Rf12_trans(&Hc0e0)
      Temp = Rf12_trans(&H80d7)
      Temp = Rf12_trans(&Hc2ab)
      Temp = Rf12_trans(&Hca81)
      Temp = Rf12_trans(&He000)
      Temp = Rf12_trans(&Hc800)
      Temp = Rf12_trans(&Hc4f7)
    End Sub


    Hier wird die Variable "Temp" mit den Kommandos gefüllt, jedoch jedes mal überschrieben. Sollte das nicht eher so aussehen:

    Code:
    Sub Rf12_init:
      Waitms 150
      Rf12_readys
      Temp = Rf12_trans(&Hc0e0)
      Rf12_readys
      Temp = Rf12_trans(&H80d7)
      Rf12_readys
      Temp = Rf12_trans(&Hc2ab)
      Rf12_readys
      Temp = Rf12_trans(&Hca81)
      Rf12_readys
      Temp = Rf12_trans(&He000)
      Rf12_readys
      Temp = Rf12_trans(&Hc800)
      Rf12_readys
      Temp = Rf12_trans(&Hc4f7)
    End Sub


    Wo werden die Register denn an das RFM12 übergeben?
    Bitte berichtigt mich, wenn das nicht so sein sollte.
    Ich les mal weiter im Datenblatt.

    Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 05.10.2007, 10:24


    Morgen Eisbeer,
    also das ist ne Funktion, die Werte für den RFM12 werden mit SPImove übertragen. Und die Adresse zurückgeliefert die bei INIT des RF12 anscheinend nicht gebraucht werden.

    Eine Funktion erwartet einen Rückgabe wert der tmp zugeordnet ist.



    Function Rf12_trans(byval Wert As Word) As Word
    Local Lowbyte As Byte
    Local Highbyte As Byte

    Lowbyte = Wert And 255
    Shift Wert , Right , 8
    Reset Spi_cs

    Highbyte = Spimove(wert)
    Lowbyte = Spimove(lowbyte)
    Set Spi_cs

    Temp = Highbyte * 256
    Temp = Temp + Lowbyte
    Rf12_trans = Temp
    End Function



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 05.10.2007, 12:03


    avrnix hat folgendes geschrieben: Morgen Eisbeer,
    also das ist ne Funktion, die Werte für den RFM12 werden mit SPImove übertragen. Und die Adresse zurückgeliefert die bei INIT des RF12 anscheinend nicht gebraucht werden.

    Eine Funktion erwartet einen Rückgabe wert der tmp zugeordnet ist.


    Ah, ok, mit Funktionen hatte ich noch nichts zu tun.

    Die Function wird also mit
    Temp = RF12_trans(...)
    aufgerufen.

    Ich hab beim durchlesen des Datenblattes ein paar Unterschiede in der Initialisierung der RFM12 Bausteine festgestellt.
    Ich weiss jetzt natürlich auch noch nicht, was die Feinheiten bewirken.

    Ich werd mir mal die Mühe machen, die Flussdiagramme von Hope und dem Beispielprogramm in Bascom nach dem Beispiel abzubilden.
    Der Hinweis mit der Funktion war wichtig. Ich hab mich schon gefragt, wie das vor sich geht.

    Hier steht noch:
    After RF12 initialization, open FIFO receive mode and wait nIRQ low, only then MCU can read received and stored in FIFO data. For next package receive, please reset FIFO.

    Kann es sein, dass im Script das "Disable FIFO fill (0xCA81) fehlt?

    Code:
    Sub Rf12_rxdata(byval Maxchar As Byte)
      Temp = Rf12_trans(&H82c8)
      Temp = Rf12_trans(&Hca81)
      Temp = Rf12_trans(&Hca83)
      For Count = 1 To Maxchar
        Rf12_ready
        Temp = Rf12_trans(&Hb000)
        Rfdata(count) = Temp
      Next Count
      Temp = Rf12_trans(&H8208)
    End Sub


    Hier wird:
    &Hca81 'disable FIFO
    &Hca83 'enable FIFO

    durchgeführt, aber das disable nach dem auslesen fehlt. Das kann der Grund sein, warum sich der Empfänger "aufhängt".
    Werd ich heute Abend gleich mal testen.

    Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 05.10.2007, 21:08


    Ich wieder.

    Programm läuft jetzt seit über einer Stunde durch. Kein Hänger mehr. Das vorherige wäre bei mir schon mehrfach stehen geblieben.

    Komisch, dass das bis jetzt bei niemanden aufgetaucht ist.
    In der Empfangsroutinge muss es also heißen:

    -------------------------------------------------------------------------------------
    Sub Rf12_rxdata(byval Maxchar As Byte)
    Temp = Rf12_trans(&H82c8)
    Temp = Rf12_trans(&Hca81)
    Temp = Rf12_trans(&Hca83)
    For Count = 1 To Maxchar
    Rf12_ready
    Temp = Rf12_trans(&Hb000)
    Rfdata(count) = Temp
    Next Count
    Temp = Rf12_trans(&Hca81)
    Temp = Rf12_trans(&H8208)
    End Sub
    -------------------------------------------------------------------------------------

    Laut Datenblatt ergänzte Zeile ist in Fett und Kursiv.

    Ich lasse das Modul jetzt mal die Nacht durchlaufen.

    Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 05.10.2007, 21:36


    Eigentlich machst Du jetzt noch mal ein reset
    warum nicht Code: === FIFO und RESET-Mode ===
    'Hex = ca & xx
    'Bit-Syntax: 11001010 | f3 | f2 | f1 | f0 | -unknow- (0) | al | ff | dr
    'f... = (FIFO interrupt Level)
    '-unknow- (0) = ??? (Standard = 0) (Auch im Datenblatt von IA4420 so beschrieben)
    'al = (FIFO Fill Condition) Legt den Wert fest, ab dem das Füllen des FIFOs beginnt. (0=Syncron / 1=Ständig). Bei nutzung des Syncronen Modus, werden erst dann Daten in den FIFO geschrieben, wenn eine definierte 16Bit Datenfolge empfangen wurde (Standard ist Hex: 2dd4).
    'ff = (FIFO Fill) Startet das einlesen der Empfangenen Daten in den FIFO Puffer. Wenn al (FIFO Fill Condition) auf Syncron steht, dann startet das Setzen dieses Bits die Syncronisation Bit Erkennung.
    'dr = (Sens Reset Mode) Wenn dieses Bit auf 1 steht, wir bei einer schwankung von 200mV auf der VCC (Spannungsversorgung des Chips) Leitung, ein System-Reset ausgelöst.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 06.10.2007, 19:36


    Wigbert hat folgendes geschrieben: Eigentlich machst Du jetzt noch mal ein reset
    warum nicht Code: === FIFO und RESET-Mode ===
    'Hex = ca & xx
    'Bit-Syntax: 11001010 | f3 | f2 | f1 | f0 | -unknow- (0) | al | ff | dr
    'f... = (FIFO interrupt Level)
    '-unknow- (0) = ??? (Standard = 0) (Auch im Datenblatt von IA4420 so beschrieben)
    'al = (FIFO Fill Condition) Legt den Wert fest, ab dem das Füllen des FIFOs beginnt. (0=Syncron / 1=Ständig). Bei nutzung des Syncronen Modus, werden erst dann Daten in den FIFO geschrieben, wenn eine definierte 16Bit Datenfolge empfangen wurde (Standard ist Hex: 2dd4).
    'ff = (FIFO Fill) Startet das einlesen der Empfangenen Daten in den FIFO Puffer. Wenn al (FIFO Fill Condition) auf Syncron steht, dann startet das Setzen dieses Bits die Syncronisation Bit Erkennung.
    'dr = (Sens Reset Mode) Wenn dieses Bit auf 1 steht, wir bei einer schwankung von 200mV auf der VCC (Spannungsversorgung des Chips) Leitung, ein System-Reset ausgelöst.



    Auf jeden Fall läuft der Code jetzt seit über 24 Stunden durch.
    Da ist noch was nicht sauber.

    Im Datenblatt steht noch:

    Note:
    For next package receive, please reset FIFO.

    Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 06.10.2007, 19:43


    Prima,
    ich nehme mal an niemand hat ein Langzeittest gemacht,
    hab in mein Code mit Interruptempfang mal nachgeschaut,
    da ist wohl glücklicherweise auch &Hca81 angehangen.

    Wäre wirklich noch Reset zu klären

    Wigbert



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 08.10.2007, 06:28


    Hallo zusammen

    Ich hätte heute Abend wieder Zeit, mich mit der Materie zu beschäftigen.

    Der Empfänger läuft jetzt soweit durch, wenn der Sender sendet.
    Nur wenn der Sender nicht sendet (also ausgeschaltet ist) läuft der Code auf dem Empfänger nicht weiter.
    Das ist ganz schlecht.

    Die Nacht war nicht toll (Das Datenblatt hat durchs Kopfkissen durchgedrckt :shock: )
    Spaß beiseite, Ich kenne das Datenblatt (programming guide) so langsam auswendig, aber die beiden Flussdiagramme sind echt der Hohn. Selten so schlechte Dokumentation gesehen.

    Wie stellt man es an, dass der Empfänger einen Interrupt ausgibt, sobald ein Datenpaket empfangen wurde. Sodass man dieses dann per FIFO auslesen kann.
    Erst wenn das Datenpacket da ist, soll sich der Controller darum kümmern.

    Was mir noch aufgefallen ist, im Beipspielscript sendet Hope 3 Dummy Byte hinterher. Bisher habe ich nur eines hinterhergesendet.

    RF12_SEND(0xAA);//DUMMY BYTE
    RF12_SEND(0xAA);//DUMMY BYTE
    RF12_SEND(0xAA);//DUMMY BYTE

    Grüße Eisbaeeer

    ------ Edit ---------------
    Ich hab noch die Doku von microcontroller.net gefunden. Werde mich da noch einlesen. Mal sehen, ob die Infos detaillierter sind.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 08.10.2007, 17:58


    Hi,
    Als ich bin der Meinung das vor dem Senden von Datenpaketen zu Anfang "sinnlose Byte" gesendet werden sollten. Damit das Ding
    in "Schwung" kommt. Hinterher komme ich mit ein zusätzliche Byte aus.

    Der Controller sollte den Empfänger initalisieren(QRV) und mit interrupts
    empfangen.Das zieht wohl mit sich , das irgendwelche anderen Aufgaben
    auch durch Interrupts realisiert werden müssen. Oder gleich nach
    Datenempfang. Das wiederum setzt ein Timing vorraus.

    Übrigens: ein Code von AVRNIX lief nicht, der gleiche Code(aber von meinen Rechner) funktionierte. Seltsam?

    Versuch doch mal Empfänger ausschalten und gleich wieder an?
    Temp = Rf12_trans(&Hca81)
    Temp = Rf12_trans(&Hca83) noch anhängen?



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 08.10.2007, 20:46


    Hallo

    Bisher hat also noch keiner ein Script laufen, das den Empfänger sozusagen "Einschaltet" und erst bei einem interrupt (voller String im FIFO) den FIFO ausließt?
    Das Ding muss das doch können oder bin ich da falsch?
    Mit der erweiterten bzw. übersetzten Doku von microcontroller.net komme ich im Moment auch nicht weiter.

    Warscheinlich sehe ich vor lauter Bäumen den Wald nicht. Ich bekomme es hin, dass mein Programm sauber durchläuft, wenn der Sender auch sendet. Tut er das aber nicht, bleibe ich im Programm bei:

    Call Rf12_rxdata(maxchar)

    hängen. Meine Timer laufen schön weiter, nur die Hauptschleife steht.

    @Wigbert:
    Hattest du mit dem Ffit_handler schon Erfolge?
    Im Moment Toggle ich damit nur ne LED, diese sollte aber doch irgend wann den FIFO auslesen, oder?

    Eisbaeeer

    ----------------- Edit --------------------------
    Irgend wie muss man doch jetzt den:

    Code:
    For Count = 1 To Maxchar
        Rf12_ready
        Temp = Rf12_trans(&Hb000)
        Rfdata(count) = Temp
      Next Count


    in den Ffit_handler bekommen.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 08.10.2007, 22:00


    Hallo Eisbeer,

    hab Dir per Mail eine Rar Datei geschickt.
    Also, ich hab mit dem Interruptepfang keine Probleme.

    Ich schalte den Empfänger sofort auf Empfang.
    Ér könnte dann in der Schleife was anderes machen.

    Die Aussage war vorhin nicht richtig.

    Also nochmal:
    Am Anfang der Schleife Empfang Initialisieren.
    Schleife abarbeiten
    Bei Interrupt String lesen + speichern.
    Wenn der gesamte String angekommen, auswerten.
    Das macht doch mein Slave die ganze Zeit.
    Lass doch einfach in der Schleife eine LED Toggeln,
    dann macht die Schleife schon was zusätzlich.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 10.10.2007, 12:41


    Also, neuen Anlauf:

    Zitat Datenblatt:

    Note: After RF12 initialization, open FIFO receive mode and wait nIRQ low,only than MCU can read received and store FIFO data. For next Package receive, please reset FIFO.



    Hier im Script steht folgendes:

    Code:
    'Einlesen der String durch Interrupt
    On Int1 Ffit_handler                         
    Enable Int1
    Config Int1 = Rising
    Enable Interrupts


    und

    Code:
    'Interrupt RFM12
    Ffit_handler:
    Toggle Portd.6
        ' Byte lesen
        Temp = Rf12_trans(&Hb000)
        Rfdata(count) = Temp

        If Count >= Maxchar Then
          ' Wenn maxchar Bytes gelesen wurden, Text ausgeben

          ' FIFO SYNC Erkennung wieder scharf machen
          Temp = Rf12_trans(&Hca81)
          Temp = Rf12_trans(&Hca83)

          ' und von vorne zählen
          Count = 1

        Else
          ' ansonsten nur zähler erhöhen
          Incr Count
        End If
    Return



    Grüße Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 14.10.2007, 20:38


    Also

    Ich kann machen, was ich will.
    Das ganze funktioniert bei mir nur, wenn der Sender auch sendet. Ziehe ich beim Sender den Stecker, bleibt meine Do Schleife stehen.

    Ist das bei Euch auch so?
    Läuft bei Euch die Do Schleife weiter, auch wenn der Sender keine Spannung hat?

    Bei mir soll die Do-Scheife auch weiterlaufen, wenn der Sender nichts sendet.

    Grüße Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 15.10.2007, 08:13


    Ok, ich bleibe hartnäckig.

    Ich habe hier: http://www.mikrocontroller.net/topic/73658 noch Hinweise gefunden, warum sich der RFM12 beim Empfang "aufhängen" könnte. Auch in der Interrupt-Schleife. Vor allem dann, wenn kein Signal oder schlechtes Signal anliegt.

    Zwischen dem:

    Code:
    Sub Rf12_rxdata(byval Maxchar As Byte)
      Temp = Rf12_trans(&H82c8)


    und

    Code:
      Temp = Rf12_trans(&Hca81)
      Temp = Rf12_trans(&Hca83)
      For Count = 1 To Maxchar
        Rf12_ready
        Temp = Rf12_trans(&Hb000)
        Rfdata(count) = Temp
      Next Count
      Temp = Rf12_trans(&Hca81)
      Temp = Rf12_trans(&Hca83)
      Temp = Rf12_trans(&H8208)
    End Sub


    sollte wohl noch das Statusregister abgefragt werden. Siehe hier:

    Code:
      RF_CMD(0x82C8);          //Receiver Chain einschalten, Synth aus.
     --->  RF_GetStatus();          // !!! Status holen, sonst klappt es nicht !!! <---
      EXT_INT_EDGE(1,H_TO_L);      // INT1 fallende Flanke
      clear_interrupt(INT_EXT1);    // Flag löschen

      RF_FIFO_State = 0;
      f_RX_FirstByte = 1;


      RF_CMD(0xCA81);    // Fifo Reset
      RF_CMD(0xCA83);


    Christian benutzt den nIRQ als Interrupt und hat in der Interrupt Routine noch ein Time-Out eingebaut.
    Laut ihm läuft der Empfänger so durch.
    Mal sehen, bis wann ich den Code angepasst habe und wieder berichten kann.

    Grüße Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 18.10.2007, 21:39


    GIbts was neues ? Wenn das Stimmt müssen ja zwei INT0+1 gequält werden oder nicht ? Hast du schon eine Lösung gefunden ?



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 19.10.2007, 06:29


    avrnix hat folgendes geschrieben: GIbts was neues ? Wenn das Stimmt müssen ja zwei INT0+1 gequält werden oder nicht ? Hast du schon eine Lösung gefunden ?

    Nein, in dem Beispiel wurde der nIRQ Ausgang des Moduls verwendet, um das FIFO auszulesen. Also entweder FFit oder nIRQ verwenden. Ich werde das auch mit nIRQ machen, da das FFit bei mir nicht wirklich gut funktioniert.

    Ich hatte bis jetzt keine Zeit mehr, weiter an dem Code zu arbeiten.
    Ich habe aber Kontakt mit jemanden, der für einen PIC die Interrupt Routine am laufen hat.
    Den Code hab ich bekommen, den muss ich jetzt von C in Bascom übernehmen.
    Und es ist tatsächlich so, dass man in der Interrupt Routine einen Timeout programmieren muss, sonst bleibt der Code stehen, wenn es Empfangsprobleme oder Unterbrechnungen gibt oder wenn gar kein Sender da ist.
    Eine wichtige Rolle spielen auch die Status Bits. Schade ist nur, dass das nirgends in den Datenblättern oder Programmierbeispielen vom Hersteller steht. Echt schlechte Datenblätter, böse.
    Wenn der Empfänger dann läuft, werde ich das eigentliche Thema hier angehen. Protokoll. Aber erst muss das ja mal laufen.

    Grüße Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 19.10.2007, 16:18


    Hallo,
    werde jetzt mal Wochenende mein Interrupt auf Schleifendurchlauf
    testen.
    @Eisbeer
    würdest Du den Code mir überlassen?
    Oder Herkunft?



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 19.10.2007, 18:23


    Hallo Leute,

    ich weiss nicht was ich falsch gemacht habe,
    also mein Code läuft bei mir nach abschalten des Senders munter weiter.
    Ich hab mal in der Hauptschleife
    Do
    .
    .
    incr A
    if A = 5000 then
    Toggle Portd.6
    A = 0
    End if
    .
    .
    Loop

    eingefügt.
    Das einzige was ich bemerkt habe: die Schleife ist vor dem 1. Interrupt
    schneller.Wird wohl durch die Kennung nach dem 1.Interrupt kommen

    Sorry wo kein Fehler da ist, ist der auch schwer zu finden.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 19.10.2007, 19:29


    Hallo Wigbert,

    Was passiert den wenn der Empfänger nicht da ist ? Läuft der Sender auch noch ?



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 19.10.2007, 19:49


    ja,
    ich lass ja ein Sender in Interwallen senden.
    Übrigens: nach einer Weile nach Senderabschaltung wird die
    Schleife des Empfangsteils wieder schneller und die Kennung
    ist gelöscht.Die Sub Kennung muss ich mir noch mal genauer ansehen.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 26.10.2007, 23:21


    Hallo zusammen

    Na dann haben wir ja schon mal einen Ansatz.
    Bei Wigbert läuft der Code durch, auch wenn gar kein Sender da ist.

    Inzwischen habe ich noch 2 weitere RFM12 rumliegen. Die zeigen genau die gleichen Macken.

    Ich habe noch eine Vermutung. Wigbert, hast du einen Mega32? Wenn ja, könntest du den Code auf dem Mega32 laufen lassen?

    Die ganzen Beispiele waren bis jetzt von Mega8 Prozessoren. Vieleicht liegt da der Hund begraben.

    Grüße Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 27.10.2007, 11:26


    Hallo Eisbeer,

    kannst mal dein Programm und Schaltung posten.

    Ich glaube nicht das es zwichen der Ansteuerung vom M8 und M32 unterschiede gibt. Vielleicht hast in der Interruptroutine vollgepackt ?
    Oder hast du nur den M8 Code auf den M32 Compiliert?



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 27.10.2007, 22:01


    avrnix hat folgendes geschrieben: Hallo Eisbeer,

    Oder hast du nur den M8 Code auf den M32 Compiliert?

    Oje, ich hab schon jeden Bascomcode im Internet auf dem M32 laufen gehabt.


    Code:

     '#######################################################################
    ' generated. Take care that the chip supports all fuse bytes.
    ' ### RF12-Test in Bascom
    ' ### Basiert auf Code von Benedikt K.
    ' ### Joachim Fossie Bär Reiter 04/2007
    ' ### Wigbert Picht
    ' ### Version 03.06.07
    ' ########################################################################


    $regfile = "m32def.dat"                                     'ATmega 32
    $crystal = 8000000                                          'Quarz: 8 MHz
    $baud = 19200
    $hwstack = 100                                              'hardware stack
    $swstack = 100                                              'software stack
    $framesize = 100                                            'frame space
    Baud = 19200


    '$PROG &HFF,&HFF,&HD9,&H00' generated. Take care that the chip supports all fuse bytes.

    Config Portd.5 = Output     'LED 2
    Config Portd.6 = Output     'LED 1

    Declare Sub Rf12_init
    Declare Function Rf12_trans(byval Wert As Word) As Word
    Declare Sub Rf12_setfreq(byval Freq As Single)
    Declare Sub Rf12_setbandwith(byval Bandwith As Byte , Byval Gain As Byte , Byval Drssi As Byte)
    Declare Sub Rf12_setbaud(byval Rfbaud As Long)
    Declare Sub Rf12_setpower(byval Outpower As Byte , Byval Fskmod As Byte)
    Declare Sub Rf12_ready
    Declare Sub Rf12_txdata(byval Maxchar As Byte)
    Declare Sub Rf12_rxdata(byval Maxchar As Byte)
    Declare Sub Empfangen
    Declare Sub Ausgabe
    Const Rf12freq = 433.92
    Const Rf12baud = 19200
    Const Maxchar = 10


    'config the SPI in master mode.The clock must be a quarter of the slave cpu
    ' Hier ggf. den SoftSPI reinmachen
    Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 128 , Noss = 1

    ' werden benötigt für rf12_ready
    ' werden benötigt für rf12_ready
    Spi_cs Alias Portb.4                                        ' SS-Pin
    Config Spi_cs = Output
    Spi_sdo Alias Pinb.6                                        ' MISO-PIN
    Set Spi_cs

    'init the spi pins
    Spiinit

    ' was so gebraucht wird
    Dim Count As Byte
    Dim Temp As Word
    Dim Rfdata(32) As Byte
    Dim Text As String * Maxchar At Rfdata Overlay
    Print "Init"
    Call Rf12_init                                              ' ein paar Register setzen (z.B. CLK auf 10MHz)
    Print "Set Frequenz"
    Call Rf12_setfreq(rf12freq)                                 '  Sende/Empfangsfrequenz auf 433,92MHz einstellen
    Print "Set Bandwith"
    Call Rf12_setbandwith(4 , 1 , 4)                            '  200kHz Bandbreite, -6dB Verstärkung, DRSSI threshold: -79dBm
    Print "Set Baudrate"
    Call Rf12_setbaud(rf12baud)                                 '  19200 baud
    Print "Set Power"
    Call Rf12_setpower(0 , 6)
                                       '  1mW Ausgangangsleistung, 120kHz Frequenzshift


    Enable Int1
    Config Int1 = Rising
    On Int1 Ffit_handler
    Enable Interrupts


    ' ########################################################################
    ' ###### Hauptproggi
    ' ########################################################################


    'Text ="Dies ist ein 433MHz Test !!!!!{013}{010}"

    ' Je nachdem ob Sender oder Empfänger die entsprechenden Zeilen aktivieren
    Empfangen
    Do
    Toggle Portd.5
    Waitms 100
    nop
    Loop
    End

                                                              'Ewigschleife
    Sub Empfangen
     ' Print "Empfange"
      Call Rf12_rxdata(maxchar)
      'For Count = 1 To Maxchar
        'Print Chr(rfdata(count)) ; "-";
      'Next Count
      'Print
      ' Print "Empfangsbereit"
    End Sub
    ' ########################################################################
    ' ###### Unterroutinen
    ' ########################################################################

    Sub Rf12_init:
      Waitms 150
      Temp = Rf12_trans(&Hc0e0)
      Temp = Rf12_trans(&H80d7)
      Temp = Rf12_trans(&Hc2ab)
      Temp = Rf12_trans(&Hca81)
      Temp = Rf12_trans(&He000)
      Temp = Rf12_trans(&Hc800)
      Temp = Rf12_trans(&Hc4f7)
    End Sub


    Sub Rf12_setfreq(byval Freq As Single)

      Freq = Freq - 430.00
      Temp = Freq / 0.0025
      If Temp <96> 3903 Then
        Temp = 3903
      End If
      Temp = Temp + &HA000
      Temp = Rf12_trans(temp)
    End Sub


    Sub Rf12_setbandwith(byval Bandwith As Byte , Byval Gain As Byte , Byval Drssi As Byte)
      Drssi = Drssi And 7
      Gain = Gain And 3
      Temp = Bandwith And 7
      Shift Temp , Left , 2
      Temp = Temp + Gain
      Shift Temp , Left , 3
      Temp = Temp + Drssi
      Temp = Temp + &H9400
      Temp = Rf12_trans(temp)
    End Sub


    Sub Rf12_setbaud(byval Rfbaud As Long )
      Local Ltemp As Long

      If Rfbaud < 663 Then Exit Sub

      If Rfbaud < 5400 Then
        Temp = 43104 / Rfbaud
        Temp = Temp + &HC680
      Else
        Ltemp = 344828 / Rfbaud
        Temp = Ltemp
        Temp = Temp + &HC600
      End If
      Decr Temp
      Temp = Rf12_trans(temp)
    End Sub


    Sub Rf12_setpower(byval Outpower As Byte , Byval Fskmod As Byte)
      Outpower = Outpower And 7
      Temp = Fskmod And 15
      Shift Temp , Left , 4
      Temp = Temp + Outpower
      Temp = Temp + &H9800
      Temp = Rf12_trans(temp)
    End Sub





    Sub Rf12_rxdata(byval Maxchar As Byte)
      Temp = Rf12_trans(&H82c8)
      Temp = Rf12_trans(&Hca81)
      Temp = Rf12_trans(&Hca83)
      'For Count = 1 To Maxchar
        Rf12_ready
        'Temp = Rf12_trans(&Hb000)
        'Rfdata(count) = Temp
      'Next Count
      Temp = Rf12_trans(&H8208)
    End Sub



    Function Rf12_trans(byval Wert As Word) As Word
      Local Lowbyte As Byte
      Local Highbyte As Byte

      Lowbyte = Wert And 255
      Shift Wert , Right , 8
      Reset Spi_cs

      Highbyte = Spimove(wert)
      Lowbyte = Spimove(lowbyte)
      Set Spi_cs

      Temp = Highbyte * 256
      Temp = Temp + Lowbyte
      Rf12_trans = Temp
    End Function



    Sub Rf12_ready
      Reset Spi_cs
      nop
      While Spi_sdo = 0


       Wend

    End Sub

    Ffit_handler:
    Toggle Portd.6
        ' Byte lesen
        Temp = Rf12_trans(&Hb000)
        Rfdata(count) = Temp
         'Momentan Einfach Feste Länge Lesen , Stx Etx Oder Sowas Ist Aber
        ' Hier Auch Kein Problem...
        If Count >= Maxchar Then
          ' Wenn 32 Bytes gelesen wurden, Text ausgeben
          For Count = 1 To Maxchar
            Print Chr(rfdata(count)) ; "-";
          Next Count

          ' FIFO SYNC Erkennung wieder scharf machen
          Temp = Rf12_trans(&Hca81)
          Temp = Rf12_trans(&Hca83)

          ' und von vorne zählen
          Count = 1

        Else
          ' ansonsten nur zähler erhöhen
          Incr Count
        End If

    Return


    Der hier läuft z.B. auch nicht. Einzig 4 Ports sind angepasst. 2 davon sind für den RFM12 (spi_cs und spi_sdo) und 2 sind meine Schleifenkontrolle LED1 und LED2 :
    Code:
    Spi_cs Alias Portb.4                                        ' SS-Pin
    Config Spi_cs = Output
    Spi_sdo Alias Pinb.6                                        ' MISO-PIN
    Set Spi_cs


    Das Statusregister sollte auch tunlichst ausgelesen werden. Ich habe festgestellt, dass der Code noch schneller läuft, wenn das Statusregister mit &H0000 abgefragt wird.

    Die Ursache, warum der Code bei mir stehen bleibt, ist glaube ich die RF12_ready Routine. Für was genau ist der spi_sdo ?
    Wenn ich da eine Timeout Routine integriere, läuft der Code weiter, aber sehr sehr langsam.

    Grüße Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 27.10.2007, 22:11


    avrnix hat folgendes geschrieben: Hallo Eisbeer,

    kannst mal dein Programm und Schaltung posten.


    Oh, hab ich vergessen zu sagen. Ich benutze das Eval Board von Pollin. FSK mit 10k an +5V und Optokoppler ausgebaut und mit Jumper gebrückt.

    Ich komme hier wirklich nicht weiter. Ich habe keine Idee mehr.
    Ich kann einem von euch auch mal die ganze Hardware zuschicken. Ist eben das modifizierte Eval Board, ein Display 128x64 und Lochrasterplatine. Die Quellcodes kann ich auch dazulegen, was das Display und RFM angeht.
    Porto würde ich natürlich übernehmen.

    Wahrscheinlich seh ich einfach den Fehler nicht mehr. Hab schon zu lange davor gesessen. Den Code kann ich schon bald auswendig. Also wenn jemand Lust hat, sich das ganze mal anzuschauen, einfach melden.

    Grüße Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 28.10.2007, 12:42


    Hallo Eisbeer,
    also irgendwann erfolgt bei mir auch keine Ausgabe mehr.
    Der Code des Controllers lauft aber munter weiter. Leider hab ich
    versäumt ob nach 3 Tage der Interuupt noch vom RFM12 ordnungsgemäss
    durchgeführt wird. Also alles noch mal.
    Ich denke aber ich hab ein Stackproblem.
    Um das nun definitiv festzustellen, muss ich mir was zum
    Debuggen zusammenschrauben, oder Logikanalyser ansetzen oder beides.
    Wir drehen uns sonst beide im Kreis, richtige Aussagen kann man sonst
    wohl kaum noch treffen.

    Also auch bei mir:Bücher unter den Kopfkissen legen,
    mein Messgerätepark erweitern.......

    den Code auf den m32 nicht richtig zum Laufen zu bringen,
    der Fehler wäre wohl für uns beide zu einfach.


    Ich komm da sicher noch hinter, was faul ist.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 28.10.2007, 12:45


    Ich noch mal,
    im Interrupt das Toggeln, könnte das zu Zeitproblemen führen?
    nicht das da was verschlafen wird



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Kurzschluss - 06.11.2007, 22:05


    Hallo zusammen

    bin neu hier und hab mir vor zwei Wochen das Pollinboard geholt
    und einige RFM12 dazu
    Ich will meine Hausautomtion damit umrüsten

    Habe die Routinen für den RFM12 in ein include gepackt, damit man
    das als Treiber in beliebige Projekte einlinken kann...

    In die RF12_ready Routine habe ich ein timeout reingebaut damit das System
    nicht hängenbleibt...

    Für den Empfang nutze ich Interrupt am FFIT-Pin

    Als Protokollstack habe ich begonnen das SNAP-Protokoll umzusetzen

    aktuell mit Datenbytelänge 0..32 und crc8 mit je 1Byte Adressen für Sender und Empfänger

    werde die Quellen hier reinstellen...
    gibts ne Möglichkeit direkt die *.bas Files hochzuladen? :?: :?:

    Hier das Treiberinculde:
    Code:
    '#######################################
    'inculde file for RF12-device
    'info about RF12 Transceiver:       www.hoprf.com or www.integration.com
    'info about using RF12 with Bascom: www.comwebnet.de
    'Version: v0.01
    'Author:  Kurzschluss
    '#######################################
    '------[Inculde-Datei: Treiber für RF12 Chip]-----------------------------
    $nocompile

    Declare Sub Rf12_init()
    Declare Sub Rf12_setfreq(byval Freq As Single)
    Declare Sub Rf12_setbandwith(byval Bandwith As Byte , Byval Gain As Byte , Byval Drssi As Byte)
    Declare Sub Rf12_setbaud(byval Rfbaud As Long)
    Declare Sub Rf12_setpower(byval Outpower As Byte , Byval Fskmod As Byte)
    Declare Sub Rf12_ready
    Declare Sub Rf12_txdata(byval TXlen As Byte)
    Declare Sub Rf12_rxdata(byval Maxchar As Byte)
    Declare Function Rf12_trans(byval Wert As Word) As Word

    Dim RF12_timeout as Word
    Dim rf12_err as Byte


    '------[Sende Daten]-------------------
    Sub Rf12_txdata(byval TXlen As Byte)
      Temp = Rf12_trans(&H8238) : Rf12_ready   'Power CMD: synt.& PLL on
      Temp = Rf12_trans(&Hb8aa) : Rf12_ready   'Preamble
      Temp = Rf12_trans(&Hb8aa) : Rf12_ready   'Preamble
      Temp = Rf12_trans(&Hb8aa) : Rf12_ready   'Preamble in FIFO schieben
      Temp = Rf12_trans(&Hb82d) : Rf12_ready   'Startzeichen: 2D für den Empfänger
      Temp = Rf12_trans(&Hb8d4) : Rf12_ready   'Startzeichen: D4 für den Empfänger
      For lv = 1 To TXlen
          Rf12_ready
          Temp = &HB800 + RF12_data(lv)        'Sende Nutzdaten
          Temp = Rf12_trans(temp)
          Next lv
      Temp = Rf12_trans(&Hb8aa) : Rf12_ready   'Dummybyte nachschieben
      Temp = Rf12_trans(&H8208)                'Power CMD: synt.& PLL off, Quarz-clk läuft weiter
    End Sub
    'INFO:  === FIFO und RESET-Mode ===
    'Hex = ca & xx
    'Bit-Syntax: 11001010 | f3 | f2 | f1 | f0 | -unknow- (0) | al | ff | dr
    'f... = (FIFO interrupt Level)
    '-unknow- (0) = ??? (Standard = 0) (Auch im Datenblatt von IA4420 so beschrieben)
    'al = (FIFO Fill Condition) Legt den Wert fest, ab dem das Füllen des FIFOs beginnt. (0=Syncron / 1=Ständig). Bei nutzung des Syncronen Modus, werden erst dann Daten in den FIFO geschrieben, wenn eine definierte 16Bit Datenfolge empfangen wurde (Standard ist Hex: 2dd4).
    'ff = (FIFO Fill) Startet das einlesen der Empfangenen Daten in den FIFO Puffer. Wenn al (FIFO Fill Condition) auf Syncron steht, dann startet das Setzen dieses Bits die Syncronisation Bit Erkennung.
    'dr = (Sens Reset Mode) Wenn dieses Bit auf 1 steht, wir bei einer schwankung von 200mV auf der VCC (Spannungsversorgung des Chips) Leitung, ein System-Reset ausgelöst.


    '------[Empfange Daten]---------------
    Sub Rf12_rxdata(byval Maxchar As Byte)
      Temp = Rf12_trans(&H82c8)           'Power CMD: Empfänger an, Quarz-clk läuft weiter
      Temp = Rf12_trans(&Hca81)           'FIFO&Reset CMD: sensitiver Reset aus (Brownout)
      Temp = Rf12_trans(&Hca83)           'FIFO&Reset CMD: Synchroner Zeichenemfang (warte auf Startzeichen: 2DD4)
      For lv = 1 To Maxchar
          Rf12_ready :
          Temp = Rf12_trans(&Hb000)        'lese 1Byte vom FIFO
          RF12_data(lv)  = Temp            'Nutzdaten einlesen
          Next lv
      'Temp = Rf12_trans(&H8208)           'Power CMD: Empfänger aus, Quarz-clk läuft weiter
    End Sub


    '------[SPI Busroutinen]----------------
    Function Rf12_trans(byval Wert As Word) As Word
      Local Lowbyte As Byte
      Local Highbyte As Byte

      Lowbyte = low (Wert) : Highbyte = high(wert)
      Reset Spi_cs
      Highbyte = Spimove(Highbyte) : Lowbyte  = Spimove(lowbyte)
      Set Spi_cs
      Temp = MAKEINT(Lowbyte , Highbyte)
      'print "SPI receive: ";hex(temp)            'debug
      Rf12_trans = Temp
    End Function


    '------[Busy check]-----------------------
    Sub Rf12_ready
      RF12_timeout=50000
      Reset Spi_cs                                'SS-Pin--> select RF12
      While Spi_sdo = 0                           'MISO muss von RF12 auf high gehen  'In der Sim. auf 1 stellen
         if RF12_timeout>0 then                   'Timeout Loop
            decr RF12_timeout
            else
            rf12_err=1                             'Flag setzen
            exit WHILE                             'Timeout --> Abbruch kein ready vom RF12
            end IF
         waitus 20
      Wend                                         'Warten bis senden bzw. empfangen fertig
    End Sub


    '------[INIT]-------------------------------------
    Sub Rf12_init()
      Waitms 150
      Temp = Rf12_trans(&Hc0e0) ': print Temp     'C0E0 -Clock Output 10MHz
      Temp = Rf12_trans(&H80d7) ': print Temp     '80D7 -Datareg used,FIFO enabled,433MHz,CL=15pF
      Temp = Rf12_trans(&Hc2ab) ': print Temp     'C2AB -Datafilter:Autolock-slow mode-Digital Filter,f1=1;f0=1
      Temp = Rf12_trans(&Hca81) ': print Temp     'CA81 -FIFO/ResetMode  (Brownoutdektion ausgeschaltet)
      Temp = Rf12_trans(&He000) ': print Temp     'E000 -WakeUP Timer
      Temp = Rf12_trans(&Hc800) ': print Temp     'C800 -LowDuty Cycle
      Temp = Rf12_trans(&Hc4f7) ': print Temp     'C4F7 -AFC-command -eingeschaltet
    End Sub


    '------[Setze TrägerFrequenz]---------------------
    Sub Rf12_setfreq(byval Freq As Single)
      Freq = Freq - 430.00
      Temp = Freq / 0.0025
      If Temp <96> 3903 Then
         Temp = 3903
         End If
      Temp = Temp + &HA000
      Temp = Rf12_trans(temp)                     'Axxx - Frequenzsetting (Kanal Einstellung)
    End Sub


    '------[Setze Bandweite]---------------------------
    Sub Rf12_setbandwith(byval Bandwith As Byte , Byval Gain As Byte , Byval Drssi As Byte)
      Drssi = Drssi And 7
      Gain  = Gain And 3
      Temp  = Bandwith And 7
      Shift Temp , Left , 2
      Temp  = Temp + Gain
      Shift Temp , Left , 3
      Temp  = Temp + Drssi
      Temp  = Temp + &H9400
      Temp  = Rf12_trans(temp)                    'Revicer Control Command (Pin20 VDI output)
    End Sub


    '------[Einstellung der Baudrate]--------------------
    Sub Rf12_setbaud(byval Rfbaud As Long )
      Local Ltemp As Long
      If Rfbaud < 663 Then Exit Sub
      If Rfbaud < 5400 Then
         Temp  = 43104 / Rfbaud
         Temp  = Temp + &HC680
         Else
         Ltemp = 344828 / Rfbaud
         Temp  = Ltemp
         Temp  = Temp + &HC600
         End If
      Decr Temp
      Temp = Rf12_trans(temp)
    End Sub


    '------[Sendeleistung einstelllen]-----------------
    Sub Rf12_setpower(byval Outpower As Byte , Byval Fskmod As Byte)
      Outpower = Outpower And 7
      Temp = Fskmod And 15
      Shift Temp , Left , 4
      Temp = Temp + Outpower
      Temp = Temp + &H9800
      Temp = Rf12_trans(temp)
    End Sub




    damit laufen meine mainloops immer durch ---> kein hängenbleiben

    Hat jemand Interesse an den Snap-Protokoll mitzumachen?
    Bin für Hinweise und Tips dankbar...

    Grüsse
    Kurzschluss



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Kurzschluss - 06.11.2007, 22:14


    Hi

    hier noch ein testsender:

    Code:
    '#######################################
    'Testsender SNAP-Protokoll über RF12
    'info about SNAP-Protokoll:         www.hth.com/snap
    'info about RF12 Transceiver:       www.hoprf.com or www.integration.com
    'info about using RF12 with Bascom: www.comwebnet.de
    'Version: v1.00
    'Author:  Kurzschluss
    '#######################################
    ' The packet structure is defined in the received packets first two
    ' bytes (HDB2 and HDB1). The following packet structure is used.
    '
    ' DD=01     - 1 Byte destination address
    ' SS=01     - 1 Byte source address
    ' PP=00     - No protocol specific flags
    ' AA=01     - Acknowledge is required
    ' D=0       - No Command Mode
    ' EEE=100   - 16-bit CRC-CCITT
    ' NNNN=0010 - 2 Byte data
    '
    ' Overview of header definition bytes (HDB2 and HDB1)
    '
    '         HDB2             HDB1
    ' +-----------------+-----------------+
    ' | D D S S P P A A | D E E E N N N N |
    ' +-----------------+-----------------+
    '
    'only  TX-Test!!!!!!!!!!!!!!!!!!
    $regfile    = "m8def.dat"
    '$regfile   = "m32def.dat"
    $hwstack    = 128
    $swstack    = 128
    $framesize  = 64
    '$PROG &HFF,&HFF,&H99,&H00   ' für Mega32
    $PROG &HFF,&HE4,&HD9,&H00    ' Mega8 mit internen 8MHz
    $crystal =  8000000
    '$crystal = 10000000                                         '
    $baud = 19200
    Const Rf12freq = 433.92   'Kanal-Einstellung
    Const Rf12baud = 19200    'Baudrate
    Const MyAdress = 10       'NodeAdress
    Const SNAP_SYNC= &H54     'Synczeichen SNAP-Protokoll
    'RF-Variablen
    Dim lv As Byte
    Dim Temp As Word
    Dim RF12_data(40) As Byte , RF12_S As String * 40 At RF12_data Overlay
    Dim ByteAnzahl    As Byte , Framelength as Byte ,crclength as Byte 'Anzahl Sendebytes
    'Uart-Variablen
    Dim RX_Data as Byte,   N as Byte, Rxd_ready as Bit
    Dim Buffer(40) as Byte,s_buffer as String * 40 At buffer overlay

    '--------------[Hardwaresetup für Pollin Funkboard]-----------------------------------
    'PortD.3-->INT1 an FFIT --Interrupt(High) wenn FiFO-Buffer voll (ef-Bit set)
    LED1 Alias Portd.5
    LED2 Alias Portd.6
    Config Portd.5 = Output
    Config Portd.6 = Output

    'config the SPI in master mode.The clock must be a quarter of the slave cpu
    Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 128 , Noss = 1
    ' werden benötigt für rf12_ready
    ' Achtung je nach µC Port/Pins anpassen !!!
    ' M8:
    Spi_cs Alias Portb.2 :   DDRB.2=1
    Spi_sdo Alias Pinb.4      ' SS-Pin
    'M32:
    'Spi_cs  Alias Portb.4 :  DDRB.4=1
    'Spi_sdo Alias Pinb.6
    Set Spi_cs
    Spiinit               'init the spi pins
    goto Startup
    $include "inc_RF12-Treiber.bas"    'Treiber einbinden


    Startup:

    On Urxc RXD_ISR                                              'Interrupt Empfange String von RXD
    'Enable Urxc                                                 'Einschalten
    'Enable Interrupts                                           'Zulassen

    set LED2
    Print "Init"
    Call Rf12_init                                              ' ein paar Register setzen (z.B. CLK auf 10MHz)
    Call Rf12_setfreq(rf12freq)                                 '  Sende/Empfangsfrequenz auf 433,92MHz einstellen
    Call Rf12_setbandwith(4 , 1 , 4)                            '  200kHz Bandbreite, -6dB Verstärkung, DRSSI threshold: -79dBm
    Call Rf12_setbaud(rf12baud)                                 '  19200 baud
    Call Rf12_setpower(0 , 6)                                   '  1mW Ausgangangsleistung, 120kHz Frequenzshift
    reset LED2
    for lv=1 to 40
         RF12_data(lv)=8 'lv+20        'Testdaten füllen
         next
    'TXS =""

    '--------[mainloop]------------------------------------------------------
    Do
      'if Rxd_ready=1 then.....     'evtl....Daten von Uart(PC) in RFTX schieben
      ByteAnzahl= rnd(10)           'zum Test zufällige Nutzdatenlänge 0...32Byte
      rf12_err=0                                                'Error Flag löschen
      gosub SendSnapFrame
      if rf12_err=1 then
         print "Timeout beim Senden aufgetreten"                'DebugInfo: Problem beim senden
         end IF
      wait  5
    Loop

    End 'end program


    '------[Send Frame over RF12]---------------------------------
    SendSnapFrame:
    'Header aufbereiten (SNAP)
      RF12_data(1) = SNAP_SYNC
      RF12_data(2) = &H50                         'HDB2  1Byte-Adressen
      RF12_data(3) = ByteAnzahl                   'HDB1  0..32DatenByteInfo
      RF12_data(4) = 20                           'Zieladresse
      RF12_data(5) = MyAdress                     'Senderadresse
      'ab 6.Stelle <0>10 Then Rxd_ready = 1           ' } -- Wenn Endekennung eingetroffen --> CMD-Frameende eingetroffen
     Buffer(n) = Rx_data                                   'Byte in Buffer
    Return




    mfg
    Kurzschluss



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Kurzschluss - 06.11.2007, 22:34


    Noch mal ich,
    da ich keine Ahnung hab wie ich hier ein file direkt zu Download reinstellen kann...

    hier noch der Emffänger mit Mega32 auf Pollinboard, Interrupt gesteuert

    Code:

    '#######################################
    'Testsender SNAP-Protokoll über RF12
    'info about SNAP-Protokoll:         www.hth.com/snap
    'info about RF12 Transceiver:       www.hoprf.com or www.integration.com
    'info about using RF12 with Bascom: www.comwebnet.de
    'Version: v1.01
    'Author:  Kurzschluss
    '#######################################
    ' The packet structure is defined in the received packets first two
    ' bytes (HDB2 and HDB1). The following packet structure is used.
    '
    ' DD=01     - 1 Byte destination address
    ' SS=01     - 1 Byte source address
    ' PP=00     - No protocol specific flags
    ' AA=01     - Acknowledge is required
    ' D=0       - No Command Mode
    ' EEE=100   - 16-bit CRC-CCITT
    ' NNNN=0010 - 2 Byte data
    '
    ' Overview of header definition bytes (HDB2 and HDB1)
    '
    '         HDB2             HDB1
    ' +-----------------+-----------------+
    ' | D D S S P P A A | D E E E N N N N |
    ' +-----------------+-----------------+
    '$regfile   = "m8def.dat"
    $regfile   = "m32def.dat"
    $hwstack   = 128
    $swstack   = 128
    $framesize = 128
    $PROG &HFF,&HFF,&H99,&H00   ' für Mega32
    $crystal =  8000000
    '$crystal = 10000000                                         '
    $baud = 19200
    Baud  = 19200

    Const Rf12freq = 433.92   'Kanal-Einstellung
    Const Rf12baud = 19200    'Baudrate
    Const MyAdress = 20       'Nodeadresse vom Teilnehmer
    Const SNAP_SYNC= &H54     'Synczeichen SNAP-Protokoll
    Const Maxchar  = 32

    Dim lv As Byte
    Dim Temp As Word
    Dim RF12_data (40) As Byte  ,RF12_S As String * Maxchar At RF12_data Overlay
    Dim RF_RXD as Bit, RF_SYNC as Bit
    Dim NDB  as Byte , Framelength as  Byte ,crc as Byte
    Dim ByteAnzahl  as Byte 'Anzahl Sendebytes
    Dim S As String * 10
    SYNC Alias RF12_data(1)
    HDB1 Alias RF12_data(2)
    HDB2 Alias RF12_data(3)
    DAB1 Alias RF12_data(4)
    SAB1 Alias RF12_data(5)

    '----------[Hardwaresetup für Pollin Funkboard]---------------------------------------------
    'PortD.3-->INT1 an FFIT --Interrupt(High) wenn FiFO-Buffer voll (ef-Bit set)
    LED1 Alias Portd.6   :  Config Portd.6 = Output
    LED2 Alias Portd.5   :  Config Portd.5 = Output
    'config the SPI in master mode.The clock must be a quarter of the slave cpu
    'Hier ggf. den SoftSPI reinmachen
    Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 128 , Noss = 1
    ' werden benötigt für rf12_ready
    ' Achtung je nach µC anpassen !!!
    ' für M8:  Spi_cs Alias Portb.2 :   Spi_sdo Alias Pinb.4          ' SS-Pin
    'M32:
    Spi_cs  Alias Portb.4 :  DDRB.4=1      'Config Spi_cs = Output  chipselect
    Spi_sdo Alias Pinb.6                   ' MISO-PIN
    Set Spi_cs
    Spiinit   'init the spi pins
    goto Startup

    $include "inc_RF12-Treiber.bas"        'RF12 Treiber einbinden

    '--------[Initialisierung]------------------------------------------------
    Startup:
    Config Int1 = Rising
    On Int1 FFIT_ISR:
    On Urxc RXD_ISR:                                          'Interrupt Empfange String von RXD
    Enable Urxc                                               'Einschalten
    Enable Interrupts                                           'Zulassen

    set LED2
    Print "Init RF12 ..."
    Call Rf12_init                                              '  ein paar Register setzen (z.B. CLK auf 10MHz)
    Call Rf12_setfreq(rf12freq)                                 '  Sende/Empfangsfrequenz auf 433,92MHz einstellen
    Call Rf12_setbandwith(4 , 1 , 4)                            '  200kHz Bandbreite, -6dB Verstärkung, DRSSI threshold: -79dBm
    Call Rf12_setbaud(rf12baud)                                 '  19200 baud
    Call Rf12_setpower(0 , 6)                                   '  1mW Ausgangangsleistung, 120kHz Frequenzshift
    Print "Init RF12 Done"
    reset LED2

    '----------[Mainloop]------------------------------------------------------
    RF12_S =""
    gosub RF12_RXD_ON

    Do

      if  RF_RXD=1 then
          print "RX ready, Framelength: "; Framelength
          gosub Framehandler
          gosub RF12_RXD_ON
          end IF
     'do anything....



      print "neuer Mainloop"
      wait 1
    Loop
    End

    '----------[Frameverarbeitung SNAP-Protokoll]------------------------------------
    Framehandler:
     set LED1
     Print "Frame: ";                                                   'Debugausgabe
     For lv = 1 To Framelength
          Print hex(RF12_data(lv)) ;" ";
          Next lv
     print
     if SYNC= SNAP_SYNC then                                              'sync.Zeichen IO?
        if HDB2= &H50 then                                                '1Byte Adressierung?
           'if HDB2= NDB then                                             '0..32 Datenbyte
               if DAB1= MyAdress then                                     'Adresse prüfen
                  print "Das war für mich!...von Nr.:";RF12_data(5)       'Datenverarbeitung
                  swap DAB1,SAB1                                          'Adressen umdrehen für Rücksenden
                  crc=Framelength-2 'nur temporär Länge für crc-Check
                  crc=crc8(RF12_data(2),crc)
                  if crc=RF12_data(Framelength) then                            'CRC OK?
                     print "CRC OK! => ";crc
                     ' Send ACK (i.e tell master that packet was OK)
                     ' Set ACKs bit in HDB2 (xxxxxx10)
                     Hdb2 = Hdb2 Or &B00000010
                     Hdb2 = Hdb2 And &B11111110
                     'do ...
                     gosub SENDEN                                    'Anwortframe senden--> nur als Slave
                     gosub CMD_HANDLER
                     'RF12_data(2 <ackno>an 1 Stelle
        RF_SYNC=1
        lv=1
        end IF
     RF12_data(lv) = Temp                          'Empfangsbyte in Buffer legen
     if lv=3 then                                  'ermitteln der Anzahl Datenbytes (SNAP)
        NDB =  Temp and &H0F                       'unteres Nipple von HDB1 enthält Datenlänge
        select case NDB                            '6Byte<=sync+HDB2+HDB1+DAB+SAB+CRC
               case 0 to 8: Framelength=6+NDB      '6-14 (0--8 Datebyte)
               case 9     : Framelength=6+16       '22   (16 Datenbyte)
               case 10    : Framelength=6+32       '38   (32 Datenbyte)
               end SELECT
        end IF
     If lv>=Framelength Then                       'alles eingetroffen
        RF_RXD=1                                   'Flag setzen und Empfänger abschalten
        Temp = Rf12_trans(&H8208)                  'Power_CMD: Empfänger aus, Quarz-clk läuft weiter
        disable INT1
        End If
     incr lv                                       'Zeiger incr
    Return



    bitte um Hinweise und Ideen......

    die Umsetzung vom SNAP-Stack ist noch in Arbeit
    unteranderem habe ich ne keine komplette ACK / NACK Verarbeitung drin
    ... wenn der Slave nack zurücksendet müsste der Master die Übertragung wiederholen evtl. mit variablen Wartezeiten usw....


    mfg
    Kurzschluss



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 07.11.2007, 00:24


    Hallo Kurzschluss,

    danke für das Programm, leider kannst du nicht direkt keine BAS als Datei einstellen. Wie du es gemacht hast ist es OK.

    Was ist ein SNAP Protokoll und welche Vorteile hat das ( bzw. Eigenschaften) , außer einer CRC8 ?

    Wenn du willst kannst das als Projekt auf meiner HP veröffentlichen. Gilt auch für Eisbeer.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 07.11.2007, 08:52


    Hi Kurzschluss

    Na da hast du dir ja richtig Arbeit gemacht. Respekt.
    Das werde ich natürlich gleich ausprobieren, sobald ich mal dazukomme.

    @arvnix
    Danke für das Angebot.

    Grüße Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    stevensen - 07.11.2007, 10:48


    Hi,
    viel Sammelung und Schreibarbeit, aber die wirklich wichtigen und kritischen Sachen fehlen. Z.b. die Sache mit den FFit Interrupt Handling hätte mich sehr interessiert.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 07.11.2007, 12:20


    Kurzschluss hat folgendes geschrieben:
    werde die Quellen hier reinstellen...
    gibts ne Möglichkeit direkt die *.bas Files hochzuladen? :?: :?:

    Grüsse
    Kurzschluss

    Kannst mir die Datei zumailen, dann veröffentliche ich hier einen Link, wo man das ganze dann runterladen kann.
    Oder arvnix macht auf seiner Seite gleich ne neue Rubrik.

    Die INT Routine würde mich auch interessieren. Wieviel Code hast du in der Routine abgelegt? Denn laut dem "include" wird das nicht als Interrupt abgehandelt, sondern im Sub.

    Grüße Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 07.11.2007, 12:35


    Hi Kurzschluss,

    Respekt !!

    Steckt viel Arbeit drin.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Kurzschluss - 07.11.2007, 23:31


    Hallo zusammen

    hab bemerkt das der Quellcode vom Empfänger nur teilweise übernohmen wurde..hab aber keine Ahnung warum???

    d.h. da fehlen ganze Abschnitte u.a. die Interruptroutine

    Ich werd die files nochmal per mail senden.
    @ avrnix: brauche nur ne mail Adresse vom dir bzw. Eisbär

    ...und klar du kannst das auf deiner Homepage veröffentlichen


    Zu Frage was das SNAP -Protokoll ist:
    Scaleable Node Address Protocol

    Bitte auf www.hth.com/snap --> snap.pdf angucken

    Das Protokoll hat der Hersteller orginal für sein Powerlinemodem entwickelt.
    Es ist aber frei verfügbar und ich denke man kann damit eine Netzstruktur zwischen mehreren Transceiver aufbaun.
    Vorteil: man muss nicht alles noch mal neu erfinden
    (Adressierung,ACK/NAK,Datenlänge usw.)

    Habe leider nur begrenzt Zeit an der Sache zu arbeiten
    aber wen erzähl ich das.....der notwendige Broterwerb :?

    mfg
    Kurzschluss



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Kurzschluss - 08.11.2007, 00:04


    Hi
    hier nochmal als reiner Text:

    '#######################################
    'Testempfänger SNAP-Protokoll über RF12
    'info about SNAP-Protokoll: www.hth.com/snap
    'info about RF12 Transceiver: www.hoprf.com or www.integration.com
    'info about using RF12 with Bascom: www.comwebnet.de
    'Version: v1.01
    'Author: Kurzschluss
    '#######################################
    ' The packet structure is defined in the received packets first two
    ' bytes (HDB2 and HDB1). The following packet structure is used.
    '
    ' DD=01 - 1 Byte destination address
    ' SS=01 - 1 Byte source address
    ' PP=00 - No protocol specific flags
    ' AA=01 - Acknowledge is required
    ' D=0 - No Command Mode
    ' EEE=100 - 16-bit CRC-CCITT
    ' NNNN=0010 - 2 Byte data
    '
    ' Overview of header definition bytes (HDB2 and HDB1)
    '
    ' HDB2 HDB1
    ' +-----------------+-----------------+
    ' | D D S S P P A A | D E E E N N N N |
    ' +-----------------+-----------------+
    '$regfile = "m8def.dat"
    $regfile = "m32def.dat"
    $hwstack = 128
    $swstack = 128
    $framesize = 128
    $PROG &HFF,&HFF,&H99,&H00 ' für Mega32
    $crystal = 8000000
    '$crystal = 10000000 '
    $baud = 19200
    Baud = 19200

    Const Rf12freq = 433.92 'Kanal-Einstellung
    Const Rf12baud = 19200 'Baudrate
    Const MyAdress = 20 'Nodeadresse vom Teilnehmer
    Const SNAP_SYNC= &H54 'Synczeichen SNAP-Protokoll
    Const Maxchar = 32

    Dim lv As Byte
    Dim Temp As Word
    Dim RF12_data (40) As Byte ,RF12_S As String * Maxchar At RF12_data Overlay
    Dim RF_RXD as Bit, RF_SYNC as Bit
    Dim NDB as Byte , Framelength as Byte ,crc as Byte
    Dim ByteAnzahl as Byte 'Anzahl Sendebytes
    Dim S As String * 10
    SYNC Alias RF12_data(1)
    HDB1 Alias RF12_data(2)
    HDB2 Alias RF12_data(3)
    DAB1 Alias RF12_data(4)
    SAB1 Alias RF12_data(5)

    '----------[Hardwaresetup für Pollin Funkboard]---------------------------------------------
    'PortD.3-->INT1 an FFIT --Interrupt(High) wenn FiFO-Buffer voll (ef-Bit set)
    LED1 Alias Portd.6 : Config Portd.6 = Output
    LED2 Alias Portd.5 : Config Portd.5 = Output
    'config the SPI in master mode.The clock must be a quarter of the slave cpu
    'Hier ggf. den SoftSPI reinmachen
    Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 128 , Noss = 1
    ' werden benötigt für rf12_ready
    ' Achtung je nach µC anpassen !!!
    ' für M8: Spi_cs Alias Portb.2 : Spi_sdo Alias Pinb.4 ' SS-Pin
    'M32:
    Spi_cs Alias Portb.4 : DDRB.4=1 'Config Spi_cs = Output chipselect
    Spi_sdo Alias Pinb.6 ' MISO-PIN
    Set Spi_cs
    Spiinit 'init the spi pins
    goto Startup

    $include "inc_RF12-Treiber.bas" 'RF12 Treiber einbinden

    '--------[Initialisierung]------------------------------------------------
    Startup:
    Config Int1 = Rising
    On Int1 FFIT_ISR:
    On Urxc RXD_ISR: 'Interrupt Empfange String von RXD
    Enable Urxc 'Einschalten
    Enable Interrupts 'Zulassen

    set LED2
    Print "Init RF12 ..."
    Call Rf12_init ' ein paar Register setzen (z.B. CLK auf 10MHz)
    Call Rf12_setfreq(rf12freq) ' Sende/Empfangsfrequenz auf 433,92MHz einstellen
    Call Rf12_setbandwith(4 , 1 , 4) ' 200kHz Bandbreite, -6dB Verstärkung, DRSSI threshold: -79dBm
    Call Rf12_setbaud(rf12baud) ' 19200 baud
    Call Rf12_setpower(0 , 6) ' 1mW Ausgangangsleistung, 120kHz Frequenzshift
    Print "Init RF12 Done"
    reset LED2

    '----------[Mainloop]------------------------------------------------------
    RF12_S =""
    gosub RF12_RXD_ON

    Do

    if RF_RXD=1 then
    print "RX ready, Framelength: "; Framelength
    gosub Framehandler
    gosub RF12_RXD_ON
    end IF
    'do anything....



    print "neuer Mainloop"
    wait 1
    Loop
    End

    '----------[Frameverarbeitung SNAP-Protokoll]------------------------------------
    Framehandler:
    set LED1
    Print "Frame: "; 'Debugausgabe
    For lv = 1 To Framelength
    Print hex(RF12_data(lv)) ;" ";
    Next lv
    print
    if SYNC= SNAP_SYNC then 'sync.Zeichen IO?
    if HDB2= &H50 then '1Byte Adressierung?
    'if HDB2= NDB then '0..32 Datenbyte
    if DAB1= MyAdress then 'Adresse prüfen
    print "Das war für mich!...von Nr.:";RF12_data(5) 'Datenverarbeitung
    swap DAB1,SAB1 'Adressen umdrehen für Rücksenden
    crc=Framelength-2 'nur temporär Länge für crc-Check
    crc=crc8(RF12_data(2),crc)
    if crc=RF12_data(Framelength) then 'CRC OK?
    print "CRC OK! => ";crc
    ' Send ACK (i.e tell master that packet was OK)
    ' Set ACKs bit in HDB2 (xxxxxx10)
    Hdb2 = Hdb2 Or &B00000010
    Hdb2 = Hdb2 And &B11111110
    'do ...
    gosub SENDEN 'Anwortframe senden--> nur als Slave
    gosub CMD_HANDLER
    'RF12_data(2 <--- ackno machen
    else
    print "CRC Bad => ";crc
    ' Send NAK (i.e tell master that packet was bad)
    ' Set ACK bits in HDB2 (xxxxxx11)
    Hdb2 = Hdb2 Or &B00000011
    gosub SENDEN 'Anwortframe senden--> nur als Slave
    end IF
    else
    print "geht mich nix an!...von Nr.:";RF12_data(5)
    end IF
    'else
    'print "Framelength NIO!!!"
    'end IF
    else
    print "no 1Byte Adress!!!"
    end IF
    else
    print "no Syncbyte!!!"
    end IF
    waitms 10
    reset LED1
    return



    '------[CMD-Interpreter]-------------------------------------
    CMD_handler: 'Auswertung der Nutzdaten.... nur als Denkhilfe :)
    '(
    select case RF12_data(7)
    case 0 :
    case 1 : gosub Rolloaufmachen
    case 2 : gosub Rollozumachen
    case 10 : gosub HoleTemperatur
    end SELECT
    ')
    for lv=1 to 20
    Toggle LED2 'mache was...
    waitms 100
    next lv
    return




    '----------[RF12 Empfänger einschalten]---------------------------
    RF12_RXD_ON:
    lv=1
    RF_SYNC=0 'sync-Flag
    RF_RXD=0
    RF12_S=""
    Framelength=6 'erst mit 3.Byte kann die Framelänge berechnet werden
    Temp = Rf12_trans(&H82c8) 'Power CMD: Empfänger an, Quarz-clk läuft weiter
    Temp = Rf12_trans(&Hca81) 'FIFO&Reset CMD: sensitiver Reset aus (Brownout)
    Temp = Rf12_trans(&Hca83) 'FIFO&Reset CMD: Synchroner Zeichenemfang (warte auf Startzeichen: 2DD4)
    Enable Int1
    return

    '----------[RF12 Daten Senden]-------------------------------------
    Senden:
    set LED2
    ' Waitms 1
    Print "Sende: "
    For lv = 1 To Framelength
    Print hex(RF12_data(lv)) ;" ";
    Next lv
    Call Rf12_txdata(Framelength)
    Waitms 10
    reset LED2
    return

    '----------[Uart ISR(Daten vom PC)]--------------------------------
    RXD_ISR:
    S = S + Chr(udr)
    Return

    '----------[INT1 ISR(Daten vom RF12)]--------------------------------
    FFIT_ISR:
    Temp = Rf12_trans(&Hb000)
    Temp = Temp and &H00FF
    if temp = &H54 and RF_SYNC=0 then 'Synchronzeichen empfangen-->an 1 Stelle
    RF_SYNC=1
    lv=1
    end IF
    RF12_data(lv) = Temp 'Empfangsbyte in Buffer legen
    if lv=3 then 'ermitteln der Anzahl Datenbytes (SNAP)
    NDB = Temp and &H0F 'unteres Nipple von HDB1 enthält Datenlänge
    select case NDB '6Byte<=sync+HDB2+HDB1+DAB+SAB+CRC
    case 0 to 8: Framelength=6+NDB '6-14 (0--8 Datebyte)
    case 9 : Framelength=6+16 '22 (16 Datenbyte)
    case 10 : Framelength=6+32 '38 (32 Datenbyte)
    end SELECT
    end IF
    If lv>=Framelength Then 'alles eingetroffen
    RF_RXD=1 'Flag setzen und Empfänger abschalten
    Temp = Rf12_trans(&H8208) 'Power_CMD: Empfänger aus, Quarz-clk läuft weiter
    disable INT1
    End If
    incr lv 'Zeiger incr
    Return


    -------------------------------------
    Habe bei Optionen HTML und BBCode im Beitrag deaktiviert
    ..so bleibt der Code komplett

    aber leider geht die Formatierung so verloren...
    Vielleicht klapps ja irgendwann per mail-Anhang ;)


    mfg
    Kurzschluss



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 08.11.2007, 21:26


    Kurzschluss hat folgendes geschrieben: Hier das Treiberinculde:
    Code:

    '------[Setze TrägerFrequenz]---------------------
    Sub Rf12_setfreq(byval Freq As Single)
      Freq = Freq - 430.00
      Temp = Freq / 0.0025
      If Temp <96> 3903 Then
         Temp = 3903
         End If
      Temp = Temp + &HA000
      Temp = Rf12_trans(temp)                     'Axxx - Frequenzsetting (Kanal Einstellung)
    End Sub



    Grüsse
    Kurzschluss


    Hallo Kurzschluss

    Ich habe beim Compilieren ein Fehler:


    Code:
    If Temp <96> 3903 Then
         Temp = 3903
         End If


    Fehler:
    - 3 Parameter expected
    und
    - If then expected

    Ich warte mal auf deine *.bas Datei. Vieleicht hab ich bei "Copy and Paste" ein Fehler drin.

    Grüße Eisbaeeer
    ---------------- Edit --------------------------------------------------------
    Ok, liegt wohl an der Compilerversion. Ich hab das jetzt mal auf folgendes geändert, Compiler läuft mal durch. Mehr dann später.

    Der Code wird hier im Forum automatisch verändert, wenn das Tag Code verwendet wird. Ist das schon mal jemand aufgefallen?

    Code:
    If Temp <96> 3903 Then
         Temp = 3903
         End If



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 08.11.2007, 22:04


    So, Empfänger ist compiliert.
    Leider fehlt mir jetzt noch der Sender.

    Grüße Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 09.11.2007, 20:39


    Hallo Kurzschluss

    Das wars. Bei mir läuft der Empfänger jetzt durch, auch wenn kein Sender sendet.
    Oh mann mach ich schon lange dran rum. Tolle Arbeit.

    Ich habe gerade gesehen, dass du Befehle für Rollos und Temperaturen übertragen möchtest.
    Im Grunde bei mir ganz ähnliche Infos. Ich werde mir jetzt mal das SNAP Protokoll anschauen. Meine Rohdaten kann ich beim Empfänger auch schon lesen. Sehr schön.

    Jetzt werde ich mal noch meine Temperaturmessung in das Empfängerscript mit einbauen, damit ich sehe, ob ich Timingprobleme bekomme, wenn kein Sender sendet. Aber so wie ich das sehe, müsste das hinhauen.
    Ich bin begeistert.
    Grüße Eisbaeeer

    ------------- EDIT -----------------------------------------
    Das SNAP Protokoll sieht ja vernünftig aus. Variable Nutzdaten, soll heissen, von 1 Byte bis 512 Byte in einem Paket.
    Willst du dann mit fester Anzahl von Byte fahren?

    Grüße Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 09.11.2007, 22:12


    : brauche nur ne mail Adresse vom dir bzw. Eisbär

    ...und klar du kannst das auf deiner Homepage veröffentlichen


    Gucke mal
    www.comwebnet.de unten unter Kontakt.

    Wenn paar Bilder gibt auch mit in ein Zip File und zumir schicken
    Werde dann unter deinen Namen und ich erstelle extra eine Rubrik für die Diskussion , wo du deine Kommentare reinschreiben kannst.

    Klasse - ist wohl auf Bascom zugeschnitten worden :D

    Vielleicht noch ein Text zum Programm etc.

    Gute Arbeit 8)



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Kurzschluss - 10.11.2007, 02:51


    [quote="Eisbaeeer"] Kurzschluss hat folgendes geschrieben:
    werde die Quellen hier reinstellen...
    gibts ne Möglichkeit direkt die *.bas Files hochzuladen? :?: :?:

    Grüsse
    Kurzschluss

    Kannst mir die Datei zumailen, dann veröffentliche ich hier einen Link, wo man das ganze dann runterladen kann.
    Oder arvnix macht auf seiner Seite gleich ne neue Rubrik.

    Die INT Routine würde mich auch interessieren. Wieviel Code hast du in der Routine abgelegt? Denn laut dem "include" wird das nicht als Interrupt abgehandelt, sondern im Sub.

    ---> zum Interruptemfang:

    in der inculde ist der Empfang per Polling drin, aber ist bei dem
    Interrupt gesteuerten Empfang nicht verwendet.
    Da hole ich die Daten per:
    Temp = Rf12_trans(&Hb000)
    Temp = Temp and &H00FF
    direkt ab...
    Vorteil: nur wenn was eingetroffen ist wird der AVR mit "RF12-Arbeit" belastet

    guck mal in dein mail, du müsstest alles bekommen haben...

    mfg kurzschluss



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Kurzschluss - 10.11.2007, 12:45

    Testempfänger SNAP
    Hallo @all

    alle die den Empfängercode ausprobieren....

    mir sind zwei kleine Fehler in den Beispielcode unterlaufen :
    1.
    Code:
     
    SYNC Alias RF12_data(1)
    HDB2 Alias RF12_data(2)    'Achtung HDB2 liegt in unterem Byte
    HDB1 Alias RF12_data(3)
    DAB1 Alias RF12_data(4)
    SAB1 Alias RF12_data(5)


    --> das HDB2 und HDB1 drehen!!!!

    2.
    Code:

        if DAB1= MyAdress then                                     'Adresse prüfen
                  print "Das war für mich!...von Nr.:";RF12_data(5)       'Datenverarbeitung
                  crc=Framelength-2 'nur temporär Länge für crc-Check
                  crc=crc8(RF12_data(2),crc)
                  'Achtung!!! erst nach crc Adressen swapen!!! sonst ist die crc falsch
                  swap DAB1,SAB1                                          'Adressen umdrehen für Rücksenden






    Erst muss mit dem orginal Frame die crc berechnet werden!!!
    Danach wird per swap die Sender- und Empfängeradresse für das Rücksenden umgedreht.

    Das müsst ihr in eueren Bas-file berichtigen,
    sonst gibt's die Ausgabe:
    "no 1Byte Adress!!!"

    bzw. :
    "CRC Bad => xx"

    (Debugausgaben auf dem Uart)

    mfg
    Kurzschluss



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 10.11.2007, 16:23


    Hi Kurzschluss

    Also ich habe jetzt den Testsender und den SNAP_RF12_RX... am laufen. Der Sender hängt sich zwar ab und zu auf, wird aber nicht die Zeit wert sein, da weiterzusuchen, denn der Sender war noch nie das Problem.

    Soweit funktioniert das ganze, nachdem ich hdb1 und hdb2 und den crc-Check Bereich angepasst habe.
    Jetzt will ich versuchen, einen Master aufzusetzen, der 2 verschiedenen Werte versendet. Um das Protokoll zu nutzen, braucht es ja jetzt "nur" 3 Variablen:
    1. Myadress (hast du fest vergeben)
    2. Destination (gibt es noch keine Variable, oder?)
    3. Nutzdaten (die hab ich noch nicht gefunden)
    --> Rf12_data(7) ist das Nutzsignal?

    - Du bedienst im Moment den Rollo am Node? Mit den Tasten 0 und 1. Was überträgst du dann im Moment? Der Node ist doch eigentlich der Slave? Nur die Temperaturen?
    - Mir ist klar, dass der "Slave" keine Destination braucht, weil die ja der Master schickt und im Slave nur HDB1 und HDB2 getauscht werden.
    - Ich messe meine Temperaturen über 1-wire. Benutze die DS18S20
    - Hast du vor, ein "multi-master" zu machen, oder willst du alles von einem Master aus steuern?
    ---------------
    Ich bin mir noch nicht sicher, wie ich das handhaben will. Auf jeden Fall sollen 2 Raumstationen an eine zentrale Steuerung angebunden werden. Von diesen aus sollen aber auch Befehle bzw. Variablen in der zentralen Steuerung beeinflusst werden.

    Ein haufen Fragen. Bin mal auf die Antworten gespannt.

    Grüße Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Kurzschluss - 10.11.2007, 17:03


    Eisbaeeer hat folgendes geschrieben: Hi Kurzschluss

    Also ich habe jetzt den Testsender und den SNAP_RF12_RX... am laufen. Der Sender hängt sich zwar ab und zu auf, wird aber nicht die Zeit wert sein, da weiterzusuchen, denn der Sender war noch nie das Problem.

    Soweit funktioniert das ganze, nachdem ich hdb1 und hdb2 und den crc-Check Bereich angepasst habe.
    Jetzt will ich versuchen, einen Master aufzusetzen, der 2 verschiedenen Werte versendet. Um das Protokoll zu nutzen, braucht es ja jetzt "nur" 3 Variablen:
    1. Myadress (hast du fest vergeben)
    2. Destination (gibt es noch keine Variable, oder?)
    3. Nutzdaten (die hab ich noch nicht gefunden)
    --> Rf12_data(7) ist das Nutzsignal?

    - Du bedienst im Moment den Rollo am Node? Mit den Tasten 0 und 1. Was überträgst du dann im Moment? Der Node ist doch eigentlich der Slave? Nur die Temperaturen?
    - Mir ist klar, dass der "Slave" keine Destination braucht, weil die ja der Master schickt und im Slave nur HDB1 und HDB2 getauscht werden.
    - Ich messe meine Temperaturen über 1-wire. Benutze die DS18S20
    - Hast du vor, ein "multi-master" zu machen, oder willst du alles von einem Master aus steuern?
    ---------------
    Ich bin mir noch nicht sicher, wie ich das handhaben will. Auf jeden Fall sollen 2 Raumstationen an eine zentrale Steuerung angebunden werden. Von diesen aus sollen aber auch Befehle bzw. Variablen in der zentralen Steuerung beeinflusst werden.

    Ein haufen Fragen. Bin mal auf die Antworten gespannt.

    Grüße Eisbaeeer

    Meine Netzstruktur ist aktuell so angedacht, das es einen Master
    gibt.
    Der ist die Zentrale von der Haussteuerung
    (M128 mit RTC und USB-Anbindung).
    Der soll dann mal Zeit und evtl. Taglicht gesteuert die Slaves ansteuern.
    In jeden Fenster ein Slave-Node mit eigner Adresse.
    Momentan ist Myadress ja eine Const, aber man könnte ja das als
    EEPROM-Var machen und mit einen Sonderbefehl bei der
    Inbetriebnahme die jeweilige Adresse vergeben
    ansonsten muss man halt jeden Slave einzeln compilieren mit fester Adresse...

    zu den Nutzdaten: was wir senden ist ja ein Array mit variabler Länge
    Der Empfänger kann aktuell 0..32Byte Nutzdaten einlesen
    --ich hab das erstmal so flexibel angedacht...

    Aber bei meinen Rollo-Nodes werde ich mit fest 4 Datenbyte arbeiten.


    das 1. -- ist der CMD, wie so in dem Commandhandler angedeutet
    Byte 2..4 sollen für die Statusrückgabe und Messwerte verwendet werden
    --> bei der Rücksendung vom Slave an den Master

    also z.B. Master fragt Slave Nr.6 nach der Temperatur....
    dann holt Nr.6 den akt. Wert vom Sensor und packt das in die entsprechenden Datenbytes und sende eine Anwort zurück...

    Solange es nur einen Master gibt reicht ja da das swapen von Ziel und Quelladresse.
    Wen du Multimaster brauchst musst irgendwie noch ne synchro zwischen den Mastern erfolgen, dass die nicht Zeitgleich senden usw...

    wie ich dir schon in der mail schrieb, sind meine jetzigen Nodes noch mit RS485.
    Zur Zeit bin ich gerade am Aufbau einer neuen Platine eines Nodes mit RF12 und Mega8.

    Ich kann dir ja mal Schaltplan&Layout senden
    Kannst du evtl Targetdatein verarbeiten?

    mfg Kurzschluss



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 10.11.2007, 18:25


    Kurzschluss hat folgendes geschrieben:
    Ich kann dir ja mal Schaltplan&Layout senden
    Kannst du evtl Targetdatein verarbeiten?

    mfg Kurzschluss

    Ja, arbeite auch mit Target. Ist also kein Problem.
    Mal sehen, ob ich Multi-Master mache oder ob ich das mit einem Master hinbekomme. Werde jetzt erst mal testen, ob ich Master und Slave hinbekomme.

    Grüße



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 10.11.2007, 18:29


    Kannst du die Target Schaltung und Layout als JPG oder BMP Konvertieren?
    Ich kann dann ein PDF erstellen und es auch Online bringen, mache ich bei allen Projekten so.

    Kurzschluss ich habe dir hier http://www.iphpbb.com/board/f-10138836nx63949-25.html
    für dein Projekt eine neue Rubrik erstellt. Email habe ich dir schon geschrieben.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 10.11.2007, 20:01


    Ok, ich habe mir folgendes ausgedacht und wollte mal wissen, was ihr davon haltet:

    Bitte korregiert mich, wenn ich etwas falsch interpretiere.

    Die Nutzdaten lassen sich in Schritten von 0-8, dann 16 und als nächste Stufe 32 Byte definieren. Wenn man jetzt hergeht und das 1. Nutzbyte als Information nimmt, welchen Inhalt die Nutzdaten enthalten, können z.B. verschiedene Temperaturen übertragen werden oder andere Werte wie Uhrzeit etc.
    Ein Byte reicht dann, um 255 Werte eindeutig zuzuordnen.

    Grüße Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Eisbaeeer - 11.11.2007, 00:07


    Bevor ich ins Bett gehe ein kurzer Bericht.

    @Kurzschluss
    In deinem Script "Node" ist noch irgend was faul. Die Adresserkennung funktioniert, aber der CRC Check geht immer auf Bad. Ich habe jetzt das SNAP_RF12_RX-M32... mit deinen Änderungen hier im Forum verwendet und noch meine 1-wire Messung, Timer und das GLCD eingefügt. Jetzt bekomme ich ein OK und die Temperaturmessung geht auch. Das GLCD zeigt mir jetzt einige Debug Infos an.
    Ich bekomme das mit dem Master noch nicht hin. Der Testsender sendet ja nicht nach, wenn der CRC nicht stimmt. Hast du die Routine schon fertig ?

    Eine Gute Nacht wünscht der Eisbaeeer



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 11.11.2007, 11:04


    Bitte verwendet SNAP-Protokoll für RFM12 folgenden Thread:
    :arrow: http://www.iphpbb.com/board/f-10138836nx63949-25.html

    :!:



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Thilo - 19.11.2007, 19:49


    Hi an all die fleißigen Programierer hier.

    Ich habe Eure Entwicklungen ständig verfolgt und sie frech für mich genutzt. Vielen Dank deshalb an Euch. Leider bin ich ein ziemlicher Anfänger auf diesem Gebiet und taste mich langsam an diese Sachen heran.
    Meine aktuelle Frage nun: Denkt Ihr, dass Euer RFM12 Code auch problemlos auf dem RFM12 Modulen mit 868 MHz läuft?

    Beste Grüße

    Thilo



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 19.11.2007, 20:19


    Hi Thilo,
    ich habe mit 868 Mhz Module noch nie was gemacht.
    Aber warum eigentlich nicht



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 19.11.2007, 21:55


    denke ich auch das es klappen wird . ist ja auch außer die MHz auch das nur 1% von 1min gesendet werden darf.

    Bitte alle die SNAP - Protokoll - nehmen ins entsprechende Brett Posten sonst kommen wir durcheinander :!:
    :arrow: http://www.iphpbb.com/board/f-10138836nx63949-25.html <--

    Mache bitte wenns nur um den RFM12 geht einen New Topic mit deinen Frage auf.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    avrnix - 30.11.2007, 15:59

    Datasheet von Pollin RFM12
    Datenblatt von Pollin
    http://www.mikrocontroller.net/attachment/28786/kluz.pdf



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Knickohr - 06.12.2007, 17:09


    Hallo Leute,

    ich treibe ja auch schon in einigen anderen Paralleluniversen mein Unwesen. Jetzt bin ich auch bei Euch gelandet ;) Habe die letzten Wochen mein RFM12-Projekt ein wenig auf Eis gelegt. Doch jetzt geht es weiter.

    Ich versuche mit diesen Modulen einen Funk-Universal-Timer für diverse Kameras zum Laufen zu bekommen. Bedingung ist allerdings ein "sicheres" Protokoll mit Rückmeldung, also so wie Sven es schon gezeigt hat.

    Werde mich dann langsam wieder dran machen, mein Projekt weiter zu entwickeln.

    Frage nebenbei : Wie weit seid ihr schon mit den Funkdingern gekommen ? Wie viele Meter habt ihr damit überbrückt ? Ist nicht sooo arg wichtig, interessiert mich halt.

    Thomas



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 06.12.2007, 19:34


    Hi Knickohr,
    irgendwie scheinen auch die Paralleluniversen den RFM12
    rauszukramen.
    Also 100m(bebauter Grund) war für mich kein Problem.

    Dann verfolge mal das Forum Snap-Protokoll.

    Ich werde meine Variante sicher vollenden, aber eigentlich
    habe ich ein "Stein ins rollen gebracht" und das ist gut so.



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Knickohr - 07.12.2007, 11:13


    Hallo Wigbert,

    ja der Stein rollt und das ist auch gut so ;) Hätte nicht gedacht, das die RFM12-Dinger so Anklang finden. Ich habe mir auch jede Menge von den 868MHz-Modulen geholt. Mein Gedanke ist, damit die Fernauslöser für Kameras aus der warmen Bude aus zu steuern. Sollte sicher funktionieren, also mit Rückmeldung und darf nicht von jeder "dahergelaufenen" Wetterstation aus dem Tritt gebracht werden. Da bei Aufnahmen für die Astrofotografie die Kamera nur alle paar Minuten mal auslöst, ist auch die Sendebeschränkung im 868MHz-Band überhaupt kein Problem, eher noch erwünscht. So tummelt sich nicht so viel "Müll" im Äther rum.

    Hab das über ein halbes Jahr liegen lassen, muß aber jetzt wieder ran an die Sache. Es sind ja lange und wetterbedingt meißt schlechte Winterabende.

    Thomas



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Wigbert - 07.12.2007, 13:48


    Hi Knickohr,
    also welches Protokoll ist wohl egal,
    ich musste zum Beispiel ein Dummybyte beim Senden hinterherschieben
    um die Checksumme sauber zu empfangen. Ich nehme mal an ,
    es muss ein Byte nachgeschoben werden um das vorletzte ordentlich
    zu senden. Beim Empfang wird dieses Dummybyte einfach nicht
    ausgegeben. Ich würde auch vor dem Erstsenden meiner Daten
    mehrere Byte senden damit der Empfänger "warm läuft".
    Eigentlich braucht bei Befehlen Master zu Slave auch nur der Empfang bestätigt zu werden,
    wenn nach 3xSenden keine Bestätigung kommt , ist der Empfänger geklaut........

    anders sieht es natürlich aus wenn der Slave auch Daten bereitstellen
    muss........



    Re: Protkoll für die Vernetzung von RFM12,01,02 Modulen

    Knickohr - 07.12.2007, 15:42


    Hallo Wigbert,

    doch der Empfänger sollte was zurück geben. Neben der Bestätigung und zur Sicherheit noch den empfangenen Befehl, sollte er so etwas wie die Empfangsfeldstärke und den Zustand der Batterie zurück liefern, vielleicht noch die Temperatur. Ich möchte den Empfänger so klein und vor allem energiesparend wie möglich halten, also ohne Display, Tasten und sonstiges Gefummel ;) Nur ein Einschalter (wobei der auch nicht unbedingt nötig ist) und ein paar LEDs zur Kontrolle, mehr nicht. Über 2 Ausgänge wird dann die Kamera gesteuert. Schön wäre es, wenn ich das alles in nur einen Atmega8L rein bekomme, mal sehen. Der Sender ist dafür umso luxuriöser ausgestattet. Display, sämtliche Funktionen können programmiert werden, handliches Gehäuse ...

    Thomas



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum www.comwebnet.de

    AK-Modul-bus.de Elektronikbauteile - gepostet von avrnix am Mittwoch 02.05.2007
    Hard SPI mit ATMEGA möglich ? - gepostet von avrnix am Donnerstag 26.10.2006
    Displayansteuerung S65 - gepostet von Wigbert am Dienstag 20.03.2007
    COM2TCP für Windows - gepostet von avrnix am Samstag 03.03.2007
    Hardware um den RF12 , 01, 02 - gepostet von avrnix am Sonntag 27.05.2007
    Tonertransferverfahren mit Negativ - gepostet von avrnix am Mittwoch 08.08.2007



    Ähnliche Beiträge wie "Protkoll für die Vernetzung von RFM12,01,02 Modulen"

    Vernetzung bei Keratokonus - Anonymous (Donnerstag 22.11.2007)
    Protkoll, des Senates der aAdG (RPG) - Harachte (Sonntag 10.06.2007)
    Vernetzung sinnvoll? - Anonymous (Freitag 25.08.2006)
    Projekte mit diesen Modulen - avrnix (Sonntag 27.05.2007)
    VPN Vernetzung und ISDN Backup - ThomasG (Donnerstag 10.03.2005)
    Fragen zu Vernetzung bei Keratokonus - Mikel (Mittwoch 21.02.2007)