Hallo das ist mein erste Beitrag ich versuche auf meinen atmega 128 mit 4Mhz ein Programm zu schreiben das mehrere BAUDRATE unterstützt. Kurze Info vorweg mit einer Baurate geht das Programm. Funktion des Programmes ich lese auf der UART mit BAUD 300 einen String aus der mir sag mit welches max BAUD ich weiterlesen kann. Danach sende ich String zum Umstellen der BAUD siehe Code. Mein Problem ist das sich die BAUD auf meine atmega nicht ändert ich vermutet das ich ein Register zu schrieben vergessen habe kann mir jemand helfen. Siehe Code Ausschnitt der main // Befehl zum ändern der BAUD clstr[0]=0x06; clstr[1]='0'; clstr[2]=baud; clstr[3]='1'; clstr[4]=0x0D; clstr[5]=0x0A; clstr[6]=0; USART1_send(clstr); waitAnswer(0,0); //BAUD ändern setBaud(baud); //nächster Befehl mit neuer BAUD clstr[0]=0x01; clstr[1]='R'; clstr[2]='2'; clstr[3]=0x02; clstr[4]='C'; clstr[5]='0'; clstr[6]='0'; clstr[7]='1'; clstr[8]='('; clstr[9]=')'; clstr[10]=0x03; clstr[11]=0; buildbcc(clstr); // Buffer 2 empfang bereit machen clpos=clbufferpos; csstpos=0; USART1_send(clstr); waitAnswer(0,40); void setBaud(char baud){ //cli(); USART1_init(0); if(baud=='0') USART1_init(833); // init serial 1 300 baud 7E1 if(baud=='1') USART1_init(415); // init serial 1 600 baud 7E1 if(baud=='2') USART1_init(207); // init serial 1 1200 baud 7E1 if(baud=='3') USART1_init(103); // init serial 1 2400 baud 7E1 if(baud=='4') USART1_init(51); // init serial 1 4800 baud 7E1 if(baud=='5') USART1_init(25); // init serial 1 9600 baud 7E1 if(baud=='6') USART1_init(12); // init serial 1 19200 baud 7E1 //sei(); } void USART1_init(unsigned int baud){ UCSR1A &= ~(1<<UDRE1); /* disable receiver and transmitter */ UCSR1B &= ~((1<<RXEN1) | (1<<TXEN1)) ; /* disable interrupt */ UCSR1B &= ~(1<<RXCIE1); /* set baudrate */ UBRR1H = (unsigned char)(baud>>8); UBRR1L = (unsigned char)baud; /* enable receiver and transmitter */ UCSR1B = (1<<RXEN1) | (1<<TXEN1) ; /* enable interrupt */ UCSR1B |= (1<<RXCIE1); /* frame format */ UCSR1C = 0x24; //1stopp-bit //UCSR1C = 0x2C; //2stopp-bit }
- Großschreibung bedeutet Rumschreien und ist unhöflich! - Deine Ausdrucksweise ist eine Katastrophe! - C-Code als Anhang oder in [c ] [/c ] Tags. - allgemein: lesen: Netiquette
Jens Bork schrieb:
1 | clstr[2]=baud; |
was für einen datentyp hat "baud"? Für "char" wäre schon 300 zuviel, für short / int wäre obige Zuweisung schmarrn.
Ein "Bitte" oder "Danke" und korrekte Interpunktion würden deine Chancen, eine vernünftige Antwort zu erhalten, deutlich erhöhen. Wenn du darüber hinaus noch von der deutschen Orthographie Gebrauch machen würdest, dann fehlten wirklich nur noch die [c]-Tags und es wäre perfekt. Natürlich abgesehen von der Tatsache, dass die ausschliessliche Verwendung von Großbuchstaben die Chancen darauf, dass jemand deine Frage liest, nicht erhöht sondern ganz im Gegenteil sogar senkt. In deinem Code sehe ich übrigens nicht ein einziges Mal, dass der Variable baud ein Wert zugewiesen würde.
Entschuldigung für den Betreff wie gesagt mein erster Beitrag. Hier der fehlende Code. Clstart ist eine Char Array das über die Interrupt Rutine gefüllt wird. char baud='0'; while( k<(CLSTARTSIZE-1)){ if( (clstart[k]=='/') && ( clstart[k+1]!='?') ){ baud=clstart[k+4]; k=CLSTARTSIZE; } k++; }
Das führt irgendwie zu nichts. Wie stellst Du Dir das mit der Baudrate vor? Codierst Du die irgendwie, damit sie in ein Byte hineinpasst, oder was stellst Du da an? Der Schnipsel ist nicht "der fehlende Code", sondern nur ein Fragmentfetzen. Poste vollständigen Code, beschreibe genau, was Du anstellen willst, beschreibe genau, wie die übertragenen Daten aussehen. Und beschreibe Deine Testumgebung, also: Wer ist mit dem µC verbunden, wer sendet Daten, wer empfängt sie, wie wertest Du wo was aus ... Und überhaupt: Was bezweckst Du damit? Welches Problem willst Du lösen?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.