www.mikrocontroller.net

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


Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.