UART senden-empfangen

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 16 8 2026  16:57:12      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Oszilloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
UART senden-empfangen

    







BID = 922371

epfuscher

Gerade angekommen


Beiträge: 11
 

  


Bitte um Hilfe:
Hallo,
folgende Aufgabe:ATMEGA328P
2uC: S1..TASTER1, S2..TASTER2,L1..Led1, L2..LED2
S1 an uC1 soll LED2 an uC2 schalten(Wenn Tasrer betätigt->LED EIN)
S2 an uC2 soll LED1 an uC1 schalten(Wenn Tasrer betätigt->LED EIN)
das ganze soll mit UART realisiert werden.

Funktioniert nicht:(
Hier mein erarbeiterter Code:


Code :

#include <avr/io.h>

#include <stdio.h>

void UART_init(); //Definition der Funktion UART_init
unsigned char UART_receive();//UART Empfangs-funktion
void UART_transmit(unsigned char data);//UART Sende-funktion

volatile unsigned char wert = 0;


int main ()
{
UART_init();//UART initialisieren

DDRC = 0x00;//Alles Eingänge

PORTC = 0x00;

DDRB |= (1<<PORTB5);//AUSGANG

PORTB |= (1<<PORTB5);//PB5 ist Ausgang (LED low aktiv)



while(1)
{
if( UART_available() ) // gibts was an der UART?
{
wert = UART_receive();//Wert empfangen

switch(wert)
{
case 'E': PORTB &= ~(1<<PORTB5); break; //LED leuchtet
case 'A': PORTB |= (1<<PORTB5); break; //LED leuchtet nicht
}
}

if ((PINC & (1<<PINC5)))
{
UART_transmit('E');//LED Ein-Befehl schicken
}
else
{
UART_transmit('A');
}



}


}





void UART_init()//Funktion UART_init
{
DDRD |= (1<<1);

DDRD &= ~(1<<0);

PORTD |= 0x02;

UCSR0B = (1<<RXEN0) | (1<<TXEN0);//RX und TX (Empfangen und Senden) enabled

UCSR0C = (1<<UCSZ00) | (1<<UCSZ01);//8-Bit Betrieb und 1 Stopbit

UBRR0H = 0;
UBRR0L = 103;//Laut Tabelle (Datenblatt) bei 16 MHz für Baud = 9600 --> 103; UBRR0H nicht benötigt, da 2^8 = 256


}

uint8_t UART_available()
{
if( UCSR0A & (1<<RXC0) ) // gibts was an der UART zu holen?
return TRUE;

return FALSE;
}


unsigned char UART_receive()
{
while ( ! (UCSR0A & (1<<RXC0)));//Warten auf Empfang

return UDR0;//Empfangene Daten zurückgeben
}

void UART_transmit(unsigned char data)
{
while( ! (UCSR0A & (1<<UDRE0)));//Warten auf leeres Datenregister

UDR0 = data;//Daten senden
}



Bitte im Detail wo der Hund ist;)

mfg

BID = 922882

DonComi

Inventar



Beiträge: 8604
Wohnort: Amerika

 

  

Das sieht, kurz überflogen, OK aus. Du brauchst nur die IO-Einrichtung nicht extra machen, das macht die UART-Hardware für RxD und TxD automatisch.



-> Laufen beide Prozessoren wirklich mit 16MHz?
-> Du machst UART_available() nicht bekannt
-> Du sendest permanent 'A', wenn der Taster nicht gedrückt ist, nicht gut! Abhilfe: letzten Wert des Tasters wegspeichern und nur Änderungen auswerten, Delay von ein paar Millisekunden einfügen (nicht schön, funktioniert aber)
-> hast du die UART richtig verdrahtet? RxD und TxD müssen gekreuzt verbunden werden, nicht 1:1.
-> Masseverbindung richtig?
-> es gibt keinen Grund, die Variable wert volatile zu setzen

Schaltplan, Bild des Aufbaus?


_________________

BID = 923022

hajos118

Schreibmaschine



Beiträge: 2453
Wohnort: Untermaiselstein

Noch ein beliebter Fehler:
- Prescaler für Taktrate richtig gesetzt?

_________________
Interpunktion und Orthographie dieses Beitrags sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Wer einen Fehler findet, darf ihn behalten!


---


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 8 Beiträge im Durchschnitt pro Tag       heute wurden bisher 9 Beiträge verfasst
© x sparkkelsputz        Besucher : 192595582   Heute : 4698    Gestern : 7576    Online : 271        16.8.2026    16:57
3 Besucher in den letzten 60 Sekunden        alle 20.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
1.3198800087