Probleme mit Baudrate beim ATmega8535

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  00:06:04      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


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


Autor
Probleme mit Baudrate beim ATmega8535

    







BID = 845753

wulf

Schreibmaschine



Beiträge: 2246
Wohnort: Bozen
 

  


Hallo Leute,

ich versuche gerade verzweifelt die Baudrate beim USART vom ATmega8538 einzustellen.
Allerdings scheint diese nicht zu stimmen, obwohl ich laut Datenblatt vorgegangen bin. Übrigens funktioniert diese Initialisierung beim ATmega2560 identisch (außer, dass es da mehrere USARTs gibt).

Der µC läuft mit einem 7,3728MHz Quarz. Ich habe auch schon überprüft ob die Frequenz passt (mit LED und delays). Alles OK.

Code Optimierung ist "-Os"

Ich finde partout den Fehler nicht.

Hier mal die Bibliothek für den USART:

serial.h:


Code :

#ifndef SERIAL_H_

#define SERIAL_H_

#include <avr/io.h>
#include <avr/interrupt.h>

#define F_CPU 7372800UL

//Initialize USART
void usart_init(unsigned int baud);

//Check if a character has been received
uint8_t usart_rx_check(void);

//Get received character
unsigned char usart_getc(void);

//Send Character over USART
void usart_putc(unsigned char c);

#endif /* SERIAL_H_ */



serial.c:


Code :

#include "serial.h"


unsigned char rxbuf;
uint8_t rxflag = 0;

//USART receive interrupt routine
ISR(USART_RX_vect) {
rxbuf = (unsigned char)UDR;
rxflag = 1;
}

//Initialize USART
void usart_init(unsigned int baud) {
unsigned int ubrr;

ubrr = (F_CPU / 16 / baud) - 1;

//Set baud rate
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;

// Enable receiver and transmitter
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
// Set frame format: 8data, 1stop bit
UCSRC = /*(1<<USBS)|*/(3<<UCSZ0);
}

//Check if a character has been received
uint8_t usart_rx_check(void) {
return rxflag;
}

//Get received character
unsigned char usart_getc(void) {
rxflag = 0;
return rxbuf;
}

//Send Character over USART
void usart_putc(unsigned char c) {
while (!(UCSRA & (1<<UDRE)) ); // wait for empty transmit Register
UDR = c; // Put data into buffer, sends the data
}



Vielleicht fällt ja euch ein Fehler auf.

Danke im Voraus!


EDIT:
Hier noch ein Bild der Fuses:


[ Diese Nachricht wurde geändert von: wulf am 31 Aug 2012 13:54 ]

BID = 845754

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach

 

  


Zitat :
Allerdings scheint diese nicht zu stimmen,
Was heisst "scheint"?
Wenn du kein Scope hast um dir das anzusehen, dann laß ihn doch einfach mal 100.000 Zeichen senden und schau auf die Uhr, wie lange das dauert.
Denke daran, dass jedes Zeichen aus den 7 oder 8 Datenbits, einem Start- und einem Stopbit, sowie evtl. einem Paritybit besteht.

BID = 845755

wulf

Schreibmaschine



Beiträge: 2246
Wohnort: Bozen

Ich hab mit dem Oszilloskop gemessen.
Allerdings ist das kein Speicheroszi, sondern eon schrottges Analogoszi. Ich hab dann einfach dem µC ununterbrochen ein Zeichen senden lassen und gehofft, dass das Oszi darauf triggern kann. Aufgrund dieser "Schätzung" dürfte die Baudrate bei ca. 1400baud/s liegen.


Aber deine Methode werd ich jetzt auch probieren.

Edit: Vergiss den Blödsinn von oben.
Die Stoppuhr hat ergeben, dass es ca. 290baud/s sind.



[ Diese Nachricht wurde geändert von: wulf am 31 Aug 2012 14:15 ]

BID = 845769

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach


Zitat :
Stoppuhr hat ergeben, dass es ca. 290baud/s sind.
Das ist doch ok, wenn es 300Bd sein sollen.
5% Abweichung verkraftet der Empfänger.

Falls du jetzt noch Probleme hast, dann denke daran, dass die üblichen RS232-Treiber und -Empfänger invertieren!
Du kannst also nicht einfach die 5V Pegel des µC auf einen fremden RS232 Eingang geben, obwohl das von der Spannungslage her ginge.

BID = 845774

wulf

Schreibmaschine



Beiträge: 2246
Wohnort: Bozen

Hallo Perl,
entschuldige bitte, ich hatte vergessen zu erwähnen, dass da ein MAX232 sich um die PEgelwandlung kümmert (auch dessen Funktion habe ich überprüft).
Es kann eigentlich nur mehr an der Software liegen.
Eingestellt ist 9600Baud/s, nicht 300.

_________________
Simon
IW3BWH

BID = 845812

Jornbyte

Moderator



Beiträge: 7178

Du schreibst in "baud" sollten die 9600 stehen

#define baud 9600

Aber diese Zeile sehe ich nicht. Hast du die nicht?

_________________
mfg Jornbyte

Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.

BID = 845813

wulf

Schreibmaschine



Beiträge: 2246
Wohnort: Bozen

Die Baudrate wird der Funktion usart_init(...) übergeben.
Ich hab auch versucht das UBRR direkt mit einer Zahl zu setzen (ohne die Berechnung). Selbes Problem.

_________________
Simon
IW3BWH

BID = 845815

Jornbyte

Moderator



Beiträge: 7178

Hab mal das Datenblatt geöffnet, der 8535 hat nur ein UBRR Register.
Die Zeile UBRRH = (unsigned char)(ubrr>>8) muss weg und UBRRL in UBRR umbenenen.


_________________
mfg Jornbyte

Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.

BID = 845834

wulf

Schreibmaschine



Beiträge: 2246
Wohnort: Bozen

Hallo Jornbyte,

DAS WARS!!!

Um ins UBSRC zu schreiben muss noch ein Bit gesetzt werden, da es sich die Registeradresse mit dem UBRRH teilt.

VIELEN DANK!!!

Manchmal sieht man eben den Wald vor lauter Bäumen nicht mehr.

Dank auch dir Perl für deine Mühe.

Liebe Grüße
Simon

_________________
Simon
IW3BWH


Zurück zur Seite 1 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 : 182420975   Heute : 14    Gestern : 5459    Online : 349        29.11.2024    0:06
2 Besucher in den letzten 60 Sekunden        alle 30.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0647799968719