ATmega läuft nicht los obwohl Quarz schwingt

Gast #2167995
Lesenswert?

Ich habe ein Problem mit meinem ATmega16.
Vor einigen Wochen hatte ich den Controller ohne Probleme verwenden 
können, alles hat wie geplannt funktioniert. Dann habe ich das Projekt 3 
Wochen liegen lassen und wollte nun weiter machen, jedoch läuft der 
Controller allem anschein nach nicht los.
Wie ich bisher bei der Problemsuche vorgegangen bin:
- Versorgungsspannungen überprüft, alle Ok (VCC und AVCC verbunden und 
saubere 5V)
- Reset liegt auf 5V und nicht dauerhaft auf GND.
- Quarz schwingt (kann am Oszilloskop eine 8MHz Sinus Schwingung bei 
8MHz Quarz sehen)
- Programm herunterbrochen auf ein reines Pin Toggeln.
- Optimierung ausgeschalten.

Trotzdem läuft das Programm nicht los. Jedoch lässt sich der Controller 
programmieren und auch die Fuses setzen/auslesen.
Daraufhin habe ich die internen Oszillatoren ausprobiert. Bei 1MHz und 
2MHz internen Takt läuft das Programm los, aber ab 4MHz internen Takt 
startet das Programm nicht mehr.
Dann dachte ich an Watchdog oder Brown Out Detection. Also habe ich 
Brown out per Fuse bits deaktiviert und den Watchdog per Software 
ausgeschaltet. Das hat aber auch keine Verbesserung gebracht.

Hatte schon mal jmd. dieses Verhalten? Ich würde darauf tippen das der 
Controller wohl defekt ist (ESD Schaden oder ähnliches).
Gast #2168035
Lesenswert?

1
#include <avr/io.h>
2
#include <avr/delay.h>
3

4
#ifndef F_CPU
5
#define F_CPU 2000000
6
#endif
7

8
int main(void){
9

10
  //WDTCR |= (1<<WDTOE) | (1<<WDE);
11
  //WDTCR &= ~(1<<WDE);
12

13
  DDRD |= (1<<PD5);
14

15
  while(1){
16
    _delay_us(100);
17
    PORTD ^=(1<<PD5);
18
  }
19
}
Gast #2168111
Lesenswert?

Ein Oszilloskop.

Was mir aufgefallen ist das der Controller direkt nach dem Reset 
scheinbar versucht zu starten (es kommen unregelmässige Impulse am pin 
heraus), dann aber abbricht und nichts mehr tut. Der Quarz schwingt 
weiter.
#2168115
Lesenswert?

Wenn die Platine schon mal funktioniert hat, dann untersuche sie auf 
abgerissene oder zweifelhafte Kabelverbdinungen, Verschmutzung oder 
dergleichen.
Ein ESD Schaden ist zwar prinzipiell möglich aber sehr unwahrscheinlich. 
Viel wahrscheinlicher ist es, dass da irgendein mechanisches Problem 
vorliegt, das beim Herumschieben der Platine entstanden ist. Und sei es 
nur ein banaler Wackelkontakt in einem Kabel.
Gast #2168158
Lesenswert?

1)Versuch mal dei schaltung auf der steckplatine aufzubauen, es hilft 
dir beim feststellen ob der µcon. kaput ist , oder deine Platine......

2)Was ich sicher sagen kann ist: wenn der mikrocontroller sich 
programmieren lässt , heißt: er schwingt..., auch bei höheren 
frequenzen( wie du gesagt hast bei 4 MHZ Internal clock ) er würde sich 
nicht programmieren lassen, wenn er nicht schwingen würde.

3)Außerdem, wenn du die oscillatorfrequenz änderst , ändere auch den 
Quelltext dementsprechend.

4)Falls es ESD war , versuch einen Anderen Port zum blinken zu bringen.

5)das letzte was ich zu deiner sicherheit sagen könnte , bring einen 
kondensator von 100nF zwischen Reset unD Masse ( den Widersrtand von 
üblich 10k lässt du ..., bei programmieren nimmst du den kondensator weg 
) nachdem du programmiert hast , schaltest du den Strom an deiner 
Platine aus, setzt den Kondensator wieder herein und strom wieder an. 
das lässt den controller kurzzeitig auf reset , und dann erst fährt er 
hoch .., ( hab ich auch i-wo gelesen dass es helfen soll )
Gast #2168224
Lesenswert?

Ich habe nun eine Testschaltung identisch zu meiner Platine auf dem 
Steckbrett aufgebaut, dabei kann ich jedoch genau das gleiche Verhalten 
beobachten:
- Mit 2MHZ internen Takt läuft der Controller, darüber nicht.
- Externer Quarz schwingt aber Programm arbeitet nicht.
#2168287
Lesenswert?

Hallo,

Hans Mayer schrieb:
> das tut der sache keinen abbruch. es geht beides.
> glaub ich zumindest. ich definiere das immer im IDE.
> nie im source code.

Glauben ist etwas, was ich beim Programmieren völlig ausschließe...

Ich definiere auch in der IDE und wenn mal im Source, dann mit 
Typangabe.
IMHO interpretiert #define das als Integer, deshalb ja meine Frage.

Gruß aus Berlin
Michael
#2168301
Lesenswert?

Michael U. schrieb:

> IMHO interpretiert #define das als Integer, deshalb ja meine Frage.

#define interpretiert das überhaupt nicht.
Für #define ist das einfach nur ein Text, der an geeigneter Stelle 
anstelle von F_CPU eingesetzt wird.
Wie dieser Text dann weiter verwendet wird, hängt von der verwendenden 
Stelle ab.
Aber 2000000 ist für einen int schon zu groß, wird also in einem 
arithmetischen Ausdruck beim AVR-gcc auf jeden Fall also mindestens ein 
long sein.
Gast #2169324
Lesenswert?

ich schrieb:
> in deinem Programmcode steht  2000000 wie wäre es mit 8000000 ?
Das würde nur in der Zeitdauer des toggelns einen Unterschied machen, 
aber es passiert ab 4MHz gar nichts mehr, keinerlei Reaktion.

Aber um die Frage eindeutig zu beantworten: Ein ändern von F_CPU im 
Quellcode und in der IDE beim einstellen des externen 8MHz Quarzes 
bringt nichts (wie zu erwarten war).
Gast #2170475
Lesenswert?

Hi,

1. Kondensator zwischen Vcc und GND (100nF) erneuern.
2. Anderen IC verwenden.
3. Ich kennen den Controller nicht, aber bei manchen Controller muss man 
einen Wert in ein Register schreiben, damit er auch bei hohen Frequenzen 
funktioniert.

Gruß
PP

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