// Template - Roman Pavelka, 2011// written for atmega8#define F_CPU 16000000#define BAUD 1000000//#define MYUBRR F_CPU/8/BAUD-1#define MYUBRR 1#include <avr/io.h>#include <avr/interrupt.h>#include <util/delay.h>#include "./libs/usart.h"#include "./libs/spi.h"//#include "./libs/mcp4922.h"//#include "./libs/adc.h"//#include "./libs/timer.h"#define LEN 128void act(void);void drive(unsigned char t);int main (void) {USART_Init(MYUBRR);PORTC = 0b00000000; // drive portDDRC = 0b00000011; // drive port outDDRB = 0b00101110; //MOSI out CONV out, DAC CS outPORTB = 0b00101010; // SCK, MOSI, CONV, DAC highSPI_MasterInit();sei();while (1) ;return 0;}void act(void) {unsigned char data[2*LEN];unsigned char i,j;for(j=0;j<40;j++) {for(i=0;i<LEN;i++) {drive(i);_delay_us(5);}}for(i=0;i<LEN;i++) {drive(i);PORTB |= 0b00000100;_delay_us(4); // convertingPORTB &= 0b11111011;data[2*i]=SPI_MasterTransmit(0x0);data[2*i+1]=SPI_MasterTransmit(0x0);}PORTC=0;for(i=0;i<LEN;i++) {USART_Transmit(data[2*i]);// USART_Transmit(data[2*i+1]);}}void value(void) {unsigned char i,j;long resultH,resultL;resultH=0;resultL=0;for(j=0;j<32;j++) {for(i=0;i<LEN;i++) {drive(i);_delay_us(5);}}for(j=0;j<4;j++) {for(i=0;i<LEN/2;i++) {drive(i);PORTB |= 0b00000100;_delay_us(4); // convertingPORTB &= 0b11111011;resultH+=(unsigned char)SPI_MasterTransmit(0x0);resultL+=(unsigned char)SPI_MasterTransmit(0x0);}for(i=LEN/2;i<(LEN/4)*3;i++) { //dela podivnou kvantitatizaci vysledkudrive(i);PORTB |= 0b00000100;_delay_us(4); // convertingPORTB &= 0b11111011;resultH-=(unsigned char)SPI_MasterTransmit(0x0);resultL-=(unsigned char)SPI_MasterTransmit(0x0);}}PORTC=0; // drive off// resultH *= 256;// USART_Transmit_longnum(resultH+resultL);USART_Transmit_longnum(resultH);USART_Transmit('\n');}ISR(USART_RXC_vect) {cli();char c;c=UDR; //must be read to untrigger interuptif (c=='a')act();else if (c=='v')value();sei();}void drive(unsigned char t) {if (t<LEN/2)PORTC = 0b00000001;elsePORTC = 0b00000010;}