Wetterstation

www.comwebnet.de
Verfügbare Informationen zu "Wetterstation"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: Trexis5 - Eisbaeeer - avrnix - Wigbert - Kurzschluss
  • Forum: www.comwebnet.de
  • Forenbeschreibung: AVR Mikrocontroller und Elektronik - Forum - www.comwebnet.de
  • aus dem Unterforum: RF12 Transceiver Modul
  • Antworten: 58
  • Forum gestartet am: Mittwoch 25.10.2006
  • Sprache: deutsch
  • Link zum Originaltopic: Wetterstation
  • Letzte Antwort: vor 15 Jahren, 3 Monaten, 16 Tagen, 4 Stunden, 13 Minuten
  • Alle Beiträge und Antworten zu "Wetterstation"

    Re: Wetterstation

    Trexis5 - 18.11.2007, 00:53

    Wetterstation
    Hi,

    ich baue gerade eine Wetterstation.



    Nun möchte ich die Messdaten von Außen nach innen übertragen.
    Welche Module benötige ich?
    Brauche ich zweimal den RFM12 oder einmal den RFM01 und einmal den RFM02?
    Welchen Code soll ich nehmen?
    Ich möchte nur einige Messwerte (As Single) Übertragen, mehr nicht.

    Was wäre zum Empfehlen? Ich muß zugeben, je mehr ich hier lese desto weniger kenne ich mich aus.
    Irgendwie sitze ich auf dem Kabel.



    Re: Wetterstation

    Trexis5 - 18.11.2007, 21:29


    Kann mir keiner helfen?



    Re: Wetterstation

    Eisbaeeer - 20.11.2007, 07:12


    Trexis5 hat folgendes geschrieben: Kann mir keiner helfen?

    Doch, doch. Dein Vorhaben ist "relativ" einfach zu lösen. Du musst dich nur entscheiden, ob du eine Bestätigung der Übertragung haben möchtest oder eben nicht.

    RF12 --> Senden und Empfangen in einem Modul

    So als Anregung. Willst du noch mehr Sensoren? Die Station erweitern? Dann nimm die RF12 und das SNAP Protokoll. Damit kannst du dann von der Wetterstation jede "Ausseneinheit" gezielt ansprechen. Der CRC-Check und wiederholte Sendung im Fehlerfall inklusive.

    In Bascom auch schon fast fertig.

    P.S: Sieht echt gut aus, was du da aufs Display gebracht hast.

    Grüße Eisbaeeer



    Re: Wetterstation

    Trexis5 - 20.11.2007, 07:26


    Hi,
    nein ich brauche keine Bestätigung. Obwohl das schon schön wäre.

    Also max 8 Werte die als (As Single) über den Analogwandler in den Atmel kommen, die will ich senden.
    Ich habe aber nur noch die Module 01 und 02 bekommen. Die 12er gibt es nicht mehr.

    Könntest du mit solch einen Code mal schicken oder posten mit dem ich solche Daten senden und an anderer stelle empfangen kann?
    Denn irgendwie steige ich nicht durch.

    Danke.



    Re: Wetterstation

    avrnix - 20.11.2007, 09:26


    Hast du den Code mal von dieser Seite ausprobiert?
    Müsste gehen, wenn du ensprechend die den Empfang- und Sendeteil nimmst.

    Schönes Projekt , wie bekommst du die Unterschiedlichen Schriftgrössen hin?
    Willst du dein Projekt auch Veröfftlichen ?



    Re: Wetterstation

    Eisbaeeer - 20.11.2007, 10:14


    Trexis5 hat folgendes geschrieben: Hi,
    nein ich brauche keine Bestätigung. Obwohl das schon schön wäre.

    Also max 8 Werte die als (As Single) über den Analogwandler in den Atmel kommen, die will ich senden.
    Ich habe aber nur noch die Module 01 und 02 bekommen. Die 12er gibt es nicht mehr.

    Könntest du mit solch einen Code mal schicken oder posten mit dem ich solche Daten senden und an anderer stelle empfangen kann?
    Denn irgendwie steige ich nicht durch.

    Danke.

    Der Code von den Rf12 wird "out of the box" nicht funktionieren. Die Module 01 und 02 müssen anders initialisiert werden. Passende Bascom Codes gibt es aber. Such mal bei Google. Ich hab glaube ich was gelesen, dass die Module z.B. keinen FIFO haben. Aber bitte nicht festnageln. Such mal bei Roboternetz. Da wirst du was finden.

    Grüße Eisbaeeer



    Re: Wetterstation

    Trexis5 - 20.11.2007, 13:47


    Könntest du mir dabei helfen?



    Re: Wetterstation

    Eisbaeeer - 20.11.2007, 14:20


    Trexis5 hat folgendes geschrieben: Könntest du mir dabei helfen?

    Nur in soweit, dass ich dir bei den Quellen helfen kann. Ich habe selbst nur die RF12 Module. Kann also in der Richtung nichts testen.

    Beim Googeln ist mir aufgefallen, dass du in diesem Forum schon angefragt hast.
    Hier sind übrigens die gleichen Leute unterwegs, wie in diesem Forum:
    http://bascom-forum.de/index.php?PHPSESSID=7f37e3b327dfc6516f8bf4fe91816004&topic=25.15

    Les die Datenblätter der Module, passe die Init-Routinen an und dann sollte es auch damit gehen. Du kannst ja als Hilfestellung die C-Quellen von http://www.mikrocontroller.net/topic/73494 benutzen, um die Initialisierung anzupassen. Eventuell ist da gar nicht so viel zu machen.

    Ich bin im Moment noch dabei, die RF12 Module mit dem SNAP Protokoll zu verfeinern.

    Grüße Eisbaeeer



    Re: Wetterstation

    Trexis5 - 20.11.2007, 15:26


    Hi,

    aber leider habe ich davon keine Ahnung. :idea:
    Schon gar nicht von C.



    Re: Wetterstation

    avrnix - 20.11.2007, 16:23


    Gucke dort mal bei INIT nach den Hex WERT der ist ja der gleiche den du in BASCOM einsetzen kannst. Ich benutze leider auch nur die RF12 Module :roll:



    Re: Wetterstation

    Eisbaeeer - 20.11.2007, 17:06


    Trexis5 hat folgendes geschrieben: Hi,

    aber leider habe ich davon keine Ahnung. :idea:
    Schon gar nicht von C.

    Kann ja nicht ganz sein. Immerhin hast du das Display zum laufen gebracht. Oder war das ein fertiges Script?

    Jeder hilft hier gerne. Geben und nehmen. Aber ein bischen was musst du auch selber erarbeiten. Bei Fragen stehen wir gerne zur Verfügung. Du musst aber schon konkret fragen.

    Versuch doch erst mal den INIT Teil anzupassen. Hier Posten, dann können wir was damit anfangen.

    Grüße Eisbaeeer



    Re: Wetterstation

    Trexis5 - 20.11.2007, 17:38


    Nein, die Wetterstation habe ich selber gemacht, aber nur durch abkucken.

    Wo gibt es denn noch solche 12er Module?



    Re: Wetterstation

    avrnix - 20.11.2007, 18:33


    Durch gucken ist ja ein schönes Ergebnis geworden

    Frage doch mal hier nach ob welche dir den RF12 verkaufen
    http://www.mikrocontroller.net/forum/markt

    der ob noch eine Sammelbestellung bzw. ob Module gibt:

    http://www.mikrocontroller.net/topic/80796#701754

    sonst versuche mal die INIT die in C sein soll hier Posten, vielleicht kann man was machen.

    :!:



    Re: Wetterstation

    Eisbaeeer - 21.11.2007, 00:07


    Trexis5 hat folgendes geschrieben: Nein, die Wetterstation habe ich selber gemacht, aber nur durch abkucken.

    Wo gibt es denn noch solche 12er Module?

    Pollin hat hin und wieder Lieferschwierigkeiten und auf Pollin waren keine zu finden. Jeden Tag zu Pollin schauen und wenn sie verfügbar sind (dann sind sie auch auf der Internetseite von Pollin) bestellen.

    Sind zwar teurer, als mit der Sammelbestellung, aber dauert halt nicht so lange. Wie arvnix schon schrieb, hab ich auch schon gelesen, dass mancher wieder welche verkauft.

    Abgucken ist ja nicht verboten. Aber interessiert dich nicht, wie das ganze funktioniert? Da lernt man doch eine Menge.

    Wie gesagt, Hilfe bekommst du, aber bestimmt kein fertiges Programm.
    Bring Fragen mit Script, dann wird dir geholfen.

    Grüße Eisbaeeer



    Re: Wetterstation

    Trexis5 - 21.11.2007, 08:07


    Hi,

    das ist mir klar.
    Ich habe diesen Code:
    Code:
    Fehlerbereinigte Verion von Bastelbär
    ' 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
    ' ########################################################################


    $regfile = "m32def.dat"
    $hwstack = 32 ' default use 32 for the hardware stack
    $swstack = 10 'default use 10 for the SW stack
    $framesize = 40

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

    $crystal = 8000000
    $baud = 19200
    Baud = 19200

    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)

    Const Rf12freq = 433.92
    Const Rf12baud = 19200
    Const Maxchar = 32

    '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
    Spi_cs Alias Portb.4 ' SS-Pin
    Config Spi_cs = Output
    Spi_sdo Alias Pinb.6 ' MOSI-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


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


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

    ' Je nachdem ob Sender oder Empfänger die entsprechenden Zeilen aktivieren
    Do 'Ewigschleife


    ' Hier ist die Senderoutine
    ' Print "Sende"
    ' Call Rf12_txdata(maxchar)

    Wait 1

    ' Hier ist die Empfangsroutine
    Print "Empfange"
    Call Rf12_rxdata(maxchar)
    For Count = 1 To Maxchar
    Print Chr(rfdata(count)) ; "-";
    Next Count
    Print

    Loop


    End 'end program


    ' ########################################################################
    ' ###### 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

    Und meine Frage war wie ich nun einige Werte Senden bzw. Empfangen kann.


    Code:
    Do 'Ewigschleife


    ' Hier ist die Senderoutine
    ' Print "Sende"
    ' Call Rf12_txdata(maxchar)

    Wait 1

    ' Hier ist die Empfangsroutine
    Print "Empfange"
    Call Rf12_rxdata(maxchar)
    For Count = 1 To Maxchar
    Print Chr(rfdata(count)) ; "-";
    Next Count
    Print

    Loop

    Irgendwo muß ich doch eine Messwert in die Sendevariable schieben. Das kapier ich nicht. Es muß doch irgendwie so heißen:

    Sendewert = Messwert
    call Senden


    oder nicht?



    Re: Wetterstation

    avrnix - 21.11.2007, 08:30


    Da es mit String arbeitet

    text=str(messwert)
    call senden

    dann wird das was in Text ist gesendet!

    Die Speicherung erfolgt im Speicher siehe Dim Text as ....



    Re: Wetterstation

    Eisbaeeer - 21.11.2007, 09:45


    Hi

    Du machst es dir um einiges einfacher (weil auch Übersichtlicher), wenn du das include von Kurzschluss benutzt.

    Das wird dann z.B. einfach in deinen code mit der Zeile:

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

    eingefügt.
    Die Datei inc_RF12-Treiber.bas wird dann sozusagen in deinen Code mit eingebettet.

    In der include sind alle Hex Befehle für die Initialisierung enthalten. Die Befehle sind als Sub aufzurufen.

    Hier noch die inc_RF12-Treiber.bas :

    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
    'Edit: Eisbaeeer
    'Date: 20071120
    'Subject: Get status from RF12
    '#######################################
    '------[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(&H0000) : Rf12_ready                    'Status holen
      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(&H0000)                                 'Status auslesen
      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(&H0000)                                 ': print Temp     '0000 -Status
      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>= 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


    So, jetzt zu deiner eigentlichen Frage.
    Wie lade ich die Variablen, die ich übertragen möchte:

    Code:
    Rf12_data(1) = Snap_sync
      Rf12_data(2) = &H50                                       'HDB2  1Byte-Adressen
      Rf12_data(3) = Byteanzahl                                 'HDB1  0..32DatenByteInfo
      Rf12_data(4) = Destadress                                 'Zieladresse
      Rf12_data(5) = Myadress                                   'Senderadresse


    Das ganzen Codeteile sind jetzt schon speziell auf das SNAP Protokoll angepasst. Jetzt wäre der Schritt nicht mehr weit, das SNAP auch zu benutzen, denn da hast du gleich eine Fehlerbehandlung und Checksummenprüfung dabei.
    Wir (ich) sind gerade noch dabei den Master bei einer fehlerhaften Sendung, nochmals nachsenden zu lassen. Der Slave sendet schon an den Master, wenn irgend etwas schief gelaufen ist (also Daten falsch sind).

    Ich hoffe, ich konnte dir ein wenig helfen. Ansonsten nochmal fragen.

    Grüße Eisbaeeer



    Re: Wetterstation

    Trexis5 - 21.11.2007, 13:29


    Code:
    Rf12_data(1) = Snap_sync
      Rf12_data(2) = &H50                                       'HDB2  1Byte-Adressen
      Rf12_data(3) = Byteanzahl                                 'HDB1  0..32DatenByteInfo
      Rf12_data(4) = Destadress                                 'Zieladresse
      Rf12_data(5) = Myadress                                   'Senderadresse
    Also ich kapier das echt nicht.

    Das hier unten schon, zumindest für eine Variable. Will ich mehrere übermitteln muß ich öfters, bzw. immer erneut senden oder?
    text=str(messwert)
    call senden



    Re: Wetterstation

    avrnix - 21.11.2007, 14:03


    Trexis5 hat folgendes geschrieben: [code]

    Das hier unten schon, zumindest für eine Variable. Will ich mehrere übermitteln muß ich öfters, bzw. immer erneut senden oder?
    text=str(messwert)
    call senden

    Bitte schmeisse die beiden Codes nicht durcheinander!

    Das Snap beruht auf ein Protokoll, was von Eisbeer angeführt wurde

    du kannst auch um bei der den Programm zu bleiben was du gepostet hast.

    mehre Werte in ein Array sammeln und in einen String von Länge Maxchar ( hier 32 ) zusammenfassen.
    Bspl:
    for x=1 to 4
    messwert=GETADC(x)
    text = text + str(messwert)
    text =text + " "
    next x
    call senden

    Damit sendest du 5 Messwerte mit einen Leerzeichen getrennt zum Empfänger.

    Bei Empfänger musst du den String beim Leerzechen cutten.

    siehe LEN,RIGHT, LEFT Befehle in Bascom -> Hilfe.

    Oder du sendest einen Messwert nach den anderen und Wertest die einzeln aus.



    Re: Wetterstation

    Eisbaeeer - 21.11.2007, 14:41


    Zeig mal, wie die Variablen deiner Messwerte aussehen:

    Dim Messwert As ?

    Ich bin aber immer noch der Meinung, dass du mit dem include besser dran bist.

    Mein Beispiel war vieleicht etwas verwirrend.

    Hier ist die Variable so definiert:
    Dim Rf12_data(20) As Byte

    Wenn deine Messwerte als Byte vorliegen, kannst du sie wie folgt zuweisen.
    Rf12_data(1) = Messwert(1)
    Rf12_data(2) = Messwert(2)
    Rf12_data(3) = Messwert(3)
    .....usw

    Wenn deine Messwerte als String definiert sind, kannst du das Beispiel von Arvnix nehmen. In dem Fall wäre:

    Dim Rf12_data As String * 20

    Rf12_data = Messwert

    Hier ist Rf12_data die Variable, die gesendet wird. In deinem Auszug wird statt Rf12_Data eben text als Variable benutzt.

    Grüße Eisbaeeer



    Re: Wetterstation

    avrnix - 21.11.2007, 14:51


    Dim Text As String * Maxchar At Rfdata Overlay


    der Empfänger speichert dort deine Messwerte ab bzw senden diese oder beim Empfang wird es dort gespeichert.

    Jetzt verstanden ?



    Re: Wetterstation

    Trexis5 - 21.11.2007, 21:35


    Hi,

    also werde ich das so machen mit dem include.
    Finde ich auch sinnvoll das so zu machen um alles übersichtlicher zu machen.

    $include "inc_RF12-Treiber.bas
    Dim Rf12_data As String * 20

    Meine Messwerte sind:
    Dim Calc As Single 'Temperatur
    Dim Rhlintemp As Single 'Feuchte
    Dim Druck As Single 'Druck
    Adval_adc2 As Word 'Licht
    Adval_adc3 As Word 'res.
    Adval_adc4 As Word 'res.


    Wenn ich diesen include einbaue dann bekomme ich 1000 Fehlermeldungen.



    Re: Wetterstation

    Trexis5 - 21.11.2007, 23:30


    Jetzt bekomme ich haufenweiße Fehlermeldungen. Das gibts doch nicht. Ich dehe noch durch.

    Code:

    '**********************************************************************************************************
    '*                                            M 8                                                         *
    '*                                       ------|-------                                                   *
    '*                         _____         |            |                                                   *
    '*  Programmstecker 1     (Reset) PC6  --| 1       28 |-- PC5 (ADC5/SCL)     Lichtsensor                  *
    '*                                       |            |                                                   *
    '*  RS232 PC                (RXD) PD0  --| 2       27 |-- PC4 (ADC4/SDA)                                  *
    '*                                       |            |                                                   *
    '*  RS232 PC                (TXD) PD1  --| 3       26 |-- PC3 (ADC3)                                      *
    '*                                       |            |                                                   *
    '*  Eingang Res.           (INT0) PD2  --| 4       25 |-- PC2 (ADC2)                                      *
    '*                                       |            |                                                   *
    '*  SHT11 Sck              (INT1) PD3  --| 5       24 |-- PC1 (ADC1)                                      *
    '*                                       |            |                                                   *
    '*  SHT11 Data           (XCK/TO) PD4  --| 6       23 |-- PC0 (ADC0)                                      *
    '*                                       |            |                                                   *
    '*                       +5V VDC  VCC  --| 7       22 |-- GND                                             *
    '*                                       |            |                                                   *
    '*                       -5V VDC  GND  --| 8       21 |-- AREF                                            *
    '*                                       |            |                                                   *
    '*                  (XTAL1/TOSC1) PB6  --| 9       20 |-- AVCC                                            *
    '*                                       |            |                                                   *
    '*                  (XTAL2/TOSC2) PB7  --| 10      19 |-- PB5 (SCK)          Progs. 3                     *
    '*                                       |            |                                                   *
    '*  1 Wire                   (T1) PD5  --| 11      18 |-- PB4 (MISO)         Progs. 4                     *
    '*                                       |            |                                                   *
    '*  -----                  (AIN0) PD6  --| 12      17 |-- PB3 (MOSI/OC2)     Progs. 5     FUNK [Spi_sdo]  *
    '*                                       |            |                                                   *
    '*  -----                  (AIN1) PD7  --| 13      16 |-- PB2 (SS/OC1B)                   FUNK [Spi_cs]   *
    '*                                       |            |                                                   *
    '*                         (ICP1) PB0  --| 14      15 |-- PB1 (OC1A)                                      *
    '*                                       --------------                                                   *
    '*                                                                                                        *
    '**********************************************************************************************************



    $regfile = "m8def.dat"
    $crystal = 4000000                                          'Quarzfrequenz festlegen
    Baud = 19200                                                ' use baud rate
    $hwstack = 128                                              ' default use 32 for the hardware stack
    $swstack = 128                                              ' default use 10 for the SW stack
    $framesize = 128


    $include "inc_RF12-Treiber.bas"  'RF12 Treiber einbinden
    Dim Rf12_data As String * 20

    Ddrd.2 = 0
    Ddrd.3 = 1
    Ddrd.4 = 1
    Portd = &B00000100                                          'PB: (Pull UP) PB2


    Config Timer1 = Timer , Prescale = 64                       'Takt: Quarz 4MHz/(64 * 2^16) (1 = ~ 1sec)
    On Timer1 Ontimer1
    Enable Timer1
    Start Timer1


    Config Adc = Single , Prescaler = Auto
    Start Adc

    Enable Interrupts


    '*********************************** 1 - W I R E   C o m m a n d *********************************
    Config 1wire = Portb.5                                      'use this pin

    Dim Dummy As Byte , I As Byte , Highbyte(4) As Byte , Lowbyte(4) As Byte
    Dim Crcread As Byte , Adval_adc1 As Word , Adval_adc2 As Word , Adval_adc3 As Word , Adval_adc4 As Word
    Dim Avg1_ges_temp As Long , Avg_1 As Long
    Dim Avg2_ges_temp As Long , Avg_2 As Long

    Dim Avgschleife1 As Byte
    Dim Avgschleife2 As Byte

    Const 16_bit = 65535

    Declare Sub Crc_get()                                       'this sub makes two reads for the CRC16 bytes from the 1-wire bus

    Const 1w_readmem = &HAA
    Const 1w_writemem = &H55
    Const 1w_convertch = &H3C
    Const 1w_readrom = &H33
    Const 1w_matchrom = &H55
    Const 1w_skiprom = &HCC
    Const 1w_searchrom = &HF0
    Const 1w_conditsrc = &HEC
    Const 1w_ovdrvskprom = &H3C
    Const 1w_ovdrvmtchrom = &H69
    Const 1w_vccoperation = &H40


      1wreset                                                   'reset the device

      1wwrite 1w_skiprom                                        'Skip ROM
      1wwrite 1w_writemem                                       'Write Memory
      1wwrite &H1C                                              'Write to 001C
      1wwrite &H00
      1wwrite 1w_vccoperation                                   'VCC Operation keeps device active!!

      Crc_get                                                   'Read in 2 bytes 16bits
      Dummy = 1wread(1)                                         'read dummy byte


      1wreset                                                   'reset the device
      1wwrite 1w_skiprom                                        'Skip ROM
      1wwrite 1w_writemem                                       'Write Memory
      1wwrite &H08                                              'Write to 00 08
      1wwrite &H00


      1wwrite &H00                                              '16 bit resoultion
      Crc_get                                                   'Read in 2 bytes 16bits
      Dummy = 1wread(1)                                         'read dummy byte
      1wwrite &H01                                              '5.12 Volt Range
      Crc_get                                                   'Read in 2 bytes 16bits
      Dummy = 1wread(1)                                         'read dummy byte


      1wwrite &H00                                              '16 bit resoultion
      Crc_get                                                   'Read in 2 bytes 16bits
      Dummy = 1wread(1)                                         'read dummy byte
      1wwrite &H01                                              '5.12 Volt Range
      Crc_get                                                   'Read in 2 bytes 16bits
      Dummy = 1wread(1)                                         'read dummy byte


      1wwrite &H00                                              'Output Open/Output OFF C0 is OFF 80 is ON
      Crc_get                                                   'Read in 2 bytes 16bits
      Dummy = 1wread(1)                                         'read dummy byte
      1wwrite &H01                                              'Doesn't matter space keeper
      Crc_get                                                   'Read in 2 bytes 16bits
      Dummy = 1wread(1)                                         'read dummy byte


      1wwrite &H00                                              'Output Open/Output OFF
      Crc_get                                                   'Read in 2 bytes 16bits
      Dummy = 1wread(1)                                         'read dummy byte
      1wwrite &H01                                              'Doesn't matter space keeper
      Crc_get                                                   'Read in 2 bytes 16bits
      Dummy = 1wread(1)                                         'read dummy byte
    '************************************END DS2450 Setup**************************************



    '************************************ R H T  1 1 **************************************
    Dim Ctr As Byte
    Dim Dataword As Word
    Dim Command As Byte
    Dim Disc As String * 20
    Dim Disf As String * 20

    Dim Calc As Single
    Dim Calc2 As Single
    Dim Rhlinear As Single
    Dim Rhlintemp As Single
    Dim Tempc As Single
    'Dim Tempf As Single

    Const C1 = -4
    Const C2 = 0.0405
    Const C3 = -0.0000028
    Const T1c = .01
    Const T2 = .00008
    'Const T1f = .018

    Sck Alias Portb.3
    Dataout Alias Portb.4
    Datain Alias Pinb.4
    'Redled Alias Portb.2

    Declare Sub Getit()

    'Ddrb.3 = 1
    'Ddrb.4 = 1
    'Ddrb = &B11111111                                           'all port b are output
    Config Pinb.3 = Output                                      'sck
    Config Pinb.4 = Output                                      'datain

    'reset the serial communications first, it is easily confused!
    Set Dataout
    For Ctr = 1 To 12
       Set Sck
       Waitus 2
       Reset Sck
       Waitus 2
    Next Ctr
    '************************************END RHT11 Setup**************************************


    '**************** M P X  4 1 1 4  A *******************
    'Poffset=1013hPa * (1-(1- 0.0065 * h/288)^5.255)

    'h=height above sea level.

    Const Meereshoehe = 1013                                    'hPa

    Dim Lokale_hoehe As Word
    Dim Poffset As Single
    Dim Temp1 As Single
    Dim Temp2 As Single
    Dim Druck As Single

    'Lokale_hoehe = 340                                          'Hier euren lokalen Wert von der Höhe eingeben.
    Lokale_hoehe = 159

    Dim Luftdruckzeit As Word
    Luftdruckzeit = 7200
    Dim Luftdruckzeit_2 As Word
    Luftdruckzeit_2 = 1800

    '*****************************************************




    Dim Helligkeit As Word
    Dim Timer1_secunde As Byte
    Dim Senden As Byte


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

    Code:
    Do






    '##############################################
      If Senden = 1 Then


    ' Hier ist die Senderoutine
    ' Print "Sende"
      Call Rf12_txdata(maxchar)

    ' Hier ist die Empfangsroutine
      'Print "Empfange"
      'Call Rf12_rxdata(maxchar)
      'For Count = 1 To Maxchar
        'Print Chr(rxdata(count)) ; "-";
      'Next Count


      Senden = 0

      End If
    '############################################




    If Timer1_secunde = 0 Then
    If Senden = 0 Then



      Helligkeit = Getadc(5)


     '****************************** D S 2 4 5 0 **********************************
      1wreset                                                   'reset the device

      1wwrite 1w_skiprom                                        'Skip ROM
      1wwrite 1w_convertch                                      'Begin Conversion
      1wwrite &H0F                                              'Convert Mask 0000|DCBA ie 0F=0000|1111
      1wwrite &H00                                              'Preset Mask Set=D Clear=d DdCcBbAa ie 55=0101|0101

      Crc_get                                                   'Read in 2 bytes 16bits


      Waitms 6                                                  'use formula to calculate exact duration for channels

      1wreset                                                   'reset the device
      1wwrite 1w_skiprom                                        'Skip ROM
      1wwrite 1w_readmem                                        'Read Memory
      1wwrite &H00                                              'Read Channel A
      1wwrite &H00                                              'Address 0000 and 0001

      For I = 1 To 4

          Lowbyte(i) = 1wread(1)
          Highbyte(i) = 1wread(1)

          Adval_adc1 = Makeint(lowbyte(1) , Highbyte(1))        'Druck
          Adval_adc2 = Makeint(lowbyte(2) , Highbyte(2))        'Temperatur
          Adval_adc3 = Makeint(lowbyte(3) , Highbyte(3))
          Adval_adc4 = Makeint(lowbyte(4) , Highbyte(4))

      Next



         Avg1_ges_temp = Avg1_ges_temp + Adval_adc1
         Incr Avgschleife1

         If Avgschleife1 < 30 Then Goto Sprung_adc1

         Avg_1 = Avg1_ges_temp / 30
         Avgschleife1 = 0
         Avg1_ges_temp = 0

         Sprung_adc1:




         Avg2_ges_temp = Avg2_ges_temp + Adval_adc2
         Incr Avgschleife2
         If Avgschleife2 <30> Hier den Faktor reinschreiben die rechnung gibts im Kleinen avr einmaleins


      '*****************************************************



      Timer1_secunde = 1




    End If                                                      'Senden 0
    End If                                                      'Timersecunde











    Loop
    '########################################################################
    '########################################################################

    Code:




    '################################################################################
    '################################################################################
    '-------------------- Timer 1-------------------------------
    Ontimer1:                                                   'Timer0-Routine, wird ein mal pro Sekunde ausgeführt
    'Der Timer zählt jetzt also immer von 3036 bis 65536
    'und das Unterprogramm wird damit alle 1 Sekunden angesprungen,
    'also mit 1 Hz
    Timer1 = 3036                                               'Timerstart verändern um genau 1 sec. zu erhalten

    If Timer1_secunde > 0 Then Decr Timer1_secunde              ' timer1_secunde


    Return
    '################################################################################
    '################################################################################



    '************ 1 - W I R E  ***************
    Sub Crc_get()                                               'this sub ensures that all crc operations are handled the same
    Crcread = 1wread(2)
    End Sub
    '*****************************************



    '************************** R H T  1 1 ***************************************
    Sub Getit()

       Local Datavalue As Word
       Local Databyte As Byte

       'start with "transmission start"
       Set Sck
       Reset Dataout
       Reset Sck
       Set Sck
       Set Dataout
       Reset Sck


       'now send the  command
       Shiftout Dataout , Sck , Command , 1

       Ddrb.3 = 1
       Ddrb.4 = 0
       'Ddrb = &B11111101                                        'datain is now input
       Config Pinb.4 = Input                                    'datain
       Set Sck                                                  'click one more off
       Reset Sck
       Waitus 10                                                'no idea why, but it doesn't work without it!
       Bitwait Pinb.4 , Reset                                   'wait for the chip to have data ready

       Shiftin Datain , Sck , Databyte , 1                      'get the MSB
       Datavalue = Databyte

       Ddrb.3 = 1
       Ddrb.4 = 1
       'Ddrb = &B11111111
       Config Pinb.4 = Output

       Reset Dataout                                            'this is the tricky part- Lot's of hair pulling- have to tick the ack!
       Set Sck
       Reset Sck

       Ddrb.3 = 1
       Ddrb.4 = 0
       'Ddrb = &B11111101                                        'datain is now input
       Config Pinb.4 = Input

       Shiftin Datain , Sck , Databyte , 1                      'get the LSB
       Shift Datavalue , Left , 8
       Datavalue = Datavalue Or Databyte
       'don't tick the clock or ack since we don't need the CRC value, leave it hanging!
       Dataword = Datavalue

       Ddrb.3 = 1
       Ddrb.4 = 1
       'Ddrb = &B11111111
       Config Pinb.4 = Output

       Reset Dataout
       Set Sck
       Reset Sck

       Ddrb.3 = 1
       Ddrb.4 = 0
       'Ddrb = &B11111101                                        'datain is now input
       Config Pinb.4 = Input

       Shiftin Datain , Sck , Databyte , 1                      'not using the CRC value for now- can't figure it out! Anybody know how to impliment?
       'Print "CRC value was - " ; Databyte

       Ddrb.3 = 1
       Ddrb.4 = 1
       'Ddrb = &B11111111
       Config Pinb.4 = Output

       Set Dataout
       Set Sck
       Reset Sck
    End Sub
    '**********************************************************




    Re: Wetterstation

    Eisbaeeer - 21.11.2007, 23:50


    Hi

    Ich verspreche dir, dass ich mir das gleich morgen anschaue. Das bekommen wir schon hin. Ich muss jetzt nur ins Bett, sonst komme ich morgen ganz früh, nicht raus.

    Grüße Eisbaeeer



    Re: Wetterstation

    Trexis5 - 21.11.2007, 23:58


    Super.
    Da freue ich mich.
    Der obige Code kommt in die Außeneinheit.
    Dort ist die 1-Wire Schnittstelle angeschlossen und der Feuchte-Temperaturfühler.

    Die Messwerte die ich senden will sind:
    Dim Calc As Single 'Temperatur
    Dim Rhlintemp As Single 'Feuchte
    Dim Druck As Single 'Druck
    Adval_adc2 As Word 'Licht
    Adval_adc3 As Word 'res.
    Adval_adc4 As Word 'res.



    Der M644 empfängt dann alles.



    Re: Wetterstation

    Eisbaeeer - 22.11.2007, 11:06


    Trexis5 hat folgendes geschrieben: Super.
    Da freue ich mich.
    Der obige Code kommt in die Außeneinheit.


    Hi
    Ich gehe mal davon aus, dass das nicht der vollständige Code ist. Ansonsten fehlen da noch ein paar Sachen, das die RF12 Module betrifft.

    Die Include Datei stellt dir die Routinen für die Ansteuerung der RF12 Module zur Verfügung. Die Einstellungen für die Module musst du dem Include schon noch mitteilen. Bedeutet, Routine mit Parametern aufrufen (Die Parameter sind z.B. Frequenz, Baudrate, etc.)

    Code:
    '------[ RF12 ]-----------------------------------------------------------------
    Const Rf12freq = 433.92                                     'Kanal-Einstellung
    Const Rf12baud = 19200                                      'Baudrate
    Const Maxchar = 32                                             'Maximale Byte Anzahl
    Const framelength = 32                                        'Framelänge


    '------[ RF12 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

    '------[ Senden ]------------------------------------------------------------------
    Rf12_data = 'Hier kommen deine Daten rein'
    Call Rf12_txdata(framelength)


    Ich finde es persönlich einfacher, mit Byte Päckchen zu arbeiten. Dazu müsstest du deine Werte (z.B. Single oder Word) zerhackstückeln.
    Das hört sich jetzt schlimmer an, als es ist. Dazu gibt es den Befehl MID.
    Dann würden deine Daten so in die Variable eingelesen:

    For i = 1 to framelength
    Rf12_data(i) = Adval_adc2(i)
    next i

    oder ausgeschrieben:

    Rf12_data(1) = Adval_adc2(1)
    Rf12_data(2) = Adval_adc2(2)
    Rf12_data(3) = Adval_adc2(3)
    Rf12_data(4) = Adval_adc2(4)
    .. usw. bis Framelength erreicht ist

    Framelength ist dabei wieder die Anzahl von Bytes, die dein Wert hat.

    Grüße Eisbaeeer

    P.S.: Hab gerade noch gesehen, dass dein Helligkeitswert ja schon als Byte vorliegt.

    Helligkeit = Getadc(5)

    Dann fang damit an. Sende erst nur diesen einen Wert und teste mit dem.

    Rf12_data(1) = Getadc(5) 'auf der Sendeseite

    und

    Helligkeit = Rf12_data(1) 'auf der Empfangsseite

    Viel Erfolg!



    Re: Wetterstation

    Trexis5 - 22.11.2007, 13:31


    Hi,

    das war schon der gesammte Code.
    Also fehlt das noch was du geschrieben hast.
    Ok das füge ich noch ein.

    Das mit dem Befehl MID schaue ich mir noch genauer an.


    Jetzt kommt der aha Effekt.
    Rf12_data(1)
    Ich dachte die zahl z.B. (1) ist ein wert. Aber das ist die "Position".


    Aber Helligkeit = Getadc(5) ist doch wein Word. Also müßte ich ja erst das Word in Byte zerlegen und dann symbolisch:
    Rf12_data(1) = helligkeit High
    Rf12_data(2) = helligkeit low
    schicken oder nicht?


    Nun bin ich aber schon schlauer.
    Cih werde das alles mit den 01er und 02er testen. Die 12er Module gibts irgendwann wieder. Dann werde ich es umbauen, falls es überhaupt geht :D .



    Re: Wetterstation

    Eisbaeeer - 22.11.2007, 14:17


    Trexis5 hat folgendes geschrieben: Hi,

    Jetzt kommt der aha Effekt.
    Rf12_data(1)
    Ich dachte die zahl z.B. (1) ist ein wert. Aber das ist die "Position".

    Aber Helligkeit = Getadc(5) ist doch wein Word.

    Du kannst einer Variablen sagen, aus wieviel Bytes sie bestehen soll.
    Mit:

    Dim Rf12_data(9) as Byte

    legt man fest, dass die Variable Rf12_data aus 9 Byte besteht.
    Wenn du also das 2. Byte der Variablen Rf12_data füllen oder auslesen möchtest, wählst du das mit Rf12_data(2) an.

    Was für ein Display benutzt du bei der Wetterstation?

    Grüße Eisbaeeer



    Re: Wetterstation

    Trexis5 - 22.11.2007, 15:03


    Aber "Rf12_data" ist doch schon als:
    Dim Rf12_data As String * 20
    deklariert.

    Dann kann ich ja kein Word laden.

    Das Display ist von Neuhold.


    -------------------------------------------------

    Compile geht immer noch nicht.



    Re: Wetterstation

    Eisbaeeer - 23.11.2007, 07:15


    Hi

    Sieh dir mal den Teil "Senden" im include an. Das Programm ist im Moment so ausgelegt, dass Rf12_data als Byte Variable behandelt wird. Du müsstest als erstes den Teil

    Code:
      For Lv = 1 To Txlen
          Rf12_ready
          Temp = &HB800 + Rf12_data(lv)                         'Sende Nutzdaten
          Temp = Rf12_trans(temp)
          Next Lv


    anpassen.

    Wenn beim Compilieren Fehler auftreten, kannst du anhand der Fehlermeldung weitersuchen. In deinem Bild sagt er ja schon, dass von Zeile 32- ein Assignment Error vorliegt. Deshalb compiliert er ja nicht. Quelle ist das include File.

    Also stimmt entweder mit Temp oder mit Rf12_trans was nicht. Hast du denn die Variable "Temp" deklariert? Füge mal "Dim Temp as Word" ein. Vor das include.

    Learning by doing

    Grüße Eisbaeeer



    Re: Wetterstation

    Trexis5 - 04.12.2007, 00:54


    Was für einen Code brauche ich jetzt. Der Code was oben gepostet wurde bringt lauter fehlermeldungen.
    Zu was braucht man den pin 4 vom funkmodul?



    Re: Wetterstation

    avrnix - 04.12.2007, 09:33


    SCK ? oder welchen PIN meist du ?

    Und welche Fehlermeldungen bekommst du ?

    Und was hast du gemacht ?



    Re: Wetterstation

    Trexis5 - 04.12.2007, 10:14


    http://comwebnet.co.funpic.de/snap/SnapNode_roolo_gross.JPG

    Ich habe auch einen M8 als Sender und einen M32 als Empfänger.
    1. Also nehme ich diesen Schaltplan. Ohne Quarz für den 8er oder?
    2.Dort geht es von Pin 4 (DCLK/CFIL/FFIT) an Portd.3. Den Port finde ich aber im Programm nicht. Für was soll der sein? Kann man den weglassen?


    3.Dann der Empfänger ist ein M32 mit 16Mhz Quarz. Wie klemme ich dort dieses Funkmodul dann an?


    Wenn ich den Code von http://comwebnet.co.funpic.de/snap/RF12-samples.zip nehme dann bekomme ich die Fehlermeldung:
    Unknown Statment [$nocompile]



    Re: Wetterstation

    Eisbaeeer - 04.12.2007, 10:31


    Trexis5 hat folgendes geschrieben:
    Wenn ich den Code von http://comwebnet.co.funpic.de/snap/RF12-samples.zip nehme dann bekomme ich die Fehlermeldung:
    Unknown Statment [$nocompile]

    Dann kommentiere die Zeile aus. Bedeutet nur, dass du das inc nicht als eigenes Script compilieren sollst. Denn das include wird ja mit dem Haupt-Script mit compiliert.
    Mach einfach ein ' vor die Zeile.

    Grüße Eisbaeeer

    P.S.: Die Anschlussbelegung an den M32 erkennst du aus dem Programm. Ist meines Erachtens ganz klar beschrieben:


    '----------[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



    Re: Wetterstation

    Trexis5 - 04.12.2007, 12:37


    'config the SPI in master mode.The clock must be a quarter of the slave cpu

    Was heiß das genau für mein 16er Quarz am M32?



    'Hier ggf. den SoftSPI reinmachen
    Was bedeutet das?



    Re: Wetterstation

    avrnix - 04.12.2007, 13:15


    Trexis5 hat folgendes geschrieben: http://comwebnet.co.funpic.de/snap/SnapNode_roolo_gross.JPG




    Wenn du Probleme mit den SnapNode_Rollo Programm hast
    Frage Kurzschluss:
    http://www.iphpbb.com/board/viewforum.php?nxu=10138836nx63949&f=25&sid=d61c990af9cfa225951f46585c6ded03

    :idea: :arrow: Software nach , oder bei der Hardware
    - hier gehts doch um deine Wetterstation.



    Re: Wetterstation

    Trexis5 - 04.12.2007, 13:27


    Hi,

    ich nehme einfach mal die beiden Programme und passe die an und flahe und schaue ob auf dem Display was angezeigt wird.

    Das ist der einzige Code den ich gefunden habe der fast keine Fehlermeldung beim Compilieren gebracht hat. Alle haben viele Fehler, wie auch andere schon geschrieben haben.

    Wenn das dann mal geht baue ich die Wetterstation dort rein.

    Das geht doch oder?

    Nur wie klemme ich das Kabel Pin 4 (DCLK/CFIL/FFIT) an? Direkt an den Quarz vom M32?



    Re: Wetterstation

    Eisbaeeer - 04.12.2007, 14:55


    Trexis5 hat folgendes geschrieben: Hi,
    Wenn das dann mal geht baue ich die Wetterstation dort rein.
    Das geht doch oder?
    Nur wie klemme ich das Kabel Pin 4 (DCLK/CFIL/FFIT) an? Direkt an den Quarz vom M32?

    Also der Code, bzw. das inc-File funktioniert ja auch. Es geht ja nur darum, wie du deinen Controller mit dem RF12 verbindest.

    Da muss ich schon langsam die Frage stellen, ob das Projekt für dich zu groß ist. In dem Bereich geht halt zusammenstecken und Teile von verschiedenen Scripten zusammenbauen nicht mehr. Du bräuchtest schon grundlegendere Kenntnisse.

    Du hast 2 Möglichkeiten. 1. Du benutzt einen extra Quarz für den M8 bzw. M32 oder du nutzt den Taktausgang vom RF12 (der macht 10MHz) als externen Takt. ABER dazu musst du die Fuses des Mega anpassen und das ist absolut nix für Beginner. Ein falscher Klick und dein Mega reagiert nicht mehr.

    Lies mal diese Seite durch. Dort sind die Grundlegenden Dinge für den RF12 beschrieben.
    http://comwebnet.co.funpic.de/seite48.php
    Schau mal unter "Schaltplan und Layout.."
    Wenn du jetzt das Datenblatt vom M32 anschaust, findest du auch dort die Pins vom M8 wieder.

    Und FFit gehört absolut nicht an den Quarz, sondern an einen Eingangspin und zwar an einen Interrupt Pin. Dieser Heisst beim M32 INT0 und INT1.

    INT0 = PD.2
    INT1 = PD.3

    Wenn du dich für einen entschieden hast, musst du noch das Einsprungsziel anpassen. Dort steht dann z.B.:

    On Int0 Ffit_isr:

    Du siehst also, dass hier der PD.2 verwendet wurde. Der INT0.
    Ich würde dir vorschlagen, das Script zu verstehen und nicht einfach zu kopieren und einzufügen und hoffen, dass etwas auf das Display kommt. Dort wirst du gar nichts vom RF12 sehen, ausser du gibst den Befehl dazu.

    Ich will dich ja nicht entmutigen und ich bin verwundert, wie du das bis jetzt alles hinbekommen hast, aber wo fangen wir an?

    Grüße Eisbaeeer



    Re: Wetterstation

    Trexis5 - 04.12.2007, 18:00


    Hi,

    ich würde ja mit dem M8 anfangen, aber dort sehe ich nix. Da gibts kein Display.

    Also muß ich mit dem M32 anfangen. Dort habe ich ein Diplay dran.
    Also lasse ich clk vom Funkmodul weg und Takte meinen M32 selber.
    Das einstellen ist kein Problem.

    Das mit dem Int habe ich gesehen. Das ist mir auch jetzt klar.

    Also der Code läuft anscheinend.


    Locate 3 , 1 : Lcd "a: " ; Rf12_data(1)
    Locate 4 , 1 : Lcd "b: " ; Rf12_data(2)

    Das sind die einzelnen Bytes die ankommen oder?



    Re: Wetterstation

    Eisbaeeer - 04.12.2007, 18:04


    Ja genau. Du schaust dir gerade die ersten 2 Byte an.
    Freut mich, dass es klappt. Jetzt kann es ja weiter gehen.

    Ich empfehle dir, einen Testsender laufen zu lassen und den über eine längere Zeit. Übertrage einfach irgend welche Daten, z.B. die Temperatur und lasse das ganze mal eine Zeit laufen.

    Grüße Eisbaeeer



    Re: Wetterstation

    Trexis5 - 04.12.2007, 18:36


    Hallo,

    ich schicke ja einen String.
    Wie lese ich diesen String?
    Ich möchte ja nicht nur die einzelnen Bytes lesen.

    Das zerhacken kann ich schon. Das habe ich über länger Zeit per 2-Draht Seriell gemacht.



    Re: Wetterstation

    Trexis5 - 05.12.2007, 00:32


    Hi,

    also einmal ein Erfolg. Das sende ich.
    Code:
      'Byteanzahl = Rnd(10)                                      'zum Test zufällige Nutzdatenlänge 0...32Byte
      Byteanzahl = 24
      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


    Und auf dem Display kommt auch die 24 an im Rf12_data(3).

    Das freucht mich schonmal.

    Das was mir jetzt erstmal nicht gefällt. Ich habe einen Zähler der die Schleifen Zählen soll auf dem Display und der Springt von Plus nach minus und das oft mit irren Änderungen. Das passiert meistens, aber nicht immer, wenn Daten gelesen werden.

    Irgendwann kommt kein Signal mehr an und dann zählt der Zähler auch wieder richtig.

    Warum schreibt das Programm irgendwelche Variablen um?

    Ich habe auch bei keinen Modulen den Reset angeklemmt.

    Warum ist das so?



    Re: Wetterstation

    Trexis5 - 05.12.2007, 18:07


    Hallo Jungs,

    könnte mir bitte einer sagen wie ich daten Senden kann?

    So habe ich die Variablen Dimensioniert
    Code:
    Goto Startup
    $include "inc_RF12-Treiber.bas"    'Treiber einbinden
    Startup:

    Dim Text As String * 40 At Rf12_data Overlay
    Dim Messwert As Word 


    Und so ist der Code.
    Code:
    Do



    Messwert = 12
    Text = Text + "Z1"
    Text = Text + Str(messwert)
    Text = Text + "Z2"



      Gosub Sendsnapframe

      Wait 2


    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


    Aber irgendwie stimmt da was nicht.



    Re: Wetterstation

    Eisbaeeer - 06.12.2007, 11:13


    Hi

    also bevor du das Sub Sendsnapframe aufrufst, musst du erst mal anschauen, was da gemacht wird. Die Variable für die zu sendenden Daten heisst: RF12_data()

    Bedeutet, dass du erst rf12_data() füllen solltest. Wenn du zwischendrin Text als Variable nutzt, macht das nix, aber Text muss dann in Rf12_data() rein.

    Wenn du dir das Sub Sendsnapframe anschaust, werden die ersten 5 Byte für das SNAP verwendet. Wenn du kein SNAP verwenden willst, kannst du:

    Code:
      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


    diese auch schon füllen. Die ersten 5 werden eben für das SNAP Protokoll verwendet.

    Jetzt zerhackst du dein Text z.B. mit dem Befehl MID (siehe Hilfe) und füllst RF12_data(1), Rf12_data(2), Rf12_data(3), ... usw.

    Aber hier ist das Sub Sendsnapframe nur eine Hilfe für das SNAP. Im Grunde brauchst du das nicht, wenn du SNAP nicht verwenden willst. Es reicht also, die Variable RF12_data() zu füllen und ein:

    Call Rf12_txdata(framelength) 'Senden

    auszuführen. Framelength ist dabei deine Byteanzahl. Jetzt sendet er den kompletten Inhalt Rf12_data() raus.

    Schau dir mal das Sub "Rf12_txdata" in der inc_RF12-Treiber.bas an.
    Dieses Sub ist für das Senden zuständig. Wenn du das verstanden hast, bekommst du das mit dem Senden hin. Bestimmt.

    Grüße Eisbaeeer



    Re: Wetterstation

    Trexis5 - 06.12.2007, 11:54


    Mein Problem ist ja das ich keinen blassen Schimmer habe wie ich rf12_data() füllen kann. Ich grüble schon seit zwei Tagen und komme nicht drauf.

    Ich verstehe wie ich einen String zerhacken kann, aber nicht wie ich diesen in die einzelen Variablen bringe. String nach Byte geht ja nicht so einfach. Auch kann ich ja nicht in jedes Byte nur zwei Zahlen schieben, gewscheige dann Buchstaben.

    Mein String aus den Messwerten die ich schicken will ist so aufgebaut:
    Z15345Z331675Z3860Z4 usw.
    Das heißt Z1 -> dann kommt der erste Messert Z2 -> dann kommt der zweite Messert usw.! Insgesammt sind es 8 Messwerte im String. Auf der anderen Seite kann ich dann zerhacken durch suche nach Z1 oder Z2 oder Z3 usw.!

    Über die Serielle Schnittstelle (zwei Atmel verbunden über TX un RX) habe ich dann auf der anderen Seite bei jedem Lesen nach allen Z1-Z8 gesucht und wenn alles da war in einem String, dann war der String erfolgreich übertragen worden.

    Somit ist es auch egal wie lange die Messerte sind, die können ja auch unterschiedlich lange sein. Dur die Funktin Z1-Z8 finde ich alles wieder.



    Re: Wetterstation

    Trexis5 - 06.12.2007, 21:36


    So, wieder eins weiter:
    Senden:
    Code:
    Incr Messwert
    Zufaelligezahl = Zufaelligezahl + 1


    Rf12_data(1) = Messwert
    Rf12_data(2) = Zufaelligezahl
    Rf12_data(3) = 233
    Rf12_data(4) = 0
    Rf12_data(5) = 0
    Rf12_data(6) = 0
    Rf12_data(7) = 0
    Rf12_data(8) = 0


    Call Rf12_txdata(17)


    Empfangen:
    Code:
      Locate 1 , 1 : Lcd "a: " ; Rf12_data(1)
      Locate 2 , 1 : Lcd "b: " ; Rf12_data(2)
      Locate 3 , 1 : Lcd "c: " ; Rf12_data(3)
      Locate 4 , 1 : Lcd "d: " ; Rf12_data(4)
      Locate 5 , 1 : Lcd "e: " ; Rf12_data(5)
      Locate 6 , 1 : Lcd "f: " ; Rf12_data(6)
      Locate 7 , 1 : Lcd "g: " ; Rf12_data(7)
      Locate 8 , 1 : Lcd "h: " ; Rf12_data(8)
      Locate 9 , 1 : Lcd "i: " ; Rf12_data(9)
      Locate 10 , 1 : Lcd "j: " ; Rf12_data(10)
      Locate 11 , 1 : Lcd "k: " ; Rf12_data(11)
      Locate 12 , 1 : Lcd "l: " ; Rf12_data(12)
      Locate 13 , 1 : Lcd "m: " ; Rf12_data(13)

      Locate 8 , 9 : Lcd "h1: " ; Rf12_data(14)
      Locate 9 , 9 : Lcd "i1: " ; Rf12_data(15)
      Locate 10 , 9 : Lcd "j1: " ; Rf12_data(16)
      Locate 11 , 9 : Lcd "k1: " ; Rf12_data(17)
      Locate 12 , 9 : Lcd "l1: " ; Rf12_data(18)
      Locate 13 , 9 : Lcd "m1: " ; Rf12_data(19)


    Ankommen tut alles perfekt.

    Nur habe ich halt das Problem wie oben geschrieben. Den String in die Sende-bytes zu legen. Ich komme nicht drauf.
    Zitat:
    Mein Problem ist ja das ich keinen blassen Schimmer habe wie ich rf12_data() füllen kann. Ich grüble schon seit zwei Tagen und komme nicht drauf.

    Ich verstehe wie ich einen String zerhacken kann, aber nicht wie ich diesen in die einzelen Variablen bringe. String nach Byte geht ja nicht so einfach. Auch kann ich ja nicht in jedes Byte nur zwei Zahlen schieben, gewscheige dann Buchstaben.

    Mein String aus den Messwerten die ich schicken will ist so aufgebaut:
    Z15345Z331675Z3860Z4 usw.
    Das heißt Z1 -> dann kommt der erste Messert Z2 -> dann kommt der zweite Messert usw.! Insgesammt sind es 8 Messwerte im String. Auf der anderen Seite kann ich dann zerhacken durch suche nach Z1 oder Z2 oder Z3 usw.!

    Über die Serielle Schnittstelle (zwei Atmel verbunden über TX un RX) habe ich dann auf der anderen Seite bei jedem Lesen nach allen Z1-Z8 gesucht und wenn alles da war in einem String, dann war der String erfolgreich übertragen worden.

    Somit ist es auch egal wie lange die Messerte sind, die können ja auch unterschiedlich lange sein. Dur die Funktin Z1-Z8 finde ich alles wieder.



    Re: Wetterstation

    Wigbert - 06.12.2007, 21:55


    Hi Terexis5,

    stell mal den ganzen Code rein



    Re: Wetterstation

    Trexis5 - 06.12.2007, 22:16


    Code:
    $regfile = "m8def.dat"
    $hwstack = 128
    $swstack = 128
    $framesize = 64
    '$prog &HFF , &HE4 , &HD9 , &H00                             ' Mega8 mit internen 8MHz
    $crystal = 8000000                                          '
    $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
    Dim Text As String * 40 At Rf12_data 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 =""
    Dim Zufaelligezahl As Byte
    Zufaelligezahl = 0
    Dim Messwert As Byte
    Messwert = 0
    '--------[mainloop]------------------------------------------------------


    Code:
    Do





    Incr Messwert
    Zufaelligezahl = Zufaelligezahl + 1
    'Messwert = 124
    'Text = Text + "Z1"
    'Text = Text + Str(messwert)
    'Text = Text + "Z2"

    Rf12_data(1) = Messwert
    Rf12_data(2) = Zufaelligezahl
    Rf12_data(3) = 233
    Rf12_data(4) = 0
    Rf12_data(5) = 0
    Rf12_data(6) = 0
    Rf12_data(7) = 0
    Rf12_data(8) = 0


    Call Rf12_txdata(17)


      '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 2


    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



    Re: Wetterstation

    Kurzschluss - 06.12.2007, 23:01


    Hi Trexis5,

    versuchs mal so:

    Code:
    Dim RF12_data(46) As Byte , RF12_S As String * 40 At RF12_data+5 Overlay
    'wichtig ist die +5 !!!   




    die ersten 5 Byte bleiben für das SNAP-Protokoll
    ab dem 6.Byte wird der String reingestetzt

    einfach per:

    RF12_S="" 'clear String
    RF12_S="Das ist mein Messwert: "+str(Messwert)

    beim senden musst du nur noch die Länge berechnen oder
    immer alle Bytes senden (der rest sind dann leerzeichen)

    vor einer neuen Stingzuweisung solltest du immer
    per RF12_S="" den alten Inhalt löschen

    Beschreib mir nochmal genauer wie dein String + Messwerte
    aussehen soll.

    willst du 'ne Art csv-Datei Daten senden?

    Vieleicht kann ich dir da helfen

    mfg
    Kurzschluss



    Re: Wetterstation

    Trexis5 - 06.12.2007, 23:28


    Code:
    Dim Befehl As String * 90
    Dim Position As Byte , Lang As Byte , Mess As Single
    Const Z1 = "Z1"
    Const Z2 = "Z2"
    Const Z3 = "Z3"
    Const Z4 = "Z4"
    Const Z5 = "Z5"
    Const Z6 = "Z6"
    Const Z7 = "Z7"


    Code:
        Mess = Druck                                            'Luftdruck
        Mess_string = Str(mess)                                 'Messwert in String umwandeln
        Mess_string = Mid(mess_string , 1 , 6)
        Zeichenspeicher = Z1 + Mess_string


        Mess = Rhlintemp                                        'Feuchte  RHT 11
        Mess_string = Str(mess)                                 'Messwert in String umwandeln
        Mess_string = Mid(mess_string , 1 , 6)
        Zeichenspeicher = Zeichenspeicher + Z2
        Zeichenspeicher = Zeichenspeicher + Mess_string


        Mess = Tempc                                            'Temperatur  RHT 11
        Mess_string = Str(mess)                                 'Messwert in String umwandeln
        Mess_string = Mid(mess_string , 1 , 6)
        Zeichenspeicher = Zeichenspeicher + Z3
        Zeichenspeicher = Zeichenspeicher + Mess_string


        Mess = Avg_2                                            'temp einfach
        Mess_string = Str(mess)                                 'Messwert in String umwandeln
        Mess_string = Mid(mess_string , 1 , 6)
        Zeichenspeicher = Zeichenspeicher + Z4
        Zeichenspeicher = Zeichenspeicher + Mess_string


        Mess = Avg_3                                            'Licht
        Mess_string = Str(mess)                                 'Messwert in String umwandeln
        Mess_string = Mid(mess_string , 1 , 6)
        Zeichenspeicher = Zeichenspeicher + Z5
        Zeichenspeicher = Zeichenspeicher + Mess_string


        'Mess = Adval_adc4
        Mess = 1234567890
        Mess_string = Str(mess)                                 'Messwert in String umwandeln
        Mess_string = Mid(mess_string , 1 , 6)
        Zeichenspeicher = Zeichenspeicher + Z6
        Zeichenspeicher = Zeichenspeicher + Mess_string


        Zeichenspeicher = Zeichenspeicher + Z7


        If Senden = 1 Then
        Print Zeichenspeicher
        Senden = 0
        End If


    So habe ich es beim Testen von Atmel zu Atmel geschickt per Seriall.



    Re: Wetterstation

    Trexis5 - 07.12.2007, 22:41


    @Kurzschluss

    D A N K E !!!

    Du hast mir die Richtigen Infos gegeben.
    Zitat:
    versuchs mal so:
    Code:

    Dim RF12_data(46) As Byte , RF12_S As String * 40 At RF12_data+5 Overlay
    'wichtig ist die +5 !!!


    die ersten 5 Byte bleiben für das SNAP-Protokoll
    ab dem 6.Byte wird der String reingestetzt

    einfach per:

    RF12_S="" 'clear String
    RF12_S="Das ist mein Messwert: "+str(Messwert)


    Jetzt kann ich einen String mit 90Zeichen schicken.
    Hoffe ich habe das alles richtig gemacht.


    Hier der Sende-Code:
    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"
    $hwstack = 128
    $swstack = 128
    $framesize = 128
    '$prog &HFF , &HE4 , &HD9 , &H00                             ' Mega8 mit internen 8MHz
    $crystal = 4000000                                          '
    '$baud = 19200
    $baud = 9600
    Const Rf12freq = 433.92                                     'Kanal-Einstellung
    'Const Rf12baud = 19200                                      'Baudrate
    Const Rf12baud = 9600
    Const Myadress = 10                                         'NodeAdress
    Const Snap_sync = &H54                                      'Synczeichen SNAP-Protokoll

    'RF-Variablen
    Dim Lv As Byte
    Dim Temp As Word
    Dim Rf12_data(96) As Byte , Rf12_s As String * 90 At Rf12_data + 7 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(90) As Byte , S_buffer As String * 90 At Buffer Overlay
    Dim Text As String * 90 At Rf12_data Overlay
    '--------------[Hardwaresetup für Pollin Funkboard]-----------------------------------
    'PortD.3-->INT1 an FFIT --Interrupt(High) wenn FiFO-Buffer voll (ef-Bit set)
    '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

    Dim Zufaelligezahl As Byte
    Dim Messwert As Word

    Dim Position As Byte , Lang As Byte , Mess As Single
    Dim Zeichenspeicher As String * 90 , Vergleichsspeicher As String * 20 , Sort As String * 20 , Mess_string As String * 20

    Const Z1 = "Z1"
    Const Z2 = "Z2"
    Const Z3 = "Z3"
    Const Z4 = "Z4"
    Const Z5 = "Z5"
    Const Z6 = "Z6"
    Const Z7 = "Z7"



    '--------[mainloop]------------------------------------------------------
    Do

        Rf12_s = ""
        Zeichenspeicher = ""

        Incr Mess

        'Mess = 1234567890
        Mess_string = Str(mess)                                 'Messwert in String umwandeln
        Mess_string = Mid(mess_string , 1 , 6)
        Zeichenspeicher = Zeichenspeicher + "0000"
        Zeichenspeicher = Zeichenspeicher + Z6
        Zeichenspeicher = Zeichenspeicher + Mess_string
        Zeichenspeicher = Zeichenspeicher + Z7


    'Rf12_s = "1234Z11234567890Z21234567890Z3123456789Z4123456789Z51234567890Z61234567890Z7123456789Z8"       'clear String
    Rf12_s = Zeichenspeicher

    Byteanzahl = 11

      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 2


    Loop

    End                                                         'end program


    '------[Send Frame over RF12]---------------------------------
    Sendsnapframe:
    'Header aufbereiten (SNAP)
      Rf12_data(1) = Snap_sync
      Rf12_data(2) = &H50 6                                     '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


    Und dann das Empfangen:
    Code:
    '#######################################
    '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 = "m32def.dat"
    $hwstack = 128
    $swstack = 128
    $framesize = 128
    '$prog &HFF , &HFF , &H99 , &H00                             ' für Mega32
    $crystal = 16000000
    '$crystal = 10000000                                         '
    '$baud = 19200
    'Baud = 19200
    $baud = 9600
    Baud = 9600

    Ddrb.0 = 1
    Portb.0 = 1


    Ddrd.7 = 1                                                  'Ausgang PWM


    Portd.2 = 1                                                 'PD: (Pull UP) PD2 aktivieren  INT0
    Portd.6 = 1                                                 'PD: (Pull UP) PD6 aktivieren  Taste Prog
    Portb.2 = 1                                                 'PB: (Pull UP) PB2 aktivieren  INT2



    Config Scl = Portd.5                                        ' I2C-Clock festlegen
    Config Sda = Portd.4                                        ' I2C-Data festlegen


    ' LCD-Typ festlegen
    Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portc , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 8
    Cls
    Cursor Off
    Locate 1 , 1 : Lcd "test1"

    Const Rf12freq = 433.92                                     'Kanal-Einstellung
    'Const Rf12baud = 19200                                      'Baudrate
    Const Rf12baud = 9600
    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(96) As Byte , Rf12_s As String * 90 At Rf12_data + 6 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)
    '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.1 : Ddrb.1 = 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
    Dim Zaehler_schleife As Integer
    Dim Zaehler_schleife2 As Integer
    Dim Zaehler_schleife3 As Integer

    Dim Count As Byte
    Dim Speicherstring As String * 40

    Cls

    Code:
    Do


      Cls
      Incr Zaehler_schleife2

      If Rf_rxd = 1 Then

          Rf12_s = ""
          Gosub Framehandler
          Gosub Rf12_rxd_on

         For Lv = 6 To 96
           Rf12_s = Rf12_s + Chr(rf12_data(lv))
         Next Lv

       End If

      Incr Zaehler_schleife3
      Locate 1 , 1 : Lcd "a: " ; Rf12_data(1)
      Locate 2 , 1 : Lcd "b: " ; Rf12_data(2)
      Locate 3 , 1 : Lcd "c: " ; Rf12_data(3)
      Locate 4 , 1 : Lcd "d: " ; Rf12_data(4)
      Locate 5 , 1 : Lcd "e: " ; Rf12_data(5)

      Locate 7 , 1 : Lcd "Datenlaenge: " ; Rf12_data(10)


      Locate 10 , 1 : Lcd "Daten: " ; Rf12_s
      Locate 16 , 1 : Lcd Zaehler_schleife ; "     " ; Zaehler_schleife2 ; "     " ; Zaehler_schleife3

      Incr Zaehler_schleife

      Wait 1
    Loop
    End

    '----------[Frameverarbeitung SNAP-Protokoll]------------------------------------

    Framehandler:

    If Sync = Snap_sync Then                                    'sync.Zeichen IO?

        If Hdb2 = &H50 Then                                     '1Byte Adressierung?
           'if HDB2= NDB then                                             '0..32 Datenbyte
              Locate 1 , 9 : Lcd "1: "
               If Dab1 = Myadress Then                          'Adresse prüfen
                  'Print "Das war für mich!...von Nr.:" ; Rf12_data(5)       'Datenverarbeitung
                  Locate 2 , 9 : Lcd "2: "
                  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
                     'Locate 2 , 9 : Lcd "2: " ; 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>= 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



    Re: Wetterstation

    Trexis5 - 08.12.2007, 03:49


    Ihr werdet es nicht glauben.
    Die Wetterstation Funktioniert und Funkt. !!!!!

    So, aber nur mit dem M32, nicht mit dem M644.
    Das ist natürlich blöde wegen dem Speicherproblem.

    Erst kam die Fehlermeldung wie auf der Grafik zu sehen ist.


    Das liegt anscheinend an einer älteren m644def.dat wie ich im Internet gelesen habe
    Jetzt habe ich mal die neueste genommen, und dort scheint es zu gehen.
    Nur hängt nun das Programm an den Call's fest.
    Code:
    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"


    Und jetzt?
    :roll:



    Re: Wetterstation

    Kurzschluss - 10.12.2007, 11:38


    Hi Trexis5

    schön das ich helfen konnte....
    du hast ja ein Interessantes Projekt

    Gibt es an deinen Wettermodulen auch einen Windsensor und Dämmerungsmessung(Lichtsensor) die Daten an eine Haussteuerung
    weitergeben könnten?

    Damit könnte man Wetterabhänig die Fensterrollos steuern

    Hast du irgendwo deine Hardware (Schaltung) veröffentlich???
    für evtl. Nachbau...

    mfg
    Kurzschluss



    Re: Wetterstation

    Trexis5 - 11.12.2007, 02:06


    Hallo,

    also Helligkeit erfasse ich schon, mit 4 Symbolen, von Mond bis Sonne.

    Wind und Windrichtung ist die nächste Option. Nur leider finde ich keine Günstigen Sensoren dafür. Habt ihr vielleicht eine Quelle?
    Das dann noch zu integrieren ist dann auch nicht so schwierig, weil ja die ganze Verbindung schon besteht.

    Ich habe heute noch den Programmiermodus verschönert und für die Verbindung noch die Cecksumme integriert.

    Nur leider habe ich zu meinem 644er Atmel-Problem noch keine Lösung. Desswegen habe ich kurzerhand für 3€ noch einen M32 mit eingebaut. Somit Funkt der M32 mit der Aussenstation und sendet dann die Daten per RXD an dem M644.

    Ich habe auch vor den M32 mit als Datenspeicher zu verwenden, also ist das auch garnicht so ohne.

    Die Wetterprognose muß man halt noch optimieren, aber für den Anfang ist das so schon nicht schlecht.

    Dann kommt die Tage noch ein DCF77 Empfänger rein um die Uhr genau zu steuern.
    Damit entfällt dann meine eigen Programmierte Sommer-Winterzeitumstellung auch weg. Das heißt es ist wieder Platz für was anderes. :-)

    Diese Woche werde ich es wenn ich Zeit finde vorstellen. Auch mit Quelcode, nur einen Schaltplan habe ich noch nicht. Den habe ich immer noch im Kopf, aber viel ist das ja nicht.

    Gehäuse habe ich auch schönes schwarzes gefunden und auch gleich Ausfräßen lassen.



    Re: Wetterstation

    Kurzschluss - 11.12.2007, 14:51


    Trexis5 hat folgendes geschrieben: Hallo,

    also Helligkeit erfasse ich schon, mit 4 Symbolen, von Mond bis Sonne.

    Wind und Windrichtung ist die nächste Option. Nur leider finde ich keine Günstigen Sensoren dafür. Habt ihr vielleicht eine Quelle?
    Das dann noch zu integrieren ist dann auch nicht so schwierig, weil ja die ganze Verbindung schon besteht.

    Ich habe heute noch den Programmiermodus verschönert und für die Verbindung noch die Cecksumme integriert.

    Nur leider habe ich zu meinem 644er Atmel-Problem noch keine Lösung. Desswegen habe ich kurzerhand für 3€ noch einen M32 mit eingebaut. Somit Funkt der M32 mit der Aussenstation und sendet dann die Daten per RXD an dem M644.

    Ich habe auch vor den M32 mit als Datenspeicher zu verwenden, also ist das auch garnicht so ohne.

    Die Wetterprognose muß man halt noch optimieren, aber für den Anfang ist das so schon nicht schlecht.

    Dann kommt die Tage noch ein DCF77 Empfänger rein um die Uhr genau zu steuern.
    Damit entfällt dann meine eigen Programmierte Sommer-Winterzeitumstellung auch weg. Das heißt es ist wieder Platz für was anderes. :-)

    Diese Woche werde ich es wenn ich Zeit finde vorstellen. Auch mit Quelcode, nur einen Schaltplan habe ich noch nicht. Den habe ich immer noch im Kopf, aber viel ist das ja nicht.

    Gehäuse habe ich auch schönes schwarzes gefunden und auch gleich Ausfräßen lassen.

    Wettermessmodule evtl. bei ELV
    die haben recht viele, hab aber keine Ahnung was die Teile im einzelnen für Schnittstellen haben

    Schaltplan könnte ich zeichnen, arbeite allerdings mit Target.
    Übrigens arbeite ich auch mit dem Mega644, was ist da im regfile fehlerhaft??? bitte mal genauer....

    wegen Programmcode für Stringübertragung: guck mal in deine Post

    Kurzschluss



    Re: Wetterstation

    Trexis5 - 12.12.2007, 22:22


    Hi,

    also ich habe es hier gepostet, dort kann man Daten anhängen.

    http://bascom-forum.de/index.php/topic,1001.0.html

    Schaltplan fehlt halt noch. @Kurzschluß :?: :D



    Re: Wetterstation

    Eisbaeeer - 12.12.2007, 22:40


    Trexis5 hat folgendes geschrieben: Hi,

    also ich habe es hier gepostet, dort kann man Daten anhängen.

    http://bascom-forum.de/index.php/topic,1001.0.html

    Schaltplan fehlt halt noch. @Kurzschluß :?: :D

    Schade eigentlich. Wir haben gerade ein neues Forum eröffnet, wo man noch mehr kann. Wie sieht es mit dem Bascom Code aus? Würde mich brennend interessieren, da ich auch ein Grafisches Display habe.

    Grüße Eisbaeeer



    Re: Wetterstation

    Trexis5 - 12.12.2007, 23:05


    Gibts alles in der Zip-Datei. :D



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



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

    Excel als Messgerät von Spanungswerten - gepostet von avrnix am Donnerstag 04.10.2007
    New Project will born - Steuerung mit dem Browser und AVR - gepostet von avrnix am Samstag 09.06.2007
    Grundschaltung zu Schaltnetzteilen - gepostet von avrnix am Dienstag 13.02.2007
    Projekte mit diesen Modulen - gepostet von avrnix am Sonntag 27.05.2007



    Ähnliche Beiträge wie "Wetterstation"