UART Mehrfach Transmit/Receive

Gast #3291658
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
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
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

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.