Forum: Mikrocontroller und Digitale Elektronik AVR: PWM "takten"


von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Hallo zusammen,

ich werd grad aus dem Datenblatt des ATmega328P nicht ganz schlau, und 
hoffe auf eure Hilfe: mit einem Timer im PWM-Modus und dem Output 
Compare Ausgängen möchte ich ein Rechtecksignal (~400 Hz) erzeugen, 
soweit kein Problem, schon tausendmal gemacht. Nun soll dieses Signal 
selbst ein- und ausgeschaltet werden (mit ca. 1 Hz), im eingeschalteten 
Zustand sollen die 400Hz am Pin anliegen, im ausgeschalteten Zustand 
soll der Pin hochohmig sein.

Idealerweise soll beim Umschalten der Timer nicht angefasst werden, 
sondern einfach weiterlaufen.

Reicht es dafür, einfach den Pin per DDR von Aus- auf Eingang 
umzuschalten?


Danke, Michi

von Falk B. (falk)


Lesenswert?

@Michael Reinelt (fisa)

>Reicht es dafür, einfach den Pin per DDR von Aus- auf Eingang
>umzuschalten?

Nein. Du musst die COMxy Bits löschen, dann wird der OCR Ausgang vom 
Timer getrennt.

von Stephan B. (matrixstorm)


Lesenswert?

Michael Reinelt schrieb:
> Reicht es dafür, einfach den Pin per DDR von Aus- auf Eingang
> umzuschalten?

Jap.
Ggf. koennte man aber noch zudem (nach den "als Input setzten") den 
Timer ausschalten. Dies reduziert Verbrauch und EMV.

Beim Einschalten wieder erst Timer an, dann DDR...

MfG

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Michael Reinelt schrieb:
> Reicht es dafür, einfach den Pin per DDR von Aus- auf Eingang
> umzuschalten?

Falk Brunner schrieb:
> Nein.

Stephan B. schrieb:
> Jap.

Hmmm...

von Stephan B. (matrixstorm)


Lesenswert?

Wenn der PIN kein OUTPUT mehr ist, laueft die PWM zwar weiter - wird 
aber nicht mehr nach aussen gelegt.
Da bin ich mir eigentlich ziemlich sicher.
(Habe frueher immer vergessen PORTs auf Ausgang zu schalten und mich 
dann immer gefragt warum nichts passiert. Schmerzlernen also!)

Im Zweifel teste es doch einfach mal...

MfG

von MWS (Gast)


Lesenswert?

Stephan B. schrieb:
> Wenn der PIN kein OUTPUT mehr ist, laueft die PWM zwar weiter - wird
> aber nicht mehr nach aussen gelegt.
> Da bin ich mir eigentlich ziemlich sicher.

Der dürfte dann die PWM immer noch über den internen Pullup treiben, d.h 
da geht schon noch was raus, wenn auch nur mit geringer Leistung. Ob die 
nachfolgende Stufe das dann verwertet, kommt sehr auf deren 
Eingangsempfindlichkeit an.

Falk hat bereits die korrekte Vorgehensweise beschrieben.

von Falk B. (falk)


Lesenswert?

"The COMnA1:0, COMnB1:0, and COMnC1:0 control the Output Compare pins 
(OCnA,
OCnB, and OCnC respectively) behavior. If one or both of the COMnA1:0 
bits are writtento one, the OCnA output overrides the normal port 
functionality of the I/O pin it is connected to. If one or both of the 
COMnB1:0 bits are written to one, the OCnB output overrides the normal 
port functionality of the I/O pin it is connected to. If one or both of 
the COMnC1:0 bits are written to one, the OCnC output overrides the 
normal port functionality
of the I/O pin it is connected to. However, note that the Data Direction 
Register (DDR) bit corresponding to the OCnA, OCnB or OCnC pin must be 
set in order to enable the output driver."

Ok, dann reicht wohl wirklich, DDRx zu ändern, wenn man nur auf Tristate 
umschalten will.

von Falk B. (falk)


Lesenswert?

@MWS (Gast)

>> Wenn der PIN kein OUTPUT mehr ist, laueft die PWM zwar weiter - wird
>> aber nicht mehr nach aussen gelegt.
>> Da bin ich mir eigentlich ziemlich sicher.

>Der dürfte dann die PWM immer noch über den internen Pullup treiben,

Theoretisch möglich, praktish eher unwahrscheinlich. Muss man mal 
prüfen.

von Spess53 (Gast)


Lesenswert?

Hi
>>Der dürfte dann die PWM immer noch über den internen Pullup treiben,

>Theoretisch möglich, praktish eher unwahrscheinlich. Muss man mal
>prüfen.

Unter den 'Alternate Functions of Port B' Steht auch z.B.:

OC1A, Output Compare Match output: The PB1 pin can serve as an external 
output for the
Timer/Counter1 Compare Match A. The PB1 pin has to be configured as an 
output (DDB1 set (one)) to serve this function. The OC1A pin is also the 
output pin for the PWM mode timer
function.

MfG Spess

von Stephan B. (matrixstorm)


Angehängte Dateien:

Lesenswert?

Hallo nochmal.

In meinem kleinen Bsp. fuer tinyUSBboard (atmega8) funktioniert es wie 
von mir zuvor beschriben. Quellcode haengt bei.

MfG

von MWS (Gast)


Lesenswert?

Spess53 schrieb:
> Unter den 'Alternate Functions of Port B' Steht auch z.B.:
>
> Timer/Counter1 Compare Match A. The PB1 pin has to be configured as an
> output (DDB1 set (one)) to serve this function.

Ja, richtig, der Pullup ist unabhängig davon, er kann bei OCnx = Eingang 
umgeschaltet werden.

Zusätzlich steht's auch noch bei der Timer-Beschreibung:
> The Data Direction Register bit for the OC1x pin (DDR_OC1x) must be set
> as output before the OC1x value is visible on the pin.

von c-hater (Gast)


Lesenswert?

Michael Reinelt schrieb:

> Reicht es dafür, einfach den Pin per DDR von Aus- auf Eingang
> umzuschalten?

Ja.

Allerdings (daher rührt wohl auch zumindest ein Teil der gegenteiligen 
Meinungen, diese Leute haben wohl das Problem einfach nicht erkannt): 
Der Pin wird dadurch wirklich nur hochohmig.

Das ist unkritisch, wenn ein Stromverbraucher an den Pin angeschlossen 
ist, etwa eine LED oder ein bipolarer Transistor. Da kommt kein Strom 
mehr, also Ende der Geschichte.

Wenn aber als Treiber ein FET angeschlossen ist und im Moment des 
Hochohmig-Schaltens dieser FET angesteuert war, dann BLEIBT er erstmal 
angesteuert. Das Signal behält nämlich sein Potential, weil an beiden 
Enden jetzt was hochohmiges ist. Und das tut es für seeehr lange Zeit.

Ist der FET z.B. das Schaltglied eines DC-Wandlers, führt das in aller 
Regel dazu, daß irgendwas abraucht. Es sei denn, man hat das Problem 
erkannt und mit einem Widerstand von ca. 100k Richtung "inaktives 
Potential" für diesen Fall vorgesorgt...

von Peter D. (peda)


Lesenswert?

MWS schrieb:
> Der dürfte dann die PWM immer noch über den internen Pullup treiben, d.h
> da geht schon noch was raus, wenn auch nur mit geringer Leistung.

Nein, der Pullup wird immer nur über das PORTx.y Bit gesteuert, nicht 
über die Alternativ-Funktion.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Danke euch allen!

ich glaub ich hab gelesen was ich lesen wollte :-)

Und ja, ich will den Ausgang wirklich hochohmig. Die 400Hz sollen per 
Kondensator als Tonsignal aufgeschaltet werden, und da will ich ohne Ton 
wirklich hochohmig.


lg Michi

von Peter D. (peda)


Lesenswert?

In der NF-Technik ist hochohmig unerwünscht.
Es gibt reichlich Bands, die Aufnahmen versaut haben, weil sie 
irgendeinen offenen Eingang vergessen haben, runter zu regeln.
Rauschen, Brummen, Schaltimpulse als Hintergrund sind dann die Folge.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Peter Dannegger schrieb:
> In der NF-Technik ist hochohmig unerwünscht.
> Es gibt reichlich Bands, die Aufnahmen versaut haben, weil sie
> irgendeinen offenen Eingang vergessen haben, runter zu regeln.
> Rauschen, Brummen, Schaltimpulse als Hintergrund sind dann die Folge.

Da hast du recht, aber da mach ich mir weniger Sorgen: "dahinter" sind 
alte analoge Telefone, und die sind hoffentlich niederohmig genug.

Es geht um die Einspeisung von Signaltönen (Frei, besetzt, ruft) in 
meine "Micro-Telefonanlage"

von Peter D. (peda)


Lesenswert?

Michael Reinelt schrieb:
> Es geht um die Einspeisung von Signaltönen

Dann ist es günstiger, das Siganl definiert auf low zu setzen. Dazu 
änderst Du einfach den Pinmodus von toggle auf clear bzw. zurück. Der 
Vorteil ist, daß Du dann immer ganze Perioden schaltest.
Schaltest Du asynchron, gibt es Schaltknackser.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Peter Dannegger schrieb:
> Michael Reinelt schrieb:
>> Es geht um die Einspeisung von Signaltönen
>
> Dann ist es günstiger, das Siganl definiert auf low zu setzen. Dazu
> änderst Du einfach den Pinmodus von toggle auf clear bzw. zurück. Der
> Vorteil ist, daß Du dann immer ganze Perioden schaltest.
> Schaltest Du asynchron, gibt es Schaltknackser.

Hey, geniale Idee... 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.