www.mikrocontroller.net

Forum: Haus & Smart Home uart mit 2 mikrocontrollern


Autor: carlyle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
#include <avr/io.h>
#define F_CPU 16000000      
#define BAUD 9600                
#include "EB128_BBS2.h"
#include <util/delay.h>
#include "lcd.c"

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

void uart_putc(unsigned char c)
{
  while ( ! ( UCSR1A & (1<<UDRE1))){
  ;
  }
  UDR1 = c;    // TRX1
}



void uart_puts(char * s)
{
    while (*s)
    {
      uart_putc(*s++);
    }
}

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

int main(void)
{
  DDRA=0xff;
  DDRB=0xff;
  DDRC=0xff;
  DDRE=0x00;
  DDRG=0x00;
 
    uart_init();

  while(1)
  {
    char get;
    get = uart_getc();

    if(get == 0x30) {

    LED = 0b00000001;

    }

    if(get == 0x31)
    {
    LED = 0b00000010;
    }

    if(TASTEN == 0b00000001)
    {
      char put = 0x30;
      uart_putc(put);
    }

    if(TASTEN == 0b00000010)
    {
      char put = 0x31;
      uart_putc(put);
    }
  }

return 0;
}

Autor: Guru (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.