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).
vielleicht magst du mal deinen code posten, mit dem du das probierst..?
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 | }
|
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.
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.
Hallo, der (fast nur) ASM-Programmierer fragt sich gerade: #define F_CPU 2000000 sollte das nicht besser #define F_CPU 2000000UL heißen? Was kommt ohne unsigned long raus? 0? Was macht _delay_us() mit F_CPU = 0? Oder liege ich völlig falsch? Gruß aus Berlin Michael
das tut der sache keinen abbruch. es geht beides. glaub ich zumindest. ich definiere das immer im IDE. nie im source code.
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 )
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.
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
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.
erde schrieb: > @Ratsuchender schonmal an fuses gedacht?? =) Natürlich, sonst hätte ich ja nie von externen Quarz auf internen Takt und zurück umstellen können.
Niemand mehr eine Idee womot sich das Verhalten erklären liese? Wenn niemand mehr etwas weis würde ich den Controller als partiell defekt erklären.
in deinem Programmcode steht 2000000 wie wäre es mit 8000000 ?
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).
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
Mal den Programmer abziehen ... der suat manchmal an der Resetleitung rum ...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.