You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
693 B

#include "muxer.h"
#include <avr/io.h>
/*****************
* themor-sensors are channels 0-3
*
* pt1000 is on channel 5
*/
void muxer_init(){
DDRC |= (_BV(0)|_BV(1)|_BV(2)|_BV(3)); // conf as outputs
PORTC |= _BV(3); // inhibit
}
void muxer_set(uint8_t channel){
uint8_t selectbits = muxer_channel_to_selectbits(channel);
PORTC |= _BV(3); // engage inhibit
PORTC &= ~(0x07); //mask
PORTC |= selectbits & 0x07; //set
PORTC &= ~(_BV(3)); // disengage inhibit
//TODO: delays, check everything, mask in register
}
uint8_t inline muxer_channel_to_selectbits(uint8_t channel){
static uint8_t table[] = {2,1,0,3,5,7,6,4};
if(channel>=8){
return 0;
}
return(table[channel]);
}