Hi, ich habe ein Problem mit meiner USART_Transmit() Funktion. Und zwar will ich dass wenn die Funktion aufgerufen wird der PB0 auf '1' geht und am Ende der Funktion wieder auf '0' geht. Wenn ich also die Funktion zweimal hintereinfander aufrufe sollte der PB0 fast durchgehend auf '1' liegen. Aber aus irgendwelchem Grund geht der PB0 nach dem ersten aufrufen der Funktion wieder auf '0' und bleibt selbst beim zweiten Aufruf '0'! Selbst wenn ich das setzen und löschen ausheralb der Funktionen (in Main) vornehme, bleibt der Fehler Vielleicht seh ich den Wald vor lauter Bäumen nicht mehr...
1 | int main(void) |
2 | {
|
3 | uint16_t temp=0; |
4 | uint8_t empfang, lsb, msb; |
5 | |
6 | //Initialisierung Ports
|
7 | |
8 | DDRB = (1<<DDB0)|(1<<DDB1)|(1<<DDB2)|(1<<DDB6)|(1<<DDB7); |
9 | PORTB|=(1<<PB1)|(1<<PB2); //RS485 Receiver und Max6675 ausschalten |
10 | PORTB|=(1<<PB5)|(1<<PB7); //Pull Up an DI aktiv, SPI Clock auf high |
11 | PORTB &=~(1<<PB0); //RS485 Transimtter ausschalten, MAX6675 nicht auslesen |
12 | |
13 | |
14 | //USART Intitalisierung
|
15 | USART_Init(baudrate); |
16 | |
17 | for(uint8_t i=0; i<=2; i++) |
18 | {
|
19 | for(uint8_t i=0; i<=100; i++) |
20 | _delay_ms(50); |
21 | |
22 | |
23 | temp=SPI_Receive(); |
24 | eeprom_write_word(&max, temp); |
25 | msb=temp; |
26 | lsb=(temp>>8); |
27 | eeprom_write_byte(&elsb, lsb); |
28 | eeprom_write_byte(&emsb, msb); |
29 | //PORTB|=(1<<PB0); //selbst das Setzen und löschen von PB0 ausherhalb der Funktion behebt den Fehler nicht! ??
|
30 | USART_Transmit(msb); |
31 | USART_Transmit(lsb); |
32 | //PORTB&=~(1<<PB0);
|
33 | }
|
34 | while(1); |
35 | return 0; |
36 | }
|
37 | |
38 | |
39 | |
40 | |
41 | void USART_Transmit( unsigned char data ) |
42 | {
|
43 | PORTB |=(1<<PB0); //RS485 Transmitter An |
44 | /* Wait for empty transmit buffer */
|
45 | while ( !( UCSRA & (1<<UDRE)) ); |
46 | /* Put data into buffer, sends the data */
|
47 | UDR = data; |
48 | while ( !( UCSRA & (1<<UDRE)) ); |
49 | PORTB &=~(1<<PB0); //RS485 Transmitter Aus |
50 | |
51 | }
|