Datum: 20.07.2008 00:47
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
Datum: 20.07.2008 00:54
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:
int16_t current_temp; clear_bit(PORTB, PB4); SPDR = 0; loop_until_bit_is_set(SPSR, SPIF); current_temp = (SPDR << 8); SPDR = 0; loop_until_bit_is_set(SPSR, SPIF); current_temp |= SPDR; 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.
Datum: 22.07.2008 21:36
Hi, ich kann immer noch keine 16Bit empfangen. Aus r18 bekomme ich irgendein Datenmüll und aus r19 kriege ich nix geliefert.
receiveSPI: in r16,SPSR sbrs r16,SPIF ; warte auf transmitflag rjmp receiveSPI in r18,spdr ; 1.Byte wird empfangen ret receiveSPI2: in r16,SPSR sbrs r16,SPIF ; warte auf transmitflag rjmp receiveSPI2 ;sbi portb,2 ; cs auf high in r19,spdr ; 2.Byte wird empfangen sbi portb,2 ret |
Kann ich r18 und r19 dann in das X register schreiben, so dass in einem Register einen 16 Bit Wert habe.
Datum: 22.07.2008 21:45
Das ist ja anscheinend nicht die komplette Funktion. Da fehlt das Slave-Select und natürlich musst du SPDR auch noch beschreiben (vor jedem einzelnen receive), damit die SPI überhaupt losrennt.
Datum: 22.07.2008 21:56
chips select ist drinne. Das Sende an den SPI habe ich nicht nochmal geschrieben, habe ich ganz oben schon reingestellt. allerdings habe ich nur einmal spi senden und dann zweimal spi empfangen programmiert
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel


