16 Bit von Temp-Senor empfangen

OP #931330
Hallo

ATmega 168
Temp-Sensor: LM74

bisher kriege ich ein 8 bit Wert vom Temp-Sensor über SPI. Würde wegen 
höehere Genauikeit aber 16 Bit empfangen. Der Senor kann das auch. Nur 
wie setze ich das im Programm um.


sendSPI:
  ldi  r20,0b00101110  ; master [clk(5) mosi(3)  ss(2)]=outp
  out  DDRB,r20
  in  r16,SPSR  ; dummy read
  ldi  r20,0b11111111  ; Befehl[FF] für Temp-Sensor(Temp senden)
  cbi  portb,2  ; bit 2 von portb auf 0 = cs low
  out  spdr,r20  ; 1.byte senden
  ret

receiveSPI:
  in  r16,SPSR
  sbrs  r16,SPIF  ; warte auf transmitflag
  rjmp  receiveSPI
  sbi  portb,2  ; cs auf high
  in  tempout,spdr  ; 1.Byte wird empfangen
  ret
Einfach zwei mal Dein receiveSPI aufrufen während Du das CS des LM74 auf 
low hälst. Und dann halt entsprechend in die variablen packen.

In C sieht das ganze bei mir so aus:
1
int16_t current_temp;
2
clear_bit(PORTB, PB4);
3

4
SPDR = 0;
5
loop_until_bit_is_set(SPSR, SPIF);
6
current_temp = (SPDR << 8);
7

8
SPDR = 0;
9
loop_until_bit_is_set(SPSR, SPIF);
10
current_temp |= SPDR;
11

12
set_bit(PORTB, PB4);

Nachtrag:
Weil ich es grad sehe, der LM74 sendet mit den ersten 2 Byte direkt den 
aktuellen Wert, du brauchst ihn nicht extra via Kommando abfragen.
OP
Hi,
ich kann immer noch keine 16Bit empfangen. Aus r18 bekomme ich irgendein 
Datenmüll und aus r19 kriege ich nix geliefert.
1
receiveSPI:
2
  in  r16,SPSR
3
  sbrs  r16,SPIF  ; warte auf transmitflag
4
  rjmp  receiveSPI
5
  in  r18,spdr  ; 1.Byte wird empfangen
6
  ret
7

8
receiveSPI2:
9
  in  r16,SPSR
10
  sbrs  r16,SPIF  ; warte auf transmitflag
11
  rjmp  receiveSPI2
12
  ;sbi  portb,2  ; cs auf high
13
  in  r19,spdr  ; 2.Byte wird empfangen
14
  sbi  portb,2
15
  
16
  ret

Kann ich r18 und r19 dann in das X register schreiben, so dass in einem 
Register einen 16 Bit Wert habe.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.