Hallo, hab keine Ahnung von dem Programm. Welchen Wert bekomme ich wenn ICR1=0x08FF ist? Mit Wert meinte ich Schrittweite. Danka im voraus.
Zur Berechnung der Schrittweite braucht man eine Angabe, in welchem Modus der Timer1 betrieben wird. Dann kann man die Schrittweite in Takten ausrechnen. Wenn man zusätzlich die Taktrate kennt, kann man die Schrittweite in (Milli-, Mikro-) Sekunden ausrechnen. Ohne die Zusatzangaben kann man nix ausrechnen.
ATmega8 programm schrieb: > Hallo, > hab keine Ahnung von dem Programm. Von welchem Programm > Welchen Wert bekomme ich wenn ICR1=0x08FF ist? Dann steht in ICR1 der Wert 0x08FF. Dezimal ist das 2303. > Mit Wert meinte ich Schrittweite. > Danka im voraus. Gut, dass du der einzige bist, der ein Programm geschrieben hat oder analysiert. So wissen alle sofort, wovon du eigentlich redest.
Hallo. Ich habe keine Ahnung von meinem Auto. Wie weit komme ich, wenn ich in den Tank hab ich 23,17L Benzin rein gefüllt habe? Mit weit meinte ich die Kilometerzahl. sorry, could not resist to say that... Zeig mal dein Programm her! Dann sehen wir mal weiter. Welchen Prozessor benutzt du? mfg mf
Dazu hab ich auch eine Frage: wenn ich: ICR1 = 0xAFC8 (Dezimal 45000) setzte, zählt der Timer nur bis 45000 und hört dann auf, oder zählt er auch weiter? Das ICR1-Register ist mir nach wie vor ein Rätsel, obwohl ich einige Beiträhe dazu gelesen habe. Kann mir jmd genau sagen, wann man ihn braucht (nur für PWM oder allgemein für Timer zum zählen) ohne mir gleich an den Kopf zu werfen, es selber heraus zu finden. Danke
ICR1 hat je nach Timermodus unterschiedliche Funktionen, siehe Tabelle im Datenblatt. Ältere Timer-ICs hatten teilweise noch einen One-Shot-Modus. Der AVR aber nicht. Du mußt also den Timer per Befehl abschalten, wenn Du es willst. Vermeidet man aber, wenn möglich, da dadurch die Genauigkeit schlechter wird (Befehle kosten zusätzliche Zeit, die die Messung verfälscht). Die gebräuchliche Methode sind daher durchlaufende Timer. Ein Anhalten ist auch garnicht nötig, da man zusätzliche Compareinterrupts hat. Damit kann man dann Zeitdifferenzen präzise erzeugen. Peter
Und nochwas (weil man es immer wieder sieht) ICR1 = 0xAFC8 (Dezimal 45000) wenn du dir daneben sowieso 45000 dazuschreibst, weil diese Zahl als Dezimalzahl für dich eine bestimmte Bedeutung hat, die sich dir als Dezimalzahl erschliesst als Hexadezimalzahl aber nicht, dann schreib es halt um Gottes Willen gleich als Dezimalzahl in die Anweisung! ICR1 = 45000; ist perfekt. Ob du eine Zahl als Dezimalzahl, als Hexadezimalzahl als Binärzahl oder sonst irgendwie anders schreibst (zb als ASCII Code) ist eine Frage dessen, was im gegebenen Zusammenhang für dich als Programmierer das Klarste ist! Für den Compile bzw. für den µC ist das einfach nur eine Zahl, egal mit welcher Notation du sie schreibst. Du wählst die Notation (Dezimal, Hex, Binär) danach aus, was deiner Ansicht nach an dieser Codestelle die Absicht am besten rüberbringt. if( Sekunden == 60) das versteht jeder sofort, worum es da geht. Denn jeder weiß, dass 60 Sekunden genau 1 Minute sind. Bei if( Sekunden == 0x3C) werden wohl die meisten erst mal überlegen bzw. zum Taschenrechner greifen müssen um zu erkennen, dass 0x3C einfach nur die hexadezimale Schreibweise für 60 ist. D.h. du verlangst hier von deinem Leser einen zusätzlichen, völlig unnötigen Schritt, den er machen muss um die Absicht an dieser Stelle zu verstehen. Die Schreibweise als Dezimalzahl ist an dieser Stelle daher die bei weitem natürlichere Schreibweise und wird daher bevorzugt. Wenn du eine Zahl dadurch 'erklären' musst, indem du sie im Kommentar in einer anderen Schreibweise (andere Basis) hinschreibst, dann spar dir das und schreib sie halt gleich in der richtigen Basis. Irgendwie scheint da die Meinung zu existieren, man können Zuweisungen an Register nur in Form von Hexadezimalzahelen machen. Registern werden Binärmuster zugewiesen! Diese Muster können durch Zahlen ausgedrückt werden. Und diese Zahlen kann man wiederrum in unterschiedlichen Notationen schreiben. Hex-, Dez-, Binär sind einfach nur verschiedene Schreibweisen. Nicht mehr! Da steckt sonst nichts dahinter.
> Wenn du eine Zahl dadurch 'erklären' musst, indem du sie im Kommentar in > einer anderen Schreibweise (andere Basis) hinschreibst, dann spar dir > das und schreib sie halt gleich in der richtigen Basis. Und du schreibst jetzt so eine lange Antwort, nur zu erklären, was ich schon lange weiß? Wieso machst du dir überhaupt so eine Mühe? Denn die ganze schei** hättest du dir sparen können, beantwortet tut es meine Frage ja nicht! Mal ganz ehrlich, wenn der Sinn einer solchen Community besteht Leute gleich eins rein zu drücken, dann haben sie mit dir den richtigen gefunden, was??
Bernd schrieb: >> Wenn du eine Zahl dadurch 'erklären' musst, indem du sie im Kommentar in >> einer anderen Schreibweise (andere Basis) hinschreibst, dann spar dir >> das und schreib sie halt gleich in der richtigen Basis. > > Und du schreibst jetzt so eine lange Antwort, nur zu erklären, was ich > schon lange weiß? Warum schreibst du dann sowas? ICR1 = 0xAFC8 (Dezimal 45000) > Wieso machst du dir überhaupt so eine Mühe? Weil ich denke, dass du einen Scheiss weißt. > beantwortet tut es meine Frage ja nicht! Deine Frage war schon längst beantwortet.
Hi >Und du schreibst jetzt so eine lange Antwort, nur zu erklären, was ich >schon lange weiß? Dein Code lässt das nicht vermuten. >Mal ganz ehrlich, wenn der Sinn einer solchen Community besteht Leute >gleich eins rein zu drücken, dann haben sie mit dir den richtigen >gefunden, was?? Schlechten Tag gehabt? Bei AVRs kann das ICRn-Register 1. Bei einem Pegelwechsel an ICPn den Zählerstand des Timers speichern. Gleichzeitig kann ein Interrupt ausgelöst werden. und 2. als Topwert des Timers bei CTC und PWM fungieren. Damit bestimmt ICRn die Auflösung und Freqenz. MfG Spess
> Weil ich denke, dass du einen Scheiss weißt. > >> beantwortet tut es meine Frage ja nicht! > Deine Frage war schon längst beantwortet. An der Stelle Danke Herr Klugscheißer
> > Schlechten Tag gehabt? Wie kommst du darauf? Mich stört es, wenn sich Leute meinen aufspielen zu müssen, mehr nicht.
Bei AVRs kann das ICRn-Register > > 1. Bei einem Pegelwechsel an ICPn den Zählerstand des Timers speichern. > Gleichzeitig kann ein Interrupt ausgelöst werden. > > und > > 2. als Topwert des Timers bei CTC und PWM fungieren. Damit bestimmt ICRn > die Auflösung und Freqenz. > > MfG Spess Ah, und danke für die Antwort.
Hi >Wie kommst du darauf? Mich stört es, wenn sich Leute meinen aufspielen >zu müssen, mehr nicht. Hat Karl-Heinz weder gemacht noch hat er es nötig. MfG Spess
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.