- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 10

Thema: Habe Problem mit RFM12 und Atmega 168P

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    23.10.2010
    Beiträge
    43

    Habe Problem mit RFM12 und Atmega 168P

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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
    Code:
    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

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    23.10.2010
    Beiträge
    43
    Hat keiner ne Idee?

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Zitat Zitat von Typer Beitrag anzeigen
    Und manchmal bleibt es in der Schleife
    Code:
    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.
    Grüße
    Thomas

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    23.10.2010
    Beiträge
    43
    Hi,
    hier ist mal der Code

    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

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    23.10.2010
    Beiträge
    43
    Zitat Zitat von Thomas E. Beitrag anzeigen
    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.

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    49
    Beiträge
    381
    Hi Typer,
    ohne jetzt Deine Code angeschaut zu haben, wie hast Du das RFM12 angeschlossen?
    Anbei meine Verdrahtung:

    Klicke auf die Grafik für eine größere Ansicht

Name:	boardd.jpg
Hits:	33
Größe:	50,1 KB
ID:	22658
    Dann schau mal dir die Programmschnipsel unter http://bascom-forum.de/showthread.ph...ighlight=rfm12 an.
    Und Suche in diesem und dem anderen nach diesem Thema. Dort findest Du alle Dir noch offene Fragen.
    Grüße MAT
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken 3,3v Schaltung.jpg  

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    49
    Beiträge
    381

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    23.10.2010
    Beiträge
    43
    Zitat Zitat von mat-sche Beitrag anzeigen
    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)
    Geändert von Typer (01.07.2012 um 21:46 Uhr)

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    23.10.2010
    Beiträge
    43
    ist das so ok?

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    49
    Beiträge
    381
    Hi Typer,

    versuche bitte mal mit diesen <Bsp. zu experimentieren: http://bascom-forum.de/showthread.ph...ighlight=holli

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

Ähnliche Themen

  1. Jeenode -> Atmega-Platine mit RFM12 Transceiver
    Von Andree-HB im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 24.03.2011, 05:03
  2. Funkstrecke zwischen zwei Atmega mittels RFM12-Modulen
    Von hausi im Forum Assembler-Programmierung
    Antworten: 4
    Letzter Beitrag: 18.03.2011, 13:47
  3. Habe ein Problem mit Atmega / Bascom .....
    Von Typer im Forum Konstruktion/CAD/3D-Druck/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 8
    Letzter Beitrag: 01.11.2010, 10:48
  4. Problem bei SPI für RFM12
    Von Jojo12 im Forum PIC Controller
    Antworten: 0
    Letzter Beitrag: 13.06.2009, 18:16
  5. RFM12 Programmieren!! Ich habe noch nie SPI geproggt
    Von hunni im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 05.06.2008, 13:57

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad