Hallo! Ich muss mithilfe des EBI ein Blinklicht realisieren. Dabei sind für die vier Tasten auch Tastverhältnisse gegeben. z.b. 50Hz auf einem der Tasten mit einem Tastverhältnis von 1:4 Ich benutze den WGMODE und zwei Capture/Compare-Channels. Dabei benutze ich die Formel vom AMANUAL z.b bei 2MHz Clock und 50Hz Blinklichtfrequenz: CCA-Wert: (Clk/(2*Prescaler64))-1=624 nun für den zweiten Timerwert z.b. für die 1:4 muss ich jetzt was tun? mit 4 multiplizieren? Kann mir jemand das ekrlären? :)
Ich kann nur für mich sprechen. Aber in dieser Eigenschaft sage ich: Deine Anfrage ist komplett unverständlich. Das fängt schon ganz am Anfang an: Was ist ein EBI? Und es zieht sich durch den kompletten Rest der Anfrage durch.
ok ich versuche es nochmal: Mit EBI meine ich den External Bus Interface auf dem Atxmega. Die oben erwähnten LEDS und Tasten befinden sich auf einem FPGA Board und eben diese muss ich ansprechen. Entsprechend der vier Tasten auf dem Peripheriegerät soll auf dem LED ein Blinklicht realisiert werden. Die jeweilige Frequenz wird solange ausgegeben, bis mit einem erneuten Tastendruck eine neue Frequenz gewählt wird. Z.B: Beim Drücken der Taste 1 lautet die Frequenz des Blinklichts 50Hz mit einem Tastverhältnis von 1:4. Die Implementierung hätte ich schon, allerdings habe ich für alle Tasten als Tastverhältnis 1:1 benutzt, weil mir eben die Berechnung nicht so ganz klar ist. Für die beiden verciedenen Timertopwerte verrursacht durch die Tastverhältnisse, benutze ich den CCA und den CCB. Für den CCA-Wert benutze ich die Formel aus dem Atmega Manual (z.b. Clk=2MHz, Prescaler=64, Frequenz des Blinklichts=50Hz): CCA-Wert: (Clk/(2*Prescaler64))-1=624 624 ist mein CCA-Wert nun wie muss ich vorgehen um den Wert für CCB zu erhalten (Tastverhältnis 1:4). Mit 4 multiplizieren? oder dividieren? Ich hoffe, dass meine Anfrage jetzt etwas verständlicher ist :)
Warum nimmst du nicht das Period-Register für die Frequenz und dass CCx Register für den Tastgrad! Zeig mal den Code...
mpt ich sage mal so: ein Tastverhältnis von 1 zu 4 bedeutet: 1 Zeiteinheit an, dann 3 Zeiteinheiten aus, also insgesamt t = 4 Zeiteinheiten = 100%, das entspricht 1/t deiner Frequenz. Also jetzt kommt der Mathematiker von Dir in's Spiel: Frequenz f = 50Hz 4 Zeiteinheiten = 1/f = 1/50Hz = 20ms 1 Zeiteinheit = (1/f) /4 = 20ms /4 = 5ms Gegenrechnung: 5ms an -- 15ms aus = 20ms Zykluszeit hehe passt ! - das hast du gut gemacht.
:
Bearbeitet durch User
Hallo mpt, etwas ungeduldig bist Du schon, oder? Zudem ist die Ausgangsfrage nicht sehr leicht zu durchschauen. Und zuletzt kann ich mich nur Ingo anschließen und nach Deinem Code fragen. Hier mal ein konkreter Anhaltspunkt wie man es machen kann http://www.stromflo.de/dokuwiki/doku.php?id=xmega-c-tutorial#pwm http://www.stromflo.de/dokuwiki/doku.php?id=xmega-c-tutorial#beispiel_zur_single_slope_pwm Im Prinzip wird das PER-Register für die Frequenz und das CCx-Register für das Tastverhältnis genommen.
Uwe S. schrieb: > Also jetzt kommt der Mathematiker von Dir in's Spiel xD
1 | ;beispielfrequenz 50Hz, 2Mhz Clock, 64 Prescaler |
2 | .equ KEY0_CCA=624 |
3 | .equ KEY0_CCB=624/4 ;ich glaube jetzt habe ich es verstanden oder? |
4 | |
5 | BLINK_1: |
6 | ldi gTemp, low(KEY0_CCA) ;load low and high bits to our register |
7 | sts TCE0_PER,gTemp |
8 | ldi gTemp, high(KEY0_CCA) |
9 | sts (TCE0_CCA+1),gTemp ;finally put them back to the CCA register to set a new TOP value |
10 | |
11 | ;second timer value for duty cycle value |
12 | |
13 | ldi gTemp, low(KEY0_CCB) |
14 | sts TCE0_PER,gTemp |
15 | ldi gTemp, high(KEY0_CCB) |
16 | sts (TCE0_CCB+1),gTemp |
17 | |
18 | ret |
Im CCA Interrupt schalte ich dann die LEDs an und im CCB Interrupt die LEDs aus Ingo schrieb: > Warum nimmst du nicht das Period-Register für die Frequenz und dass CCx > Register für den Tastgrad! wäre wahrscheinlich klüger gewesen Besserwisser schrieb: > etwas ungeduldig bist Du schon, oder? will die Übung vor dem 31. fertig haben und wollte daher verhindern, dass die Anfrage untertaucht :)
habe das Codestück schon gepostet, aber jetzt kommt keine Antwort mehr xD und was bedeuet es im umgedrehten Fall hab? also sprich 4:1 statt 1:4? 4 Zeiteinheiten an und 1 Zeiteinehit aus? in diesem fall wäre die intialsierung dann so?
1 | .equ KEY0_CCA=624/4 |
2 | .equ KEY0_CCB=624 |
mfg
Uwe S. schrieb: > ein Tastverhältnis von 1 zu 4 bedeutet: > > 1 Zeiteinheit an, dann 3 Zeiteinheiten aus, 1 Zeiteinheit an, 4(!) Zeiteinheiten aus. Denn sonst würde ein Tastverhältnis von 1:1 keinen Sinn ergeben. 1:1 ist aber 50% ein und 50% aus. Also einfach die Summe der beiden Zahlen, und die Zahlen geben den jeweiligen Anteil an.
mpt schrieb: > .equ KEY0_CCA=624/4 > .equ KEY0_CCB=624[/c] Selbst wenn das /4 richtig wäre: Du scheinst nicht verstanden zu haben, was du da eigentlich einstellst. Mit CCA stellst du die komplette Zeit ein (also: über alles). Mit CCB stellst du den 'An'-Anteil davon ein. (Wenn ich den Rest richtig interpretiere) 1:4 sind in Summe 5 d.h. der An-Anteil ist 1/5 .equ KEY0_CCA=624 .equ KEY0_CCB=624/5 4:1 sind in Summe ebenfalls 5 Aber diesmal ist der An-Anteil dann eben 4/5 .equ KEY0_CCA=624 .equ KEY0_CCB=4*624/5
:
Bearbeitet durch User
Karl Heinz schrieb: > Denn sonst würde ein Tastverhältnis von 1:1 keinen Sinn ergeben. 1:1 ist > aber 50% ein und 50% aus. jetzt hat sich für mich dieses Phänomen jetzt auch geklärt :) danke Karl Heinz schrieb: > Du scheinst nicht verstanden zu haben, was du da eigentlich einstellst. > Mit CCA stellst du die komplette Zeit ein (also: über alles). Mit CCB > stellst du den 'An'-Anteil davon ein. da hast du Recht, so ganz klar war mir das nicht. Aber jetzt versteh ich was ich tue :) danke
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.