Forum: Mikrocontroller und Digitale Elektronik PWM Signal generieren mit PIC


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von dragonrider (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen.

leider muss ich heute meinen ersten Beitrag eröffnen, bei den vorherigen 
Problemen welche ich hatte, hat mir dieses Forum sehr viel geholfen. 
Dieses mal bin ich leider nicht fündig geworden.. :(

Ich möchte an meinem PIC18F4520 ein PWM-Signal generieren(PORT_B.3). 
Dieses PWM-Signal verwende ich, um eine IR-Senderdiode anzusteuern, 
welche das Signal an meinen Fernseher sendet.
Ich möchte dieses "Projekt" realisieren, damit ich zuhause wieder eine 
Fernbedienung habe(habe diese leider vor eingen Monaten verloren und 
seither muss ich den Fernseher immer per Hand bedienen..).
UND ja klar könnte ich mir einfach eine fixfertige Bedienung kaufen 
gehen, jedoch möchte ich dies gerne selber realisieren, damit ich auch 
einen gewissen Lerneffekt davontragen kann.

Nun meine Frage:

Wie kann ich ein PWM-Signal generieren? (Gibt es ein gutes Tutorial?)
Was muss ich initialisieren? (Timer, PWM-Output, etc)
Worauf muss ich besonders Acht geben?


Vielen Dank für eure Hilfe

von M. K. (sylaina)


Bewertung
0 lesenswert
nicht lesenswert
Schau mal bei www.sprut.de vorbei, da gibts viele gute Tutorials zu den 
PICs ;)

von Christian M. (Gast)


Bewertung
0 lesenswert
nicht lesenswert

von Udo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wenn du die alte Fernbedienung nicht mehr hast,
woher weist du dann welche Nutzungsdaten du
senden mußt ?

von dragonrider (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Oke danke, werd mich da mal ein wenig informieren..

Falls jemand einen Code in C hat wäre ich sehr dankbar. Denn habe bis 
jetzt nur sehr wenig bis gar nichts mit Assembler programmiert.


Udo schrieb:
> Wenn du die alte Fernbedienung nicht mehr hast,
> woher weist du dann welche Nutzungsdaten du
> senden mußt ?
Also ich habe den Bildschirm noch.. Und die Befehle der Fernbedienung 
stimmen ja mit den "Befehlen" des Bildschirms überrein. Also dachte ich 
mir, dass ich die Befehle im Internet finden werde(habe noch nicht 
gesucht).
Und andererseits besteht die Möglichkeit, dass ich den Verkäufer um die 
Fernbedienungsserie frage. Dann kann ich die Befehle schnell finden..

Das Problem liegt nur beim PWM-Signal..

von Udo (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Lies dich mal in Fernbedienungen ein, wie die
funktionieren und was die für Signale abgeben.
Was du schreibst ergibt keinen Sinn.

von Teo D. (teoderix)


Bewertung
0 lesenswert
nicht lesenswert
dragonrider schrieb:
> Worauf muss ich besonders Acht geben?

Wenn Du mit MPLAB arbeitest, eigentlich nur damit und den Tools die es 
gibt.
Für Dein aktuelles Problem einfach den Code-Configurator benutzen und 
dabei auch noch was lernen :)
http://www.microchip.com/mplab/mplab-code-configurator


PS: Ubs, ich gehe davon aus, das der PIC auch unterstützt wird!?

: Bearbeitet durch User
von dragonrider (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Udo schrieb:
> Lies dich mal in Fernbedienungen ein, wie die
> funktionieren und was die für Signale abgeben.
> Was du schreibst ergibt keinen Sinn.

Ich muss nur wissen wie ein PWM-Signal erzeugt wird..
Ich dachte, dass man hier Hilfe bekommt.. und nicht dass man 
irgendwelche "Tipps" bekommt, welche niemandem weiter helfen..

PWM Signal.. das ist alles!!

von dragonrider (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Teo D. schrieb:
> dragonrider schrieb:
>> Worauf muss ich besonders Acht geben?
>
> Wenn Du mit MPLAB arbeitest, eigentlich nur damit und den Tools die es
> gibt.
> Für Dein aktuelles Problem einfach den Code-Configurator benutzen und
> dabei auch noch was lernen :)
> http://www.microchip.com/mplab/mplab-code-configurator
>
> PS: Ubs, ich gehe davon aus, das der PIC auch unterstützt wird!?

Entschuldigung wenn sich dies ein bisschen blöd anhört aber was ist 
dieser Code-Configurator? Was macht der genau?

MfG

von Teo D. (teoderix)


Bewertung
0 lesenswert
nicht lesenswert
dragonrider schrieb:
> Entschuldigung wenn sich dies ein bisschen blöd anhört aber was ist
> dieser Code-Configurator? Was macht der genau?

Die Lösung dieses Rätsels verbirgt sich HINTER dem LINK, den ich 
gepostet habe.

: Bearbeitet durch User
von Volker S. (vloki)


Bewertung
0 lesenswert
nicht lesenswert
dragonrider schrieb:
> PWM Signal.. das ist alles!!

Zu PWM hätte ich vielleicht was. (Mit der PWM kann man aber nur den 
Grundtakt des Signals erzeugen) 
http://www.hs-ulm.de/users/vschilli/Mikrocontroller/uCQ/_downloads/uCquick-X.pdf 
(Kapitel 7)


Dein PIC wird mit hoher Wahrscheinlichkeit (noch) nicht von MCC 
unterstützt (zu alt)

von Udo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Mit einem PWM Signal alleine machst du nichts.
Damit kannst du deinen TV nicht steuern.
Welche Frequence soll denn das PWM Signal haben ?

von Teo D. (teoderix)


Bewertung
2 lesenswert
nicht lesenswert
dragonrider schrieb:
> Ich muss nur wissen wie ein PWM-Signal erzeugt wird..
> Ich dachte, dass man hier Hilfe bekommt.. und nicht dass man
> irgendwelche "Tipps" bekommt, welche niemandem weiter helfen..

Das ist üblich und auch verständlich.
Den meisten ist nicht klar, was alles nötig ist, um IHR Problem zu 
lösen. Daher wird, oder muss, quasi schon davon ausgegangen werden, das 
diese HILFE benötigt wird.
Diskussionen darüber, werden dann allerdings meist als persönlichen 
Angriff gewertet. Diese eigentlich gut gemeinten Tips, dann einfach 
ignorieren.

von dragonrider (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Teo D. schrieb:
> dragonrider schrieb:
>> Entschuldigung wenn sich dies ein bisschen blöd anhört aber was ist
>> dieser Code-Configurator? Was macht der genau?
>
> Die Lösung dieses Rätsels verbirgt sich HINTER dem LINK, den ich
> gepostet habe.

Also es generiert mir einen gewissen Code, soweit bin ich gekommen. 
Jedoch nach welchen Kriterien wird der Code generiert?
Muss ich ihm ein Struktogramm übergeben oder wie läuft das genau? :S

Teo D. schrieb:
> dragonrider schrieb:
>> Ich muss nur wissen wie ein PWM-Signal erzeugt wird..
>> Ich dachte, dass man hier Hilfe bekommt.. und nicht dass man
>> irgendwelche "Tipps" bekommt, welche niemandem weiter helfen..
>
> Das ist üblich und auch verständlich.
> Den meisten ist nicht klar, was alles nötig ist, um IHR Problem zu
> lösen. Daher wird, oder muss, quasi schon davon ausgegangen werden, das
> diese HILFE benötigt wird.
> Diskussionen darüber, werden dann allerdings meist als persönlichen
> Angriff gewertet. Diese eigentlich gut gemeinten Tips, dann einfach
> ignorieren.

Danke dir, hab das wirklich ein bisschen als "Angriff" gewertet. 
Jedenfalls kam es mir so vor.

von Teo D. (teoderix)


Bewertung
0 lesenswert
nicht lesenswert
Udo schrieb:
> Mit einem PWM Signal alleine machst du nichts.

Er glaubt zu wissen was er weiß und nur er kann es wissen ;)
Solange es nicht um Leib u.Leben geht, lass Ihn.
Learning by doing, Trial and Error, hat doch schon immer funktioniert 
oder auch nicht :)

von Teo D. (teoderix)


Bewertung
0 lesenswert
nicht lesenswert
dragonrider schrieb:
> Jedoch nach welchen Kriterien wird der Code generiert?

Benutzen, erklärt sich von selbst :)
Wühle dich durch die Hilfen/Tutorials, die sind echt gut!

dragonrider schrieb:
> Danke dir, hab das wirklich ein bisschen als "Angriff" gewertet.
> Jedenfalls kam es mir so vor.

Na verhätschelt wirst Du hier sicher nich :)
Aber eigentlich meinte ich die andere Seite! Auf Deiner ist das auch 
kaum zu vermeiden, wenn die Tips unnötig sind.

von Volker S. (vloki)


Bewertung
0 lesenswert
nicht lesenswert
dragonrider schrieb:
> Also es generiert mir einen gewissen Code, soweit bin ich gekommen.
> Jedoch nach welchen Kriterien wird der Code generiert?
> Muss ich ihm ein Struktogramm übergeben oder wie läuft das genau? :S

Schau mal da http://microchip.wikidot.com/mcc:overview
Da waren auch irgendwelche Videos, finde ich aber gerade nicht...

von dragonrider (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Oke danke euch, werde mich mal durch diese Links lesen und gegeben falls 
bei einem Problem werde ich mich melden.
Danke euch

von dragonrider (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Teo D. schrieb:
> Für Dein aktuelles Problem einfach den Code-Configurator benutzen und
> dabei auch noch was lernen :)
> http://www.microchip.com/mplab/mplab-code-configurator

Hab mir diesen mal gedownloadet, jedoch befindet sich im .zip-File nur 
eine Datei mit dem Namen "com-microchip-mcc-3.16.nbm"

Hab ich das falsche File gedownloadet oder weshalb finde ich hier 
nirgends ein .exe File?

von Volker S. (vloki)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe den MCC eigentlich noch nie benutzt aber immerhin schon mal 
installiert. Allerdings ganz anders ;-)
In MPLABX -> Tools -> Available Plugins... (auswählen und installieren)
Oder da gucken: 
http://microchip.wikidot.com/mcu1101:installation-and-setup
unter 4. Install MPLAB® Code Configurator (MCC)
Da muss man allerdings auswählen ob man lieber ein Video anschauen will 
oder schriftliche Anweisungen...

Da gibt es dann auch direkt ein Tutorial zur PWM.

: Bearbeitet durch User
von dragonrider (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Jap habs dann bei genauerem Suchen auf der Seite auch gefunden..

Hab es nun installiert, doch nun möchte ich es einem kleinen Test 
unterziehen und weiss nicht wo ich anfangen soll oder besser gesagt wie 
ich anfangen soll..

Falls jemand dies schon weiss, kann dieser sich gerne melden.. In der 
Zwischenzeit versuche ich es selber zu verstehen

Danke schon mal.

von dragonrider (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Also hab mir nun Mplab X IDE runtergeladen sowie den Code Configurator 
installiert..

Nun wenn ich den Code Configurator öffnen möchte erhalte ich immer die 
folgende Fehlermeldung.

"The Device used in the selected main project is not supported by the 
currently loaded peripheral libraries.

A list of supported devices is provided in the release notes of the 
appropriate peripheral library. An archive of the current and previous 
versions of libraries can be found on the MCC website.

www.microchip.com/mcc"


Wisst ihr wie ich dies am besten lösen kann?

MfG

von dragonrider (Gast)


Bewertung
0 lesenswert
nicht lesenswert
kleine Anmerkung:

habe als Hardware Tool PICKit3, jedoch habe ich es ebenfalls mit dem 
Simulator, ICD3 sowie REAL ICE getestet. Die Fehlermeldung kam bei 
jedem..

Compiler habe ich XC8 v1.32 ausgewählt..


kann es sein, dass dies mit dem Compiler zusammenhängt, den ich habe 
gesehen, dass es bereits neuere Versionen gibt..

von Volker S. (vloki)


Bewertung
-1 lesenswert
nicht lesenswert
dragonrider schrieb:
> "The Device used in the selected main project is not supported by the
> currently loaded peripheral libraries.

Volker S. schrieb:
> Dein PIC wird mit hoher Wahrscheinlichkeit (noch) nicht von MCC
> unterstützt (zu alt)

Nimmschd du konkret aktuelles PIC. So 18F45K22. Dann geht ;-)

Btw: Der K22 ist besser ausgestattet und billiger.

: Bearbeitet durch User
von dragonrider (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Oke.

Also verwenden tu ich einen 18F4520..
Ist der wirklich schon so alt?:0


Oke, werd ich wohl so machen müssen.. :(

Danke dir :)

von Volker S. (vloki)


Bewertung
0 lesenswert
nicht lesenswert
dragonrider schrieb:
> Also verwenden tu ich einen 18F4520..
> Ist der wirklich schon so alt?:0

Relativ alt eben. In den MCC werden zuerst die neuesten PICs integriert.
Wie gesagt, die sind auch besser und billiger.


dragonrider schrieb:
> Oke, werd ich wohl so machen müssen.. :(
Müssen tust du das nicht. Ich habe noch nie MCC verwendet. Da du eine 
"alte" Version vom XC8 installiert hast, kannst du auch die PLib 
verwenden.

Grundsätzlich braucht man natürlich überhaupt keine Bibliothek um einen 
uC zu programmieren. Man beschreibt einfach die richtigen Register. 
Steht doch alles im Datasheet.

von Witkatz :. (wit)


Bewertung
0 lesenswert
nicht lesenswert
dragonrider schrieb:
> Wie kann ich ein PWM-Signal generieren? (Gibt es ein gutes Tutorial?)
Es gibt Unmengen von Tutorials. Um nur ein paar zu nennen:
Obwohl Spruts Seiten langsam einstauben, seine Erklärungen für die 
älteren PIC Typen sind immer noch kaum zu toppen
http://www.sprut.de/electronic/pic/grund/pwm.htm

Ich finde auch die Tutorials von Nico empfehlenswert
http://pic-projekte.de/wordpress/?cat=13

Und  Volker SK natürlich mit seiner brandneuen Erklärung der 
"Puls-Weiten-Modulation" im Kap. 7
http://www.hs-ulm.de/users/vschilli/Mikrocontroller/uCQ/_downloads/uCquick-X.pdf

dragonrider schrieb:
> Was muss ich initialisieren? (Timer, PWM-Output, etc)
Genau das, PWM Ausgangspin, TMR2 auf die Trägerfrequenz deines 
Infrarot-Protokolls und das das PWM Modul.

Beinahe hätt ich's vergessen, das beste Tutorial ist immer noch: 
http://ww1.microchip.com/downloads/en/devicedoc/39631a.pdf#M14.9.80197.Heading2.164.PWM.Mode

Gruß
witkatz

: Bearbeitet durch User
von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
Für ne FB kannst Du die Senderoutine auch ganz einfach mit Delay und 
set/clear Pin machen.
Beim AVR gibt es dazu das Macro _delay_us(), dem man die gewünschte Zeit 
in µs übergibt. Obs beim PIC auch so einfach geht, weiß ich nicht.

Ich sage absichtlich Senderoutine, da Du den Träger ja noch mit dem 
eigentlichen FB-Code modulieren mußt. Der Träger selber hat in der Regel 
ein festes Tastverhältnis von 25%, d.h. keine PWM.

Wenn Du die original FB nicht mehr hast, brauchst Du noch ne 
Universal-FB, um die richtigen Codes erstmal zu ermitteln.

dragonrider schrieb:
> Und andererseits besteht die Möglichkeit, dass ich den Verkäufer um die
> Fernbedienungsserie frage. Dann kann ich die Befehle schnell finden..

YMMD.

von Volker S. (vloki)


Bewertung
0 lesenswert
nicht lesenswert
Peter D. schrieb:
> Beim AVR gibt es dazu das Macro _delay_us(), dem man die gewünschte Zeit
> in µs übergibt. Obs beim PIC auch so einfach geht, weiß ich nicht.
Ja, alles der gleiche Mist ;-)

Peter D. schrieb:
> Der Träger selber hat in der Regel
> ein festes Tastverhältnis von 25%, d.h. keine PWM
Frequenz und Tastverhältnis lassen sich doch mit einem PWM-Modul 
wunderbar einstellen. Mann muss es ja nicht unbedingt nochmal verändern, 
bloß weil der Begriff PWM das irgendwie nahelegt.

von Witkatz :. (wit)


Bewertung
0 lesenswert
nicht lesenswert
Peter D. schrieb:
> Obs beim PIC auch so einfach geht, weiß ich nicht.

Gute Idee Peter.
XC8 definiert das Makro __delay_us(x), man muss nur _XTAL_FREQ auf die 
Oszillatorfrequenz setzen. Mit 40MHz Oszillator sähe das mit XC8 
ungefähr so aus:
1
#include <xc.h>
2
#define _XTAL_FREQ 40000000 
3
void main(void){
4
    TRISCbits.RC2 = 0;
5
    
6
    for(;;){
7
        LATCbits.LATC2 = 1;
8
        __delay_us(6);
9
        LATCbits.LATC2 = 0;
10
        __delay_us(20);
11
    }
12
}
Und schon gehen 38kHz Trägerfrequenz raus ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.