Hoi zäme,
ich habe zwei Probleme:
1)
von meiner Toolchain bekomme ich die Meldungen, die im Screenshot zu
sehen sind, bin jedoch nicht in der Lage, die zu deuten. Kann mir jemand
helfen?
.o-Files der Dateien und auch ein .hex File wurden jedenfalls erzeugt.
2)
(Vielleicht alles ein Symptom von oben)
Die Timer1 ISR wird offenbar nicht aufgerufen - es kommen keine Zeichen
über UART. Wenn ich das UDR0 = 'a'; in die while(1) schreibe gehts und
wenn ich das VOR der while Schleife schreibe, kommen zyklisch zeichen.
Auch wenn ich den Inhalt der while-Schleife in die ISR kopiere.
>Hat dazu jemand eine Idee?
Mika schrieb: > von meiner Toolchain bekomme ich die Meldungen, die im Screenshot zu > sehen sind, bin jedoch nicht in der Lage, die zu deuten. In deinem Scrennshot gibts auch nichts zu deuten. Die wesentlichen Informationen dürften weiter oben stehen. > (Vielleicht alles ein Symptom von oben) > Die Timer1 ISR wird offenbar nicht aufgerufen - es kommen keine Zeichen > über UART. SIGNAL wurde kurz vor dem Aussterben der Dinosaurier durch ISR ersetzt. Häng mal deinen kompletten Code hier als Anhang an. Ich tippe ja mal auf ein fehlendes volatile. Screenshots sind da wenig aussagekräftig. Oliver
:
Bearbeitet durch User
Hm, hab noch mal einen "Rebuild All" gemacht. Im "Message" Tab steht nur "STK500: DONE" Vom Failure Tab habe ich wieder einen Screenshot gemacht, weil ich mir nicht sicher bin, ob die Information mit den roten Bubbles verloren geht. Die Meldungen stammen vom Rebuild All mit den unten genannten Änderungen. Ich hatte die Projekteinstellungen schon mit einem anderen Projekt mit dem selben Prozessortyp verglichen, wo ich die Fehlermeldungen nicht bekomme. Ich habe den einzigen Funktionsaufruf ("PingMeEvery1Ms()"), der aus dem main-File hinausführt auskommentiert, damit es genügt nur dieses an zu hängen - Symptom ist noch das selbe. Nur das Zeichen 'b' kommt zyklisch...
1 | #include <avr/io.h> |
2 | #include <avr/interrupt.h> |
3 | #include <stdint.h> |
4 | |
5 | #include "Pinger.h" |
6 | |
7 | volatile char isrFlag, isrFlagOld; |
8 | |
9 | int main() |
10 | {
|
11 | |
12 | PORTA = 255; |
13 | PORTB = 255; |
14 | PORTC = 255; |
15 | PORTD = 252; |
16 | |
17 | DDRD = 2; |
18 | UCSR0B = 0b00011000; |
19 | UBRR0L = 25; |
20 | |
21 | TCCR1B = 0b00001100; |
22 | OCR1A = 62500; |
23 | TIMSK1 = 2; |
24 | |
25 | |
26 | sei(); |
27 | |
28 | |
29 | while(1) |
30 | {
|
31 | if(isrFlag != isrFlagOld) |
32 | {
|
33 | isrFlagOld = isrFlag; |
34 | |
35 | UDR0 = 'a'; |
36 | //PingMeEvery1Ms();
|
37 | }
|
38 | };
|
39 | }
|
40 | |
41 | ISR (TIMER1_COMPA_vect) |
42 | {
|
43 | UDR0 = 'c'; |
44 | isrFlag++; |
45 | }
|
Mist, bin nicht eingeloggt, kann nicht editieren - da steht noch ein UDR0 = 'b'; nach dem sei();
Mika schrieb: > 2021 TCCR1B = 0b00001100; > 22 OCR1A = 62500; > 23 TIMSK1 = 2; Da hier vermutlich niemand Zeit und Lust hat, die einzelnen Bits im Datenblatt nachzuschlagen, schreib das bitte mal mit lesbaren Bitnamen. Oliver
? Wenn ich das zuletzt gezeigte Programm (incl. nachgereichter Zeile) laufen lasse, dann erhalte ich "bcacacaca...". Was hat es mit diesem "Build failed with 5 errors ..." auf sich?
S. Landolt schrieb: > ? > Wenn ich das zuletzt gezeigte Programm (incl. nachgereichter Zeile) > laufen lasse, dann erhalte ich "bcacacaca...". > > Was hat es mit diesem "Build failed with 5 errors ..." auf sich? Da erkennt das Studio die Meldungen und Kommandozeilen fälschlicherweise als Fehler, warum auch immer. Normal ist das nicht. Oliver
Und trotzdem wird, angeblich, eine hex-Datei erzeugt? Merkwürdig ...
Die Meldung kommt vom Studio, nicht von der Toolchain. Oliver
Okay, das ist jenseits meines Horizonts. Am Programm liegt es jedenfalls nicht.
So, hab die Bitmuster-Art durch namen ersetzt. Dabei ist mir schon mal aufgefallen, dass ich mich vertan hatte. 16Mhz/(256*62500) ist 1Hz, nicht 1kHz. Hab ich jetzt auf Prescaler 64 und OCR1A = 250 gesetzt. Damit bekomme ich jetzt auch die Zeichen aus dem ISR-Zusammenhang. Aber eben auch noch das 'b'. Mir sagt das, das der µC neu startet. Hab den Watchdoc gecheckt - ist aus. Brownout ist eben deaktiviert.
1 | #include <avr/io.h> |
2 | #include <avr/interrupt.h> |
3 | #include <stdint.h> |
4 | |
5 | #include "Pinger.h" |
6 | |
7 | volatile char isrFlag, isrFlagOld; |
8 | |
9 | int main() |
10 | {
|
11 | |
12 | PORTA = 255; |
13 | PORTB = 255; |
14 | PORTC = 255; |
15 | PORTD = 252; |
16 | |
17 | DDRD = 2; |
18 | UCSR0B = (1<<RXEN1) | (1<<TXEN1);//0b00011000; |
19 | UBRR0L = 25; |
20 | |
21 | //Enables CTC Mode with OCR1A as TOP
|
22 | // Sets Prescaler to 256 -> 16Mhz/(64*250) -> 1kHz
|
23 | TCCR1B = (1<<WGM12) | (1<<CS11) | (1<<CS10); |
24 | OCR1A = 250; |
25 | TIMSK1 = (1<<OCIE1A); |
26 | |
27 | |
28 | sei(); |
29 | UDR0 = 'b'; |
30 | |
31 | while(1) |
32 | {
|
33 | if(isrFlag != isrFlagOld) |
34 | {
|
35 | isrFlagOld = isrFlag; |
36 | |
37 | UDR0 = 'a'; |
38 | //PingMeEvery1Ms();
|
39 | }
|
40 | };
|
41 | }
|
42 | |
43 | ISR(TIMER1_COMPA_vect) |
44 | {
|
45 | isrFlag++; |
46 | }
|
Mika schrieb: > Mir sagt das, das der µC neu startet. Hab den Watchdoc gecheckt - ist > aus. Brownout ist eben deaktiviert. Das ist ein sicheres Zeichen dafür, daß da ein Interrupt Auftritt, für den es keine ISR gibt. Oliver
Auch dieses Programm läuft, es bringt "baaaaaaa..."; jetzt eben nur mit einem Affenzahn, d.h. im 1 kHz-Rhythmus - vorhin ging das schön langsam. Dieses 'WGM12' ist sicher ein Missverständnis.
Übrigens im 996 Hz-Rhythmus, denn der Timer zählt ab 0. Und damit verabschiede ich mich - guten Abend.
Ist das 'n' nicht, die Nummer, des Timers? So bin ich zu dem WGM12 gekommen (siehe Bild)
Bist du denn sicher, daß der richtige Prozessor im Studio eingestellt ist? Oliver
AS7: [View] show [Output]. In Output stehen die Details. Falls das Format nicht leserlich genug ist: copy/paste in einen Texteditor und vor alle "error" einen Zeilenumbruch einfügen. Jede Meldung lesen, verstehen, korrigieren.
Beitrag #7131803 wurde vom Autor gelöscht.
>Bist du denn sicher, daß der richtige Prozessor im Studio eingestellt >ist? Ja, leider - eben noch mal geprüft :>
Frage mich, ob ich es ausnahmes Weise mit einem defekten µC zu tun habe. Habe das sei(); auskommentiert, auf Verdacht ein wdt_reset(); eingefügt und auch sonst alles an Peripherie-Initialisierung, was nicht UART ist auskommentiert und beobachte weiter hin das Drucken vom zeichen for der main-while Loop.
Mitleserin schrieb: > AS7: [View] show [Output]. In Output stehen die Details. Dem kann ich mich nur anschließen. Wieso eigentlich diese alte Version des AS?
Oha, vielleicht hab ich einen ganz üblen Boon-Fehler gemacht - wir werden es sehen - dann geb ich jedem der geantwortet hat ein Bier aus wenn es so ist :)
https://de.wikipedia.org/wiki/Neuling#Noob/Boon Hab einen Pullup am Reset nachgelötet. Das alleine war es nicht. Aber mit dem Oszi sehe ich einen 1V Ripple auf den 5V...
Mika schrieb: > Aber mit dem Oszi sehe ich einen 1V Ripple auf den 5V... Wer misst misst Mist. Wo hast Du die Masse des Oszilloskops angeschlossen? Was für ein Netzteil ist das? Bild vom Aufbau?
Das war es - mein USB Dongle "mySmartUSB light" scheint zu schwach für den Mega1284p zu sein. Ja, ich hatte auf 5V im Tool-Frontend gestellt :> Hab jetzt eine Versorgung zu einem Netzteil gemacht - nu ist alles gut.
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.