Problem mit PC zu Microcontroller

OP #3768768
Lesenswert?

Hallo Liebe Community,

ich arbeite gerade an einem Projekt für die Schule, mit dem Ziel ein 
Kettenfahrzeug, dessen Motoren über ein µC-Board gesteuert werden, mit 
einem USB-Joystick über den PC zu steuern.

Das ganze funktioniert auch soweit ganz gut.
Das Fahrzeug lässt sich per Kabel über die serielle Schnittstelle 
wunderbar steuern.

Nun möchte ich aber das Kettenfahzeug nicht dauerhaft am Kabel hängen 
haben.

Deshalb habe ich mir einen Funk-Sender und einen Empfänger von Aurel 
besorgt.

Ich habe zwei µC-Boards, die Exakt gleich aufgebaut sind (Der Schaltpan 
ist im Anhang.

Mein Plan ist, Das eine Board mit dem PC zu verbinden und von dort die 
Befehle per Funk weiter an das zweite Board(am Fahrzeug) zu Senden.

Um einen geeigneten Code zu finden, habe ich das ganze erstmal mit einer 
Kabelverbindung zwischen den Boards und einem simplen Programm, bei dem 
vom PC ein Byte mit einem Wert von 0-255 gesendet wird, das auf dem 
zweiten Board auf PORTB ausgegeben wird, ausprobiert.

Und da liegt mein Problem:

Im Augenblick versuche ich das Signal, welches vom Pegelwandler auf dem 
ersten Board ausgegeben wird, direkt an das zewite Board weiterzuleiten.

Hierfür habe ich PD0(RXD) vom ersten µC mit PD0(RXD) vom zweiten µC 
verbunden.
Dies funktioniert nicht.
Wenn ich allerdings zusätzlich noch PD1(TXD) von µC eins mit PD1(TXD) 
von µC zwei verbinde, funktioniert alles einwandfrei.

Ich frage mich, warum sowohl RXD als auch TXD verbunden sein müssen, 
obwohl  eigentlich nur in eine Richtung gesendet wird.

Ich hoffe, ich konnte mein Problem deutlich machen und bitte meine 
Ausdrucksweise zu entschuldigen.
Ich bin noch neu in der µC-Programmierung :-).

Hoffentlich könnt ihr mir helfen. Für konstruktive Kritik und Vorschläge 
für eine alternative Lösung bin ich immer dankbar.

Hier ist das Programm vom zweiten µC:
1
#define F_CPU 16000000UL
2
#define BAUD 1200UL
3
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   
4
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     
5
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) 
6
#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
7
#error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch!
8
#endif
9
#include <avr/io.h>
10
#include <avr/interrupt.h>
11

12
ISR(USART_RXC_vect)
13
{
14
  cli();
15
  PORTB=UDR;
16
  sei();
17
}
18
void init(void)
19
{
20
  DDRB=255;
21
  UBRRH = UBRR_VAL >> 8;
22
  UBRRL = UBRR_VAL & 0xFF;                  
23
  UCSRB |=(1<<RXEN)|(1<<RXCIE);            
24
  UCSRC |= (1<<UCSZ1) | (1<<UCSZ0) | (1<<URSEL);
25
  sei();    
26
  
27
}
28

29

30
int main(void)
31
{
32
  init();
33
  while(1)
34
  {
35
    
36
  }
37
  return 0;
38
}
Angehängte Dateien:

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