SPI und RFM70 [AVR-ASSEMBLER]

OP #3134829
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
Angehängte Dateien:

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.