Hallo, folgendes Problem tritt bei mir auf: Zwei ATmega8 sollen über UART Daten austauschen - das kleine Testprogramm funktioniert, solange ich nur selten ( einmal pro Sekunde) Daten sende - senden ich häufig kommt - sobald ich kurz das Sendekabel aus und wieder eingesteckt habe nur noch Datenmüll an - beim langsamen Senden geht das problemlos - bitte gebt mir einen Tipp: Es wird einfach eine Zahl gezählt und gesendet - beim Empfänger am PortC ausgegeben - Port B zeigt Paritätsfehler an.... Sender:
1 | # include <stdint.h>
|
2 | # include <avr/io.h>
|
3 | |
4 | uint8_t temp,temp1,temp2,temp3; |
5 | |
6 | int main(void) |
7 | {
|
8 | DDRB=0b11111111; |
9 | //PORTB=0b0000000;
|
10 | UBRRH=(uint8_t)(4000000/(2000*16L-1))>>8; |
11 | UBRRL=(uint8_t) (4000000/(2000*16L-1)); |
12 | UCSRB =(1<<TXEN); |
13 | UCSRC =(1<<URSEL)|(1<<USBS)|(1<<UPM1)|(1<<UPM0)|(1<<UCSZ1)|(1<<UCSZ0); |
14 | |
15 | //sendet binär 0 bis 63
|
16 | |
17 | temp=1; |
18 | while(1){ |
19 | temp=temp+1; |
20 | if (temp==63) temp=0; |
21 | while(!(UCSRA & (1<<UDRE))); |
22 | UDR=temp; // hier geht es prima |
23 | |
24 | //Warten .....
|
25 | temp1=0; |
26 | while(temp1<254){ |
27 | temp1++;temp2=0;// if((UCSRA & (1<<UDRE))) UDR=temp; // hier geht es nicht mehr sinnvoll |
28 | while(temp2<254){ |
29 | temp2++;temp3=0; |
30 | while(temp3<3){ |
31 | temp3++; |
32 | //
|
33 | |
34 | }
|
35 | }
|
36 | }
|
37 | }
|
38 | }
|
Empänger:
1 | |
2 | # include <stdint.h>
|
3 | # include <avr/io.h>
|
4 | |
5 | uint8_t temp; |
6 | |
7 | int main(void) |
8 | {
|
9 | DDRC=0b11111111; |
10 | DDRB=0b11111111; |
11 | |
12 | |
13 | UBRRH=(uint8_t)(4000000/(2000*16L-1))>>8; |
14 | UBRRL=(uint8_t) (4000000/(2000*16L-1)); |
15 | UCSRB =(1<<RXEN); |
16 | UCSRC =(1<<URSEL)|(1<<USBS)|(1<<UPM1)|(1<<UPM0)|(1<<UCSZ1)|(1<<UCSZ0); |
17 | |
18 | |
19 | |
20 | while(1){ |
21 | while(!(UCSRA &(1<<RXC)) | (UCSRA &(1<<PE)) ){ if(UCSRA &(1<<PE)) {temp=UDR;PORTB=255;} else PORTB=0; } |
22 | PORTC=UDR; |
23 | }
|
24 | }
|
DANKE!!!!