-
#include <avr/io.h>
#ifndef F_CPU
#warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 4000000"
#define F_CPU 4000000 // Systemtakt in Hz - Definition als unsigned long beachten
#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
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) // Fehler in Promille
#if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))
#error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch!
#endif
int main(void)
{
UCSRB |= (1<<TXEN); // UART TX einschalten
UCSRC |= (1<<URSEL)|(3<<UCSZ0); // Asynchron 8N1
UBRRH = UBRR_VAL >> 8;
UBRRL = UBRR_VAL & 0xFF;
while( 1 ) {
while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */
{
}
UDR = 'm';
}
}
also die genannten Einstellungen hab ich gemacht...und er sendet immernoch so ein zeugs da ...was anderes kann es nicht sein !?
-
Und jetzt gibt er mir bei den Fuses ne Fehlermeldung raus:
A problem occured when executing the command. SPIEN hat ein rotes Fragezeichen!? Kann also nicht mehr Programme aufspielen !? Was is denn da los ?
-
Dann bringst du keinen Takt auf XTAL1
SPIEN kann ich gar nicht abschalten.
-
Mit 3<<UCSZ0 hast du 2 Stopbit
-
#define UBRR_VAL (((F_CPU)/(BAUD*16))-1) // clever runden
UDR = 'A';
_delay_ms(5);
Das habe ich geändert und hinzugefügt, bei mir läuft es.
-
Dieses Problem hab ich mittlerweile behoben...aber er gibt mir immernoch falsche Buchstaben aus!? Weiss so langsam nicht mehr weiter...also programmierbar ist er wieder :-)
MFG
-
Am Anfang des Programms gehört noch #include <util/delay.h>
-
mhhh wuerde es dir was ausmachen deinen Quellcode hier reinzustellen? Irgendwie läuft grad nix mehr so richtig bei mir :-(
Vielen Dank fuer deine Muehe!!!
-
Code:
#include <avr/io.h>
#include <util/delay.h>
#ifndef F_CPU
#warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 4000000"
#define F_CPU 3686400 // Systemtakt in Hz - Definition als unsigned long beachten
#endif
#define BAUD 9600UL // Baudrate, das L am Ende ist wichtig, NICHT UL verwenden!
// Berechnungen
#define UBRR_VAL (((F_CPU)/(BAUD*16))-1) // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) // Fehler in Promille
//#if ((BAUD_ERROR>10) || (BAUD_ERROR<=10))
//#error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch!
//#endif
int main(void)
{
UCSRB |= (1<<TXEN); // UART TX einschalten
UCSRC |= (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1); // Asynchron 8N1
UBRRH = UBRR_VAL >> 8;
UBRRL = UBRR_VAL & 0xFF;
while( 1 ) {
while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */
{
}
UDR = 'A';
_delay_ms(5);
}
}
Das läuft bei mir einwandfrei.
Ich verwende normalerweise die uart-Lib von Fleury, da braucht man sich um nichts kümmern.
-
Hey,
vielen Dank fuer deinen Code...werd ihn am Montag direkt ausprobieren !!!
wünsch dir ein schönes Wochenende!
MFG