Forum: Mikrocontroller und Digitale Elektronik ATmega169 "EIMSK" nicht ansprechbar


von Martin N. (martin02)


Lesenswert?

Hallo zusammen,

ich versuche, die Pin Change Interrupts beim ATmega169 zu nutzen. Aber 
der Befehl

EIMSK = (1<<PCIE1);

funktioniert nicht. Das Register EIMSK ist danach immer noch =Null (habe 
es testweise ausgelesen) und die Interrupts laufen nicht. Im Debugger 
geht es einwandfrei. Der Oszillator läuft, andere Interrupts, z.B. Timer 
funktionieren. Selbst wenn ich das Programm auf wenige Zeilen 
zusammenkürze, ich kann EIMSK nicht beschreiben. Auch ohne 
Compileroptimierung ändert sich nichts.

Was kann man noch tun?

Danke und Grüße
Martin

: Verschoben durch Moderator
von P. M. (o-o)


Lesenswert?

Interrupts laufen nicht, oder Register wird nicht beschrieben?

Gewisse grosse Megas haben einen Kompatibilitätsmodus. Mein ähnliches 
Problem kürzlich war darauf zurückzuführen. Keine Ahnung, ob das auf den 
169 zutrifft. Mal im Datenblatt schauen?

von Martin N. (martin02)


Lesenswert?

Andere Interrupts laufen, aber nicht die externen (PCINT).

Deshalb habe ich alles mögliche überprüft und gefunden, dass das EIMSK 
Register nicht beschrieben wird. Wie gesagt, im Debugger geht es.

Zum Kompatibilitätsmodus finde ich im Datenblatt nichts.

von Julian B. (julinho)


Lesenswert?

Hab gerade mal in ein altes Projekt  Mega 169 geschaut, da hab ich EIMSK 
ohne Probleme schreiben können. Ist auch kein doppelt verwendetes 
Register.
Poste doch mal den Code.

Gruss

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Martin N/a schrieb:
> Wie gesagt, im Debugger geht es.

Diese Aussage hat keinen Sinn.

Vermutlich wolltest du schreiben "im Simulator geht es".  Das hilft
dir aber gar nichts, denn du willst ja nicht mit dem Simulator
arbeiten ...

Wodurch hast du denn das ausgelesene Bit verifiziert?  JTAG-Debugger?

von Spess53 (Gast)


Lesenswert?

Hi

>Andere Interrupts laufen, aber nicht die externen (PCINT).

Auch die PINs in PCMSK1 freigegeben?

MfG Spess

von Martin N. (martin02)


Lesenswert?

Ja, ich meine den Simulator. Das Überprüfen habe ich nur zur Fehlersuche 
eingeschoben. Pins in PCMSK1 sind freigegeben.

Hier mal der Code, an PB4..6 sind Taster gegen Masse (normal einlesen 
über PINB geht), PE6 ist ein Testausgang.

1
#define F_CPU 1000000
2
3
#include <avr/io.h>
4
#include <avr/interrupt.h>
5
6
ISR(SIG_PIN_CHANGE1);
7
8
int main(void)
9
{
10
  DDRE = (1<<PE6);
11
  PORTB = (1<<PB4)|(1<<PB5)|(1<<PB6);
12
13
  EIMSK  = (1<<PCIE1);
14
  PCMSK1 = (1<<PCINT12)|(1<<PCINT13)|(1<<PCINT14);
15
  if(EIMSK) PORTE |= (1<<PE6);  // zur Fehlersuche, EIMSK ist hier leider Null
16
  sei();
17
18
  while(1)
19
  {
20
    asm("nop");
21
  }
22
}
23
24
ISR(SIG_PIN_CHANGE1)
25
{
26
  PORTE |= (1<<PE6);
27
}

von holger (Gast)


Lesenswert?

ISR(SIG_PIN_CHANGE1);

Was soll der Quatsch? Du brauchst keinen Prototypen
für einen Interrupt.

von holger (Gast)


Lesenswert?

Brennst du auch die richtige HEX Datei?

von Martin N. (martin02)


Lesenswert?

Schadet das mit dem Prototypen? Sollte der Übersichtlichkeit dienen.

Die falsche HEX zu brennen ist mir wirklich schon passiert, in diesem 
Fall aber nicht.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Schau mal hier ´rein, vielleicht hast Du ja einen Mega169PA...

http://www.atmel.com/Images/doc8295.pdf

von Martin N. (martin02)


Lesenswert?

Knut: "...doc8295.pdf"

Super, danke! Das war es.

Es ist aber ungünstig, dass die zwei die gleiche Signatur haben. Die 
hatte ich extra überprüft.

Danke und schönen Sonntag
Martin

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

In der Tat. Bei anderen AVR-Controllern wird signaturmäßig zumindest 
zwischen P und xA Varianten unterschieden. Wahrscheinlich hat hier die 
Entwicklungsabteilung einfach das Marketing überholt ;-)

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.