Forum: Compiler & IDEs USART TX abschalten verhält sich eigenartig


von Norbert S. (norton)


Lesenswert?

Hallo,

ich benutze einen ATmega165P und AVR-GCC.
Ich habe folgendes Verhalten festgestellt, wenn ich folgendermaßen ein 
Zeichen sende funktioniert alles prima
1
int main ( void )
2
{
3
  wdt_disable();
4
  port_init();
5
6
  power_usart0_enable();
7
  uart_init();
8
9
  while(1)
10
  {
11
      UCSR0B |= (1<<TXEN0);                     // UART TX einschalten
12
      while (!(UCSR0A & (1<<UDRE0)))             // warten bis Senden moeglich ist
13
      {
14
      } 
15
16
      UDR0 = 'A';
17
      while (!(UCSR0A & (1<<TXC0)))              // warten bis Senden abgeschlossen ist
18
      {
19
      } 
20
21
    long_delay(300);
22
      UCSR0B &= ~(1<<TXEN0);                     // UART TX ausschalten
23
  }
24
}

wenn ich den TX gleich nach dem senden ausschalte wir das Zeichen nicht 
richtig gesendet (das Signal wird länger! Als ob es gleich ein weiters 
mal gesendet werden soll?)
1
int main ( void )
2
{
3
  wdt_disable();
4
  port_init();
5
6
  power_usart0_enable();
7
  uart_init();
8
9
  while(1)
10
  {
11
      UCSR0B |= (1<<TXEN0);                     // UART TX einschalten
12
      while (!(UCSR0A & (1<<UDRE0)))             // warten bis Senden moeglich ist
13
      {
14
      } 
15
16
      UDR0 = 'A';
17
      while (!(UCSR0A & (1<<TXC0)))              // warten bis Senden abgeschlossen ist
18
      {
19
      } 
20
//// !!!!!!!!!!  UNTERSCHIED  !!!!!!!!!!!!!
21
      UCSR0B &= ~(1<<TXEN0);                     // UART TX ausschalten
22
    long_delay(300);
23
  }
24
}

Bei einer anderen Schaltung mit einem ATmega48 hat es mit der zweiten 
Variante ebenfalls funktioniert.
Kann jemand erklären warum sich das so verhält?

von Peter D. (peda)


Lesenswert?

Ich vermute mal, sobald man das Senden disabled, wird der Pin wieder auf 
das Outputlatch geschaltet.
Das sollte man also vorher auf 1 setzen, sonst gibts ein neues Startbit.

Ich sehe allerdings auch keinen Sinn darin, das Senden zu disablen, 
einfach nix senden und gut is.


Peter

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
Noch kein Account? Hier anmelden.