Forum: Mikrocontroller und Digitale Elektronik AT1284p Timer1_ISR und Compiler_Meldungen


von Mika (Gast)


Angehängte Dateien:

Lesenswert?

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?

von Oliver S. (oliverso)


Lesenswert?

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
von S. Landolt (Gast)


Lesenswert?

Sieht nach 'volatile' (für isrFlag) aus.

von Mika (Gast)


Angehängte Dateien:

Lesenswert?

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
}

von Mika (Gast)


Lesenswert?

Mist, bin nicht eingeloggt, kann nicht editieren - da steht noch ein
UDR0 = 'b'; nach dem sei();

von Oliver S. (oliverso)


Lesenswert?

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

von S. Landolt (Gast)


Lesenswert?

?
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?

von Oliver S. (oliverso)


Lesenswert?

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

von S. Landolt (Gast)


Lesenswert?

Und trotzdem wird, angeblich, eine hex-Datei erzeugt? Merkwürdig ...

von Oliver S. (oliverso)


Lesenswert?

Die Meldung kommt vom Studio, nicht von der Toolchain.

Oliver

von S. Landolt (Gast)


Lesenswert?

Okay, das ist jenseits meines Horizonts. Am Programm liegt es jedenfalls 
nicht.

von Mika (Gast)


Angehängte Dateien:

Lesenswert?

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
}

von Oliver S. (oliverso)


Lesenswert?

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

von S. Landolt (Gast)


Lesenswert?

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.

von S. Landolt (Gast)


Lesenswert?

Übrigens im 996 Hz-Rhythmus, denn der Timer zählt ab 0.
  Und damit verabschiede ich mich - guten Abend.

von Mika (Gast)


Angehängte Dateien:

Lesenswert?

Ist das 'n' nicht, die Nummer, des Timers?
So bin ich zu dem WGM12 gekommen (siehe Bild)

von S. Landolt (Gast)


Lesenswert?

Korrekt! Entschuldigung, mein Fehler.

von Oliver S. (oliverso)


Lesenswert?

Bist du denn sicher, daß der richtige Prozessor im Studio eingestellt 
ist?

Oliver

von Mitleserin (Gast)


Lesenswert?

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.
von Mika (Gast)


Lesenswert?

>Bist du denn sicher, daß der richtige Prozessor im Studio eingestellt
>ist?

Ja, leider - eben noch mal geprüft :>

von Mika (Gast)


Lesenswert?

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.

von DerEgon (Gast)


Lesenswert?

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?

von Mika (Gast)


Lesenswert?

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 :)

von DerEgon (Gast)


Lesenswert?

Mika schrieb:
> Boon-Fehler

Was soll das sein?

von Mika (Gast)


Lesenswert?

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...

von DerEgon (Gast)


Lesenswert?

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?

von Mika (Gast)


Lesenswert?

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.

von Mika (Gast)


Lesenswert?

How Dongles got thier names

https://www.youtube.com/watch?v=RTXRZaXnD10

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
Noch kein Account? Hier anmelden.