www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Plötzliches USART-Problem ATMega2560


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Michael P. (mpernpei)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo,

ich weiß, das Thema USART ist schon in hundert anderen Threads 
besprochen worden, allerdings hab ich mein Problem nirgends gefunden.

Ich nutze einen ATMega2560 (seit ungefähr 6 Monaten) an einem 16MHz 
Quartz. Die 16MHz liegen auch noch am Controller an. Die erste Aktion 
mit dem Controller war die Kommunikation einzurichten, damit man auch 
Ergebnisse sieht. Bis heute lief die Kommunikation einwandfrei...

Heute hab ich etwas am Programm (fernab vom USART und auch keine 
Optimierung) geändert und plötzlich funktionierte meine Kommunikation 
nicht mehr. Ich hab dann das Oszilloskop an die Schnittstelle gehangen 
und siehe da, anstatt der 104µs pro Bit benötigt der Controller jetzt 
1,4ms?? Nach Stunden sinnlosen spielens hab ich dann die definierte 
USART_BAUDRATE von 9600 auf 2400 runtergestellt, aus reiner 
Verzweiflung...
Das komische ist, hier benötige ich für ein Bit wiederrum die erwartete 
Zeit (417 µs). Also habe ich ein bisschen rumgespielt und festgestellt, 
dass alles was bis USART_BAUDRATE 3800 geht funktioniert und bei allem 
was drüber ist benötigt ein Bit 1,4 ms.

Ich bin echt am verzweifeln!! Hat irgendjemand schon einen ähnlichen 
Fall gehabt? Könnte ich irgendwas verstellt haben?? Die Fuses sind 
gleich, das war meine erste Vermutung....

Danke schonmal im Voraus!!

Gruß
Michael

Autor: Uwe (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Was benutzt du denn für ein Entwicklungstool ? Ich nehme mal an es ist 
ein Softwareproblem und nicht die Hardware. Oder progst du in Assembler 
und berechnest die Baudrate manuel ?

Autor: Hubert G. (hubertg)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ohne das du deine Code herzeigst und sagst was du geändert hast, wird 
dir niemand sagen können was der Fehler ist.
Es sei denn du kannst mit dem Hinweis das der Fehler in Zeile 42 ist, 
etwas anfangen.

Autor: Michael P. (mpernpei)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Sorry, ich benutze AVR Studio 5 (Version: 5.0.1163)

Die Baudrate berechne ich wie folgt:
#define F_CPU 16000000UL
#define USART_BAUDRATE 9600
#define BAUD_PRESCALE ((16000000UL / (USART_BAUDRATE * 16UL)) -1)

Mein Code ist leider nicht nur 30 Zeilen sonder erstreckt sich über 
mehrere .c und .h Files. Ich Poste mal die Auszüge mit 
USART-Einstellungen:
//******** UART1 init (PD2 -> RXD1, PD3 -> TXD1)
  UCSR1C |= (1<<UCSZ10) | (1<<UCSZ11); 
  UBRR1H = (BAUD_PRESCALE >> 8);
  UBRR1L = BAUD_PRESCALE;
  UCSR1B |= (1<<RXEN1) | (1<<TXEN1); 
  
// ******** UART2 init (PH0 ->RXD2, PH1 -> TXD2)            
  UCSR2C |= (1<<UCSZ20) | (1<<UCSZ21); 
  UBRR2H = (BAUD_PRESCALE >> 8);    
  UBRR2L = BAUD_PRESCALE;  
  UCSR2B |= (1<<RXEN2) | (1<<TXEN2);   
  UCSR2B |= (1<<RXCIE2);         



Die Änderungen die ich eingefügt habe, betrafen eine Pinabfrage:
if (PING &(1 << PING0))
    {
      uf_pump.mono = 1;
      uf_pump.mono_count = 0;
    }    
  else if (uf_pump.controll != 0)  
    uf_pump.mono_count++;  
  else
    {
      uf_pump.mono_count = 0;
      uf_pump.mono = 0;  
    }
    
  if (uf_pump.controll == 0)
  {
    uf_pump.mono = 0;
  }

...und diese sollte nichts an den USART Einstellungen geändert haben.

Gruß
Michael

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Dann würde ich vorschlagen du machst die Änderung mal rückgängig und 
siehst nach obs dann wieder geht.
Wenns dann immer noch nicht geht, dann hast du noch irgendwas anderes 
verändert, was dir entfallen ist. (nicht lachen: sowas kommt vor)

Autor: Michael P. (mpernpei)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Änderung rückgängig machen hat leider nix gebracht, hab ich schon 
versucht....

Ich bin auch schon ab Grübeln, was ich eventuell "mal schnell so" 
geändert haben könnte....mir fällt aber nix ein...

Zum Lachen ist mir grad gar nicht....

Bin weiterhin für alles dankbar!!

Autor: Frank W. (frankw) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Vielleicht ein bisschen off topic - aber solche Sachen sind für mich ein 
Grund in meinen Projekte in ein SVN zu verwenden. da kann man schön 
sehen was man 'aus versehen' kaput gemacht hat.

Anderer Ansatz.
Wenn man an Stelle A was ändert und plötzlich B nicht mehr geht - Stack 
oder RAM überlauf?

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Michael P. schrieb:
> Änderung rückgängig machen hat leider nix gebracht,

Was heißt das?
Stimmen die Zeiten dann wieder?

Autor: Michael P. (mpernpei)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Als ich die Änderung rückgängig gemacht habe funktionierte der USART 
trotzdem nicht...

Überlauf ist ein guter Punkt, aber wär es dann nicht egal ob ich für die 
Baudrate 9600 oder 2400 benutze?

Ich muss mal schauen, wenn ich mich nicht täusche müsste ich irgendwo 
auf einem Stick eine nicht allzu alte Version hab. Dann kann ich mal 
vergleichen wo der Unterschied ist.

Danke nochmal für die Ideen!

Gruß
Michael

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net