Forum: Compiler & IDEs USART viel zu langsam bei anderem uC


von CAnfänger (Gast)


Lesenswert?

Hallo, ich habe wieder mal eine Knobelaufgabe.. Also ich habe ein 
Programm mit USART-Ausgabe (printf...). Compiliert für einen Mega2560 
funktioniert es, compiliert für einen Mega8 nicht - da sendet die USART 
in Zehnerpotenzen zu langsam (hab mal mit dem OSZI auf TXD geschaut). 
Der Programmcode ist identisch, bis auf die u.g. #defines, die die 
Registernamen angleichen. In UBRRH und UBRRL werden auch die gleichen 
Werte geschrieben (0x33 für 1200 Baud bei 1MHz), das sagt zumindest der 
Simulator.. Die Beispieltabellen für UBRR in den Datenblättern sind 
identisch, bis auf die Tatsache, daß der 2560 mehrere USARTs hat. Was 
kann noch die Ursache sein? Die Fuses auf dem Mega 8 sind auch ok..

1
// je nach uC (Mega8 oder Mega2560) werden die Ports entsprechend definiert
2
#if defined(__AVR_ATmega8__)
3
  //Alias-Namen für ATmega8
4
  #define MOSI   3
5
  #define MISO   4
6
  #define SCK     5
7
  #define SS_ORI   2
8
  #define SS     1 // eigentlich 0, aber ich will es selbst steuern
9
#elif defined(__AVR_ATmega2560__)
10
  //Alias-Namen für ATmega2560 (STK600)
11
  #define UBRRH UBRR0H // erste Uart verwenden
12
  #define UBRRL UBRR0L
13
  #define UCSRB UCSR0B
14
  #define RXEN  RXEN0
15
  #define TXEN  TXEN0
16
  #define UCSRC UCSR0C
17
  #define USBS  USBS0
18
  #define UCSZ0 UCSZ00
19
  #define UCSRA UCSR0A
20
  #define RXC    RXC0
21
  #define UDR    UDR0
22
  #define UDRE  UDRE0  
23
  #define MOSI   2
24
  #define MISO   3
25
  #define SCK     1
26
  #define SS_ORI   0
27
  #define SS     4 // eigentlich 0, aber ich will es selbst steuern
28
#else
29
  #error "Dieses Programm unterstützt nur ATMega8 oder ATMega2560"
30
#endif

von Klaus F. (kfalser)


Lesenswert?

Könnte es sein dass die beiden Prozessoren mit unterschiedlichen 
Taktfrequenzen arbeiten?
Dann sind natürlich die Vorteiler bei den beiden Prozessoren 
unterschiedlich zu setzen.

von CAnfänger (Gast)


Lesenswert?

nein, arbeiten beide mit 1MHz.. Das war auch eine meiner Ideen.. Ich 
weiß auch nicht so richtig, wie ich das debuggen soll..

von Karl H. (kbuchegg)


Lesenswert?

> Der Programmcode ist identisch, bis auf die u.g. #defines,
> die die Registernamen angleichen.

Hast du mal im Datenblatt kontrolliert, ob in den 
Konfigurationsregistern die gleichen Bits drinnen sind. Manchmal war 
Atmel nämlich fies und hat die Bedeutung einzelner Bits in den 
Konfigurationsregistern bei unterschiedlichen Prozessoren verändert.

von CAnfänger (Gast)


Lesenswert?

Das habe ich noch nicht kontrolliert, aber ich spreche alle Bits und 
register mit Namen an.. Trotzdem kontrollieren? UBRRH und UBRRL sind ja 
bei beiden normale Register..

Hat jemand eine andere Idee zum debuggen?

von Justus S. (jussa)


Lesenswert?

CAnfänger wrote:
>.. Trotzdem kontrollieren? UBRRH und UBRRL sind ja
> bei beiden normale Register..
>

sicher? beim mega8 teilen sich doch UBBRH und UCSRC eine Adresse...

von CAnfänger (Gast)


Lesenswert?

Nee, sicher bin ich nicht.. na mal sehen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.