mikrocontroller.net

Forum: Compiler & IDEs Timer1 läuft nicht richtig warum ?


Autor: Alexander P. (tollerteppich)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich versuche gerade den timer1 zum laufen zu bekommen. was mir aber 
nicht so wirklich gelingen will.

nun habe ich schon ausgibig gegoogelt und auch hier im forum geschaut 
konnte aber den fehler nicht identifizieren.

das kann nur irgendwas kleines sein wo ich nicht drauf komme.

geplant ist später ein relais was eine hupe einer alarmanlage steuert im 
1s takt ein und aus zu schalten ggf auch andere zeit intervalle.

ich hoff ihr könnt mir weiterhelfen

gruß alex

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast gleich zwei Todsünden begangen:

1. sagst Du uns nicht um welchen µC es sich handelt.
2. ist sowas hier..
TIMSK  = 0x10;      // 0b00100000, Überlaufinterrupt von Timer 1
           ^               ^^
 per se böse.

Auf 1. hin hab ich mir mal den m8 als 0815standardtestµC herangezogen - 
auf dem macht obige Zuweisung was ∗ganz∗ anderes - 0x10 aktiviert den 
TICIE1, das vermeintliche 0b00100000 vergnüngt sich mit dem OCIE1A. Du 
hast aber (nur) den OVERFLOW1-Handler implementiert, der würde bei 0x04 
(== _BV(TOIE1)) aktiv.

Ich hoffe es wurde klar worauf ich raus will.

Autor: Alexander P. (tollerteppich)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
g457 schrieb:
> Auf 1. hin hab ich mir mal den m8 als 0815standardtestµC herangezogen -
> auf dem macht obige Zuweisung was ∗ganz∗ anderes - 0x10 aktiviert den
> TICIE1, das vermeintliche 0b00100000 vergnüngt sich mit dem OCIE1A. Du
> hast aber (nur) den OVERFLOW1-Handler implementiert, der würde bei 0x04
> (== _BV(TOIE1)) aktiv.

öhm mein fehler hatte etwas herumprobiert ursprünglich war es natürlich 
0x20 also TICIE1.

aber mit TOIE1 also 0x04 läuft es bei mir auch net wie ich gerade 
getestet habe.

hatte im netz ne timer1 routine gesehen wo der OCIE1A an war... und 
ausprobiert aber hatte auch net geklappt...

ja ich hab einen Mega 8 :D der compiler vom myavr workpad hatte 
irgendwie probs mit dem header da hatte ich den gelöscht :D

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alexander P. schrieb:
> g457 schrieb:
>> Auf 1. hin hab ich mir mal den m8 als 0815standardtestµC herangezogen -
>> auf dem macht obige Zuweisung was ∗ganz∗ anderes - 0x10 aktiviert den
>> TICIE1, das vermeintliche 0b00100000 vergnüngt sich mit dem OCIE1A. Du
>> hast aber (nur) den OVERFLOW1-Handler implementiert, der würde bei 0x04
>> (== _BV(TOIE1)) aktiv.
>
> öhm mein fehler hatte etwas herumprobiert ursprünglich war es natürlich
> 0x20 also TICIE1.
>
> aber mit TOIE1 also 0x04 läuft es bei mir auch net wie ich gerade
> getestet habe.

Der springende Punkt ist:
Es interessiert keinen, ob das 0x04 oder irgendwas anderes ist. Schreibs 
als

   TIMSK = ( 1 << TOIE1 );

dann brauchst du dich nicht darum kümmern, was das jetzt für eine Zahl 
ist. Und lesbarer ist es auch.

Autor: Alexander P. (tollerteppich)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
lol sorry ich wusste ja nicht das ihr nicht mit zahlen umgehen könnt :D

habs mal geändert ohne erfolg...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alexander P. schrieb:
> lol sorry ich wusste ja nicht das ihr nicht mit zahlen umgehen könnt :D

Es geht ja nicht um Zahlen :-)
Warts ab, bis du das erste mal darauf reinfällst, dass du Zahlen 
geschrieben hast und auf einem anderen Prozessor sitzt das bewusste Bit 
an einer anderen Position :-)
Mit deiner Zahl fällst du gewaltig auf die Schnauze.
Mit der Konstanten-Schreibweise erledigt der Compiler die Anpassung.

Ausserdem seh ich nicht ein, warum ich erst einmal das Datenblatt zum 
Register studieren soll, um zu wissen was du da eigentlich einschaltest.

> habs mal geändert ohne erfolg...

Werd dir erst mal klar drüber, was eigentlich wirklich am Port B hängt 
und an welchem Pin dort.

Initialisieren tust du das komplette Port B als Eingang.
In der ISR schaltest du wie wild die Pullup Widerstände ein/aus.
Laut Kommentar hängt aber eine LED drann.
In der Hauptschleife machst du Pin Abfragen auf PINB, wobei Kommentar
und Abfrage nicht zusammenpassen.


Ja, was denn nun? Werd dir erst mal klar, wie du den Port B benutzen 
willst.
(Und dann verstreu nicht die Initialisierung über 3 Funktionen. Das 
kannst du durchaus als Hinweis nehmen)

Autor: Alexander P. (tollerteppich)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das mit den funktionen war so gegeben in dem code beispiel vom workpad

den tip mit den konstanten schreibweise werde ich jetzt mal 
verinnerlichen :D

klar kann ich das ändern mit dem initialiesieren von ports hab ich schon 
immer so meine probleme gehabt aber es funktionierte ohne die relais 
steuerung auch net.

aber ich gucke mir das nochmal an kein ding ^^

wie kann ich denn einzelne pins als eingang und ausgang zuweisen ?

kann man auch nen pull down einschalten ? brauche ich für die relais 
wegen dem mosfed da muss 1= 5V sen und 0=0V

gruß alex

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alexander P. schrieb:

> wie kann ich denn einzelne pins als eingang und ausgang zuweisen ?

Tu dir selbst einen Gefallen und lies die Tutorials

AVR-Tutorial
AVR-GCC-Tutorial

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alexander P. schrieb:
> kann man auch nen pull down einschalten ? brauche ich für die relais
> wegen dem mosfed da muss 1= 5V sen und 0=0V

Wenn du damit einen Mosfet ansteuern willst, solltest du den Pin 
eigentlich gar nicht als Eingang einstellen.

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.