Forum: Mikrocontroller und Digitale Elektronik AVR: I²C-Interrupt per Software auslösen


von Uhu U. (uhu)


Lesenswert?

Kann man bei den ATmegas den I²C-Interrupt irgendwie per Software 
auslösen?

Das Interrupt-Flag wird durch beschreiben mit 1 gelöscht, setzten geht 
also so nicht.

Wozu man das braucht? Z.B. im Simulator, um einen Test der ISR 
automatisch ablaufen zu lassen.

von spess53 (Gast)


Lesenswert?

Hi

>Wozu man das braucht? Z.B. im Simulator, um einen Test der ISR
>automatisch ablaufen zu lassen.

Dort kannst du es manuell setzen.

MfG Spess

von Uhu U. (uhu)


Lesenswert?

spess53 schrieb:
> Dort kannst du es manuell setzen.

Ich weiß, aber das will ich gerade nicht, weil der Test dann nicht mehr 
automatisch laufen kann.

von spess53 (Gast)


Lesenswert?

Hi

>Ich weiß, aber das will ich gerade nicht, weil der Test dann nicht mehr
>automatisch laufen kann.

Für den Simulator gibt es noch die Möglichkeit ein Stimuli-File zu 
schreiben. Damit können während der Simulation Register automatisch 
gesetzt werden.

MfG Spess

von Uhu U. (uhu)


Lesenswert?

Wenn ich die Beschreibung zu Stimuli im Simulator des AVR-Studio 4 
richtig verstanden habe, gibt es keine Möglichkeit, das TWINT-Flag im 
TWCR zu setzen.

Stimuli gehen dort nur auf die Ports.

von spess53 (Gast)


Lesenswert?

Hi

>Stimuli gehen dort nur auf die Ports.

Im SimulatorV2 (und den meinte ich auch) kannst du Register mit 
Bitmasken verknüpfen (and/or/exor).

MfG Spess

von Uhu U. (uhu)


Lesenswert?

Hast du das schonmal mit dem Simulator2 ausprobiert?

Bei mir funktioniert der nicht richtig und die Stimuli werden offenbar 
nur teilweise ausgeführt.

Ich habe es mit AVR Studio 4.18 Build 700 probiert.

von Max (Gast)


Lesenswert?

Ersetz das Flagschreiben einfach doch einfach durch nen Sprung an die 
entsprechende interruptadresse...

von Stefan E. (sternst)


Lesenswert?

Uhu Uhuhu schrieb:
> Kann man bei den ATmegas den I²C-Interrupt irgendwie per Software
> auslösen?

Du könntest auch einfach folgendes machen:
1
  cli();
2
  TWI_vect();

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.