µC hängt sich auf

Gast #1335067
Hallo,
Ich habe das Problem das einige meiner Controller nicht laufen.
Es geht hier um AT90CAN128 als Modul. Drei Controllern funktioniert der 
Code auf anderen nicht.
Nun habe ich mir ein miniTest geschrieben und selbst das funktioniert 
nicht.
1
#include <avr/io.h>
2
#include <stdlib.h>
3
#include <avr/interrupt.h>
4
#include <util/delay.h>
5

6
#define F_CPU 16000000UL
7

8
int main (void)
9
{
10
uint16_t iiCount = 0;
11
uint8_t iiTemp16 = 0;
12
DDRC = 0xff; 
13

14
while ( 1 )
15
{
16
    PORTC = iiTemp16;   
17

18
  iiTemp16++;
19
  for (iiCount=0; iiCount < 501 ; iiCount++)
20
  {
21
    //loop();  
22
    _delay_ms(1);
23
    
24
  }
25
  if ( iiTemp16 >=255 )
26
  {
27
    iiTemp16 = 0;
28
  }
29
}
30
}

Ich konnte schon herraus finden das an dieser Stelle die Delay-Funktion 
das Problem ist. nur ist die Frage warum ist doch eine offizielle, 
getestete Funktion.
Nun habe ich diese durch einen Funktion mit einem Timer ersetzt ( in 
meinem eigentlichen Programm ), aber auch dann geht es schief.
Ich vermute das es was mit dem Stack zu tun hat, aber warum geht es dann 
auf einigen ?
Würde mich freuen, wenn jemand Tipps oder Hinweise für mich hat.

MFG Dira
Gast
>Ich konnte schon herraus finden das an dieser Stelle die Delay-Funktion
>das Problem ist.

a) Wie genau äussert sich das "Problem"?
b) Wie hast du herausgefunden, das es durch die _delay()-Funktion 
verursacht wird?

Ich tippe eher auf Hardwareprobleme, z.B. Takterzeugung, u.ä.

Oliver
Gast
Wie im Code zu sehen habe ich dort einen Binären Zähler und dort sehe 
ich das er an "zufälligen" Punkten neu beginnt (restart, reset),
ich habe auch schon per Ozzi geschaut ob an Reset pin oder VCC Peaks zu 
sehen sind, aber nichts.

Und das Delay schuld ist, vermute ich weil wenn ich diese Funk nicht 
aufrufe läuft der Code durch, zwar schneller aber es geht.
Dann habe ich statt delay eine Timer genutzt ( ohne Funktionsaufruf ) 
und auch das Funktionierte
1
//Timer config 
2
TCCR1A=0x00;
3
TCCR1B=0x00;
4
TCNT1H=0x00;
5
TCNT1L=0x00;
6
ICR1H=0x00;
7
ICR1L=0x00;
8
OCR1AH=0x00;
9
OCR1AL=0x00;
10
OCR1BH=0x00;
11
OCR1BL=0x00;
12
OCR1CH=0x00;
13
OCR1CL=0x00;
14
// Timer/Counter 3 Interrupt(s) initialization
15
TIMSK3=0x00;
16

17
..main..
18
{ ..
19
u16 TimeMerker=TCNT3;
20
//_delay_ms()
21
  while( (TCNT3-TimeMerker) < 15625) {};
22
  TimeMerker=TCNT3;
23
// geht nach 1 sek weiter
24
}

in etwas so

und sobald das ganz komplexer wird ( funktionen aufrufen ... )
tut er nichts oder restartet dauernd.
Ich benutze wie geagt ein Modul die ganzen kleinen SMD-Bauteile kann ich 
schlecht analysieren... wenn ich aber direkt am Quarz messe ist der Takt 
ok
Dira schrieb:

> Ich konnte schon herraus finden das an dieser Stelle die Delay-Funktion
> das Problem ist. nur ist die Frage warum ist doch eine offizielle,
> getestete Funktion.

Meckert der Compiler nicht darüber, dass der delay Funktion F_CPU nicht 
bekannt ist?
Bei mir macht er das, wenn F_CPU nicht vor #include <util/delay.h> 
definiert ist.
Gast
Ich denke auch nicht unbedingt das es delay ist (wie gesagt durch timer 
ersetzt...)
wie könnte man den fest stellen ob der µC Fehlerhaft ist ?? (also Stack 
usw.)
beim Flash verifi stimmt alles
Gast
_delay() enthält nichts anderes als etwas "ausgefuchstere" Schleifen. 
Das kann keine Einfluß auf die Funktion des Programms haben.

Wenn der Peozessor resetted, sezt der ein Flag im Statusregister. Was 
steht denn da drin?

Wenn es kein Reset ist, kann es auch eine Interrupt ohne ISR sein.

Oliver
Gast
So habe ein neues Modul und dieses funktionniert ...
ich Tippe also einfach mal auf einen Defekt des µC oder des Moduls

Danke an die Helfenden und Fragenden

Gruß Dira

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.