Forum: Mikrocontroller und Digitale Elektronik avr mega8, Bascom und rfm01/rfm02


von Steve B. (stevensen)


Lesenswert?

Hallo,

ich versuchs mal mit einem neuem Thread. Wie im Betreff, möchte gerne 2 
mega8 mit Bascom funkmäßig verbinden. Dazu nutze ich den Sender rfm02 
und den empfänger rfm01. Jetzt soll der Empfänger die Syncsequenz AA AA 
AA 2Dd4 .. Daten vom Sender erkennen, macht er aber nicht. ich weiss 
nicht wo es hängt hiermal der Quellcode in Bascom für den Sender:

$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600


Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , 
Polarity = Low , Phase = 0 , Clockrate = 128 , Noss = 1

Config Debounce = 30

Declare Function Rf12_trans(byval Wert As Word) As Word
Declare Function Low_trans(byval Mywert As Byte ) As Byte
Ddrc = &B11111000
Ddrd = &B00011111
Ddrb = &B00101110
Spi_cs Alias Portb.2                                        ' SS-Pin

Spiinit

Dim Temp As Word
Dim Temp_byte As Byte
Dim A(8) As Byte

 Set Spi_cs
 A(1) = &HAA
 A(2) = &HAA
 A(3) = &HAA
 A(4) = &H2D
 A(5) = &HD4

 A(6) = &H45
 A(7) = &H46
 A(8) = &H47

 Waitms 150
'initsequenz
  Temp = Rf12_trans(&Hc0e0)
  Temp = Rf12_trans(&H8f80)
  Temp = Rf12_trans(&Hc2a0)
  Temp = Rf12_trans(&Ha620)
  Temp = Rf12_trans(&Hb400)
  Temp = Rf12_trans(&H8f80)
  Temp = Rf12_trans(&Hd2c0)
  Temp = Rf12_trans(&Hc823)
  Temp = Rf12_trans(&Hc038)

   Reset Spi_cs
      Temp_byte = &HC6
      Spiout Temp_byte , 1
    Set Spi_cs
  Waitms 100

Do
 Waitms 100
    Reset Spi_cs
      Temp_byte = &HC6
      Spiout Temp_byte , 1
    Set Spi_cs
  Waitms 100

   Reset Spi_cs

   Spiout A(1) , 1
   Waitus 10
   Spiout A(2) , 1
   Waitus 10
   Spiout A(3) , 1
   Waitus 10
   Spiout A(4) , 1
   Waitus 10
   Spiout A(5) , 1
   Waitus 10
   Spiout A(6) , 1
   Waitus 10
   Spiout A(7) , 1
   Waitus 10
   Spiout A(8) , 1
   Waitus 10

   Set Spi_cs


  Set Spi_cs
  Waitms 100
  Reset Spi_cs
  Waitms 100

 Waitms 100
    Reset Spi_cs
      Temp_byte = &HC4
      Spiout Temp_byte , 1
    Set Spi_cs
  Waitms 100
Waitms 100
    Reset Spi_cs
      Temp_byte = &H64
      Spiout Temp_byte , 1
    Set Spi_cs
  Waitms 100


Loop

End

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

Ist nicht der schönste Code, aber vielleicht fällt ja jamenden was 
gravierendes auf.
Der SDO im Empänger soll auf high springen wenn was im FIFO ist.

gruss stevensen

von Benedikt K. (benedikt)


Lesenswert?

Steve Bennet wrote:
> Ist nicht der schönste Code, aber vielleicht fällt ja jamenden was
> gravierendes auf.

Ja, der RF02 hat kein FIFO. Du kannst nicht einfach die Daten senden, 
sondern musst Bit für Bit anlegen. Siehe RF02 Datenblatt, Seite 14.

von bascom (Gast)


Lesenswert?


von Steve B. (stevensen)


Lesenswert?

hallo benedikt,

danke für den Tipp, die Aussage das Rfm02 kein FIFO hat, hatte ich in 
verschiedenen Threads gelesen, habe das aber nicht einordenen können. 
Leider kann ich auch nicht gut C, besonders nicht diese sehr krytpischen 
Ausdrücke. Ich habe mir deine Beispiele in C angeschaut, aber noch nicht 
ganz verstanden. Gibt es eine Delayzeit (z.b. abhängig von der 
einsgestellten Baudzeit) wenn ich die einzelnen Bits schicke? Und wann 
ändert sich nIRQ?
Das "Data Transmit Command" muß ich ja, kurz bevor ich Daten schicken, 
senden. Das wäre dann noch ein "normaler" SPI-Versand, danach die Daten 
bitweise?
Wenn ich deine RFM01/RFM02 Beispiele ausprobieren möchte, kann ich da 
die Taktfrequenz von 10 auf 8 MHz ändern, ohne das es Timingprobleme 
gibt? Wären sie auch auf einem Mega8 lauffähig, wenn ich die Ports 
ändere? Ich hoffe ich verschwende nicht zu sehr deine Zeit und würde 
mich freuen wenn Du mir die Anzworten geben könntest.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.