mfgCode:int main(void) { TCCR0A |= (1<<WGM01); // CTC Modus TCCR0B |= (1<<CS01); // Vorteiler 8 OCR0A = 125-1; // ((1000000/8)/1000) = 125 TIMSK0 = (1<<OCIE0A); // Interups EIN sei(); while(1) {} }
Werbung
mfgCode:int main(void) { TCCR0A |= (1<<WGM01); // CTC Modus TCCR0B |= (1<<CS01); // Vorteiler 8 OCR0A = 125-1; // ((1000000/8)/1000) = 125 TIMSK0 = (1<<OCIE0A); // Interups EIN sei(); while(1) {} }
Hallo,
@ oberallgeier: ziemlich voreingenommen zu behaupten ich würde nur abschreiben. Ich habe das Tutorial hier, auf Microcontroller.net und
andere gemacht. Überall ist es anders. Jeder verwendet einen andern Chip und zufälligerweise keiner den 84er.
Den Befehl " TIMSK0" habe ich aus meinem Datenblatt da in diesem Register das Bit "OCIE0B" existiert. Das es Falsch ist
konnte ich nicht ahnen, wie auch wenn es so in den Tutorials angegeben ist.
Ich meinte ja nur das es im Netz eher Hilfe zum 2313er gib als vom 84er.
@ Wsk8: Danke dir. Aber so wie du das geschrieben hast setze ich im Register (TCCR0A) von Timer 0 den
CTC- Modus und im Register (TCCR0B) von Timer 0 die entsprechenden Vorteilerbits ???
Im Microcontroler.net wird ein 2313 verwendet und hier im Tutorial ein mega32. Habe mich halt an die Tutorials gehalten und die Registerbezeichnungen vom 84 eingesetzt. Wenn das dann nicht hinhaut liegt das bestimmt nicht daran das ich nicht nachdenke. Wollte lediglich etwas Hilfe.
Zudem was soll mir ein Programm bringen in dem auch ein 2313 verwendet wird??? Da bin ich genauso nass wie in den Tutorials.
Dann sollte man ein Tutorial für alle chips machen. Aber mich nicht anhauen weil ich Tutorials falsch interpretiere.
Mal der Code aus dem Roboternetz Tutorial hier:
Code:/* Es wird der Timer2 (8-Bit) eines ATmega32 verwendet, der mit einem Quarz mit 7,3728 MHz betrieben wird. Im Abstand von 0,01 ms erzeugt der Timer einen Interrupt, also eine Frequenz von 100000 Hz (oder 100 kHz). Der Timer wird auf einen Prescaler von 1 und einem OCR2-Wert von 73 konfiguriert. */ volatile uint8_t countTimer2; // Speichert den aktuellen Zählerwert SIGNAL(SIG_OUTPUT_COMPARE2) { countTimer2++; } // Initialisierung: TCCR2 = (1<<CS20) | (1<<WGM21); // Prescaler von 1 | CTC-Modus (siehe unten für Beschreibung) OCR2 = 73; // Vergleichswert TIMSK |= (1<<OCIE2); // Interrupts aktivieren und damit Timer starten sei(); // Funktionen zum benutzen der Timer: /** Diese Funktion nicht aufrufen. Wird von sleep_millisec aufgerufen. Bei t=100 schläft die Funktion 1 ms. */ inline void sleep(uint8_t t) { // countTimer2 wird in der ISR oben inkrementiert countTimer2 = 0; while (countTimer2 < t); } /** Schläft x-Millisekunden. */ inline void sleep_millisec(uint16_t msec) { uint16_t i; for(i=0; i<msec; i++) { sleep(100); } } --------------------------------------------------------------------------------
Ich wollte zufällig die gleiche Funktion wie im Beispiel. Das dann an dem Code alles falsch ist kann ich ja nicht wissen.
Falsch bei mir war : ISR statt SIGNAL, SIG_OUTPUT_COMPARE2 war auch falsch, statt TIMSK sthet bei mir TIMSK0, auch falsch,
statt OCR2 muss ich TCCR0A oder TCCR0B verwenden....
Also werde ich es mal mit den 2 Registen getrennt versuchen (TCCR0A &&TCCR0B)..... Mal sehen...
Danke![]()
Geändert von ooweberoo (05.03.2014 um 11:47 Uhr)
Hast du dir das Datenblatt überhaupt mal angesehen??@ Wsk8: Danke dir. Aber so wie du das geschrieben hast setze ich im Register (TCCR0A) von Timer 0 den
CTC- Modus und im Register (TCCR0B) von Timer 0 die entsprechenden Vorteilerbits ???
![]()
Hier ist alles eigentlich Idiotensicher aufgelistet.
Im Table 11-8 gibts nur einen CTC-Mode und hier ist nur das WGM01-Bit gesetzt. Keine Ahnung wie du hier auf was anderes kommen kannst. Und hier steht auch, dass der MAX Value im OCRA steht. WGM00 und 02 sind "0" und müssen daher nicht beachtet werden. Keine Ahnung warum du hier den Reserved Mode wählst, ergibt für mich keinen Sinn.
Zudem hab ich dir bereits einen zu 100% funktionierenden Code gepostet mit kurzer, prägnanter Erklärung. Vlt. solltest du den einfach 1 zu 1 kopieren, denn wie von Vorredner bereits gesagt, hast du es noch nicht mal geschafft andere Codeschnitzel richtig abzuschreiben und noch mehr Fehler eingebaut.
Und um µC zu programmieren, muss man gute C-Kenntnisse besitzen. Nur leider wird C nicht zu Unrecht als "Hochsprache" bezeichnet und ist nicht Vergleichbar mit SPS, dass jeder mal in nem 2 Tage Seminar locker lernt. Das braucht Jahre!!
mfg
Hallo,
nein das habe ich jetzt zum ersten mal gesehen.
Ich habe mich an das gehalten
![]()
und an
![]()
http://www.ne555.at/atmel-avr-mikroc...chnik/352.html
http://www.physik.uni-regensburg.de/...er_Counter.htm
http://www.mikrocontroller.net/articles/Uhr
http://www.mikrocontroller.net/artic...A4hler_des_AVR
Speziel an den ersten link hab ich mich gehalten.... dort wird es halt mit "CS02" gemacht.
Zudem bleib bitte sachlich ! behaltet euere inkompetenten äußerungen für euch.
weis nicht wieso ihr mich so angeht....wo liegt das problem?
ich beschäftige mich mit der sache und stelle sachliche fragen und bedanke mich auch jedesmal.....
echt das ist ganz unterste schublade....
Geändert von ooweberoo (05.03.2014 um 18:52 Uhr)
http://www.mikrocontroller.net/articles/FAQ#Timer
Dieser Artikel ist wirklich top geschrieben. Ich hatte am Anfang auch meine Probleme mit dem Datenblatt, aber eher, weils englisch ist. Dieser Artikel ist in deutsch geschrieben, und sehr anfängertauglich.
Auch SPS lernt man nicht in zwei Tagen, das wirst du wohl gut wissen, zumindest wenn man den vollen Funktionsumfang einer SPS nutzen will. Ist mit den Controllern nicht anders. Ich habe mich am Anfang gewundert, wie manch einer aus einem Attiny unglaublich viel rausgeholt hat. Gerade Interrupts sind eigentlich nicht ein Thema, mit dem man beginnt. Ich denke, du willst einfach zuviel auf einmal. Klar isses am Anfang affig, eine LED zum blinken zu bringen. Da fragt man sich schon erstmal, was das bringen soll. Aber damit lernst du einfach die Grundlagen, die du nicht wirklich bereit bist, zu lernen. Es reicht nicht, ein tutorial einfach mal grob durchzulesen. Versuche, die Beispiele zu verstehen, versuche die Beispiele zum laufen zu bekommen. Wenn das klappt, mach einfach mal ein paar Änderungen am Code. Wenns danach nicht mehr läuft, versuch zu verstehen, warum das so ist und bring deinen geänderten Code zum laufen. So und nicht anders wirst du Erfolg haben. Du musst ganz einfach anfangen, und zwar mit eigenem Code. Und dann freut man sich, wenn eine LED leuchtet, wenn man den Taster drückt. Wenn du den Luxus einer SPS haben willst, dann bleib dabei, den wirst du bei einem Controller nicht bekommen.
Dennis
Ich studiere die Wirkung der Sonnenstrahlen auf das Liebesleben der Pflastersteine
Hallo Dennis,
ich muss dir voll zustimmen. Danke das du erwähnst das das SPS programmieren ebenfalls nicht einfach ist.
Hab das mit den LED's usw. auch alles schon durch... sogar multiplexen war machbar....oder switch case statt die If Then Else Funktion... Die 7- Segmentanzeige hoch und runterzählen ging auch....
Nur die Sache mit dem Timer hat mich verzweifeln lassen.... lag auch daran das die Tutorials und die Beispielprozessoren unterschiedlich sind. Des Weiteren ist Englisch auch nicht meine Stärke was
das ohnehin komplexe Datenblatt noch komplexer werden lies. Der hellste bin ich auch nicht![]()
Gerade bei den Timern muss man die richtigen Register wählen.
Aber trotzdem besteht noch Übungsbedarf, daher geht es weiter mit Tutorials und Übungen...
Eigene Codes habe ich schon viel, vielleicht eher einfach was Profis zum lachen bringtaber voll funktionsfähig...
Momentan beschäftige ich mich mit array und Pointern um Programme kürzer zu gestalten...
Danke erstmal für deine / euere Hilfe!
Das Datenblatt ist schon komplex, keine Frage, aber ist auch logisch aufgebaut. Und da gibts auch für jeden Timer eine extra Kategorie, die du im Inhaltsverzeichnis des PDF anwählen kannst. Und am Ende dieser Kategorie gibts die Überschrift Register-Description, wurde hier schon von jemanden erwähnt und von dir ganz schnell ignoriert. Dort findest du alles wichtige zu den Registern nochmal zusammen gefasst. WEnn du nicht weist, was irgend ein Bit in so einem Register nun genau macht, hilft nur den Text davor lesen, da stehts genauer.
Dennis
Ich studiere die Wirkung der Sonnenstrahlen auf das Liebesleben der Pflastersteine
Lesezeichen