//Thomas Eckmann Informationstechnik //G:\Softwareprojekte\AVR\WS25\WS25.c //Created: 24.04.2017, 17:22:16 //Version 1.0.0 //Build 176 //Last Change: 28.04.2017, 09:43:10 #define VERSIONSTRING "1.0.0.176" #define FILESTRING "G:\\Softwareprojekte\\AVR\\WS25\\WS25.c" #ifndef F_CPU #error F_CPU not defined. #endif #ifndef __OPTIMIZE__ #warning Compiler optimizations disabled #endif //Clock = PLL, 16MHz //Resetpin = Reset // /* ----_---- Vcc(Reset) |1 8| Vcc | | Dout(PB3) |2 7| Din(INT0, PB2) | | Out2(B)(OCR1B, PB4) |3 6| Out1(G)(OCR0B, PB1) | | GND |4 5| Out0(R)(OCR0A, PB0) |_________| */ #include #include #include #include "timerconfig.h" #define OUTB4 //OC1B #define OUTB3 //Ausgang #include "portio.h" void Initialize(void); unsigned char Bit[24] = {0}; unsigned char Data[3] = {0}; __attribute__((OS_main)) int main(void) { unsigned char index = 0; unsigned char output = 0; Initialize(); while(1) { while(index < 24) { if(GIFR & (1 << INTF0)) { GIFR = (1 << INTF0); _delay_us(0.1); Bit[index++] = PINB & (1 << 2); } } output = 1; while(output) { while(!(GIFR & (1 << INTF0))); SET_B3; if(!(PINB & (1 << 2))) CLR_B3; GIFR = (1 << INTF0); _delay_us(0.1); if(!(PINB & (1 << 2))) CLR_B3; _delay_us(0.5); if(PINB & (1 << 2)) output = 0; else CLR_B3; } Data[0] = 0; Data[1] = 0; Data[2] = 0; unsigned char mask = 0x80; for(unsigned char i = 8; i < 16; i++) { if(Bit[i]) Data[0] |= mask; mask >>= 1; } mask = 0x80; for(unsigned char ind = 0; i < 8; i++) { if(Bit[i]) Data[1] |= mask; mask >>= 1; } mask = 0x80; for(unsigned char i = 16; i < 24; i++) { if(Bit[i]) Data[2] |= mask; mask >>= 1; } OCR0A = Data[0]; OCR0B = Data[1]; OCR1B = Data[2]; index = 0; while(PINB & (1 << 2)); CLR_B3; } } void Initialize(void) { InitTimer(TIMER0, PWMPC8, 8, CLEAR, CLEAR, 0, 0); TCCR1 |= (1 << CS12) | (1 << CS10); GTCCR |= (1 << PWM1B) | (1 << COM1B1); OCR1C = 255; OCR1B = 0; InitPort(); MCUCR |= (1 << ISC01) | (1 << ISC00); //Rising Edge PORTB |= (1 << 2); _delay_us(10); GIFR = GIFR; }