www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Reset bei serieller Kommunikation


Autor: Karlheinz Druschel (kdruschel)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leuts,

ich habe hier eine kleine ATMega16-Platine mit 16 MHz. Außer ein paar 
IOs und einer RS232 ist nichts bestückt. Nun möchte ich eine 
Kommunikation mit dem PC realisieren und habe dazu die Routinen von P. 
Fleury genutzt,, die hier im Forum frei verfügabr sind.
Grundlegend funktioniert das alles auch. Aber ab und zu wird dabei der 
Microcontroller zurückgesetzt, d.h. während ich beispielsweise einen 
Befehl eintippe wird an Hyperterminal die Begrüßungsmeldung ausgegeben.
Ich habe schon den Buffer vergrößert, bringt aber nix. Hat jemand eine 
Idee woran das liegen kann ?

Greets
Karlheinz

Autor: Karlheinz Druschel (kdruschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
P.S.
Auch wenn ich bei Hyperterminal nur die Enter-Taste ein paarmal drücke, 
wird ein Reset ausgelöst. Manchmal nach 2 mal, manchmal nach 16 mal oder 
so. Es ist also vollkommen unabhängig davon, WAS ich via Hyperterminal 
eingebe.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karlheinz Druschel schrieb:
> Außer ein paar IOs und einer RS232 ist nichts bestückt.
Auch keine Blockkondensatoren?
Wie wird die Platine versorgt?
Was ist am Reset-Pin vom uC angeschlossen?

Autor: Karlheinz Druschel (kdruschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
RESET hängt über einen 10k Widerstand an +5V, und über einen 47 nF 
Kondensator an GND.
Das Problem habe ich aber nicht, wenn ich die Funktion 
PcCommandHandler() nicht aufrufe oder wenn ich sie aufrufe und an 
Hyperterminal nichts eingebe.
Der Reset erfolgt also nur, wenn ich via Hyperterminal was an den 
Controller schicke. Also denke ich mal weniger an ein Hardwareproblem

Autor: Karlheinz Druschel (kdruschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also das Verhalten ist ganz merkwürdig. Wenn ich in main() die Funktion 
PcCommandHandler NICHT aufrufe, dann habe ich auch keine Resets.
Wenn ich in PcCommandHandler() die Funktion uart_getc NICHT aufrufe, 
habe ich trotzdem die Resets. Aber wies gesagt unregelmäßig. Mal nach 
3-4 Tastendrücken, mal nach 20.
Bei einem unkontrollierten Bufferüberlauf wäre es wohl regelmäßig nach 
dem X. Zeichen

Autor: Karlheinz Druschel (kdruschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt habe fast alles auskommentiert, und trotzdem unkontrollierte 
Reset.Scheint an p1 zu liegen

void PcCommandHandler(void)
{
    uint16_t DataWord;
    uint8_t DataByte;
    uint8_t DataError;

    DataByte = (DataWord & 0x00FF);
    DataError = DataWord >> 4;

    if (!(DataWord & UART_NO_DATA))
    {
        if ((DataByte >= 0x21) && (DataByte < 0x7f) && (p1 < 
SIZE_PC_BUFFER))
  {
      if (DataByte == '*')
                p1 = 0;
        }
    }
}

Autor: Karlheinz Druschel (kdruschel)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hat niemand eine Idee ? Habe jetzt die PcCommandHandler Funktion 
komplett gelöscht und eine neue namens Uart() geschrieben.
Selbes Ergebnis. Sobald ich den Aufruf von c=uart_getc() mache und vom 
PC ständig Zeichen sende, macht der Mega16 immer wieder einen Reset.
Wenn ich die Funktion auskommentiere, dann passiert das nicht.

Autor: Stefan Kleinwort (_sk_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich tippe mal auf ein Stackproblem.

Wenn Du während einem Interrupt zufällig in einer Routine bist, dann 
wird bei fehlendem Stack-Speicher die Rücksprungadresse überschrieben.

Versuch mal, die ganzen Strings wegzulassen, die stehen alle im RAM und 
nehmen Dir Platz für den Stack weg.

Gruß, Stefan

Autor: Bernhard R. (barnyhh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Wie wird die Platine versorgt?

Das Problem "riecht" nach Stromversorgung.
Einfach mal "aufs Blaue" getippt: An x12-1 und x12-2 kommen x Volt 
Wechselspannung an. C10 reicht gerade aus, um im Leerlauf eine 
ausreichende Versorgungsspannung aufzubauen; bei Datenverkehr via 
V24-Schnittstelle ist alles zappenduster.

Bernhard

Autor: Karlheinz Druschel (kdruschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Tip, nutzt leider nichts.
Ich habe also die uart_pts("xxx"); Anweisungen gelöscht und nur noch 
einmal uart_puts("Hi") stehen. Gleiches Ergebnis.

Autor: Peter S. (psavr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Werte beim Aufstarten das MCUSR Register aus, da sieht man die Ursache 
für den (Re)Start. Nach der Auswertung alle Bits löschen.

Wird beim nächsten Restart keies der Bit gesetzt (Watchdog-Reset, 
Brown-Out, JTAG-Reset etc..) dann rannte die SW irgendwie ins Nirwana, 
z.B. Stack/Memory Problem, Null-Pointer, oder Interrupt ohne ISR

Autor: Karlheinz Druschel (kdruschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Lothar:
Ne, an X12-1 und X12-2 habe ich ein Steckernetzteil (Schaltnetzteil) mit 
7.5V oder 9V IeinstellbarI angeklemmt. Habe auch schon umgeschaltet, 
hilft nix.

Autor: Karlheinz Druschel (kdruschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, also das MCUCSR-Register ist direkt nach einem Reset auf 0. Weiss 
aber immer noch nicht wo ich suchen soll.....

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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
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 bestätigst du, die Nutzungsbedingungen anzuerkennen.