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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.