uart mit 2 mikrocontrollern

Gast #1658853
Lesenswert?

Hallo

Ich möchte zwei Mikrocontroller über uart kommunizieren lassen.
Wenn ich einen Taster drücke soll auf dem anderen eine LED angehen.
Wenn ich den MC an den PC anschließe kann ich mit den Tasten 0 bis 1 
Zeichen an das Terminal senden und wenn ich eine 0 oder eine 1 über das 
Terminal eintippe leuchten auf dem MC die Lampen 0 und 1 auf.
Verbinde ich die beiden MC untereinander passiert leider nichts.
Es leuchten aber die rs232 Kontrolllampen auf, beim senden und 
empfangen.

Ich verwende einen at90can128 über avrispmkII.
Meine C Kenntnisse beschränken sich auf Basiswissen.
Ich bin froh das ich es überhaupt zu Ergebnissen gebracht habe. Bietet 
diese Aufgabe doch eine menge Stolperfallen..

gruß carlyle
1
#include <avr/io.h>
2
#define F_CPU 16000000      
3
#define BAUD 9600                
4
#include "EB128_BBS2.h"
5
#include <util/delay.h>
6
#include "lcd.c"
7

8
void uart_init()
9
{
10
  //16mhz quarz extern
11
  //fuses ok
12
  //8bit keine parität 1 stopbit
13
  UBRR1H = (unsigned char) (((F_CPU/(16L*BAUD))-1) >> 8);
14
  UBRR1L = (unsigned char) ((F_CPU/(16L*BAUD))-1) & 0xff;
15
  UCSR1C = (0<<UMSEL1) | (0<<UPM1) | (0<<USBS1) | (1<<UCSZ1) | (1<<UCSZ0);
16
  UCSR1B = (1<<RXEN1) | (1<<TXEN1);
17
}
18

19
void uart_putc(unsigned char c)
20
{
21
  while ( ! ( UCSR1A & (1<<UDRE1))){
22
  ;
23
  }
24
  UDR1 = c;    // TRX1
25
}
26

27

28

29
void uart_puts(char * s)
30
{
31
    while (*s)
32
    {
33
      uart_putc(*s++);
34
    }
35
}
36

37
unsigned char uart_getc()
38
{
39
  return (UCSR1A & (1 << RXC1)) ? (char) UDR1 : 0;    //RX1
40
}
41

42
int main(void)
43
{
44
  DDRA=0xff;
45
  DDRB=0xff;
46
  DDRC=0xff;
47
  DDRE=0x00;
48
  DDRG=0x00;
49
 
50
    uart_init();
51

52
  while(1)
53
  {
54
    char get;
55
    get = uart_getc();
56

57
    if(get == 0x30) {
58

59
    LED = 0b00000001;
60

61
    }
62

63
    if(get == 0x31)
64
    {
65
    LED = 0b00000010;
66
    }
67

68
    if(TASTEN == 0b00000001)
69
    {
70
      char put = 0x30;
71
      uart_putc(put);
72
    }
73

74
    if(TASTEN == 0b00000010)
75
    {
76
      char put = 0x31;
77
      uart_putc(put);
78
    }
79
  }
80

81
return 0;
82
}
Gast #1659272
Lesenswert?

Du must die beiden MCs per Nullmodemkabel verbinden.
Sprich du musst die Sendeleitung (TxD) des einen Microcontroller mit der 
EMpfangsleitung  (Rxd) des ander MC verbinden und natürlich umgekehrt. 
Dann sollte es tun. Falls weiter unklar dann poste mal den Schaltplan 
und ich kann dirs nochmals exakt erklären.

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