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