Forum: Mikrocontroller und Digitale Elektronik Tastverhältnis berechnen


von mpt (Gast)


Lesenswert?

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? :)

von mpt (Gast)


Lesenswert?

kann mir den keiner helfen? :(

von Karl H. (kbuchegg)


Lesenswert?

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.

von mpt (Gast)


Lesenswert?

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 :)

von mpt (Gast)


Lesenswert?

Leute wo seid ihr

von Ingo (Gast)


Lesenswert?

Warum nimmst du nicht das Period-Register für die Frequenz und dass CCx 
Register für den Tastgrad!

Zeig mal den Code...

von Uwe (de0508)


Lesenswert?

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
von Besserwisser (Gast)


Lesenswert?

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.

von mpt (Gast)


Lesenswert?

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 :)

von mpt (Gast)


Lesenswert?

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

von LFU (Gast)


Lesenswert?

Sandbox?

von Karl H. (kbuchegg)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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
von mpt (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.