Forum: Mikrocontroller und Digitale Elektronik Frage bei der Verwendung von PWM zur Datenübermittlung (Sicheres Ab- u Anschalten)


von Barny (Gast)


Lesenswert?

Guten Tag

Ich verwende einen ATtiny24 um mittels PWM Daten quasi-analog 
(tastverhältnis der PWM) kontinuirlich zu übertragen.
Die PWM wird mittels compare match mit neuen Tastverhältnissen gefüttert 
und arbeitet im toggle-Modus.

In einigen Betriebszuständen muß aber dass Senden der Daten für kurze 
Zeit unterbrochen werden.

Die einfachste Methode währe m,einer Meinung nach einfach den PWM 
Ausgang als Eingang zu deffinieren.
Gibt es irgend welche Dinge die dagegen sprechen diese Methode zu 
verwenden um den PWM-Ausgang stumm zu schalten und was muß ich dabei 
beachten?
(Abgesehen davon dass die Änderung der Datenrichtung nur bei einem 
deffiniertem Pinzustand geschehen darf.)

von Barny (Gast)


Lesenswert?

Es kann doch nicht sein dass noch keiner ein Projekt hatte bei dem er 
ein PWM Signal kurzzeitig deaktivieren musste.

Oder kann/will mir einfach keiner etwas genaueres sagen?

von Christian (Gast)


Lesenswert?

Du könntest auch einfach im TCCRnA den Compare Output Mode auf normal 
Port operation zu stellen.

von Jörg G. (joergderxte)


Lesenswert?

Wenn du einen sicheren Pegel an dem Pin brauchst, ist Eingang 
bzw.Tri-state doch höchstwahrscheinlich verkehrt (da hängen doch nur 
noch mehr Eingänge dran, oder?).
Also: am einfachsten scheint mir:
 - Trenne die PWM von dem Pin (OCnxy-Bits des Timers)
 - Schalte den Ausgang auf den richtigen Pegel (falls nötig)

rtfm, Jörg

von Barny (Gast)


Lesenswert?

>Wenn du einen sicheren Pegel an dem Pin brauchst, ist Eingang
>bzw.Tri-state doch höchstwahrscheinlich verkehrt (da hängen doch nur
>noch mehr Eingänge dran, oder?).
Ja. es hängt an der anderen Seite ein Eingang dran.
Aber wenn man den internen pull up aktiviert müsste der Pegel doch 
stabil sein oder habe ich da etwas übersehen?
Hängt der PWM etwa mit dem Pul up zusammen und aktiviert / deaktiviert 
ihn immer?


Dass mit dem Abdrehen des Compare und des PWM-Ausgangs hatte ich schon 
ausprobiert.
Doch da wird mir leider beim Reaktivieren des PWM das Signal invertiert 
da dass Ganze im Togglemodus arbeitet.
Desswegen müsste ich irgendwie ein Dummy-Erreignis erzeugen dass mir das 
PWM-Signal wieder zurückdreht.
Bzw. müsste ich einen PWM-Takt warten und dann die PWM nochmal ab und 
anschalten.

Gibt es eine bessere Methode ein invertiertes PWM-Signal zu korrigieren 
als folgendes?
°Beim Reaktivieren des PWM wird einmalig ein sonst nicht verwendeter 
Interrupt wie z.B. Pegeländerung an einem Interuptpin aktiviert und in 
diesem die PWM einmal aus und eingeschalten.

°Nach dem Reaktivieren wird eine Wartefunktion eingefügt, nach der die 
PWM aus und eingeschalten wird.

von gatsby (Gast)


Lesenswert?

Hallo Barny,
suuuper Idee.
Da haben in den letzten 40 Jahren Kohorten von Entwicklern daran 
gearbeitet analoge Signale zu digitalisieren um sie mit geringst 
möglichen Fehlern zu übertragen und da kommst du nun auf die grandiose 
Idee digitale Signale, denn nichts anderes sind deine PWM Werte, auf 
analogem Wege zu senden.
Das wird sicherlich höchst präzise.
Ich bin mal gespannt, ob du uns auch verrätst, wieviele zig Meter deine 
Übertragungsstrecke lang ist.
Und nun soll dieses <Zitat> "Senden der Daten für kurze Zeit 
unterbrochen werden."
Wie bitte schön "unterbricht" man ein analoges Signal. Legt man es auf 
GND?
Legt man es auf Vcc? Behält man den letzten analogen Wert bei? Ist das 
Signal dann überhaupt unterbrochen?

Ich glaube, dieser Thread wird wieder lustig.

von Peter D. (peda)


Lesenswert?

Barny schrieb:
> Es kann doch nicht sein dass noch keiner ein Projekt hatte bei dem er
> ein PWM Signal kurzzeitig deaktivieren musste.

Warum sollte man eine PWM denn abschalten?
Eine LED sollte nicht flackern, das wirkt unprofessionell.

Ne PWM frißt ja keine CPU-Zeit, es gibt also keinen Grund, sie nicht 
durchlaufen zu lassen.
Und je nach PWM-Mode lassen sich andere Timeraufgaben weiterhin 
benutzen.


Was allerdings sehr ungewöhnlich ist, eine PWM zur Datenübertragung zu 
nutzen.
Es ist viel einfacher und sicherer, Daten bitweise zu übertragen, ala 
UART, 1-Wire, IR usw.


Peter

von Barny (Gast)


Lesenswert?

@gatsby

>Da haben in den letzten 40 Jahren Kohorten von Entwicklern daran
>gearbeitet analoge Signale zu digitalisieren um sie mit geringst
>möglichen Fehlern zu übertragen und da kommst du nun auf die grandiose
>Idee digitale Signale, denn nichts anderes sind deine PWM Werte, auf
>analogem Wege zu senden.
Das verwendete Protokoll ist nicht auf meinem Mißt gewachsen und auch 
nicht gerade dass Jüngste.
Dass analoge Signal nennt sich PPM. Mir währe auch I2C, SPI oder USART 
lieber, aber die Schaltung die mit dem Signal versorgt wird ist nicht 
von mir und die will nun mal PPM haben.

>Das wird sicherlich höchst präzise.
>Ich bin mal gespannt, ob du uns auch verrätst, wieviele zig Meter deine
>Übertragungsstrecke lang ist.
Ich habe nie behauptet dass die Übertragung präzise ist.
Dass Signal wird ca. 0,02m weit übertragen.
Es könnten aber auch ca. 20mm sein ;o)

>Und nun soll dieses <Zitat> "Senden der Daten für kurze Zeit
>unterbrochen werden."
>Wie bitte schön "unterbricht" man ein analoges Signal. Legt man es auf
>GND?
>Legt man es auf Vcc? Behält man den letzten analogen Wert bei? Ist das
>Signal dann überhaupt unterbrochen?
Es wird einfach aufgehört das Signal zu generieren und man geht einfach 
in einen deffinierten Zustand.
Und wenn man den letzten analogen Wert senden würde, würde man ja 
weiterhin mittels PWM ein Signal generieren da ja dass analoge Signal 
nicht über Spannung sondern über die Zeit gesteuert wird.
Desswegen ist eigentlich absolut egal ob jetzt GND oder VCC anliegt.
Es darf nur keine Pegeländerung auftreten.


@Peter Dannegger
>Warum sollte man eine PWM denn abschalten?
>Eine LED sollte nicht flackern, das wirkt unprofessionell.
Bei dem generierten Signal hantelt es sich um ein Datensignal.
Da flackert keine LED.

>Ne PWM frißt ja keine CPU-Zeit, es gibt also keinen Grund, sie nicht
>durchlaufen zu lassen.
>Und je nach PWM-Mode lassen sich andere Timeraufgaben weiterhin
>benutzen.
Es geht mir nicht darum CPU-Zeit zu sparen, sondern dass in bestimmten 
Betriebszuständen kein Signal ausgegeben wird.
Wenn man den PWM-Ausgang auf Eingang schaltet läuft ja auch alles 
weiter.

Bei diesen Betriebszuständen handelt es sich um den Fehlerfall.
Und zwar wenn über die Sensoren bzw. die Eingangssignale ungültige Werte 
ermittelt werden oder sonst etwas nicht stimmt.

von H.j.Seifert (Gast)


Lesenswert?

Halt doch einfach den Timer an.

von gatsby (Gast)


Lesenswert?

Hallo Barny,

analoge Signale sind analog und das gibt es nicht <Zitat>"Dass analoge 
Signal nennt sich PPM."

Ein analoges Signal entsteht, wenn man z.B. ein PWM Signal über einen 
Tiefpass schickt. PWM ist ein digitales Signal. Genau wie PPM.

PPM = Pulse-Phasen-Modulation oder Pulse-Pausen-Modulation (Goggel ist 
dein Freund).
Das sind alles digitale Signale, die analoge Werte widerspiegeln.

von Anon Y. (avion23)


Lesenswert?

Clock source auf 000 stellen. Das habe ich gemacht.

von Peter D. (peda)


Lesenswert?

Barny schrieb:
> Bei dem generierten Signal hantelt es sich um ein Datensignal.
> Da flackert keine LED.

Ich wollte nur auf eine gängige PWM-Anwendung hindeuten.
Es kann also durchaus richtig sein, daß Du der erste bist, der eine so 
ungewöhnliche Anwendung implementiert.
Und das bezog sich auf Deine Aussage:

> Es kann doch nicht sein dass noch keiner ein Projekt hatte bei dem er
> ein PWM Signal kurzzeitig deaktivieren musste.

Es kann eben doch sein.


Wenn der Toggle-Mode Probleme macht, warum benutzt Du ihn dann 
überhaupt?
Benutz doch einfach den "inverting mode" oder "non-inverting mode".


Peter

von Barny (Gast)


Lesenswert?

@ H.j.Seifert & Anon Ymous
Leider werden die beiden Timer mehrfach verwendet.
Desswegen kann ich die nicht abdrehen ohne alles stillzulegen.

@gatsby
Ich weis dass das Signal dass ich generiere digital ist weil man mit dem 
Mikrokontroller dass Signal nicht analog erzeugen kann.
Aber 1000 Abstufungen auf 1ms kommt der analogen Version schon verdammt 
nahe.
Dass Protokoll stammt aus einer Zeit in der es noch keine 
Mikrokontroller gegeben hat und so gut wie alle Signale analog 
übertragen wurden.


Aber genau genommen liefert ein D/A Wandler auch nur digitale Signale, 
auch wenn es 8,10,16,... Bit breite Abstufungen gibt.
Schau dir doch bitte einmal die Deffinition von digital/analog an.

Deiner Logik nach müsste also auch ein FM-Funksignal digital sein ;)

Digital bedeutet dass die betrachtete Größe im betrachteten Bereich eine 
endliche Anzahl von Zuständen hat und somit zählbar ist.
Analog bedeutet dass die betrachtete Größe im betrachteten Bereich 
unendlich viele Zustände annehmen kann.

Mehr sagt analog/digital nicht aus.
Es hat also überhaupt nichts mit Spannung/Strom zu tun.

Beispiele für Analog/Digital:
Dass Rechnen/Zälen mit Fingern ist digital.
Die Frequenz eines Schwingkeises den man mit einem Trimmpoti einstellt 
ist analog.
Die Helligkeit der Raumbeleuchtung ist digital (Schalter ein/aus)
Die Helligkeit des Sonnenlichts dass den Erdboden an einem Ort erreicht 
ist analog.



@ Peter Dannegger
>Ich wollte nur auf eine gängige PWM-Anwendung hindeuten.
>Es kann also durchaus richtig sein, daß Du der erste bist, der eine so
>ungewöhnliche Anwendung implementiert.
Es gibt mindestens 2 ähnliche Schaltungen die eine vergleichbahre 
Funktionalität haben.
Wenn man sich die Schaltung anschaut, schat es aber ganz so aus als ob 
da das Signal rein softwaremäßig generiert wird.

Eigentlich ist das PWM Modul die vernünftigste Lösung um ein solches 
Signal zu erzeugen.
Denn da hat man mehr Zeit für andere Aufgaben übrig und es ist weit 
genauer als wenn man es in der Hauptschleife erzeugt.


>Wenn der Toggle-Mode Probleme macht, warum benutzt Du ihn dann
>überhaupt?
>Benutz doch einfach den "inverting mode" oder "non-inverting mode".
Danke für den Tipp.
Ich werd mal schaun ob ich damit mehr Glück habe.

von Barny (Gast)


Lesenswert?

Ich habe eine provisorische Lösung für dass Problem gefunden als ich 
endlich mal von der Leitung gestiegen bin.

Da ich einen Ringspeicher verwende um das PWM-Modul mit Daten zu 
versorgen, reicht es vor dem Reaktivieren des PWM Moduls die Variable 
die die aktuelle Position im Speicher enthält um 1 zu ändern und dass 
generierte Signal passt.

von Peter D. (peda)


Lesenswert?

Barny schrieb:
> Es gibt mindestens 2 ähnliche Schaltungen die eine vergleichbahre
> Funktionalität haben.
> Wenn man sich die Schaltung anschaut, schat es aber ganz so aus als ob
> da das Signal rein softwaremäßig generiert wird.

Schön für Dich.
Wir wissen jedoch nicht, welche Schaltungen Du Dir gerade anschaust.

Es ist müßig, auf Schaltungen zu verweisen und sie nicht zu posten oder 
zu verlinken.


Peter

von Barny (Gast)


Lesenswert?

>Schön für Dich.
>Wir wissen jedoch nicht, welche Schaltungen Du Dir gerade anschaust.

>Es ist müßig, auf Schaltungen zu verweisen und sie nicht zu posten oder
>zu verlinken.

Entschuldigung.
Mein Hinweis auf die käuflichen Versionen waren nur dazu gedacht darauf 
hinzuweisen dass ich nicht der Einzige bin der so eine Schaltung baut.


Eine Verlinkung auf die Onlinegeschäfte der Anbieter der käuflichen 
Version hätte eigentlich nichts gebracht, da man keine Deteils sieht und 
auch die Produktbeschreibung ist dort sehr wage.

Und da mein Problem bei einer Zusatzfunktion gelegen ist die keine der 
beiden Produkte unterstützt, ist es sicher nicht so tragisch.


Die Schaltung läuft inzwischen mit den provisorischen Verbesserungen 
stabil.
Danke vielmals für eure Hilfe

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.