- Labornetzteil AliExpress         
Ergebnis 1 bis 2 von 2

Thema: Elektor RFM12 Code in UART ändern. Aber wie?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    36
    Beiträge
    1.400

    Elektor RFM12 Code in UART ändern. Aber wie?

    Hallo,
    ich habe mir für mein Robo-Control ein Funkmodul mit einem Atmega8 und dem RFM12 433mhz modul gebaut.

    Habe den code von der elektor auf mein modul angepasst. dies sieht so aus (tests hab ich weggelassen)

    Code:
    'Elektor RFM12
    
    $regfile = "m8def.dat"
    $hwstack = 32
    $swstack = 10
    $framesize = 40
    
    '$crystal = 11059200
    $crystal = 16000000
    $baud = 19200
    
    Nsel Alias Portb.2
    Sdi Alias Portb.3
    Sdo Alias Pinb.4
    Sck Alias Portb.5
    
    Dim D As Word
    Dim Data_in(10) As Byte
    Dim Data_out(10) As Byte
    Dim N As Byte
    Dim Timeout As Word
    Dim T As Word
    Dim Tt As Word
    Dim Freq As Single
    
    
    Declare Sub Send_rfm12
    Declare Sub Receive_rfm12
    Declare Sub Freq_rfm12
    Declare Sub Wait_rfm12
    Declare Function Spi16(byval Dout As Word) As Word
    
    Config Nsel = Output
    Config Sdi = Output
    Config Sck = Output
    'Config Portc = Output
    'Porta = &HFF
    
    'Init
      Nsel = 1
      Sck = 0
     D = Spi16(&H80d7)                                          ' El , Ef , 11.5pf, 433 MHz band
      'D = Spi16(&H80e7)                                         ' El , Ef , 11.5pf, 868 MHz band
      D = Spi16(&H82d9)                                         '!er , !ebb , Et , Es , Ex , !eb , !ew , Dc
      D = Spi16(&Ha67c)                                         ' 434,15 MHz / 868,3 MHz
      D = Spi16(&Hc647)                                         ' 4.8kbps
      D = Spi16(&H94a4)                                         ' Vdi , Fast , 134 kHz , 0db , -79dbm
      D = Spi16(&Hc2ac)                                         ' Al , !ml , Dig , Dqd4
      D = Spi16(&Hca81)                                         ' Fifo8 , Sync , !ff , Dr
      D = Spi16(&Hc483)                                         ' @pwr , No Rstric , !st , !fi , Oe , En
      D = Spi16(&H9850)                                         ' 90 kHz , power - 0 dB
      D = Spi16(&He000)                                         '
      D = Spi16(&Hc800)                                         '
      D = Spi16(&Hc000)                                         ' 1 MHz , 2.2V
    
      Freq = 434.150
      Freq_rfm12
    
    
    Do
        For N = 1 To 10
          Data_out(n) = N
        Next N
        Send_rfm12
        Waitms 500
        For N = 1 To 10
           Data_in(n) = 0
        Next N
        Timeout = 400 + Rnd(1000)
        Receive_rfm12
        For N = 1 To 10
           Print Data_in(n);
           Print " ";
        Next N
        Waitms 700
     Loop
    
    
    Sub Freq_rfm12
      If Freq < 800 Then Freq = Freq * 2
      Freq = Freq - 860
      D = Freq / 0.0050
      If D < 96 Then D = 96
      If D > 3903 Then D = 3903
      D = D + &HA000
      D = Spi16(d)
    End Sub
    
    
    Sub Send_rfm12
      D = Spi16(&H8238)
      Wait_rfm12
      D = Spi16(&Hb8aa)
      Wait_rfm12
      D = Spi16(&Hb8aa)
      Wait_rfm12
      D = Spi16(&Hb8aa)
      Wait_rfm12
      D = Spi16(&Hb82d)
      Wait_rfm12
      D = Spi16(&Hb8d4)
      For N = 1 To 10
        Wait_rfm12
        D = &HB800 + Data_out(n)
        D = Spi16(d)
      Next N
      Wait_rfm12
      D = Spi16(&Hb8aa)
      Wait_rfm12
      D = Spi16(&Hb8aa)
      Wait_rfm12
      D = Spi16(&H8208)
    End Sub
    
    Sub Wait_rfm12
      Nsel = 0
      Do
      Loop Until Sdo = 1
     End Sub
    
    
    Sub Receive_rfm12
      Tt = Timeout * 10
      D = Spi16(&H82c8)
      D = Spi16(&Hca83)
      For N = 1 To 10
        Nsel = 0
        T = 0
        Do
          T = T + 1
          Waitus 100
          If T > Tt Then Goto Nosignal
        Loop Until Sdo = 1
        D = Spi16(&Hb000)
        Data_in(n) = D
      Next N
    Nosignal:
      D = Spi16(&H8208)
    End Sub
    
    
    Function Spi16(byval Dout As Word) As Word
    Local Nspi As Integer
    Local Dspi As Integer
    Local Dsdo As Word
      Nsel = 0
      Dsdo = 0
      For Nspi = 1 To 16
        Dspi = Dout And &H8000
        If Dspi = 0 Then
           Sdi = 0
        Else
           Sdi = 1
        End If
        Dout = Dout * 2
        Dsdo = Dsdo * 2
        Dsdo = Dsdo + Sdo
        Sck = 1
        Waitus 5
        Sck = 0
      Next Nspi
      Nsel = 1
      Spi16 = Dsdo
    End Function
    das funktioniert soweit ja ganz gut bekomme über die UART immer folgende ausgabe "1 2 3 4 5 6 7 8 9 10"

    dann habe ich ein wenig experimentiert und festgestellt das immer nur ziffer/buchstabe für ziffer/buchstabe übertragen werden. über die funkverbindung wäre es ja net schlimm jetzt möchte ich es aber so haben das die länge variabel ist und ich über die UART nur einmal beim fertig empfangenden string gesendet wird. dazu habe ich die main loop so geändert:

    Code:
    Dim Mystring As String * 9
    Dim Myarray(10) As Byte At Mystring Overlay
    
    Dim Myinstring As String * 9
    Dim Myinarray(10) As Byte At Myinstring Overlay
    
    mystring = "Beep"
    
    Do
       
        For N = 1 To 10
          Data_out(n) = Myarray(n)
        Next N
        Send_rfm12
        Waitms 500
        For N = 1 To 10
           Data_in(n) = 0
        Next N
        Timeout = 400 + Rnd(1000)
        Receive_rfm12
        For N = 1 To 10
           Myinarray(n) = Data_in(n) ;
        Next N
        Print Myinstring ; "#" ;
        Waitms 700
     Loop
    doch wird über die UART wieder alles einzelnt übertragen sprich ich bekomme erst ein "B" dann "e" dann "e" dann "p" und es wird ständig gesendet. ich möchte aber alles als ein wort bekommen also "Beep"

    wenn die hürde genommen ist möchte ich noch über input oder ähnliches eine eingabe abwarten können. die dann gesendet wird. also das ganze system soll wie ein UART kabel laufen.

    ich hoffe das war verständlich ansonsten einfach hinterhaken.

    danke schonmal für drüberschauen.

    mfg Bammel

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    36
    Beiträge
    1.400
    soo.. hatte es jezze geschaft daten erfolgreich zu übertragen aber nicht so das ich es wie ein UART nutzen kann.. da mir das alles zu kompliziert ist udn ich auhc funksignale so nicht nachprüfen kann. habe ich mir zwei easy radio 433mhz modul bestellt.

Berechtigungen

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

Labornetzteil AliExpress