PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : verzweiflung mit UART



Ceos
29.04.2009, 11:22
ich glaub meine controller verarschen mich oder ich seh den wald vor lauter bäumen nicht



DDRD |= (1<<TRANSMITTER) | (1<<TRIGGER_PIN);
UBRRH = 0; //> ...
UBRRL = 10; //> 1/10 MBaud @ 16Mhz
UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
UCSRC = (1<<USBS)|(1<<UCSZ0)|(1<<UCSZ1); //> 8N2
while(1){
PORTD |= (1<<PD4);
while(!(UCSRA & (1<<UDRE)));
UDR = R_OPERATING;
while(!(UCSRA & (1<<TXC)));
PORTD &= ~(1<<PD4);
}


der code wird identisch auf einem M32 und einem M128 aufgespielt (M128 == Embedit128Modul) der M32 braucht 30 mal länger als der M128 um das byte über die uart zu schieben (mit oszi gemessen) was mach ich falsch, hab ich was vergessen oder pübersehen ? bitte helft mir

PS: die Frequenz selber konnt ich nicht am Quarz überprüfen, aber die pausezeiten zwischen 2 bytes sind identisch mit rund 250nS (entspricht einer vergleichsoperation, wie im while)

PicNick
29.04.2009, 11:50
Erster Blick:
Der M32 ignoriert die Anzahl Stop-Bits, wie ist das auf dem M128 ?

Ceos
29.04.2009, 13:15
Der M32 ignoriert die Anzahl Stop-Bits, wie ist das auf dem M128 ? versteh ich nicht die aussage ...

problem gefunden ... beim M32 fehlt das URSEL Bit (Bit7) statt in UCSRC zu schreiben hab ich in UBBRH geschrieben ... hat SEHR lange gebraucht bis es mir aufgefallen war, irgendwie hatte beim M32 in der initialisierung gehfehlt und dnan hab ich fälschlicherweise aus dem M128 datenblatt abgelesen dass ich es 0 setzen soll ... schon iwie bekloppt solche kleinigkeiten .. der tag ist gerettet aber es funktioniert dennoch nicht so ganz wie ich will aber das liegt am rest des aufbau vermutlich ^^