Hallo Rolf!
ein Problem scheint zu sein (würde ich nie so machen) dass der INT0 Interrupt mode static low level ist. Ich nehme immer falling edge.
rolf
Laut Datenblatt geht zum Aufwachen aber nur ein Level-Interrupt. Sonst hätte ich das auch nicht so gemacht. Außerdem habe ich Ihr Besipiel SleepTest.pas 1:1 benutzt, bis auf die Anpassung an den Tiny26. Dort benutzen Sie auch einen Level-Interrupt, Sie weisen auch explizit darauf hin:
Wenn Ihr Besipielprogramm so funktioniert, warum dann nicht meines mit dem Tiny?
Es ist doch bei mit genau das Gleiche?
Wie gesagt, es funktionert bei mir, wenn der CPUSleep außerhalb des loops aufgerufen wird.
Innerhalb des Loops geht es nur 1x. Laut Simulator sollte es aber laufen. Gut, Sim <> CPU, schon klar.
Kann vielleicht jemand das Testprogramm ein paar Einträge höher einmal auf einem anderen Prozessor laufen lassen? Vielleicht ist es ja nur ein Problem mit dem Tiny26?
Ich wäre schon froh, wenn das Problem zu lösen wäre.
Viele Grüße,
Rolf
Quote by rh
ein Problem scheint zu sein (würde ich nie so machen) dass der INT0 Interrupt mode static low level ist. Ich nehme immer falling edge.
rolf
Laut Datenblatt geht zum Aufwachen aber nur ein Level-Interrupt. Sonst hätte ich das auch nicht so gemacht. Außerdem habe ich Ihr Besipiel SleepTest.pas 1:1 benutzt, bis auf die Anpassung an den Tiny26. Dort benutzen Sie auch einen Level-Interrupt, Sie weisen auch explizit darauf hin:
Code
begin
// this interrupt is not used by the system
// because of this the interrupt must be initialized by the user program
// in the main section
// it's job is simply to wake-up the CPU from sleep
// at first disable the external interrupt
// because we use a level triggered one.
// If we don't do that this routine is immediately
// re-entered because the low level at this pin
// maybe still active!!
EIMSK:= EIMSK and $7F; // disable INT7
EIFR:= EIFR and $7F; // reset INT7
end;
begin
EnableInts;
loop
InitPowerDown; // enable the external interrupt
CPUsleep($30); // for mega103 this is the PowerDownMode
WriteLn(SerOut, 'Hello');
endloop;
end AVR_SleepTest1.
// this interrupt is not used by the system
// because of this the interrupt must be initialized by the user program
// in the main section
// it's job is simply to wake-up the CPU from sleep
// at first disable the external interrupt
// because we use a level triggered one.
// If we don't do that this routine is immediately
// re-entered because the low level at this pin
// maybe still active!!
EIMSK:= EIMSK and $7F; // disable INT7
EIFR:= EIFR and $7F; // reset INT7
end;
begin
EnableInts;
loop
InitPowerDown; // enable the external interrupt
CPUsleep($30); // for mega103 this is the PowerDownMode
WriteLn(SerOut, 'Hello');
endloop;
end AVR_SleepTest1.
Wenn Ihr Besipielprogramm so funktioniert, warum dann nicht meines mit dem Tiny?
Es ist doch bei mit genau das Gleiche?
Wie gesagt, es funktionert bei mir, wenn der CPUSleep außerhalb des loops aufgerufen wird.
Innerhalb des Loops geht es nur 1x. Laut Simulator sollte es aber laufen. Gut, Sim <> CPU, schon klar.
Kann vielleicht jemand das Testprogramm ein paar Einträge höher einmal auf einem anderen Prozessor laufen lassen? Vielleicht ist es ja nur ein Problem mit dem Tiny26?
Ich wäre schon froh, wenn das Problem zu lösen wäre.
Viele Grüße,
Rolf