//------------------------------------------------------------------------- // Titel : //------------------------------------------------------------------------- // Funktion : // Schaltung : //------------------------------------------------------------------------- // Prozessor : ATmega8 // Takt : 3686400 Hz // Sprache : C // Datum : 20.7.2009 // Version : 1.0 // Autor : // Programmer: // Port : //------------------------------------------------------------------------- // created by myAVR-CodeWizard //------------------------------------------------------------------------- // #define F_CPU 3686400 #include //#include #include #include #include #define BAUD 9600 uint16_t c = 0; uint16_t x = 0; uint16_t y = 0; uint16_t z = 0; uint16_t v1 = 0; unsigned char status = 0; char r[7]; //-------------------------------------------------------------------- // INT0_vect - INT0 Interrupt an Eingang PORTD2 bei fallender Flanke //-------------------------------------------------------------------- ISR(INT0_vect) { // Hier Interruptbehandlung c = c + 1; } //---------------------------------------------------------------------- // Titel : C-Funktion Zeichen zu UART senden. //---------------------------------------------------------------------- // Funktion : ... // IN : char data // OUT : ... //---------------------------------------------------------------------- void uartPutChar(char data) { //warte bis UDR leer ist UCSRA / USR bei z.B.: 2313 while (!(UCSRA&32)); //sende UDR=data; } //---------------------------------------------------------------------- // Titel : C-Funktion Zeichen von UART holen. //---------------------------------------------------------------------- // Funktion : ... // IN : ... // OUT : data //---------------------------------------------------------------------- char uartGetChar() { char data=0; //warte bis RX-complete RXC UCSRA / USR bei z.B.: AT090S2313 while (!(UCSRA&128)); //empfangen data=UDR; return data; } //---------------------------------------------------------------------- // Titel : C-Funktion Zeichenkette zu UART senden. //---------------------------------------------------------------------- // Funktion : ... // IN : char *buffer, Zeichenkette mit NUll abgeschlossen // OUT : ... //---------------------------------------------------------------------- void uartPutString(char *buffer) { for (int i=0; buffer[i] !=0;i++) uartPutChar (buffer[i]); } //---------------------------------------------------------------------- // Titel : SPI-Schnittstelle Master //---------------------------------------------------------------------- void spi (void) { DDRB = _BV(PB2) | _BV(PB3) | _BV(PB5); // setze SCK,MOSI,PB2 (SS) als Ausgang DDRB &= ~_BV(PB4); // setze MISO als Eingang PORTB = _BV(PB5) | _BV(PB2); // SCK und PB2 high (ist mit SS am Slave verbunden) SPCR = _BV(SPE) | _BV(MSTR) | _BV(SPR0); //Aktivierung des SPI, Master, Taktrate fck/16 status = SPSR; //Status löschen } //---------------------------------------------------------------------- // Titel : Timer 1 //---------------------------------------------------------------------- void timer() { TCCR1B |=0x05; // Teiler 1/1024 TCCR1B |=0x08; // Modus: Zählen bis Vergleichswert OCR1A=36000; // Vergleichswert speichern TIMSK =(1 << OCIE1A); } //------------------------------------------------------------------------ // Initialisierungen //------------------------------------------------------------------------ void init() { // Ports initialisieren cbi(DDRD,2); // PORTD2 auf Eingang mit PullUp sbi(PORTD,2); GICR|=0b01000000; // INT0 Interrupt an Eingang PORTD2 bei fallender Flanke MCUCR|=0b00000010; //--- Interrupts erlauben --- sei(); } void uart(){ // UART initialisieren sbi(UCSRB,3); // TX aktiv sbi(UCSRB,4); // RX aktivieren UBRRL=(uint8_t)(F_CPU/(BAUD*16L))-1; // Baudrate festlegen UBRRH=(uint8_t)((F_CPU/(BAUD*16L))-1)>>8; // Baudrate festlegen } void SPI_Tranz(char Data){ SPDR = Data; while (!(SPSR & (1< Beginn der Übertragung SPI_Tranz(0x12); _delay_ms(6); SPI_Tranz(0x01); _delay_ms(6); SPI_Tranz(0x53); _delay_ms(6); SPI_Tranz(0x66); _delay_ms(6); SPI_Tranz(0x00); _delay_ms(6); PORTB = (1 << PB2); uart(); utoa(y, r, 10); uartPutString( r ); utoa(v1, r, 10); uartPutString( r ); z = 0; y = 0; } timer(); } // Mainloop-Ende } //---------------------------------------------------------------------------