µC hängt sich auf

Gast #1335067
Lesenswert?

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 #1335140
Lesenswert?

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
#1335172
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren