beim ATtiny841 geht "SysTimer" nicht

  • 1
  • 2
  • Page 1 of 2
Mathias
Benutzer
Avatar
Gender: n/a
Location: Weingarten - Baden
Posts: 307
Registered: 07 / 2003
Subject:

beim ATtiny841 geht "SysTimer" nicht

 · 
Posted: 20.09.2019 - 17:29  ·  #1
Hallo,

im Simulator kann man es nachvollziehen.
Hier ein Demo:
Code

program ATtiny841_Test_1;

{$NOSHADOW}
{ $WG}                     {global Warnings off}

// Device = Tiny44A, VCC=3.3;
Device = Tiny841, VCC=3.3;

Define_Fuses
  Override_Fuses;
  COMport    = USB;
  LockBits0  = [LockBit1];                       // Leseschutz ein.
  FuseBits0  = [CKSEL0, CKSEL2, CKSEL3, SUT0];   // Oszillator=intern 8MHz.
  FuseBits1  = [BODLEVEL1];                      // Reset bei 2,5-2,9V.
  FuseBits2  = [];
  ProgMode   = SPI;
  ProgFuses  = true;
  ProgLock   = true;
  ProgFlash  = true;
  ProgEEprom = true;

Import SysTick;

Define
  ProcClock      = 4000000;       {Hertz}
  SysTick        = 1;             {msec}
  StackSize      = $0010, iData;
  FrameSize      = $0010, iData;
//--------------------------------------------------------------;
implementation
//--------------------------------------------------------------;
{$IDATA}
var
  Timer_1    : SysTimer;
//--------------------------------------------------------------;
procedure pTimer_1;
begin
  If IsSysTimerZero(Timer_1) Then
    SetSysTimer(Timer_1, 100);
  EndIf;
end pTimer_1;
//--------------------------------------------------------------;
{ Main Program }
{$IDATA}
begin
  mDelay(100);          // 100 msec warten.
  CLKPR:=  %1000 0000;  // Clock Prescaler Change Enable.
  CLKPR:=  %0000 0001;  // Clock Prescale = 4MHz.
  EnableInts;
  loop
    pTimer_1;
  endloop;
end ATtiny841_Test_1.


Weiß jemand sonst noch etwas was nicht geht?
Habe vom ATtiny44A auf den ATtiny841 gewechselt.

Gruß
Mathias
Mathias
Benutzer
Avatar
Gender: n/a
Location: Weingarten - Baden
Posts: 307
Registered: 07 / 2003
Subject:

Re: beim ATtiny841 geht "SysTimer" nicht

 · 
Posted: 20.09.2019 - 17:50  ·  #2
Nachtrag:
Compiler Rev: 5.09.51
Date: 190517
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: beim ATtiny841 geht "SysTimer" nicht

 · 
Posted: 20.09.2019 - 18:02  ·  #3
Hallo Mathias,

da gab es dieses Jahr mal ein AVRco update bez. der Tiny Timer.
Glaube ich wenigstens.
Mal ins release Info schauen.

rolf
Mathias
Benutzer
Avatar
Gender: n/a
Location: Weingarten - Baden
Posts: 307
Registered: 07 / 2003
Subject:

Re: beim ATtiny841 geht "SysTimer" nicht

 · 
Posted: 20.09.2019 - 18:25  ·  #4
Mathias
Benutzer
Avatar
Gender: n/a
Location: Weingarten - Baden
Posts: 307
Registered: 07 / 2003
Subject:

Re: beim ATtiny841 geht "SysTimer" nicht

 · 
Posted: 23.09.2019 - 20:38  ·  #5
Habe die SysTimer umgestrickt auf OnSysTick.
OnSysTick geht auch nicht.
Mathias
Benutzer
Avatar
Gender: n/a
Location: Weingarten - Baden
Posts: 307
Registered: 07 / 2003
Subject:

Re: beim ATtiny841 geht "SysTimer" nicht

 · 
Posted: 24.09.2019 - 03:08  ·  #6
Habe probiert den Timer0 zu einem Interrupt zu bewegen.
Leider vergebens.
Mit dem ATtiny44A geht's wiederum.
Kann mir da jemand erklären?

Danke

Code

program ATtiny841_Test_2;

{$NOSHADOW}
{ $WG}                     {global Warnings off}

// Device = Tiny44A, VCC=3.3;
 Device = Tiny841, VCC=3.3;

Define_Fuses
  Override_Fuses;
  COMport    = USB;
  LockBits0  = [LockBit1];                       // Leseschutz ein.
  FuseBits0  = [CKSEL0, CKSEL2, CKSEL3, SUT0];   // Oszillator=intern 8MHz.
  FuseBits1  = [BODLEVEL1];                      // Reset bei 2,5-2,9V.
  FuseBits2  = [];
  ProgMode   = SPI;
  ProgFuses  = true;
  ProgLock   = true;
  ProgFlash  = true;
  ProgEEprom = true;

Import ;

Define
  ProcClock      = 4000000;       {Hertz}
  StackSize      = $0010, iData;
  FrameSize      = $0010, iData;
//--------------------------------------------------------------;
implementation
//--------------------------------------------------------------;
{$IDATA}
var
  Timer0_OVF        : byte;
//--------------------------------------------------------------;
Interrupt Timer0;           // TIM0_OVF
begin
  inc (Timer0_OVF);
end;
//--------------------------------------------------------------;
procedure pInitTimer0;
begin
  TCCR0A:= %0000 0000;      // Sonderfunktion der Portpins ausschalten.
  TIMSK0:= %0000 0001;      // Timer/Counter0 Overflow Interrupt Enable.
  TCCR0 := %0000 0011;      // clk IO/64, Timer0 START.
end pInitTimer0;
//--------------------------------------------------------------;
{ Main Program }
{$IDATA}
begin
  CLKPR:=  %1000 0000;  // Clock Prescaler Change Enable.
  CLKPR:=  %0000 0001;  // Clock Prescale = 4MHz.
  pInitTimer0;
  EnableInts;
  loop
    nop;
  endloop;
end ATtiny841_Test_2.

Mathias
Benutzer
Avatar
Gender: n/a
Location: Weingarten - Baden
Posts: 307
Registered: 07 / 2003
Subject:

Re: beim ATtiny841 geht "SysTimer" nicht

 · 
Posted: 24.09.2019 - 18:38  ·  #7
Hat jemand eine Idee wie man hier eine Art "SysTick" mit ca. 1 ms erzeugen kann?
golf
Benutzer
Avatar
Gender:
Location: Donauwörth
Age: 70
Posts: 250
Registered: 11 / 2009
Subject:

Re: beim ATtiny841 geht "SysTimer" nicht

 · 
Posted: 25.09.2019 - 17:01  ·  #8
Hallo Mathias,
sieht so aus als wenn keiner hier den Tiny841 nutzt, ich auch nicht. Vielleicht gehts ja mit einem normalen Timerinterrupt, was Du willst. Kann hier mangels dieser Hardware leider nichts testen.

golf
  • 1
  • 2
  • Page 1 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   141   155 · Page-Gen-Time: 0.027409s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI