Hallo, ich habe ein Programm auf dem, welches auch wunderbar funktionert. Nun brauche ich die Pins der JTAG Schnittstelle. Sobald ich die Fuse "HIGHJTAGEN" aber abschalte, funktioniert das Programm nicht mehr. Sobald ich JTAG wieder einschalte geht alles wieder (nur die PortC halt nicht). Woran kann das liegen? Atmega1284P Atmelstudio7 C
Philipp L. schrieb: > Woran kann das liegen? Singularität im Raum-Zeit-Kontinuum? Grüßle Volker
Was passiert denn, wenn du JTAG nur zur Laufzeit (statt per Fuse) ausschaltest? Aber allgemein lässt sich die Frage kaum beantworten. Da braucht es schon paar Details mehr zur Beschaltung.
Gebe euch gern alle Infos, bin echt ratlos..
Philipp L. schrieb: > Sobald ich die Fuse "HIGHJTAGEN" aber abschalte, funktioniert das > Programm nicht mehr. Das wird dann wohl an dem Programm liegen (lt. meinem Kaffeesatz).
Was passiert nun, wenn du JTD zur Laufzeit setzt?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
111 | |
112 | |
113 | |
114 | |
115 | |
116 | |
117 | |
118 | |
119 | |
120 | |
121 | |
122 | |
123 | |
124 | |
125 | |
126 | |
127 | |
128 | |
129 | |
130 | |
131 | |
132 | |
133 | |
134 | |
135 | |
136 | |
137 | |
138 | |
139 | |
140 | |
141 | |
142 | |
143 | |
144 | |
145 | |
146 | |
147 | |
148 | |
149 | |
150 | |
151 | |
152 | |
153 | |
154 | |
155 | |
156 | |
157 | |
158 | |
159 | |
160 | |
161 | |
162 | |
163 | |
164 | |
165 | |
166 | |
167 | |
168 | |
169 | |
170 | |
171 | |
172 | |
173 | |
174 | |
175 | |
176 | |
177 | |
178 | |
179 | |
180 | |
181 | |
182 | |
183 | |
184 | |
185 | |
186 | |
187 | |
188 | |
189 | |
190 | |
191 | |
192 | |
193 | |
194 | |
195 | |
196 | |
197 | |
198 | |
199 | |
200 | |
201 | |
202 | |
203 | |
204 | |
205 | |
206 | |
207 | |
208 | |
209 | |
210 | |
211 | |
212 | |
213 | |
214 | |
215 | |
216 | |
217 | |
218 | |
219 | |
220 | |
Okay... Wenn ich das vor sei() in der Funktion "Initialisierung" schreibe, läuft das Programm und die Ports sind verfügbar. Wenn ich das aber 3 Zeilen höher ansiedele, läuft nix. Gefühlt läuft der uC nicht an und es sind alle Ports aus. Auch direkt am Anfang der Initialisierung() geht es nicht.
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
Philipp L. schrieb:
1 | |
2 | |
3 | |
4 | |
Das ist nicht sinnvoll. Nicht nur, dass die Bits sowieso beim Reset alle 0 sind, wenn schon, dann beschreibt man in der Initialisierungsphase doch sinnvollerweise alle Port-Register jeweils am Stück mit einem kompletten Byte, statt da lauter CBI- oder SBI-Befehle aneinander zu ketten. > Wenn ich das vor sei() in der Funktion "Initialisierung" schreibe, läuft > das Programm und die Ports sind verfügbar. Dann hast du zumindest einen Würgaround. :) > Wenn ich das aber 3 Zeilen höher ansiedele, läuft nix. > Gefühlt läuft der uC nicht an und es sind alle Ports aus. > Auch direkt am Anfang der Initialisierung() geht es nicht. Vermutung: das Ding rennt aus irgendeinem Grund immer wieder in einen Reset (oder Interrupt, für den kein Vektor da ist).
Gast
#6610047
Philipp L. schrieb: > ISR (TIMER0_OVF_vect) > { > > } Wird dieser Interrupt nicht wegoptimiert?
Jörg W. schrieb: > Das ist nicht sinnvoll. Nicht nur, dass die Bits sowieso beim Reset alle > 0 sind, wenn schon, dann beschreibt man in der Initialisierungsphase > doch sinnvollerweise alle Port-Register jeweils am Stück mit einem > kompletten Byte, statt da lauter CBI- oder SBI-Befehle aneinander zu > ketten. Am Stück beschreiben ist sicher sinnvoller. Habe ich nur gemacht damit ich jedem Pin eine Beschreibung zum nachsehen verpassen kann. Aber ja, geht bestimmt besser. Jörg W. schrieb: > Vermutung: das Ding rennt aus irgendeinem Grund immer wieder in einen > Reset (oder Interrupt, für den kein Vektor da ist). Einen Overflow Interrupt gibt es nur für Timer0 und Timer3. Für beide gibt es einen Vektor. Oder muss da etwas drin stehen? Denn für Timer0 ist der noch leer...
1 | |
2 | |
3 | |
4 | |
5 | |
Aber auch wenn ich da etwas reinschreibe läuft das Programm nicht mehr, wenn ich das deaktivieren an den Anfang der Initialisierung() schreibe...
BlaBla schrieb: > Philipp L. schrieb: >> ISR (TIMER0_OVF_vect) >> { >> >> } > > Wird dieser Interrupt nicht wegoptimiert? Ja, wird er nicht. ISR ist ein Makro, der die damit beschriebenen Funktionen u.a. mit dem Attribut "used" versieht.
Also keine weitere Idee, warum es darauf ankommt an welcher Stelle ich das im Programm deaktiviere ? Ich habe mal gehört, dass man für JTAG "anders" compilieren muss. Muss ich dem Compiler das evtl. irgendwie sagen es nicht für JTAG compiliert werden soll? Man lies immer "JTAG in den Fuses deaktivieren" und gut, das würde ich eigentlich auch gern so handhaben. ich muss nur das eine "HIGHJTAGEN" entfernen, oder muss ich sonst noch etwas umstellen?
Philipp L. schrieb: > Also keine weitere Idee, warum es darauf ankommt an welcher Stelle ich > das im Programm deaktiviere ? Nö, so richtig nicht. Muss ja irgendwas mit der Initialisierung der beiden ADCs zu tun haben. > Ich habe mal gehört, dass man für JTAG "anders" compilieren muss. Wo hast du das denn gehört? > Man lies immer "JTAG in den Fuses deaktivieren" und gut, das würde ich > eigentlich auch gern so handhaben. Wo liest "man" das? Ich persönlich nehme, wenn ich das schon brauche, allemal lieber JTD, und dann lege ich auf die JTAG-Pins unwichtigen Krempel wie Status-LEDs. Wenn man dann durch die beiden Zeilen zum Setzen des JTD single-step durchgeht, wird die zeitliche Bedingung für das Deaktivieren des JTAG nicht eingehalten, und man kann weiter debuggen (die LEDs an den JTAG-Leitungen blinkern dann halt irgendwas zusammen). Läuft der Code fullspeed da durch, wird JTAG abgeschaltet, und die vier Drähte werden von der Software gesteuert. Ohne Fuse-Gefummel … > ich muss nur das eine "HIGHJTAGEN" entfernen, oder muss ich sonst noch > etwas umstellen? Du musst natürlich insbesondere die Fuses auch wirklich programmieren. Von allein wandert das nicht aus dem Sourcecode in die entsprechende Kommandozeile des Programmers. (Die Fuses grundsätzlich jedes Mal über zu programmieren, würde ich nicht tun, da hätte ich Angst, dass sie vorzeitig verschleißen. Sind ja auch nur Flash-Zellen mit endlicher Lebensdauer.) Aber: solange die Software abstürzt, hat das natürlich keinen Sinn, da an der Fuse überhaupt zu schrauben.
Gast
#6610075
Philipp L. schrieb: > Also keine weitere Idee, warum es darauf ankommt an welcher Stelle ich > das im Programm deaktiviere ? Auf jeden Fall hast du nur einen müden Abblock-Kondensator an deinem 1284P, es gehört aber an jeden einzelnen Vcc Pin (es gibt drei davon) und an den AVcc Pin jeweils ein dezidierter Abblock-Kondensator zum nächsten Masse-Pin des Controllers. Wenn du jetzt meinst das was ich sage ist ohne Belang, dann gut, dann schmiede weiterhin dein eigenes Glück.
Kann es sein, dass deine Externinterrupts irgendwelchen Müll einkoppeln und die CPU dann nur noch mit dem Behandeln von deren ISRs beschäftigt ist? Würde allerdings nicht erklären, warum dann alle Ports aus wären.
Jörg W. schrieb: > Kann es sein, dass deine Externinterrupts irgendwelchen Müll > einkoppeln > und die CPU dann nur noch mit dem Behandeln von deren ISRs beschäftigt > ist? > > Würde allerdings nicht erklären, warum dann alle Ports aus wären. Das würde doch auch nicht erklären, warum das Programm super läuft. Auch über Stunden... Nur sobald ich JTAG (in den Fuses oder an einer "falschen" Stelle im Programm) deaktiviere läuft nix mehr. Und die Externen Interrupts funktionieren doch sonst auch und liegen nicht auf den JTAG Ports. Jörg W. schrieb: > Du musst natürlich insbesondere die Fuses auch wirklich programmieren. Ja, schon klar. Auch beim auslesen wird mir das korrekt angezeigt.
Philipp L. schrieb: > Das würde doch auch nicht erklären, warum das Programm super läuft. > Auch über Stunden. Richtig. Ich bin nur immer etwas skeptisch mit Externinterrupts, die nicht dediziert von irgendwelchen aktiven Bauteilausgängen (mit genau bekannter Charakteristik der treibenden Signale) angesteuert werden. Wenn man sowas unbedingt braucht, würde ich in der ISR als erstes den entsprechenden Interrupt abklemmen, damit es keinen "Interruptsturm" gibt. Einen Encoder oder Taster entprellt man ohnehin besser in einem Timerinterrupt. Back to topic: da du das Problem ja schon auf die Initialisierung der beiden ADCs eingekreist hast, solltest du dir diese nochmal genau ansehen.
Jörg W. schrieb: > Back to topic: da du das Problem ja schon auf die Initialisierung der > beiden ADCs eingekreist hast, solltest du dir diese nochmal genau > ansehen. ja, das habe ich. Da wird kein MCUCR gesetzt (siehe Anhänge).
Gast
#6610110
Philipp L. schrieb: > Taster = 1; Das ist nicht volatile, anderes wohl auch nicht. Sonst mal zusammenstreichen, formatieren, bis es lesbar ist und nur der Fehler uebrig bleibt. leo
Ich denke zwar nicht, dass das das aktuelle Problem ist, aber darüber solltest du nochmal nachdenken …
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
(Gibt es einen wichtigen Grund, den Sourcecode als PDF statt als C-Quellen anzuhängen?)
Philipp L. schrieb: > Das würde doch auch nicht erklären, warum das Programm super läuft. > Auch über Stunden... > Nur sobald ich JTAG (in den Fuses oder an einer "falschen" Stelle im > Programm) deaktiviere läuft nix mehr. Ohne jetzt den Code im Detail untersucht zu haben, würde ich den Fehler an der Ansteuerung Deiner beiden Halbbrücken vermuten, da alle 4 am Port C hängen. Durch den Pull-Down sind die Low-Side-FETs aktiv, solange der Port nicht initialisiert ist. Bist Du Dir sicher, dass bei der Initialiserung der zugehörigen High-Side-Ausgänge kein Brückenkurzschluss ("Heißer Zweig") entsteht? Vermutung: Der Kurzzschluss könnte auch die Versorgung der MCU beeinflussen, so dass der Brownout zuschlägt. Mir fehlt die Geduld in Deinem Suchspiel, aka Schaltplan, nach der Versorgung der MOSFET-Halbbrücken zu suchen. Grüßle Volke
Beitrag #6610145 wurde von einem Moderator gelöscht.
Beitrag #6610166 wurde von einem Moderator gelöscht.
Volker B. schrieb: > Philipp L. schrieb: > >> Das würde doch auch nicht erklären, warum das Programm super läuft. >> Auch über Stunden... >> Nur sobald ich JTAG (in den Fuses oder an einer "falschen" Stelle im >> Programm) deaktiviere läuft nix mehr. > > Ohne jetzt den Code im Detail untersucht zu haben, würde ich den Fehler > an der Ansteuerung Deiner beiden Halbbrücken vermuten, da alle 4 am Port > C hängen. Durch den Pull-Down sind die Low-Side-FETs aktiv, solange der > Port nicht initialisiert ist. Bist Du Dir sicher, dass bei der > Initialiserung der zugehörigen High-Side-Ausgänge kein > Brückenkurzschluss ("Heißer Zweig") entsteht? > > Vermutung: Der Kurzzschluss könnte auch die Versorgung der MCU > beeinflussen, so dass der Brownout zuschlägt. Mir fehlt die Geduld in > Deinem Suchspiel, aka Schaltplan, nach der Versorgung der > MOSFET-Halbbrücken zu suchen. > > Grüßle > Volke Die Halbbrücken-Fets werden durch Treiber IRS2183S getrieben, welche einen Kurzschluss schon selbst verhindern. Wenn alle Ports 0 sind, steuern beide Treiber Masse durch. Wie gesagt funktioniert es schon nicht, wenn ich die JTAG Abschaltung hinter die Port Initialisierung und vor die ADC + UART Initialisierung stelle.
Gast
#6610191
Jörg W. schrieb: > Ich denke zwar nicht, dass das das aktuelle Problem ist, aber *darüber* > solltest du nochmal nachdenken … ;o) Definitiv. Das ist völliger Schwachsinn.
Philipp L. schrieb: > Die Halbbrücken-Fets werden durch Treiber IRS2183S getrieben, welche > einen Kurzschluss schon selbst verhindern. das ist mir klar. Aber welche Spannung hängt an den High-Side-Drains? Vout/3 finde ich in Deinem "Suchspiel" nicht. > Wie gesagt funktioniert es schon nicht, wenn ich die JTAG Abschaltung > hinter die Port Initialisierung und vor die ADC + UART Initialisierung > stelle. Ich würde schnell&einfach die Beschaltung der Port-C-Pins abklemmen und schrittweise wieder zuschalten, bis es erneut hängt. Dann hast Du den Schuldigen und die Ordnung des Rätsels würde sich drastisch reduzieren. Grüßle Volker
Volker B. schrieb: > das ist mir klar. Aber welche Spannung hängt an den High-Side-Drains? > Vout/3 finde ich in Deinem "Suchspiel" nicht. Das ist Vout auf Seite.3 auf welcher der Buck ist. Also Vout vom Buck. Volker B. schrieb: > Ich würde schnell&einfach die Beschaltung der Port-C-Pins abklemmen Du meinst hardwaremäßig ? Schwierig auf der fertigen Platine :-)
Philipp L. schrieb: > Du meinst hardwaremäßig ? > Schwierig auf der fertigen Platine :-) Den SO8, der an Pin 23/24 klemmt, kannst du mit Heißluft mal ablöten. Damit hättest du schon zwei der vier Leitungen verifiziert.
Ach wie blöd wir alle sind :-) Bin zwar nicht mehr am PC, aber es ist bestimmt der ADC Reset Pin. Aktuell setze ich diesen vor der adc_init noch nicht auf 1, wodurch der ads112 bei deaktivieren des JTAG ausschaltet. Somit hängt das Programm, da der ads112 nicht mehr antwortet.
Gast
#6610399
Philipp L. schrieb: > Ach wie blöd wir alle sind :-) Das sehe ich dann doch eine wenig anders...
Das war es, läuft jetzt.
Philipp L. schrieb: > Ach wie blöd wir alle sind :-) (...) > Aktuell setze ich diesen vor der adc_init noch nicht auf 1, wodurch der > ads112 bei deaktivieren des JTAG ausschaltet. > > Somit hängt das Programm, da der ads112 nicht mehr antwortet. Naja, blöde ist der, der in seinem I2C-Code nicht sämtliche while()-Schleifen auf ein Timeout prüft, sondern nur ein paar wenige... :-/ Mich würde jetzt nur interessieren, wie Du Dir in Deinem Eröffnungsposting vorgestellt hast, zielführende Informationen zu erhalten, ohne jeglichen Code oder Schaltplan zu zeigen? Grüßle Volker
Nun hack mal nicht zu viel auf ihm 'rum. Ich denke, er hat einiges dabei gelernt, auch sicher ein Stück, wie man eine Frage stellt. Btw., @Phillip, schau dir auf jeden Fall deine serielle Ausgabe nochmal an.
Mädelz... fühlt euch mit dem "blöde" doch nicht gleich so angegriffen... Dafür stand doch der :-) dahinter.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.






