PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Habe Problem mit RFM12 und Atmega 168P



Typer
23.06.2012, 18:48
Hi
ich experimentiere etwas mit 2 RFM12 modulen (ich bin Leihe). Jedes Modul hängt an einem AVR-MK2-Board mit jeweils nem Atmega 168P an 16Mhz
So langsam habe ich die Befürchtung dass ein Modul defekt ist.
Ich habe mal die Beispielsoftware "Elektor RFM12" auf beiden Boards laufen lassen aber weder wird was gesendet noch empfangen.
Das wahrscheinlich defekte Modul gibt auf der Konsole 255 255 255... aus. das Andere 00000
Und manchmal bleibt es in der Schleife

Sub Wait_rfm12
Nsel = 0

Do
Loop Until Sdo = 1
hängen.

Es sind 433MHz Module und ich habe nur die beiden :-(

Hat jemand einen sicheren Code für mich damit ich diese Module mal testen kann und nicht von einem Programmfehler ausgehen muss
Vielleicht ein einfaches Bit das nur gesendet wird würde mir schon helfen.

Danke

Typer
24.06.2012, 20:06
Hat keiner ne Idee?

Thomas E.
24.06.2012, 20:47
Und manchmal bleibt es in der Schleife

Sub Wait_rfm12
Nsel = 0

Do
Loop Until Sdo = 1
hängen.
Ich nehme an, dass die Bedingung Sdo = 1 nicht erreicht wird und der Controller deshalb niemals diese Schleife verlassen kann. Der ganze Code wäre vielleicht hilfreich.

Typer
25.06.2012, 16:31
Hi,
hier ist mal der Code



'Elektor RFM12

'$regfile = "M8def.dat"
'$regfile = "M168def.dat" 'es handelt sich um einen ATmega168
$regfile = "M168Pdef.dat" 'es handelt sich um einen ATmega168P

'$crystal = 3686400 'der eingebauter RC-Oszillator läuft mit 3,6864 Mhz
$crystal = 16000000
'$crystal = 1000000
$hwstack = 40 'im Speicher werden für den Hardware-Stack 100 Byte reserviert
$swstack = 10 'im Speicher werden für den Software-Stack 100 Byte reserviert
$framesize = 40 'im Speicher werden für den Frame 100 Byte reserviert
$baud = 9600


'Taster
Config Pind.2 = Input
Pind.2 = 1 'pullup
Taster1 Alias Pind.2

'LED
Led_grün Alias Portc.5
Config Led_grün = Output
Led_rot Alias Portc.4
Config Led_rot = Output


Nsel Alias Portd.7
Sdi Alias Portb.3
Sdo Alias Pinb.4
Sck Alias Portb.5

Config Sdo = Input
Config Nsel = Output
Config Sdi = Output
Config Sck = Output


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 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
'868.300
Freq_rfm12

'start transmitter, no data
'Goto Test1:

'transmit data
'Goto Test2:

'transmit key data
'Goto Test3:

'start receiver, all data
'Goto Test4:

'start receiver, matched data
'Goto Test5:

Print "RFM12 Test"

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


Toggle Led_grün

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



'transceiver tests

'start transmitter, no data
Test1:
D = Spi16(&H8238)
Do
Loop


'transmit data
Test2:
D = Spi16(&H8238)
Do
Wait_rfm12
D = Spi16(&Hb8aa)
Loop


'transmit key data
Test3:
D = Spi16(&H8238)
Do
Wait_rfm12
D = Spi16(&Hb82d)
Wait_rfm12
D = Spi16(&Hb8d4)
Loop


'start receiver, all data
Test4:
D = Spi16(&H82c8)
D = Spi16(&Hca87)
For N = 1 To 100
Wait_rfm12
D = Spi16(&Hb000)
Data_in(n) = D
Print Chr(d);
Next N
Do
Loop


'start receiver, matched data
Test5:
D = Spi16(&H82c8)
D = Spi16(&Hca83)
For N = 1 To 100
Wait_rfm12
D = Spi16(&Hb000)
Data_in(n) = D
Print Chr(d);
Next N
Do
Loop

Typer
25.06.2012, 21:49
Ich nehme an, dass die Bedingung Sdo = 1 nicht erreicht wird und der Controller deshalb niemals diese Schleife verlassen kann. Der ganze Code wäre vielleicht hilfreich.

richtig, da der RFM12 keine 1 zurück gibt. deshalb ist auch meine Befürchtung dass ich ihn vielleicht abgeschossen habe.

mat-sche
27.06.2012, 17:03
Hi Typer,
ohne jetzt Deine Code angeschaut zu haben, wie hast Du das RFM12 angeschlossen?
Anbei meine Verdrahtung:

22658
Dann schau mal dir die Programmschnipsel unter http://bascom-forum.de/showthread.php?1600-RFM12-Codebeispiele&highlight=rfm12 an.
Und suche in diesem und dem anderen nach diesem Thema. Dort findest Du alle Dir noch offene Fragen.
Grüße MAT

mat-sche
27.06.2012, 18:39
Hi,

und noch ein guter Link...
http://bascom-forum.de/showthread.php?3003-RFM12-Code-mit-Status-Bit-Ausgabe-ect./page2

Typer
30.06.2012, 11:45
Hi Typer,
ohne jetzt Deine Code angeschaut zu haben, wie hast Du das RFM12 angeschlossen?


SD0 -> Miso (PB4)
SDI -> Mosi (PB3)
SCK -> SCK (PB5)
nSel -> SS (PB2)

Typer
01.07.2012, 12:32
ist das so ok?

mat-sche
02.07.2012, 22:14
Hi Typer,

versuche bitte mal mit diesen <Bsp. zu experimentieren: http://bascom-forum.de/showthread.php?1630-RFM-12-PingPong-Test&highlight=holli

Mit diesen habe ich "gehen" gelernt. Ich nutze die Ansteuerung über die Hard-SPI Schnittstelle.
Grüße MAT