- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 45

Thema: rfm12 ausgabestring verarbeiten

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Bastian 07,
    auf den ersten Blick fällt mir auf , das Du gar kein String einliest.
    Das Prinzip war, das erst nach einlesen eines Strings durch den
    Interrupt auf Senden gegangen wird. Den Interrupt vermisse ich.
    Code:
    '  #################################################################
    '  ######## String einlesen durch Interrupt
    '  #################################################################
    
    Onrxd:
      S = S + Chr(udr) + Chr(170)
    Return
    Wigbert

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    06.01.2007
    Beiträge
    52
    Das wär dann der nächste schritt. Momentan möchte ich erstmal die grundlegende funktionalität sicherstellen.
    Also das Board sollte mit dem Code unabhängikeit vom Computer immer wieder "bt" senden. Der nächste Scjritt ist dann die übergabe des Sendestrings durch den Computer.

    sebastian

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118
    Bastian 07,

    in der Sim läuft der Code ordentlich.
    Habe Maxchar testweise auf 4 reduziert und lasse das Display am Ende der Schleife löschen.

    Software sieht gut aus.

    Werde morgen den Code auf mein m8 aufspielen.

    Brauche die Position der Jumper noch.

    Wigbert

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    06.01.2007
    Beiträge
    52
    Das wär natürlich klasse
    J5 und J6 sind gesetzt.

    schönen Abend noch
    Sebastian

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118
    Hallo Bastian 07,

    der Code läuft auf mein m8 anstandslos.
    Anbei mal mit meinen Veränderungen
    Code:
    $regfile = "m8def.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 = 11059200                                         'wurde mit 10 MHz von RFM12 getestet
    $baud = 19200
    Baud = 19200
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7
    Config Lcdbus = 4
    Cursor Off Noblink
    Cls
    
    
    
    
    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_readys
    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 = 4                                           '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.2                                        ' SS-Pin
    Config Spi_cs = Output
    Spi_sdo Alias Pinb.4                                        ' MISO-PIN
    Set Spi_cs
    
    'init the spi pins
    Spiinit
    
    ' was so gebraucht wird
    Dim Count As Byte
    Dim Temp As Word
    Dim Rfdata(32) As Byte
    Dim Text As String * Maxchar At Rfdata Overlay
    Dim S As Byte
    Dim A$ As String * 1
    Dim A As Byte
    
    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
    ' ########################################################################
    
    Portd.7 = 1
    Text = "bt"
    
    ' Je nachdem ob Sender oder Empfänger die entsprechenden Zeilen aktivieren
    Do                                                          'Ewigschleife
    
    
    
    ' Hier ist die Senderoutine
    '  Print "Sende"
     Locate 1 , 1                                               'Cursor auf 1 Zeile, 1 Spalte
     Lcd Text
    
    
      Call Rf12_txdata(maxchar)                                 'senden
    
    Wait 1
    
    
    
    ' Hier ist die Empfangsroutine
    '  Print "Empfange"
    '  Call Rf12_rxdata(maxchar)
    '  For Count = 1 To Maxchar
    '   A$ = Chr(rfdata(count)) ;
    '  If A$ = "e" Then
    '   A$ = ""
    '    Print "a"
    '  End If
    '  Next Count
    '  Print
    Schleife:
    
    'Locate 2 , 1
    'Lcd A$
    Cls
    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 Then
        Temp = 96
      Elseif Temp > 3903 Then
        Temp = 3903
      End If
      Temp = Temp + &HA000
      Temp = Rf12_trans(temp)
    End Sub
    
    
    Sub Rf12_setbandwith(byval Bandwith As Byte , Byval Gain As Byte , Byval Drssi As Byte)
      Drssi = Drssi And 7
      Gain = Gain And 3
      Temp = Bandwith And 7
      Shift Temp , Left , 2
      Temp = Temp + Gain
      Shift Temp , Left , 3
      Temp = Temp + Drssi
      Temp = Temp + &H9400
      Temp = Rf12_trans(temp)
    End Sub
    
    
    Sub Rf12_setbaud(byval Rfbaud As Long )
      Local Ltemp As Long
    
      If Rfbaud < 663 Then Exit Sub
    
      If Rfbaud < 5400 Then
        Temp = 43104 / Rfbaud
        Temp = Temp + &HC680
      Else
        Ltemp = 344828 / Rfbaud
        Temp = Ltemp
        Temp = Temp + &HC600
      End If
      Decr Temp
      Temp = Rf12_trans(temp)
    End Sub
    
    
    Sub Rf12_setpower(byval Outpower As Byte , Byval Fskmod As Byte)
      Outpower = Outpower And 7
      Temp = Fskmod And 15
      Shift Temp , Left , 4
      Temp = Temp + Outpower
      Temp = Temp + &H9800
      Temp = Rf12_trans(temp)
    End Sub
    
    
    Sub Rf12_txdata(byval Maxchar As Byte)
      Temp = Rf12_trans(&H8238)
    'Print "stop1"
      Rf12_readys
    'Print "stop2"
      Temp = Rf12_trans(&Hb8aa)
      Rf12_readys
      Temp = Rf12_trans(&Hb8aa)
      Rf12_readys
      Temp = Rf12_trans(&Hb8aa)
      Rf12_readys
      Temp = Rf12_trans(&Hb82d)
      Rf12_readys
      Temp = Rf12_trans(&Hb8d4)
      Rf12_readys
      For Count = 1 To Maxchar
        Rf12_readys
        Temp = &HB800 + Rfdata(count)
        Temp = Rf12_trans(temp)
        Print Chr(rfdata(count));
      Next Count
      Rf12_readys
      Temp = Rf12_trans(&H8208)
    End Sub
    
    
    'Sub Rf12_rxdata(byval Maxchar As Byte)
     ' Temp = Rf12_trans(&H82c8)
     ' Temp = Rf12_trans(&Hca81)
      'Temp = Rf12_trans(&Hca83)
      'For Count = 1 To Maxchar
      '  Rf12_ready
       ' Temp = Rf12_trans(&Hb000)
       ' Rfdata(count) = Temp
      'Next Count
      'Temp = Rf12_trans(&H8208)
    'End Sub
    
    
    
    Function Rf12_trans(byval Wert As Word) As Word
      Local Lowbyte As Byte
      Local Highbyte As Byte
    
      Lowbyte = Wert And 255
      Shift Wert , Right , 8
      Reset Spi_cs
    
      Highbyte = Spimove(wert)
      Lowbyte = Spimove(lowbyte)
      Set Spi_cs
    
      Temp = Highbyte * 256
      Temp = Temp + Lowbyte
      Rf12_trans = Temp
    End Function
    
    
    Sub Rf12_readys
      Reset Spi_cs
      nop
      While Spi_sdo = 0                                         'In Der Sim Auf 1 Setzen
      Wend
    End Sub
    
    Sub Rf12_ready                                              'ready Empfangen
      Reset Spi_cs
      While Spi_sdo = 0
       If Len(s) > 0 Then                                       'Wenn ein string eingelesen
        Temp = Rf12_trans(&Hca81)                               'Fifo deaktivieren
        Temp = Rf12_trans(&H8208)                               'Empf. ausschalten
        Goto Schleife                                           'Springe zum hauptprogramm
       Else                                                     'sonst warte weiter auf Empfangsdaten
       Wend
      End If
    End Sub
    in meiner beigefügten Schaltung (anmelden) ist geschlossen:
    JP 3 = SS-Pin
    JP 6 = VCC
    JP 8 = Int 1 , geht mit Dein Code ohne
    JP11 = externer Takt

    Der Resetpin wird bei mir nicht benutzt.

    Wigbert
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken schaltung_m8.jpg  

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    06.01.2007
    Beiträge
    52
    Ich geh am Stock. Hab deinen veränderten Code so genommen und draufgespielt und siehe da funktioniert einwanfrei. Toll dacht ich. Dann hab ich meine empfänger hergerichtet und siehe da hab ein paar mal ein vernünftiges Signal übermittel und auf einmal ohne was am Code zu verändern bums geht er wieder nicht und bleibt an der gleichen stelle hängen das kann doch nicht wahr sein.
    Naja trotzdem danke für deine Bemühungen. Bni jetzt erstmal die Woche in Paris und werd mich dann weiter damit auseinandersetzten und hier melden falls es klappt.

    Gruß
    Sebastian

  7. #17
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118
    kannst ja mal die Werte erhöhen,

    $hwstack = 32 ' default use 32 for the hardware stack
    $swstack = 10 'default use 10 for the SW stack
    $framesize = 40

    aber ich glaube ehr an ein Wackelkontakt

    Wigbert

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    06.01.2007
    Beiträge
    52
    Also hab mal feste auf den Transceiver gedrückt und gerüttelt und gedreht und auch an den Einstellungen gedreht aber nix. Obgleich die einzi logische erklärung kann ja nur ein wackler irgendwie sein. hmmm

  9. #19
    Benutzer Stammmitglied
    Registriert seit
    06.01.2007
    Beiträge
    52
    Was mich ja auch wundert ist das das empfangen wunderbar funktioniert. Benutzt das RFM12 denn großartig andere Ports beim senden als beim empfangen doch nur den Miso bzw Mosi port oder ?

  10. #20
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118
    Duch den "getunten" Testcode könnte es sein, das die Stack überlaufen und nicht ordentlich gelöscht werden. Bei mir lief aber der Code 30 min
    und nach einen Reset sollte er dann auch wieder laufen.

    Die Einstellungen sollten richtig sein, sonst hätte ich Probleme.

    Wenn ich mich richtig erinnere, benutzt Du 6V Spannungsversorgung
    warum?

    Wigbert

Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad