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)
das funktioniert soweit ja ganz gut bekomme über die UART immer folgende ausgabe "1 2 3 4 5 6 7 8 9 10"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
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:
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"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
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







Zitieren

Lesezeichen