UART Mehrfach Transmit/Receive

Gast #3291658
Lesenswert?
• ▲
▼
Hey,

unter Verwendung des ATMega32 auf 8Mhz laufen folgende beiden Programme 
auf den uCs:

#include <avr/io.h>
#include <util/delay.h>

//Transmitter
int main(void)
{
  DDRA &= ~(1 << PA0);

  int UBBRValue = 51; //9600 Baud


  UBRRH = (unsigned char) (UBBRValue >> 8);
  UBRRL = (unsigned char) UBBRValue;

  UCSRB = (1 << TXEN);

  //8bit, 2 Stopp
  UCSRC = (1 << USBS) | (3 << UCSZ0);

  while (1)
    {
    if ((PINA & (1<<PA0))){

      //Warten
      while (! (UCSRA & (1 << UDRE)) );

      //Screiben in Puffer
      UDR = 0b11110000;
      }

    }//while ZU
}//main ZU


//Receiver
int main(void)
  {
  DDRA |= (1 << PA0);

  int UBRR_Value = 51; //9600 Baud
  UBRRH = (unsigned char) (UBRR_Value >> 8);
  UBRRL = (unsigned char) UBRR_Value;
  UCSRB = (1 << RXEN);
  UCSRC = (1 << USBS) | (3 << UCSZ0);

  unsigned char receiveData;

  while (1)
    {
    while (! (UCSRA & (1 << RXC)) );

    receiveData = UDR;

    if (receiveData == 0b11110000){
      PORTA ^= (1 << PA0);
      receiveData=0;
      }
  }
}



Wenn ich nun an PA0 des Transmitters kurz eine Spannung lege, so 
flackert die LED am 2. uC sehr flott. Mir schaut es danach aus, dass die 
Botschaft dementsprechend oft gesendet wird.

Die LED flackert etwa 5sec. Egal wie lange ich an PA0 (Transmitter) 5V 
lege. Zudem flackert die LED ca 2sec lang, wnen ich an PA1 5V lege. 
Woher kommt das denn bitte zustande?!?! PA1 taucht nirgends auf...

PA0 ist nicht debounced oder so. Ich lege einfach mit einem Draht kurz 
die Spannung an.

Liebe Grüße und Danke vorab,

Peter K.
Gast #3291660
Lesenswert?
• ▲
▼
Bevor es zu Missverständnissen kommt:
Ich kommentiere natürlich einen Teil des Programmes aus, beim 
überspielen auf den jeweiligen uC. Nicht, dass mir das noch vorgewurfen 
wird :P (Im Code habe ich die /* */ entfernt
Gast #3291777
Lesenswert?
• ▲
▼
Denke es kann geschlossen werden.

Nach ein paar Tests, denke ich dass es am Draht lag, mit dem ich PA0 mit 
5V versorgt habe.
Ziehe ich PA0 auf Masse hört es sofort auf.

Zudem lag es auf jeden Fall am Transmitter. Denke das hat was mit der 
Ladung zu tun, die ich auf dem PIN drauf lasse. Antennenwirkung konnte 
ich auch beobachten :)

Komischerweise hat ein interner Pullup/down da nichts dran geändert.

Fakt ist, wenn ich einfach all 500ms Daten raus schicke, funzt es 
wunderbar.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.