Forum: Mikrocontroller und Digitale Elektronik UART Mehrfach Transmit/Receive


von Cshape (Gast)


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.

von Cshape (Gast)


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

von Cshape (Gast)


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.

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.