Forum: Haus & Smart Home uart mit 2 mikrocontrollern


von carlyle (Gast)


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
}

von Guru (Gast)


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.

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.