AT1284p Timer1_ISR und Compiler_Meldungen

Gast #7131379
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?
Angehängte Dateien:
#7131386
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
Gast #7131407
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
}
Angehängte Dateien:
Gast #7131471
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
}
Angehängte Dateien:
Gast #7131488
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.
Gast #7131766
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 von einem Moderator gelöscht.
Gast #7131815
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.
Gast #7131845
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.

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