Hallo zusammen,
ich habe mit meinem Atmega8 Übertragungsprobleme mit USART, und zwar
werden die obersten 2 Byte immer auf 1 gesetzt.
hier meine Routine zum senden:
1 | USART_Transmit:
|
2 | sbis UCSRA,UDRE
|
3 | rjmp USART_Transmit
|
4 | out UDR,temp
|
5 | ret
|
Initialisierung
1 | .equ F_CPU = 8000000 ; Systemtakt in Hz
|
2 | .equ BAUD = 38400 ; Baudrate
|
3 |
|
4 | ; Berechnungen
|
5 | .equ UBRR_VAL = ((F_CPU+BAUD*8)/(BAUD*16)-1) ; clever runden
|
6 | .equ BAUD_REAL = (F_CPU/(16*(UBRR_VAL+1))) ; Reale Baudrate
|
Das ganze passiert im Input Capture Interrupt
hier die Interruptroutine:
1 | ICP:
|
2 | in Tempi,SREG
|
3 | clr temp
|
4 | out TCNT1H,temp
|
5 | out TCNT1L,temp
|
6 | in Amplitudenzeit2Low,ICR1L
|
7 | in Amplitudenzeit2High,ICR1H
|
8 |
|
9 |
|
10 | ldi temp,0b00010101
|
11 | rcall USART_Transmit
|
12 | out SREG,Tempi
|
13 | reti
|
Übertragen wird 11010101, ich habe schon etliche andere Zahlen probiert,
immer das selbe...