Witam
Mam pytanie odnośnie "sumowania" danych (MSB i LSB) 8 bitowych w liczbę 16 bitową. Czy jest ono dobrze wykonane?
Oraz czy dobrze zostało napisane pozbycie się 4 znaczących bitów tej liczby 16 bitowej. I czy było to potrzebne? W pdfie wyczytałem, że dane przesyłane są jedynie poprzez 12 bitów, dlatego wolałem wyzerować te cztery.
Proszę o odpowiedź.
Pozdrawiam
Mam pytanie odnośnie "sumowania" danych (MSB i LSB) 8 bitowych w liczbę 16 bitową. Czy jest ono dobrze wykonane?
Oraz czy dobrze zostało napisane pozbycie się 4 znaczących bitów tej liczby 16 bitowej. I czy było to potrzebne? W pdfie wyczytałem, że dane przesyłane są jedynie poprzez 12 bitów, dlatego wolałem wyzerować te cztery.
Proszę o odpowiedź.
Pozdrawiam
#include <avr\io.h>
#define SS_NISKI() (PORTB &= ~0x10); //stan niski na SS
#define SS_WYSOKI() (PORTB |= 0x10); //stan wysoki na SS
unsigned char danaH = 0;
unsigned char danaL = 0;
unsigned int danaK = 0;
int main(void)
{
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Inicjalizacja
DDRB |= 0xB0; //ustawienie kierunku bitow portu
SPCR = _BV(SPE) | _BV(MSTR); //tryb nadrzedny, predkosc 4MHz, wlaczenie SPI, big endian, wlaczenie przerwania
SS_WYSOKI(); //stan wysoki na SS
// Koniec inicjalizacji
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Wysyłanie i odbieranie danych od MCP3208
SS_NISKI();
SPDR = 0x06;
while(!(SPSR & (1<<SPIF)));
danaH = SPDR;
SPDR = 0x00;
while(!(SPSR & (1<<SPIF)));
danaH = SPDR; //MSB
SPDR = 0x00;
while(!(SPSR & (1<<SPIF)));
danaL = SPDR; //LSB
SS_WYSOKI(); //stan wysoki na SS
// Koniec wysyłania i odbierania
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Utworzenie 16 bitowej liczby z MSB i LSB
danaK = danaH<<8 | danaL; // Liczba 16 bitowa
danaK = danaK<<4; // Pozbycie się 4 znaczących bitów
danaK = danaK>>4;
//
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
return 0;
}