www.mikrocontroller.net

Forum: Compiler & IDEs printf -> stdout und _delay_ms() bringen At90CAN zum Reset


Autor: Daniel Ple (callmed)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hab nun zwei Tage gebraucht um festzustellen, dass die Verwendung von 
STDOUT mittels printf auf USART1 und die Verwendung von _delay_ms(750) 
(aus util/delay.h) meinen AT90CAN128 zum Reset bringen.

Egal welche Zeile zu erst erreicht wird, das Delay oder die Printf, ab 
dieser Zeile startet der AT90CAN128 von Neuem.

Hatte von euch schon jemand dieses oder ähnliches Problem mit einem uC 
und gibt es eine Lösung?
Ich habe die _delay_ms mittels Timer0 umgehen wollen, leider wurde auch 
hierbei ein RESET ausgelöst - bin Momentan ratlos und brauche dringend 
einen TIPP bzw. eine Lösung, da ich bei diesem Projekt zu einem Ende 
kommen muss.

Danke schon mal im Vorraus,

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

Bewertung
0 lesenswert
nicht lesenswert
Bei dir scheint irgendetwas anderes faul zu sein, wenn du so gut wie 
immer einen Reset bekommst, scheinbar egal was du machst.

Ein eingeschalteter Watchdog könnte aber das Verhalten ohne weiteres 
ganz leicht erklären. Denn ganu das ist seine Aufgabe: den µCzu 
resetten, wenn er nicht regelmässig zurückgepfiffen wird.

Also würde ich zuallererst mal die Watchdog Fuse kontrollieren.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich tipp auf RAM am Ende.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich tippe auf SW-Fehler oder HW-Fehler, oder user error.

Autor: Daniel Ple (callmed)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger schrieb:
> Ich tipp auf RAM am Ende.

Gibt es eine Möglichkeit diese Vermutung zu testen?

Autor: Daniel Ple (callmed)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Wachtler schrieb:
> Ich tippe auf SW-Fehler oder HW-Fehler, oder user error.

Zu SW-Fehler: Port,Timer und USART Init
danach kommt printf("Board Online");, die while(1) mit PORTD ^= 
(1<<PD4);, was die LED ein/ausschalten gefolgt von _delay_ms(500);.
Nicht wirklich viel und denke mal hierbei wird wohl auch kein Fehler 
passiert sein.
Das blinken sowie die printf-Ausgabe für sich (jeweils das andere 
Ausgeklammert) funktioniert ohne Probleme - dadurch würd ich SW-Fehler 
nochmals bezweifeln.

Zu HW-Fehler: Du meinst AT90CAN128 ist defekt oder die Pheripherie? 
Beides wäre sehr ungünstig :-(

Zu User-error: Erklär du mal was du damit meinst ...

Autor: Daniel Ple (callmed)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Bei dir scheint irgendetwas anderes faul zu sein, wenn du so gut wie
> immer einen Reset bekommst, scheinbar egal was du machst.
>
> Ein eingeschalteter Watchdog könnte aber das Verhalten ohne weiteres
> ganz leicht erklären. Denn ganu das ist seine Aufgabe: den µCzu
> resetten, wenn er nicht regelmässig zurückgepfiffen wird.
>
> Also würde ich zuallererst mal die Watchdog Fuse kontrollieren.

HI, danke für den Tipp! Leider negativ, jede FKT für sich läuft ohne 
Probleme auch mehrere Minuten lang - also wenn die Kombination der 
beiden keine Fuses setzt ist der WATCHDOG wohl aus.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel Ple schrieb:
> Erklär du mal was du damit meinst ...

Ich meine, daß man bei so einer Wischiwaschi-Beschreibung keine
vernünftige Antwort erwarten kann, daher meine Wischiwaschi-Antwort.

Daniel Ple schrieb:
> Zu SW-Fehler: Port,Timer und USART Init
> danach kommt printf("Board Online");, die while(1) mit PORTD ^=
> (1<<PD4);, was die LED ein/ausschalten gefolgt von _delay_ms(500);.
> Nicht wirklich viel und denke mal hierbei wird wohl auch kein Fehler
> passiert sein.
> Das blinken sowie die printf-Ausgabe für sich (jeweils das andere
> Ausgeklammert) funktioniert ohne Probleme - dadurch würd ich SW-Fehler
> nochmals bezweifeln.

Nachdem du deiner Meinung nach alles ganz einfach und richtig
geschrieben hast, kann es ja keinen Fehler geben :-)


Mit anderen Worten: ohne das Programm kannst du hier stundenlang
Leute rätseln lassen, ohne daß etwas dabei rauskommt, außer
verschwendeter Zeit.

Die Standardaufgabe für dich wäre:
- soweit reduzieren wie möglich, daß der Fehler noch auftritt
- dann das Programm zeigen, nicht eine luschige Beschreibung,
  was es deiner Meinung nach macht.

Autor: Daniel Ple (callmed)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Wachtler schrieb:
>
> Ich meine, daß man bei so einer Wischiwaschi-Beschreibung keine
> vernünftige Antwort erwarten kann, daher meine Wischiwaschi-Antwort.
>
>
> Nachdem du deiner Meinung nach alles ganz einfach und richtig
> geschrieben hast, kann es ja keinen Fehler geben :-)
>
>
> Mit anderen Worten: ohne das Programm kannst du hier stundenlang
> Leute rätseln lassen, ohne daß etwas dabei rauskommt, außer
> verschwendeter Zeit.
>
> Die Standardaufgabe für dich wäre:
> - soweit reduzieren wie möglich, daß der Fehler noch auftritt
> - dann das Programm zeigen, nicht eine luschige Beschreibung,
>   was es deiner Meinung nach macht.


Schon klar, sry. Anbei die Datei. - DANKE

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
UCSR1B  |=  (1<<RXCIE1)  |  (1<<TXCIE1)  |  (1<<RXEN1)  |  (1<<TXEN1);

Kann es sein, daß da eine ISR ausgelöst wird (später), die es nicht 
gibt?

Autor: Daniel Ple (callmed)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Wachtler schrieb:
> UCSR1B  |=  (1<<RXCIE1)  |  (1<<TXCIE1)  |  (1<<RXEN1)  |  (1<<TXEN1);
>
> Kann es sein, daß da eine ISR ausgelöst wird (später), die es nicht
> gibt?

Klaus ... DANKE !!!

Ich hab die Interrupt RX und Tx rausgenommen und nun funktioniert ES - 
BEIDES.

Danke nochmal für die schnelle Hilfe, kann nun endlich weitermachen.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach mal weiter, ich gehe schnarchen...

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.