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: 29 11 2024  01:26:38      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-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: 8605
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!


Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


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 19 Beiträge im Durchschnitt pro Tag       heute wurden bisher 0 Beiträge verfasst
© x sparkkelsputz        Besucher : 182421148   Heute : 187    Gestern : 5459    Online : 522        29.11.2024    1:26
3 Besucher in den letzten 60 Sekunden        alle 20.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0607271194458