Powerdown Tiny26

Interrupthandling

  • 1
  • 2
  • Page 2 of 2
rbr50
 
Avatar
 
Subject:

Re: Powerdown Tiny26

 · 
Posted: 01.10.2011 - 20:14  ·  #9
Hallo 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.




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
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: Powerdown Tiny26

 · 
Posted: 02.10.2011 - 01:22  ·  #10
Hallo "rbr-Rolf",
Code
  loop
    InitPowerDown;
    CPUsleep(MCUCR or %00110000);
    if LED then
      excl(LED);
    else
      incl(LED);
    endif;
  endloop;

Du musst vor dem endloop warten bis die Taste sicher wieder losgelassen wurde
(ans Prellen denken !)

Ich glaube das Problem ergibt sich wie folgt:
- der 1. Loop-Durchlauf funktioniert ja wie erwartet
- dann kommt das endloop
- weiter geht es dann wieder mit InitPowerDown = Enable des (Pegel getriggerten) INT0
- zu diesem Zeitpunkt hast Du aber den Daumen noch auf dem Taster, sodaß
die INT0-ISR sofort wieder anläuft und den INT0 disabled
- dann kommt das CPUsleep ..., was die CPU erneut ins Nirwana schickt, wovon es
(bei jetzt disableten INT0) diesmal jedoch keine Rückkehr mehr gibt

Gruß
Gunter
rbr50
 
Avatar
 
Subject:

Re: Powerdown Tiny26

 · 
Posted: 02.10.2011 - 07:35  ·  #11
Hallo Gunter!

Quote by Gunter

Du musst vor dem endloop warten bis die Taste sicher wieder losgelassen wurde
(ans Prellen denken !)

Ich glaube das Problem ergibt sich wie folgt:
[...]


Du hast zu 100% Recht gehabt!

Code
 loop
    InitPowerDown;
    CPUsleep(MCUCR or %00110000);
    if LED then
      excl(LED);
    else
      incl(LED);
    endif;
    mdelay(20);
    repeat
    until Taste = true;
    mdelay(20);
    repeat
    until Taste = true;
    mdelay(20);
    repeat
    until Taste = true;
  endloop;


Ich habe ganz auf die Schnelle mal mit ein paar delays entprellt und warte, wie von Dir
vorgeschlagen, auf Loslassen.

Alles richtig jetzt, alles gut, Tiny26 verhält sich so, wie er soll.
(Ich ärgere mich natürlich sehr, dass ich das Problem nicht gesehen habe.)

Ganz herzlich vielen Dank für Deine Hilfe und die Zeit, die Du investiert hast!
Super gut gelöst!

Viele Grüße aus Petershagen,

Rolf
nopoweruser
 
Avatar
 
Subject:

Re: Powerdown Tiny26

 · 
Posted: 26.06.2014 - 21:12  ·  #12
Hallo Power User,

Meine Herausforderung:
ich möchte den Tiny 85 für n Sek(1"-300") schlafen(Powerdown) legen - 2 AD's - Syst Tick in Verwendung PWM selbstgestrickt....
je mehr ich befasste, desto verwirrter wurde ich C Befehle.... Assembler...
vielleicht kann mir wer auf die Sprünge helfen

Danke

PS
Eine sehr wichtige Funktion(SLEEP über Timer!) wird behandelt wie die Stiefmutter wie auch die Tinys(8Pin)
von den 6 PIN ganz zu schweigen! - keine Soft RS232 - keine Soft PWM - ........ ich muss deshalb immer wieder
auf die PIC's 10F.. 12F.. zurückgreifen
Vielleicht kann mir einer der Virtuosen bit&byte Künstler eine Antwort geben, wenn ich eine sehr komplexe
FW schreiben (muss) aber nur 3 Beine brauche und sehr wenig Platz habe? (32pol Mega als Die?)
golf
Benutzer
Avatar
Gender:
Location: Donauwörth
Age: 71
Posts: 256
Registered: 11 / 2009
Subject:

Re: Powerdown Tiny26

 · 
Posted: 27.06.2014 - 05:51  ·  #13
Hallo nopoweruser.
ich verwende in den Fällen bei wenig Platz auf der Platine gerne die ATXmega8E5 im 4x4mm QFN-Gehäuse. Die sind zwar etwas teurer, ca 1,50 netto bei Einzelabnahme, aber ich habe mehr Peripherie und bei Bedarf die Möglichkeit auch größere Typen einzusetzen mit 16 oder 32 KB.
Natürlich ist so ein SOT-23 Gehäuse der kleinsten AVRs noch kleiner.

golf
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: Powerdown Tiny26

 · 
Posted: 27.06.2014 - 09:44  ·  #14
Hi,

der AVRco unterstützt auch die Mini Tinys (Tiny, 4,5,10 usw.)
http://e-lab.de/downloads/ISP_ICP/DeviceList.txt

Gunter
  • 1
  • 2
  • Page 2 of 2
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   104   118 · Page-Gen-Time: 0.039355s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI