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
Du hast gleich zwei Todsünden begangen: 1. sagst Du uns nicht um welchen µC es sich handelt. 2. ist sowas hier..
1 | TIMSK = 0x10; // 0b00100000, Überlaufinterrupt von Timer 1 |
2 | ^ ^^ |
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.
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
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.
lol sorry ich wusste ja nicht das ihr nicht mit zahlen umgehen könnt :D habs mal geändert ohne erfolg...
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)
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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.