Forum: Mikrocontroller und Digitale Elektronik ATTiny2313 Timer1 will einfach nicht starten


von Christoph (Gast)


Lesenswert?

Hallo,

ich bin schon kurz vorm Verzweifeln mit diesem Timer1. Zum Test wollte 
ich einfach nur Timer1 beim Overflow einen Interrupt auslösen lassen. 
Das ganze gibt mir einen Puls auf dem Oszi. Mit Timer0 geht alles 
blendend.
Ich führe folgendes aus:
TCCR1B := 1; // Non Prescaler , f_IO verwenden
TIMSK := 128; // Timer1 Overflow Event aktivieren
EnableInts; // I-Flag setzen

Nunja, ein Interrupt wird nie ausgelöst. Wenn man das ganze mit Timer0 
(TIMSK=4,TCCR0B=1) macht, dann läufts bestens. Was könnte denn da falsch 
sein? Es steht kein weiterer Code in der Datei ;-).

MfG Christoph

von Johannes M. (johnny-m)


Lesenswert?

Christoph wrote:
> Hallo,
>
> ich bin schon kurz vorm Verzweifeln mit diesem Timer1. Zum Test wollte
> ich einfach nur Timer1 beim Overflow einen Interrupt auslösen lassen.
> Das ganze gibt mir einen Puls auf dem Oszi. Mit Timer0 geht alles
> blendend.
> Ich führe folgendes aus:
> TCCR1B := 1; // Non Prescaler , f_IO verwenden
> TIMSK := 128; // Timer1 Overflow Event aktivieren
> EnableInts; // I-Flag setzen
>
> Nunja, ein Interrupt wird nie ausgelöst.
Woher weißt Du das? Wo ist der Interrupt Handler? Und was ist das für 
eine Programmiersprache? Pascal?

> Wenn man das ganze mit Timer0
> (TIMSK=4,TCCR0B=1) macht, dann läufts bestens. Was könnte denn da falsch
> sein? Es steht kein weiterer Code in der Datei ;-).
Also gar kein Interrupt-Handler da? Dann kann es nicht funktionieren.

von Christoph (Gast)


Lesenswert?

Selbstverständlich ist der Interrupthandler da, den hab nur nicht mit 
hier gepostet. Ich habe hier nur die Timerinitialisierung geschrieben. 
Also einfach nur welche Register ich gesetzt habe. Wenn die gesetzt sind 
müsste doch eigentlich der Interrupt ausgelöst werden nach jedem 
Timer1Overflow. Programmiersprache ist in dem Falle Pascal. Reichen die 
Register die ich gesetzt habe oder fehlt da noch irgendwas wichtiges was 
ich bei meinen x-maligen Studien des Datenblatts übersehen habe?

MfG Christoph

von Christoph (Gast)


Lesenswert?

Und ich weiß, dass der Interrupt nicht ausgelöst wird, weil ich mir die 
Aktion, nämlich einen Pin am PortD auf High setzen, auf dem Oszi 
ausgeben lasse. Das ganze 1:1 übertragen auf Timer0 hat bestens 
funktioniert.

von Johannes M. (johnny-m)


Lesenswert?

1.: Du hast oben geschrieben, dass in der Datei kein weiterer Code 
steht. Und jetzt ist da plötzlich doch noch was? Was soll ich jetzt 
glauben?

2.: Das setzen von Registern, in denen es auf einzelne Bits ankommt, mit 
Dezimalzahlen solltest Du Dir schnellstens abgewöhnen!

3.: Schick bitte den kompletten Code, und nicht irgendwelche 
nichtssagenden Schnipsel.

von Christoph (Gast)


Lesenswert?

Ok alles klar, dann habe ich mich undeutlich ausgedrückt. Und hier der 
ganze Code in Pascal:
program timertest;

{$NOSHADOW}
{ $W+ Warnings}            {Warnings off}

Device = tiny2313, VCC=5;

Import SysTick;

From System Import ;

Define
        ProcClock   = 8000000;        {Hertz}
        SysTick     = 10;             {msec}
        StackSize   = $0020, iData;
        FrameSize   = $0010, iData;

Implementation

{$IDATA}

interrupt Timer1;
begin
DisableInts;
PortD:=4;
PortD:=0;
EnableInts;
end;
{ Main Program }
{$IDATA}

begin
  DDRD:=  %00000100;
  TCCR1b:=1;
  TIMSK:=128;
  EnableInts;
  loop

  endloop;
end timertest.



Auf dem Oszi müsste man nun also aller 256 Takte einen Strich sehen. Mit 
Timer0 klappts wie gesagt.

MfG Christoph

von Johannes M. (johnny-m)


Lesenswert?

Du weißt aber schon, dass Timer 1 ein 16-Bit-Timer ist und nur alle 
65536 Takte überläuft?

von Christoph (Gast)


Lesenswert?

DANKE!!!!!!!! ;) Auf diese Idee bin ich nicht gekommen , dass man einen 
Puls zwischen 65534 Takten Pause einfach gar nicht sieht G. Puls ein 
wenig verlängert und schwups... Es ist sichtbar! ;)  Vielen Dank

MfG Christoph

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.