Forum: Mikrocontroller und Digitale Elektronik AVR ATmega Probleme mit Timer1


von Uwe (Gast)


Lesenswert?

Hallo zusammen,

ich versuche gerade den Timer 1 auf einem AATmega ans Laufen zubekommen, 
aber irgendwie will er nicht.

Er läuft nicht. Timer 0 habe ich am Laufen, aber mit dem Timer 1 bekomme 
ich das nicht hin.

Wäre klasse, wenn mir da einer weiterhelfen könnte.
Gruß


Hier mal die entsprechenden Auszüge aus meinem Code:
1
cli();      
2
init_timer1();    
3
sei();
4
5
void init_timer1(void)
6
{
7
  TCCR1B |= (1<<CS10) | (1<<CS12);  // Prescaler 1024
8
  TCCR1B = (1<<WGM12);  // CTC Modus (Clear Timer On Compare)
9
  OCR1A = 256-1;
10
  TIMSK1 |= (1<<OCIE1A);  // Timer/Counter1 Output Compare Match A Interrupt Enable
11
}
12
13
ISR (TIMER1_COMPA_vect)
14
{
15
  PORTC ^= ( 1 << PC5 )
16
}

von Karl H. (kbuchegg)


Lesenswert?

Uwe schrieb:


>   TCCR1B |= (1<<CS10) | (1<<CS12);  // Prescaler 1024
>   TCCR1B = (1<<WGM12);  // CTC Modus (Clear Timer On Compare)

Gratulation.
Du hast dir soeben mit dem Zuweisung zum Setzen von WGM12 die 
Konfiguration der CS Bits zerschossen :-)

: Bearbeitet durch User
von spess53 (Gast)


Lesenswert?

Hi

>  TCCR1B |= (1<<CS10) | (1<<CS12);  // Prescaler 1024
>  TCCR1B = (1<<WGM12);  // CTC Modus (Clear Timer On Compare)

Mit der 2.Anweisung überschreibst du die erste.

MfG Spess

von Uwe (Gast)


Lesenswert?

Hallo,

ich habe das wie flolgt geändert, aber irgendwie will er immer noch 
nicht.

Stimmt denn der Rest?
1
TCCR1B |= (1<<CS10) | (1<<CS12)|(1<<WGM12);  // Prescaler 1024
2
  OCR1A = 400;
3
  TIMSK1 |= (1<<OCIE1A);

Gruß

von Ingo (Gast)


Lesenswert?

PORTC auf Ausgang gestellt?

von Uwe (Gast)


Lesenswert?

Hallo,

ja, Ich habe mal den Timer0 konfiguerit und den laufen lassen, das 
fuktioniert, nur der Timer 1 läuft irgendwie nicht.

Gruß

von Amateur (Gast)


Lesenswert?

Hast Du mal eine Pupille auf:

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR

geworfen?

Da werden die beteiligten Register beschrieben.

von Karl H. (kbuchegg)


Lesenswert?

Uwe schrieb:
> Hallo,
>
> ja, Ich habe mal den Timer0 konfiguerit und den laufen lassen, das
> fuktioniert, nur der Timer 1 läuft irgendwie nicht.

Ein komplettes, möglichst simples Programm, in dem nur der Timer 1 
vorkommt, könnte viel mehr Klarheit bringen, als die ständige Aussage 
'läuft irgendwie nicht'. Solange nicht 100% ausgeschlossen werden kann, 
dass du nicht noch irgendwo mindestens 1 Fehler im Programm hast, ist 
die Arbeitshypothese 'Der µC hat einen Schaden'. bzw. 'der Compiler hats 
vermurkst' als eine zu verwerfende anzusehen. Die Wahrscheinlichkeit, 
dass du einen Programmfehler hast, liegt nun mal bei 99%, während die 
anderen beiden Alternativen eine Fehlerwahrscheinlichkeit von 1% (wenn 
nicht noch weniger) haben.

Und nein: Die Vorgehenswiese "ich schreib mal alles für den Timer 0 und 
ändere dann einfach alle 0 auf 1 um" ist nicht zielführend. Willst du 
den Timer 1 benutzen, dann geht die ganze Konfiguration mit dem 
Datenblatt für den Timer 1 von vorne los. Insofern ist das völlig 
irrelevant, dass es mal mit dem Timer 0 funktioniert hat. Allenfalls 
kann man daraus die Aussage ableiten "der µC läuft grundsätzlich". Mehr 
aber auch nicht.

In diesem Sinne ....

: Bearbeitet durch User
von Uwe (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe hier mal das Programm, mit dem ich im Moment den Timer1 teste. 
Vielleicht wird es dann klarer.

Vielen Dank schonmal!

Gruß

von dummy (Gast)


Lesenswert?

Für die richtige CPU compiliert? Welche war das noch mal?
JTAG deaktiviert?

von möööp (Gast)


Lesenswert?

Uwe schrieb:
> ich habe hier mal das Programm, mit dem ich im Moment den Timer1 teste.

Also bei mir lässt sich das nicht compilieren. Kein wunder bei den 
fehlenden includes.

von Ingo (Gast)


Lesenswert?

Uwe schrieb:
> ich versuche gerade den Timer 1 auf einem AATmega ans Laufen zubekommen,
> aber irgendwie will er nicht.
Welche IDE nutzt du denn eigentlich die diesen Kram compilieren kann?

von Thomas E. (thomase)


Lesenswert?

Uwe schrieb:
> Vielleicht wird es dann klarer.

Nein. Mal abgesehen davon, dass du es mit dem Verteilen auf mehrere 
Files ein wenig übertreibst und dass die Funktionsprototypen fehlen, die 
vollkommen unwichtigen Warnings dafür hast du ja grosszügig ignoriert, 
ist doch alles in Ordnung.
Wenn du uns jetzt allerdings noch, wie von dummy schon angemerkt, 
erzählst, um welchen Controller es sich handelt, könnte man dir wirklich 
helfen.


möööp schrieb:
> Also bei mir lässt sich das nicht compilieren. Kein wunder bei den
> fehlenden includes.
Natürlich lässt sich das compileren.

Ingo schrieb:
> Welche IDE nutzt du denn eigentlich die diesen Kram compilieren kann?
Eine IDE kann überhaupt nicht compilieren.

mfg.

: Bearbeitet durch User
von Uwe (Gast)


Lesenswert?

Hallo,

läuft im Moment auf einem ATmege88.

JTAG aus.

von Thomas E. (thomase)


Lesenswert?

Uwe schrieb:
> Hallo,
>
> läuft im Moment auf einem ATmege88.
>
> JTAG aus.

Ein Atmega88 hat gar kein JTAG.

Also läuft das? Oder was läuft irgendwie nicht?

Erzähl einfach, was du erwartest und was du bekommst. Dann können wir 
dir sagen, ob du das auch erwarten kannst.

mfg.

: Bearbeitet durch User
von Paul B. (paul_baumann)


Lesenswert?

Ich weiß, daß Dir das in C nicht nützt. Trotzdem ginge es mit Bascom 
einfacher:

TCCR1B = Bits(CS10,CS12,WGM12)
OCR1A = 200
TIMSK1.OCIE1A = 1

(Ob die Einstellungen richtig sind, weiß ich nicht aus dem Kopf, ich
habe sie vom TO übernommen)

MfG Paul

von Ingo (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Erzähl einfach, was du erwartest und was du bekommst. Dann können wir
> dir sagen, ob du das auch erwarten kannst.
Also wenn du immernoch nicht weisst was er will hast du den Text nicht 
gelesen. Ich denke damit hast du es schon auf den Punkt gebracht:

> die Funktionsprototypen fehlen, die
> vollkommen unwichtigen Warnings dafür hast du ja grosszügig ignoriert

von Ingo (Gast)


Lesenswert?

Paul Baumann schrieb:
> Trotzdem ginge es mit Bascom einfacher
Das hilft ihm überhaupt nicht...

von Thomas E. (thomase)


Lesenswert?

Paul Baumann schrieb:
> Ich weiß, daß Dir das in C nicht nützt. Trotzdem ginge es mit Bascom
> einfacher:

Doch. Das ist sehr nützlich.

Kann man mit
1
#include <bascom.h>

einbauen.


Ingo schrieb:
> Also wenn du immernoch nicht weisst was er will hast du den Text nicht
> gelesen.
Das wirst du wohl kaum beurteilen können.

> Ich denke damit hast du es schon auf den Punkt gebracht:
Nein. Es läuft trotzdem.

mfg.

: Bearbeitet durch User
von Ingo (Gast)


Lesenswert?

Uwe schrieb:
> Er läuft nicht.

Thomas Eckmann schrieb:
> Nein. Es läuft trotzdem.
Das weisst du mehr als er selber :)

von Thomas E. (thomase)


Lesenswert?

Ingo schrieb:
> Uwe schrieb:
>> Er läuft nicht.
>
> Thomas Eckmann schrieb:
>> Nein. Es läuft trotzdem.
> Das weisst du mehr als er selber :)

Natürlich weiss ich mehr als er.

Was ich allerdings nicht weiss, ist, was er von seinem Programm 
erwartet.

mfg.

von Ingo (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Was ich allerdings nicht weiss, ist, was er von seinem Programm
> erwartet.

Uwe schrieb:
> ISR (TIMER1_COMPA_vect)
> {
>   PORTC ^= ( 1 << PC5 )
> }
Ist dir das hieraus wirklich nicht ersichtlich?
Falls nicht bezweifle ich das:

Thomas Eckmann schrieb:
> Natürlich weiss ich mehr als er.

von Ingo (Gast)


Lesenswert?

Uwe schrieb:
> ISR (TIMER1_COMPA_vect)
> {
>   PORTC ^= ( 1 << PC5 )
> }
Hier fehlt im Übrigen ein Semikolon, was bei dir natürlich trotzdem 
läuft Thomas weil

Thomas Eckmann schrieb:
> Nein. Es läuft trotzdem.

von Thomas E. (thomase)


Lesenswert?

Ingo schrieb:
> Thomas Eckmann schrieb:
>> Was ich allerdings nicht weiss, ist, was er von seinem Programm
>> erwartet.
>
> Uwe schrieb:
>> ISR (TIMER1_COMPA_vect)
>> {
>>   PORTC ^= ( 1 << PC5 )
>> }
> Ist dir das hieraus wirklich nicht ersichtlich?
> Falls nicht bezweifle ich das:
>
> Thomas Eckmann schrieb:
>> Natürlich weiss ich mehr als er.

Würde du dich jetzt mal mit deinen dämlichen Kommentaren zurückhalten
und einen sinnvollen Beitrag schreiben.

Brauchst mir nicht drauf zu antworten. Du stehst jetzt in meinem 
Idiotenfilter. Mit Leuten wie dir, sabbel ich mich nicht lange ab.

mfg.

von Ingo (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> einen sinnvollen Beitrag schreiben.

Hier:

Ingo schrieb:
> Hier fehlt im Übrigen ein Semikolon

von Paul Baumann (Gast)


Lesenswert?

The hair stands one to mountain....
;-)

MfG Paul

von Karl H. (kbuchegg)


Lesenswert?

Ingo schrieb:
> Thomas Eckmann schrieb:
>> einen sinnvollen Beitrag schreiben.
>
> Hier:
>
> Ingo schrieb:
>> Hier fehlt im Übrigen ein Semikolon

Das ist schon lange Schnee von gestern, seit er das Zip File gepostet 
hat.

Der Code im Zipfile hat nach erstem Darüberschauen genau die Probleme, 
die Thomas schon angemerkt hat.

Die Frage ist, was der TO erwartet. Wenn der µC wirklich mit 8Mhz läuft, 
dann blinkt seine LED mit 20Hz. Die meisten würden wohl das Flackern 
gerade noch so sehen können, wenn man allerdings nicht genau schaut, 
dann kann man das auch leicht übersehen.
Daher auch die Frage, was der TO eigentlich vom Code erwartet.

: Bearbeitet durch User
von Uwe (Gast)


Lesenswert?

Hallo,

ich möchte später einmal ein 75 Hz Signal erzeugen.

Gruß

von Karl H. (kbuchegg)


Lesenswert?

Uwe schrieb:
> Hallo,
>
> ich möchte später einmal ein 75 Hz Signal erzeugen.

Schön.

Du hast immer noch nicht gesagt, woraus du schliesst dass dein Timer 1 
nicht läuft.

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.