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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren