void init_max186(void) { cbi(AD_PORT_DREG,AD_SPI_DIN); //Setzen von Pin DIN auf Input cbi(AD_PORT_DREG,AD_SPI_SSTRB); //Setzen von Pin SSTRB auf Input sbi(AD_PORT_DREG,AD_SPI_DOUT); //Setzen von Pin DOUT auf Output sbi(AD_PORT_DREG,AD_SPI_CS); //Setzen von Pin Chip_Select auf Output sbi(AD_PORT_DREG,AD_SPI_SCLK); //Setzen von Pin Chip_Select auf Output sbi(AD_PORT_WR,AD_SPI_CS); //Setzt den Pin Chip_Select auf High Pegel } void read_max186(unsigned char command) { cbi(AD_PORT_WR,AD_SPI_CS); //Setzt den Pin Chip_Select auf High Pegel write_soft_spi(command); sbi(AD_PORT_WR,AD_SPI_CS); asm volatile("nop"::); asm volatile("nop"::); loop_until_bit_is_set(PINA,6); cbi(AD_PORT_WR,AD_SPI_CS); ADWERT = read_soft_spi_16B(); sbi(AD_PORT_WR,AD_SPI_CS); } void write_soft_spi(unsigned char byte) { for (unsigned char a=8; a>0; a--) { if (bit_is_set(byte,(a-1))>0) { sbi(AD_PORT_WR,AD_SPI_DOUT); } else { cbi(AD_PORT_WR,AD_SPI_DOUT); } sbi(AD_PORT_WR,AD_SPI_SCLK); //Setzt den Pin clock auf High Pegel asm volatile("nop"::); cbi(AD_PORT_WR,AD_SPI_SCLK); //Setzt den Pin clock auf low Pegel } cbi(AD_PORT_WR,AD_SPI_DOUT); } unsigned char read_soft_spi(void) { unsigned char byte=0; for (unsigned char a=8; a>0; a--) { sbi(AD_PORT_WR,AD_SPI_SCLK); //Setzt den Pin clock auf High Pegel if (bit_is_set(AD_PORT_RD,AD_SPI_DIN)>0) { sbi(byte,(a-1)); } else { cbi(byte,(a-1)); } cbi(AD_PORT_WR,AD_SPI_SCLK); //Setzt den Pin clock auf low Pegel } return (byte); } unsigned int read_soft_spi_16B(void) { unsigned int bytes=0; for (unsigned char a=16; a>0; a--) { asm volatile("nop"::); asm volatile("nop"::); sbi(AD_PORT_WR,AD_SPI_SCLK); //Setzt den Pin clock auf High Pegel asm volatile("nop"::); asm volatile("nop"::); if (bit_is_set(AD_PORT_RD,AD_SPI_DIN)>0) { sbi(bytes,(a-1)); } else { cbi(bytes,(a-1)); } cbi(AD_PORT_WR,AD_SPI_SCLK); //Setzt den Pin clock auf low Pegel } return (bytes); }