Hallo Leute, habe ein Problem. Ich versuche ein Rechtecksignal am OC2 zu erzeugen. Die Frequenz will ich verändern können von 1 bis 100 Hz. Muss alles nicht so besonders genau sein! Problem ich weiß nicht wie man den MAX value verstellt. Beim Timer 1 mit OC1A und OC1B kein Problem. Aber wie mache ich es beim Timer2? Das habe ich: . . . void init(void) { TCCR2 = (1<<WGM20) | (1<<COM21) | (1<<CS22) | (1<<CS21); } . . . OCR2=variable; die Variable kann ich ohne Problem verändern um einen beliebigen Tastgrad einzustellen. Ich habe mit dem TCNT2 Register herumprobiert. Komme aber auch nicht darauf für was dieses Register ist. Hoffe mir kann jemand helfen.
Peter schrieb: > Hoffe mir kann jemand helfen. Ja, das Datenblatt. Da sind alle Register und deren Bits genauestens erklärt. ...
Im Datenblatt habe ich natürlich nachgeschaut! Ich kann aber nichts über den Max value finden. Beim Timer1 habe ich das über OCR1A und B gelöst. Welche alternative gibt es beim Timer2?
Peter schrieb: > Im Datenblatt habe ich natürlich nachgeschaut! Ich kann aber > nichts über > den Max value finden. Beim Timer1 habe ich das über OCR1A und B gelöst. > Welche alternative gibt es beim Timer2? hängt vom verwenden Timer Modus ab, dafür steht im DB eine Formel und diese kann man einfach umstellen. Werde also bitte etwas genauer.
Ja genau Tastgrad und Frequenz. Befinde mich im Mode 1: PWM, Phase Correct Bei Timer 1 funktioniert das so. Bei Timer 2 weiß ich es nicht. Über den CTC Mode könnte es eventuell gehen jedoch bekomme ich den nicht zum laufen.
Peter schrieb: > Ja genau Tastgrad und Frequenz. Öh ... Aha. > [...] > Über den > CTC Mode könnte es eventuell gehen jedoch bekomme ich den nicht zum > laufen. Ach soooo. Ja, das ist doch kein Wunder. Wir haben Halbmond, Mensch. Genaue Datenblattlektüre, Problemanalyse, etcpp. helfen erst wieder bei Vollmond. Aber Vorsicht: Immer ein Blättchen Waldmeister dabei haben. Sonst gibts Schorf.
OK. Da habe ich mir mit viel Mühe und Selbstverleugnung dieses intellektuelle Gelaber abgequetscht. Meine wahre Ansicht: Ääääätsch!
Peter schrieb: > Bei Timer 2 weiß ich es nicht. Über den > CTC Mode könnte es eventuell gehen Was ist an dieser Tabelle nicht zu verstehen? Mode 2, CTC, Zählumfang (Periode, Kehrwert der Frequenz) in OCR2. Tastgrad gibt es nicht, da Timer2 nur ein OCR-Register hat. Pech gehabt, falscher Controller. Du kannst nur das benutzen, was Du auch gekauft hast. Mit dem Nachfolger ATmega324 sollte das gehen, der hat zwei Compare-Einheiten an Timer2. ...
Dann will ich wenigstens die veränderbare Frequenz im CTC hinbekommen. Wenn ich im CTC Mode die compare interrupt Einheit zulassen will also: TIMSK |= (1<<OCIE2); Stürtzt immer genau an dem Punkt mein LCD ab. Woran kann das liegen?
Meinst du nicht das es sehr schwer ist dir zu helfen wenn du deine Code hier nicht postest ? Die Kristallkugel ist leider derzeit defekt. Und ohne den Code ist immer Zeile 42 schuld, ist halt so. Gruß JackFrost
Bastian W. schrieb: > ist immer Zeile 42 schuld, ??? Auch bei einem 20-Zeiler?
1 | ;Datumsdifferenz |
2 | If OpenWindow(0, 0, 0, 430, 255, "Datumsdifferenz...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) |
3 | CalendarGadget(1,10,30,200,180) |
4 | CalendarGadget(2,220,30,200,180) |
5 | TextGadget(3,10,220,410,25,"",#PB_Text_Border|#PB_Text_Center) |
6 | TextGadget(4,10,5,200,25,"Von",#PB_Text_Center) |
7 | TextGadget(5,210,5,200,25,"Bis",#PB_Text_Center) |
8 | Repeat ;Hauptschleife |
9 | Event = WaitWindowEvent(20) ;Ereignis (Benutzerhandlung) sichern |
10 | evnu=EventGadget() ;Nummer des bedienten Schaltelements sichern |
11 | If Event =#PB_Event_Gadget ;wurde eine Schaltfläche betätigt? |
12 | Select evnu ;ja, welche Schaltfläche wurde betätigt? |
13 | Case 1,2 |
14 | diff=(GetGadgetState(2)/86400)-(GetGadgetState(1)/86400) |
15 | SetGadgetText(3,"Differenz = "+Str(diff)+" Tage...") |
16 | EndSelect |
17 | EndIf |
18 | Until Event = #PB_Event_CloseWindow ;Ende Hauptschleife |
19 | EndIf ;Programm-Fenster wurde geschlossen |
20 | End ;Programmende |
;-) ...
:
Bearbeitet durch User
Hast Reecht! Hier der Code. Habe alles relevante drinne denk ich. Wollte nicht alles reinmachen der ist lang... #define F_CPU 16000000UL #include <util/delay.h> #include <avr/io.h> #include "lcd-routines.h" #include <stdint.h> #include <stdio.h> #include <avr/interrupt.h> . . // Prototypen Unterprogramme . int main(void) { . // Unterprogramme zum initialisieren von ports lcd usw. . . sei(); while(1) { . . // Hauptprogramm . }} void init_timer2(void) { TCCR2 = (1<<WGM21) | (1<<COM21) | (1<<CS22) | (1<<CS21) | (1<<CS20); TIMSK |= (1<<OCIE2); } void paket(...) { OCR2=variable; // variable wird aus adc0 und anderen faktoren berechnet und liegt zwischen 0 und 255. } ISR (TIMER2_COMP_vect) { PORTD ^= (1<<PD7); }
Peter schrieb: > Die Frequenz will ich verändern können von 1 bis 100 Hz. Das sollte man eigentlich ganz gut in Software hinbekommen. Also (zeitmäßig gesehen) kleinstes gemeinsames Vielfaches mit Timer erzeugen und Periodendauer und Tastgrad daraus abzählen. Tau Ceti Mu schrieb: > DU DEPP! Sowas sagt man nicht, da muss jeder Betroffene selbst drauf kommen... ;-) ...
Hannes L. schrieb: [...] > Tau Ceti Mu schrieb: >> DU DEPP! > > Sowas sagt man nicht, da muss jeder Betroffene selbst drauf kommen... > ;-) Bin ich doch! Darauf gekommen, meine ich.
Tau Ceti Mu schrieb: > Bin ich doch! Darauf gekommen, meine ich. Achso, aber woher sollte ich wissen, dass Du das "DU" in der ersten Person gemeint hast... ;-) ...
Hannes L. schrieb: > Tau Ceti Mu schrieb: >> Bin ich doch! Darauf gekommen, meine ich. > > Achso, aber woher sollte ich wissen, dass Du das "DU" in der ersten > Person gemeint hast... ;-) Nun, das konntest Du so verstehen und doch konnte und kann Dir, von jedem Verständigen, alle nötige und tunliche Sorgfalt beim lesen und erfassen des Geschriebenen nachgesagt und bescheinigt werden. Die Sprache jedoch, ist ein trügerisches Ding, die das, was uns klar scheint, verbergen und was uns verborgen scheint, klar erscheinen lassen kann. Ein wenig zusätzliche Beleuchtung schien mir angebracht.
Tau Ceti Mu schrieb: > Die Sprache jedoch, ist ein trügerisches Ding, Das ist wohl wahr! Schönen ersten April noch und schönes Wochenende... ...
Spiel ich halt mit mir selbst. Wohlgemerkt, "mit mir", ihr kleinen Dreckfinken.
Peter schrieb: > Hast Reecht! Hier der Code. Habe alles relevante drinne denk ich. Wollte > nicht alles reinmachen der ist lang... Wenn der Code recht lang ist dann häng einfach die C/CPP Datei + Header an den post dran. Leider ist der Fehler oft in dem Teil der nicht gepostet ist. Gruß JackFrost
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.