Gast
#2681607
Hallo habe einen Atmega8 mit 8MHZ. Drei Pins (PB1 bis PB3) sollen als digitale Eingänge dienen, diese Pins sollen je Programmdurchlauf mittels einer Funktion geprüft werden, ob sie high (+5v) oder low sind. Der Funktionswert steuert später ein paar Ausgänge, PWM usw. Ist Pin PB1 high soll der Wert der Funktion PosLK = 1 sein, ist PB2 high soll PosLK() = 2 sein usw. Der Wert von PosLK wird dann mit UART an HTerm gesendet, das funktinoiert, aber der Rest will nicht so wirklich. Benutzte AVR Studio 4, mit AVR Dude. Hier der Code (paar Header zuviel, die sind für spätere Aufgaben) ******************************************************************** #include <avr/io.h> #include <avr/interrupt.h> #define _AVR_ATmega8_ 1 //Festlegung des µC Types #define OSCSPEED 8000000 // CPU Speed mit 8 MHZ #define F_CPU 8000000UL // CPU Festlegung für delay Header #include <util/delay.h> //Einbindung von Warteschleifen #include <stdint.h> #include <stdlib.h> void InitUART(uint32_t baud) //die Funktion geht { int baudrate=(OSCSPEED/(16*baud))-1; UBRRH = (unsigned char)(baudrate>>8); UBRRL = (unsigned char)baudrate; UCSRB = (1<<RXEN)|(1<<TXEN); UCSRC = (1<<URSEL)|(3<<UCSZ0); } void UARTTransmit(unsigned char data) //die Funktion auch { while (!( UCSRA & (1<<UDRE)) ); UDR = data; } //Hier geht der Ärger los: unsigned char PosLK(void) { unsigned char Ort; if (bit_is_set(PINB,1)) //PIN B1 als Eingang { Ort = 1; } if (bit_is_set(PINB,2)) //PINB2 als Eingang { Ort = 2; } if (bit_is_set(PINB,3)) //PINB3 als Eingang { Ort = 3; }else{ Ort = 0;} return Ort; } int main()//******************************************************** { InitUART(9600); DDRB &= ~(1<<PB1); // Pin PB1 als eingang PORTB |= (1<<PB1); // PIN PB1 High Reading Eingang DDRD &= ~(1<<PB2); // Pin PB2 als eingang PORTD |= (1<<PB2); // PIN PB2 High Reading Eingang DDRD &= ~(1<<PB3); // Pin PB3 als eingang PORTD |= (1<<PB3); // PIN PB3 High Reading Eingang while(1)//******************************************************** { _delay_ms(1000); UARTTransmit(PosLK()); //****************************************************************** } return 0;} Bin für jede Hilfe dankbar, Gruß Max