Forum: Mikrocontroller und Digitale Elektronik SPI und RFM70 [AVR-ASSEMBLER]


von Richard X. (synq1e)


Angehängte Dateien:

Lesenswert?

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

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.