Furay
20.06.2013, 08:25
Hallo Zusammen,
nachdem nun meine Funktionsaufrüfe klappen (Danke an dieser Stelle nochmal) hat alles wunderbar geklappt, sogar das UART.
Dann hab ich ein paar Funktionen geschrieben usw. Als ich dann den UART inniger Teste wollte musst ich ärgerlicherweise feststellen, das am HTerm nur noch Müll ankommt.
"Also wieder zum Anfang..." dachte ich mir und habs auf die minimal Funktionen (init, senden) beschränkt womit es schon funktioniert hatte.
Auch hiermit kam nur Datenmüll an (siehe Anhang) vielleicht könnt Ihr mir hier helfen? Ich hab die Funktionen aus dem Datenblatt genohmen und angepasst.
Randdaten
* µC ist eine ATMega128L
* Als Clock wird der interne 8MHz Gernerator verwendet
* Die Übertragung läuft über ein FT232R (somit USB)
#include <avr/io.h>
#define F_CPU 8000000UL
//Defines für Einstellungen
#define UART0_BAUD 9600
#define UART0_MYUBRR F_CPU/16/UART0_BAUD-1
#include <util/delay.h>
/************************************************** ***************
* Funktionsname: phy_uart0_Init
*
* BAUDRATE = 9600 BAUD
* Empfänger = Aktiviert
* Sender = Aktiviert
* Rahmengröße = 8 Bit
* StopBit = 1 StopBit
*
************************************************** ***************/
void phy_uart0_Init(void)
{
/* Baudrate festlegen */
UBRR0H = (unsigned char) (UART0_MYUBRR >> 8);
UBRR0L = (unsigned char) UART0_MYUBRR;
/* Receiver und Transmitter aktivieren*/
UCSR0B = (1 << RXEN) | (1 << TXEN);
/* Rahmenformat einstellen: 8 Bit, 1stop bit */
UCSR0C = (3 << UCSZ0) | (1 << USBS0);
}
/************************************************** ***************
* Funktionsname: phy_uart0_Transmit
************************************************** ***************/
void phy_uart0_Transmit(unsigned char data)
{
/* Warte auf Leeren Sende Buffer*/
while ( !( UCSR0A & (1<<UDRE)) )
;
/* Put data into buffer, sends the data */
UDR0 = data;
}
/************************************************** ***************
* Funktionsname: Main
************************************************** ***************/
int main(void)
{
phy_uart0_Init();
while(1)
{
phy_uart0_Transmit('H');
_delay_ms(500);
}
}
Grüße
Furay
nachdem nun meine Funktionsaufrüfe klappen (Danke an dieser Stelle nochmal) hat alles wunderbar geklappt, sogar das UART.
Dann hab ich ein paar Funktionen geschrieben usw. Als ich dann den UART inniger Teste wollte musst ich ärgerlicherweise feststellen, das am HTerm nur noch Müll ankommt.
"Also wieder zum Anfang..." dachte ich mir und habs auf die minimal Funktionen (init, senden) beschränkt womit es schon funktioniert hatte.
Auch hiermit kam nur Datenmüll an (siehe Anhang) vielleicht könnt Ihr mir hier helfen? Ich hab die Funktionen aus dem Datenblatt genohmen und angepasst.
Randdaten
* µC ist eine ATMega128L
* Als Clock wird der interne 8MHz Gernerator verwendet
* Die Übertragung läuft über ein FT232R (somit USB)
#include <avr/io.h>
#define F_CPU 8000000UL
//Defines für Einstellungen
#define UART0_BAUD 9600
#define UART0_MYUBRR F_CPU/16/UART0_BAUD-1
#include <util/delay.h>
/************************************************** ***************
* Funktionsname: phy_uart0_Init
*
* BAUDRATE = 9600 BAUD
* Empfänger = Aktiviert
* Sender = Aktiviert
* Rahmengröße = 8 Bit
* StopBit = 1 StopBit
*
************************************************** ***************/
void phy_uart0_Init(void)
{
/* Baudrate festlegen */
UBRR0H = (unsigned char) (UART0_MYUBRR >> 8);
UBRR0L = (unsigned char) UART0_MYUBRR;
/* Receiver und Transmitter aktivieren*/
UCSR0B = (1 << RXEN) | (1 << TXEN);
/* Rahmenformat einstellen: 8 Bit, 1stop bit */
UCSR0C = (3 << UCSZ0) | (1 << USBS0);
}
/************************************************** ***************
* Funktionsname: phy_uart0_Transmit
************************************************** ***************/
void phy_uart0_Transmit(unsigned char data)
{
/* Warte auf Leeren Sende Buffer*/
while ( !( UCSR0A & (1<<UDRE)) )
;
/* Put data into buffer, sends the data */
UDR0 = data;
}
/************************************************** ***************
* Funktionsname: Main
************************************************** ***************/
int main(void)
{
phy_uart0_Init();
while(1)
{
phy_uart0_Transmit('H');
_delay_ms(500);
}
}
Grüße
Furay