Timer für AVR ATtiny84 oder ander allgemein in C
Hallo Leute brauche mal bitte Hilfe,
habe eine ATtiny84V10PU und möchte einfach nur einen Timer in abhängigkeit der Taktfrquenz laufen lassen und Überläufe zählen. Habe mir auch das Tutorial hier im Roboternetz (und viele andere) angeschaut und muss es als unbefriedigend bewerten. Wenn man in einem Tutorial schon Wissen vorraussetzt braucht man auch kein Tutorial machen:(:confused::(
Das hat nichts mit der Sprache C an sich zu tun, sind ja einfach nur Befehle an den Chip. Verstehe nicht wie man so eine einfache Sache so umständlich dumm gestalten kann. Für eine SPS ist das so einfach in AWL z.B.
U E 6.0
FR T1
L S5T#10S
SI T1
UE 5.5
R T1
Fertig
Was bedeutet z.B. das "SIGNAL(SIG_OUTPUT_COMPARE0A)" dazu finde ich nichts im Datenblatt des Chips, oder diese Befehle "SIGNAL(TIMER1_CAPT_vect)", "SIGNAL(TOIE0)", "SIGNAL(TIMER1_CAPT_vect_num)" ???
AVR Kauderwelsch:(? Scheinen Pointer zu sein aber was machen die da?
Alles was ich bis jetzt hin bekommen habe sieht so aus (CTC Mode):
-----------------------------------------------------------------
#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU 1000000UL //max. Takt ATtiny84
SIGNAL(SIG_OUTPUT_COMPARE0A)
{
TCNT0++;
}
TCCR0A = (1<<CS20) | (1<<WGM02); //Prescaler von 1 | CTC-Modus, ATtiny84 hat keine Prescaler Funktion ? richtig?
OCR0A = 10000;
TIMSK |= (1<<OCIE2); //Befehl aus Roboternetz Tutorial soll Interrupts aktivieren und damit Timer starten, bei mir Funktionirt es nicht
sei();
int main(void)
{
while(1)
{
}
}
-------------------------------------------------------------------
Der Code ist fehlerhaft, denke es liegt am Behehl TCCR0A. Aber was muss dort stehen für den CTC Mode zu starten???
Für mich liest sich der Code wie die Aussage eins Opfers das zusammengeschlagen wurde und versucht zu erklären was Gestern geschehen ist:o
Kann mir mal jemand helfen und mal die Struktur bzw. Syntaxablauf eines Timer erklären wie z.B.
Timer freigeben
Timer aufrufen " T1"
Timerwert setzen zB. 0 oder 20...
Timerfunktion wie CTC, Einschaltverzögert usw.
Vergleichswert für max. Zählwert festlegen z.B. 10000
Befehl was beim erreichen von 10000 geschehen soll z.B. LMW 10, R T1, = A 4.0...
So ein Ablauf der bei jedem Chip gleich ist und immer eingehalten werden muss und nur unterschiedliche Befehle aufweist da unterschiedliche Chips...
Kann jemand helfen.... do kend ich beklobbd were.....
??:confused: :confused: :confused: :confused: :confused:
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
@Wsk8: Zunächstmal Danke aber ich kann kein # finden. Anhang 27665 hier mal ein Bild von meinem Editor Menue. Wo ist da die Raute?
Mein AVR Studio schlägt mir immer "TIMER0_COMPA_vect" vor, dachte dann würde es den Befehl auch geben. Aber dein Timer Beisiel war trotzdem sehr
hilfreich für mich\\:D/.
@Besserwissi: Danke für die info. Bei mir muss das ein anderer Ordner sein, diese Verzeichnisse gibt es bei mir nicht:( TIM0_COMPA_vect bzw. TIM0_OVF_vect
erzeugt gerade keine Fehler oder Warnungen. Ich probiere und melde mich dann nochmal. :pray:Danke !
@derNeue: Danke! Ja es ist ein sehr gutes Programm.
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
@ 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 ???
Hast du dir das Datenblatt überhaupt mal angesehen??
Anhang 27674
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
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,
nein das habe ich jetzt zum ersten mal gesehen.
Ich habe mich an das gehalten
Anhang 27676
und an
Anhang 27677
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....
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ok, als Anfänger gibt es eben noch viel zu lernen.... ich bin jedoch forh das ich erstmal die gewünschte Funktion umsetzten konnte...
Entprellen wollte ich sowieso, hatte ich vergessen zu erwähnen :o
Ein weit aus größeres Problem stellt für mich der externe Quarz dar. Ich will mich mit falsch gesetzten Fusebits nicht aus dem µC
aussperren. Wollte eine 10MHz Quart mit 2X 22pF Kondensatoren nutzen. Gleicher Takt wie der interne Quarz.
Leider werd ich aus den Fusebits nicht ganz schlau...hab nur ein 8 Bit Fusebit Register....:?
Wenn du dazu vielleicht noch etwas weist ?:oops:
Einmal den Haken falsch gesetzt und das wars dann.... blöde Sache.... so sieht mein Fusebit Register aus!
Anhang 27809