geschätztes forum,
ich versuche vergebens eine verbindung mit einem atmega8 über SPI zu
einem RFM70 (Transceiver Modul)
aufzubauen. (datenblatt angehängt)
ich möchte anfangs nur das status register und einige register versuchen
auszulesen bevor ich mich an das funken waage.
verbindungen von mega8 zu RFM70:
; SCK <<>> PB5 (SCK)
; MISO <<>> PB4 (MISO)
; MOSI <<>> PB3 (MOSI/OC2)
; CSN (Chip Select) <<>> PB2 (SS/OC1B)
; CE chip enable <<>> PB1
; masse natürlich verbunden
dem datenblatt(seite 12) entnehme ich das VOR jedem neuen kommando
dass übertragen wird
ein HIGH zu LOW übergang an CSN folgen muss.
und wenn dann das kommando übertragen wird gleichzeitig auch das status
register an MISO ankommt. (MSB zuerst)
mein code dazu:
(gesendet wird ein no operation command um das status register
auszulesen)
1 | .include "m8def.inc"
|
2 |
|
3 | ;Device : Atmega8 @ 4 Mhz internal Osc.
|
4 |
|
5 |
|
6 | ; SPI RFM70 <<>> Mega8
|
7 | ;-----------------------------------------
|
8 | ;
|
9 | ; SCK <<>> PB5 (SCK)
|
10 | ; MISO <<>> PB4 (MISO)
|
11 | ; MOSI <<>> PB3 (MOSI/OC2)
|
12 | ; CSN (Chip Select) <<>> PB2 (SS/OC1B)
|
13 | ; CE chip enable <<>> PB1
|
14 |
|
15 |
|
16 | .org 0
|
17 | rjmp reset
|
18 |
|
19 |
|
20 | reset :
|
21 |
|
22 | ldi r16,high(ramend) ;stack pointer einrichten
|
23 | out SPH,r16
|
24 | ldi r16,low(ramend)
|
25 | out SPL,r16
|
26 |
|
27 | loop:
|
28 | rcall SPI_MA_INIT ;spi als master konfigurieren
|
29 |
|
30 | ldi r16,0xFF ;kommando NOP
|
31 | rcall SPI_MASTERTRANSMIT
|
32 |
|
33 | ;theoretisch müsste hier das empfangene byte in r17 enthalten sein
|
34 | ;ich empfange aber nur lauter einsen (0xFF)
|
35 | ;wäre sehr dankbar wenn mir wer erklären kann was ich falsch mache
|
36 |
|
37 |
|
38 | rjmp loop
|
39 |
|
40 | SPI_MA_INIT:
|
41 | ;-----------SPI-Master-Init------------------------
|
42 | ldi r16,(1<<PB3)+(1<<PB5) ;MOSI + SCK output setzen
|
43 | out DDRB,r16
|
44 | sbi DDRB,2 ;PB2 auf ausgang für CSN (chip select bei RFM70)
|
45 | sbi PORTB,2 ;PB2 (SS) auf HIGH
|
46 | nop
|
47 | nop
|
48 | ldi r16,(1<<SPE)+(1<<MSTR)+(1<<SPR1) ; Enable SPI, Master,SCK Frequency= XTAL/64
|
49 | out SPCR,r16
|
50 | ;-----------SPI-Master-Init------------------------
|
51 | ret
|
52 |
|
53 |
|
54 | SPI_MasterTransmit:
|
55 | cbi PORTB,2 ;PB2 (Chip select) auf low um kommando senden zu initieeren
|
56 | warten:
|
57 | sbic PINB,2
|
58 | rjmp warten
|
59 | out SPDR,r16 ; Start transmission of data (r16)
|
60 | Wait_Transmit:
|
61 | sbis SPSR,SPIF ; Wait for transmission complete
|
62 | rjmp Wait_Transmit
|
63 |
|
64 | in r17,SPDR ;shift register eingangs puffer lesen (Status register von RFM70)
|
65 | sbi PORTB,2 ;CSN chip select high
|
66 | ret
|