mikrocontroller.net

Forum: Compiler & IDEs µC hängt sich auf


Autor: Dira (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
#include <avr/io.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include <util/delay.h>

#define F_CPU 16000000UL

int main (void)
{
uint16_t iiCount = 0;
uint8_t iiTemp16 = 0;
DDRC = 0xff; 

while ( 1 )
{
    PORTC = iiTemp16;   

  iiTemp16++;
  for (iiCount=0; iiCount < 501 ; iiCount++)
  {
    //loop();  
    _delay_ms(1);
    
  }
  if ( iiTemp16 >=255 )
  {
    iiTemp16 = 0;
  }
}
}

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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weiss der Controller, dass er mit #define F_CPU 16000000UL laufen soll? 
Sprich, ist die Hardware passend eingestellt (Clockfuses)?

Autor: Dira (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ja weis er.
Im Anhang mal die Fuses und wie gesagt ich habe es mit mehreren 
gestestet, bei einigen geht es und Fuese sowie beschaltung sind bei 
allen gleich.
Gruß

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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

Autor: Dira (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
//Timer config 
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;
// Timer/Counter 3 Interrupt(s) initialization
TIMSK3=0x00;

..main..
{ ..
u16 TimeMerker=TCNT3;
//_delay_ms()
  while( (TCNT3-TimeMerker) < 15625) {};
  TimeMerker=TCNT3;
// geht nach 1 sek weiter
}

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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dira (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, aber ich habe die Frequenz auch in den Projektdaten des AVR Studio 
eingeben, daher sind sie ja schon definiert....

Autor: Dira (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
_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

Autor: kurz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibts einen Schaltplan dazu ?

Autor: Dira (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://alvidi.de/data_sheets/schaltplan.pdf
und die Herrstellerseite zum Modul
http://alvidi.de/avr_modul.html

Ich habe des Modul von aussen mit vcc 5+ und gnd beschlaten, sowie led 
mit vorwiederstand an port C

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich sehe da einen Mega128A, oben schreibst Du:
>Es geht hier um AT90CAN128 als Modul.

Ja, wie nun?

Gruß aus Berlin
Michael

Autor: Dira (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Michael du hast recht.
Die ist der Link:
http://alvidi.de/avr_modul_can.html
und dort findet man auch den Schaltplan.

Autor: Dira (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

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.