- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 45

Thema: rfm01, Rfm02 Rfm12 Pollin Funkmodul mit bascom

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    27.05.2007
    Beiträge
    67
    Anzeige

    Praxistest und DIY Projekte
    Hallo

    Ist schon komisch.
    Ich habe den Optokoppler noch drin. Wenn ich dann den Port.d 4 auf high setze, wird mein Spannungswandler so heiß, dass man ihn fast nicht anfassen kann.
    Das Script funktioniert leider auch nicht.
    Auf der RS232 kommt nur eine Schleife beim Senden und dann bleibt er stehen.
    Normalerweise sollte er die Schleife endlos durchlaufen.
    Was habe ich im Script angepasst:

    Crystal auf 16000000 gesetzt und eben den Port.d 4 auf high.

    Code:
    ' generated. Take care that the chip supports all fuse bytes.' ########################################################################
    ' ### RF12-Test in Bascom
    ' ### Basiert auf Code von Benedikt K.
    ' ### Joachim Fossie Bär Reiter 04/2007
    ' ########################################################################
    
    
    $regfile = "m32def.dat"
    $hwstack = 32                                               ' default use 32 for the hardware stack
    $swstack = 10                                               'default use 10 for the SW stack
    $framesize = 40
    
    '$PROG &HFF,&HFF,&HD9,&H00' generated. Take care that the chip supports all fuse bytes.
    
    $crystal = 16000000
    $baud = 19200
    Baud = 19200
    
    Declare Sub Rf12_init
    Declare Function Rf12_trans(byval Wert As Word) As Word
    Declare Sub Rf12_setfreq(byval Freq As Single)
    Declare Sub Rf12_setbandwith(byval Bandwith As Byte , Byval Gain As Byte , Byval Drssi As Byte)
    Declare Sub Rf12_setbaud(byval Rfbaud As Long)
    Declare Sub Rf12_setpower(byval Outpower As Byte , Byval Fskmod As Byte)
    Declare Sub Rf12_ready
    Declare Sub Rf12_txdata(byval Maxchar As Byte)
    Declare Sub Rf12_rxdata(byval Maxchar As Byte)
    
    Const Rf12freq = 433.92
    Const Rf12baud = 19200
    Const Maxchar = 32
    
    'config the SPI in master mode.The clock must be a quarter of the slave cpu
    ' Hier ggf. den SoftSPI reinmachen
    Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 128 , Noss = 1
    
    Config Portd.4 = Output
    Config Portd.6 = Output
    
    Portd.4 = 1
    Portd.6 = 1
    
    ' werden benötigt für rf12_ready
    Spi_cs Alias Portb.4                                        ' SS-Pin
    Config Spi_cs = Output
    Spi_sdo Alias Pinb.6                                        ' MISO-PIN
    Set Spi_cs
    
    'init the spi pins
    Spiinit
    
    ' was so gebraucht wird
    Dim Count As Byte
    Dim Temp As Word
    Dim Rfdata(32) As Byte
    Dim Text As String * Maxchar At Rfdata Overlay
    
    Print "Init"
    Call Rf12_init                                              ' ein paar Register setzen (z.B. CLK auf 10MHz)
    Print "Set Frequenz"
    Call Rf12_setfreq(rf12freq)                                 '  Sende/Empfangsfrequenz auf 433,92MHz einstellen
    Print "Set Bandwith"
    Call Rf12_setbandwith(4 , 1 , 4)                            '  200kHz Bandbreite, -6dB Verstärkung, DRSSI threshold: -79dBm
    Print "Set Baudrate"
    Call Rf12_setbaud(rf12baud)                                 '  19200 baud
    Print "Set Power"
    Call Rf12_setpower(0 , 6)                                   '  1mW Ausgangangsleistung, 120kHz Frequenzshift
    
    
    ' ########################################################################
    ' ###### Hauptproggi
    ' ########################################################################
    
    
    Text = "Dies ist ein 433MHz Test !!!!!{013}{010}"
    
    ' Je nachdem ob Sender oder Empfänger die entsprechenden Zeilen aktivieren
    Do                                                          'Ewigschleife
    
    
    ' Hier ist die Senderoutine
      Print "Sende"
      Call Rf12_txdata(maxchar)
    
      Wait 1
    
    ' Hier ist die Empfangsroutine
    '  Print "Empfange"
    '  Call Rf12_rxdata(maxchar)
    '  For Count = 1 To Maxchar
    '    Print Chr(rfdata(count)) ; "-";
    '  Next Count
      Print
    
    Loop
    
    
    End                                                         'end program
    
    
    ' ########################################################################
    ' ###### Unterroutinen
    ' ########################################################################
    
    Sub Rf12_init:
      Waitms 150
      Temp = Rf12_trans(&Hc0e0)
      Temp = Rf12_trans(&H80d7)
      Temp = Rf12_trans(&Hc2ab)
      Temp = Rf12_trans(&Hca81)
      Temp = Rf12_trans(&He000)
      Temp = Rf12_trans(&Hc800)
      Temp = Rf12_trans(&Hc4f7)
    End Sub
    
    
    Sub Rf12_setfreq(byval Freq As Single)
    
      Freq = Freq - 430.00
      Temp = Freq / 0.0025
      If Temp < 96 Then
        Temp = 96
      Elseif Temp > 3903 Then
        Temp = 3903
      End If
      Temp = Temp + &HA000
      Temp = Rf12_trans(temp)
    End Sub
    
    
    Sub Rf12_setbandwith(byval Bandwith As Byte , Byval Gain As Byte , Byval Drssi As Byte)
      Drssi = Drssi And 7
      Gain = Gain And 3
      Temp = Bandwith And 7
      Shift Temp , Left , 2
      Temp = Temp + Gain
      Shift Temp , Left , 3
      Temp = Temp + Drssi
      Temp = Temp + &H9400
      Temp = Rf12_trans(temp)
    End Sub
    
    
    Sub Rf12_setbaud(byval Rfbaud As Long )
      Local Ltemp As Long
    
      If Rfbaud < 663 Then Exit Sub
    
      If Rfbaud < 5400 Then
        Temp = 43104 / Rfbaud
        Temp = Temp + &HC680
      Else
        Ltemp = 344828 / Rfbaud
        Temp = Ltemp
        Temp = Temp + &HC600
      End If
      Decr Temp
      Temp = Rf12_trans(temp)
    End Sub
    
    
    Sub Rf12_setpower(byval Outpower As Byte , Byval Fskmod As Byte)
      Outpower = Outpower And 7
      Temp = Fskmod And 15
      Shift Temp , Left , 4
      Temp = Temp + Outpower
      Temp = Temp + &H9800
      Temp = Rf12_trans(temp)
    End Sub
    
    
    Sub Rf12_txdata(byval Maxchar As Byte)
      Temp = Rf12_trans(&H8238)
      Rf12_ready
      Temp = Rf12_trans(&Hb8aa)
      Rf12_ready
      Temp = Rf12_trans(&Hb8aa)
      Rf12_ready
      Temp = Rf12_trans(&Hb8aa)
      Rf12_ready
      Temp = Rf12_trans(&Hb82d)
      Rf12_ready
      Temp = Rf12_trans(&Hb8d4)
      Rf12_ready
      For Count = 1 To Maxchar
        Rf12_ready
        Temp = &HB800 + Rfdata(count)
        Temp = Rf12_trans(temp)
      Next Count
      Rf12_ready
      Temp = Rf12_trans(&H8208)
    End Sub
    
    
    Sub Rf12_rxdata(byval Maxchar As Byte)
      Temp = Rf12_trans(&H82c8)
      Temp = Rf12_trans(&Hca81)
      Temp = Rf12_trans(&Hca83)
      For Count = 1 To Maxchar
        Rf12_ready
        Temp = Rf12_trans(&Hb000)
        Rfdata(count) = Temp
      Next Count
      Temp = Rf12_trans(&H8208)
    End Sub
    
    
    
    Function Rf12_trans(byval Wert As Word) As Word
      Local Lowbyte As Byte
      Local Highbyte As Byte
    
      Lowbyte = Wert And 255
      Shift Wert , Right , 8
      Reset Spi_cs
    
      Highbyte = Spimove(wert)
      Lowbyte = Spimove(lowbyte)
      Set Spi_cs
    
      Temp = Highbyte * 256
      Temp = Temp + Lowbyte
      Rf12_trans = Temp
    End Function
    
    
    Sub Rf12_ready
      Reset Spi_cs
      While Spi_sdo = 0
      Wend
    End Sub
    Kann da jemand helfen?
    Eval Funk Board von Pollin, Funkmodul auch von Pollin, Atmega32-16

    Grüße Eisbaeeer

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    Das Problem mit dem Optokoppler hatte ich anfangs auch. Ich habe alles über ISP programmiert. Später dann ein Modul aufgelötet, dann ging nichts mehr
    .....
    Lösung des Problems --> Bootloader und alles klappt wieder. Das hätte Pollin auch noch erwähnen können, nachdem eh schon ein extra Zettel wegen eines Routingfehlers auf der Platine vorlag.

    Soll das heissen, dass man das Board nur über ISP-Programmieren kann, wenn man es vorher nicht komplett zuammenlötet?
    In dem Fall hätte Pollin die Bezeichnung "Evaluationsboard" auf dem Beipackzettel bessr auch gleich korrigiert.

    Warum ist auf dem Board eigentlich ein Optokopler und keine direkte Verbindung drauf?

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    27.05.2007
    Beiträge
    67
    Hallo

    Tja, was will man für 10 Euro auch erwarten. Das ist dan die andere Seite.
    Ich hatte das ganze in Stufen aufgebaut. Erst das Board ohne "Schnick-Schnack", also ohne Funk. Habe zu der Zeit noch alles über ISP programmiert.
    Dann später das Funkmodul draufgelötet und das ISP ging nicht mehr sauber. Als ich dann nach ein paar Versuchen das andere Board (noch ohne Funkmodul) hernahm und den gleichen Atmega darauf wiede mit ISP programmieren konnte, war mir klar, dass es am Funkmodul lag.

    Ich fand die Idee mit dem Optokoppler gar nicht schlecht, nur leider etwas verpeilt geplant und geroutet. Also hab ich ihn draufgelassen und einen Bootloader auf dem Atmega gebruzzelt. Hat für mich mehrere Vorteile. So bin ich dem Problem aus dem Weg gegangen und das ewig lange programmieren mit ISP hat mich eh schon genervt.

    Aber das Funkmodul macht mir Kopfzerbrechen. Vor allem, weil beide Boards gleich reagieren.

    Nochmal, hat jemand genau dieses Evaluationsborad von Pollin "MFHK22" mit dem RFM12 am laufen?

    Grüße Eisbaeeer

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118
    Hallo Eisbaeer,
    nochmals, ich habe das Board in Funktion,allerdings statt
    Optokoppler eine Brücke.

    http://www.mikrocontroller.net/attac...2/PICT0131.JPG

    kann es sein das bei 16Mhz der Prozessor zu schnell ist und Du bei

    Code:
    Sub Rf12_ready
      Reset Spi_cs
      nop
      While Spi_sdo = 0
      Wend
    End Sub
    nop einsetzen musst
    probier mal.
    in der Simmulation bleibt bei Empfang mein Code auch stehen.
    Geht aber
    Ich vergleich trotzdem mal die Code.

    Wigbert

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118
    Ich noch mal,
    also der Code ist wie mein m8
    Empfang und Senden werden problemlos ausgeführt.
    Was ist bei mir anders:
    Ich benutze ein RFM12 mit intern 8Mhz,ein RFM12 mit extern 9,21600Mhz.
    Auf dem Pollinboard wurde ein 10K Widerstand zwischen FSK und
    VDD am RFM12 gelegt.
    Ich musste bemerken, das nicht alle Terminalprogramme
    den Empfang decodieren.Warum auch immer.
    Bei Empfang wait 1 raus.
    Ich lass die LED auf den Pollinboard Toggeln,um beim Senden eine
    Kontrolle zu haben.
    Geh mal spassenshalber auf intern 8Mhz runter.
    Das Terminalprogramm. von Bascom zeigt nur eine Zeile an.
    (immer wieder löschen)

    Wigbert

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    27.05.2007
    Beiträge
    67
    Hallo Wigbert
    Ich werde das ganze mal ausprobieren.
    Hast du dir schon ein Protokoll überlegt? Am besten eins, das man sowohl über RS232 als auch über Funk fahren kann? Am besten wäre ja ein schon vorhandenes zu nehmen.

    Ich schreib dir noch ne PM wegen einer Frage.
    Grüße Eisbaeeer

  7. #17
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118
    Hallo Eisbaeeer,
    wenn es gar nicht gehen sollte,spiele ich mal Dein Code auf
    ein m32.
    Der Optokoppler schaltet etwas später den RFM12 zu.
    Sollte aber nicht das problem sein.
    Im Groben sind Protokollvorstellungen schon vorhanden.
    öfter mal auf der o.g.HP reinschauen.


    Wigbert

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    27.05.2007
    Beiträge
    67
    Zitat Zitat von Picht
    Hallo Eisbaeeer,
    wenn es gar nicht gehen sollte,spiele ich mal Dein Code auf
    ein m32.
    Der Optokoppler schaltet etwas später den RFM12 zu.
    Sollte aber nicht das problem sein.
    Im Groben sind Protokollvorstellungen schon vorhanden.
    öfter mal auf der o.g.HP reinschauen.


    Wigbert
    Also ich hab jetzt den Toggle portd.6 Befehl noch in die Schleife eingefügt.
    Das nop hab ich auch drin.
    Er bleibt wieder stehen. Die LED toggelt nicht.
    Dein Controller auf dem Board läuft ja mit den externen 8Mhz, oder?
    Das RFM läuft mit den 10MHz vom RFM.
    Laut Datenblatt kann man die pF von 8 bis 16 konfigurieren.
    Ich muss als erstes mal die Subroutinen mit dem Datenblatt vergleichen, damit ich mal kapier, was da eigentlich passiert. An dem komm ich wohl nicht vorbei.
    Grüße Eisbaeeer

  9. #19
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118
    Hallo Eisbaeer,
    Also das Programm bleibt stehen wenn spi-sdo
    auf 0 bleibt.
    der rfm 12 schaltet ja diesen Pin.
    Also kommt vom RFM12 keine Rückantwort.
    Hast Du mal die Spannungsversorgung des rfm 12 am optokoppler
    gebrückt?
    Ich setz mal den Opto. bei mir ein

    Wigbert

  10. #20
    Benutzer Stammmitglied
    Registriert seit
    27.05.2007
    Beiträge
    67
    Zitat Zitat von Picht
    Hallo Eisbaeer,
    Also das Programm bleibt stehen wenn spi-sdo
    auf 0 bleibt.
    der rfm 12 schaltet ja diesen Pin.
    Also kommt vom RFM12 keine Rückantwort.
    Hast Du mal die Spannungsversorgung des rfm 12 am optokoppler
    gebrückt?
    Ich setz mal den Opto. bei mir ein

    Wigbert
    Wenn das die Ursache ist, wäre das ja die volle Fehlentwicklung.
    Ich bin mal gespannt.

Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress