/* * Interface for ICL71c03 ADC * Designed for the Keithley 179 True RMS Multimeter */ #define F_CPU 4000000UL //4MHz #define USART_UART_BAUDRATE 9600 #include #include //Locations of ADC Outups (ICL71c03) #define b1 PC0 #define b2 PC1 #define b3 PC2 #define b4 PC3 #define d1 PD7 #define d2 PD4 #define d3 PD5 #define d4 PD6 #define d5 PC3 #define busy PB7 //Busy not Used //Status uint8_t UART_RX; uint8_t UART_RX_END; uint8_t UART_isInit; //Buffers char out[5]; //Buffer for ADC Input char in[16]; //UART Input Buffer uint8_t in_cntr; //Counter for UART Input Buffer //UART Rcieve Interrupt ISR(USART_RXC_vect) { cli(); in[in_cntr] = UDR; if(in[in_cntr] == '\n') UART_RX_END = 1; //Set RX End Flag //Check if Buffer is full if(in_cntr < 15) in_cntr ++; else { in_cntr = 0; UART_RX_END = 1; //Set RX End Flag } sei(); }//USART_RXC_vect //Prototypen void UART_Init(); /* *Initializes the UART Interface */ void UART_Handle(); /* * Handles UART Communication * Not Implemented */ void UART_Send(char *_cSend); /* *Sends String over UART */ void UART_Putc(unsigned char c); //Startpoint int main(void) { //clear Buffers for(int i = 0; i < 5;i++) { out[i] = 0; } for(int i = 0; i < 16;i++) { in[i] = 0; } //Init Status vars char temp = 0; in_cntr = 0; UART_RX = 0; UART_RX_END = 0; UART_isInit = 0; //Set Inputs DDRD = 0; DDRC = 0; DDRD |= (1<> 4; temp = 0; while(!(PORTD & (1<> 4; temp = 0; while(!(PORTD & (1<> 4; temp = 0; while(!(PORTD & (1<> 4; temp = 0; while(!(PORTC & (1<> 4; temp = 0; //Convert to ASCII for(int i = 0; i < 5;i++) { out[i] = out[i] + 48; } UART_Send(out); //Handle UART UART_Handle(); //Reset Buffer for(int i = 0; i < 5;i++) { out[i] = 0; } } return 0; }//main void UART_Init() { if(UART_isInit == 0) { uint16_t baudrate = (((F_CPU / (USART_UART_BAUDRATE * 16UL))) - 1); UBRRH = (baudrate >> 8); UBRRL = (baudrate & 0xFF); UCSRB |= (1<