daniel.weber
26.04.2008, 23:24
Hallo,
habe vor kurzer Zeit angefangen Controller mit C zu programmieren. Ich arbeite gerade das Tutorial (http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial) durch und bin bei UART angekommen.
Mein Testboard hat einen Mega32 mit 16mhz Quarz. Und natürlich die übliche Beschaltung für den UART. Ich weiß, dass die Schaltung funktioniert, da ich früher einen Bascom Code drauf laufen hatte, der ebenfalls eine UART Ausgabe hatte.
Mit folgendem Programm versuche ich ein Zeichen auszugeben:
#include <avr/io.h>
#include <inttypes.h>
#ifndef F_CPU
#define F_CPU 1600000L // Systemtakt in Hz, das L am Ende ist wichtig, NICHT UL verwenden!
#endif
#define BAUD 9600L // Baudrate, das L am Ende ist wichtig, NICHT UL verwenden!
// Berechnungen
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate
int main(void) {
while(1) {
UCSRB |= 1<<(TXEN); // UART TX einschalten
UCSRC |= 1<<(URSEL)|(3<<UCSZ0); // Asynchron 8N1
UBRRH = UBRR_VAL >> 8;
UBRRL = UBRR_VAL & 0xFF;
DDRA = 0xff; // Test LEDs
PORTA = 0xff;
while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */
{
}
UDR = 'x';
}
return 0;
}
Leider gibt das so kein Zeichen aus, nur wenn ich Spannung anlege erhalte ich kurz Buchstabensalat im Terminal. Woran könnte das liegen, was mache ich falsch?
habe vor kurzer Zeit angefangen Controller mit C zu programmieren. Ich arbeite gerade das Tutorial (http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial) durch und bin bei UART angekommen.
Mein Testboard hat einen Mega32 mit 16mhz Quarz. Und natürlich die übliche Beschaltung für den UART. Ich weiß, dass die Schaltung funktioniert, da ich früher einen Bascom Code drauf laufen hatte, der ebenfalls eine UART Ausgabe hatte.
Mit folgendem Programm versuche ich ein Zeichen auszugeben:
#include <avr/io.h>
#include <inttypes.h>
#ifndef F_CPU
#define F_CPU 1600000L // Systemtakt in Hz, das L am Ende ist wichtig, NICHT UL verwenden!
#endif
#define BAUD 9600L // Baudrate, das L am Ende ist wichtig, NICHT UL verwenden!
// Berechnungen
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate
int main(void) {
while(1) {
UCSRB |= 1<<(TXEN); // UART TX einschalten
UCSRC |= 1<<(URSEL)|(3<<UCSZ0); // Asynchron 8N1
UBRRH = UBRR_VAL >> 8;
UBRRL = UBRR_VAL & 0xFF;
DDRA = 0xff; // Test LEDs
PORTA = 0xff;
while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */
{
}
UDR = 'x';
}
return 0;
}
Leider gibt das so kein Zeichen aus, nur wenn ich Spannung anlege erhalte ich kurz Buchstabensalat im Terminal. Woran könnte das liegen, was mache ich falsch?