Forum: Mikrocontroller und Digitale Elektronik PIC16F690 PWM


von dave_chappelle (Gast)


Lesenswert?

Hallo Zusammen

Nur eine ganz kurze Frage.. bin noch recht unerfahren im Gebiet der 
PIC's deshalb meine eher banale Frage: Ist es korrekt, dass ich mit dem 
PIC16F690
NICHT 3 voneinander unabhängige PWM Signale ausgeben kann?

MFG
Dave

von PICfan (Gast)


Lesenswert?

Jein.

der hat in Hardware nur 1 PWM module (mit bis zu 4 ausgänge), man könnte 
aber 3 Soft PWM programmieren

als alternativ einen anderen PIC mit 3 oder 4 PWM module, wie:
PIC16F737, PIC16F1829, PIC16F1508

Wie schnell soll denn die PWM Frequenz sein?

von Klaus (Gast)


Lesenswert?

PICfan schrieb:
> Wie schnell soll denn die PWM Frequenz sein?

Noch mehr Fragen: was heißt unabhängig? Gleiche Basisfrequenz aber 
unterschiedlicher Tastgrad, oder auch unterschiedliche Frequenz?

MfG Klaus

von Uwe K. (aerodactyl)


Lesenswert?

Wenn du es in Software machst, hast du natürlich auch Einfluss auf die 
Frequenz und auf das Tastverhältnis.
Die Soft-PWM ist aber nicht so genau/stabil wie die HW-PWM.
Kommt halt darauf an, was du damit machen willst.
Wie hoch soll den die Frequenz sein?

Im Zweifelsfall nimm einen anderen PIC, wie PICfan schon schrieb. Daten 
in 1,2 und 3 übergeben, fertig.

Gruß

Uwe

von dave_chappelle (Gast)


Lesenswert?

Also extrem genau muss das Signal nicht sein.
Ziel ist es, damit eine RGB Lampe anzusteuern und durch die PWM Signale 
die Farbe der Lampe zu mischen.

Die Frequenz kann meinetwegen auf allen 3 Kanälen die Selbe sein, nur 
das Puls-Pausenverhältnis sollte unabhängig voneinander einstellbar 
sein.

von Michael S. (rbs_phoenix)


Lesenswert?

Da sollte meiner Meinung nach eine Software-PWM ausreichen. Die Frage 
ist, ob dir der "Mehraufwand" mehr Wert ist, als der Mehrpreis von z.b. 
einem PIC18F25K80. Dieser hat nicht nur mehr Pins (was evtl auch ein 
Nachteil ist, wenn diese nicht gebraucht werden), sondern hat auch eine 
neurere Struktur und Befehle, viel mehr Speicher, ist schneller und hat 
4 PWM-Ausgänge.

Wenn man nach den Preisen bei Microchip direkt geht, ist der PIC18 70 
US-Cent teurer, also ca 50 Euro-Cent, das wäre es mir Wert, solange ich 
keine tausende Modelle bauen will.

von Hans W. (stampede)


Lesenswert?

Die PIC18FxxK22 sind mit 5PWMs sehr guenstig.

von guest (Gast)


Lesenswert?

Der Preis ist ziemlich egal solange er nicht 3-stellig ist :-)
Ich bin bei meiner suche auch noch auf den PIC 16F767 gestossen, welcher 
zwar auch zu viele Pins hat für meinen gebrauch dafür jedoch 3 PWM 
Ausgänge.. hat jemand mit dem Erfahrung resp. ist dieser zu empfehlen?

von dave_chappelle (Gast)


Lesenswert?

BTW entschuldigt den anderen Nick, weiss auch nicht wie der dahin 
gekommen ist :)

von Holger W. (holgerw)


Lesenswert?

Hab sowas mit dem 16F737 gemacht und läuft gut.
Damals noch in Assembler und dem leidigen Bankswitching.
Heute würde ich nur noch 18F in C programmieren.
Bitte beachten dass der PIC keinen EEprom besitzt, das ist mir erst 
aufgefallen als ich die ersten Werte abspeichern wollte...
Hab dann einen kleinen I2C Speicher verwendet.

Holger

von dave_chappelle (Gast)


Lesenswert?

Und was bedeutet das konkret?
Bin noch recht neu im Prozessor-Programmieren entschuldige die banale 
Frage :P

von HolgerW (Gast)


Lesenswert?

das mit dem EEProm ?
Werte, die von aussen veränderbar sind, kann man im EEprom speichern und 
von dort wieder lesen.
In meinem Fall ist das u.a. die Helligkeit,die über eine 
Infrarotfernbedienung einstellbar sind.
Das kann sich dieser PIC halt nicht dauerhaft merken, weil er keinen 
EEprom Bereich hat.
War nur ein Hinweis falls das für dich wichtig ist.

von Michael S. (rbs_phoenix)


Lesenswert?

Es kommt auch drauf an, was du noch anderes, wenn überhaupt, damit 
machen willst. Bei den 18F's würd ich dir den 18F25K22 oder 18F25K80 
empfehlen. Haben beide Vor- und Nachteile gegenüber. Der K80 hat 3mal 
mehr Ram und 4mal mehr EEPROM, hat 4 Standard-CCP (Also für 
Standard-PWM, es gibt noch den ECCP, dieser hat für Voll oder 
Halbbrücken Motoransteuerung mehrere Pins pro PWM-Ausgang, kann man aber 
auch umstellen), und hat einen 8ch 12bit ADC, und ein CAN-Modul, der K22 
ist dafür billiger, hat zwar "nur" einen 10bit ADC aber 17 statt 8 
Channels und er hat ein 2. MSSP-Modul (für SPI/I2C).

Kommt halt drauf an, was du haben willst.

In C programmieren ist meines Erachtens einfacher. Die 18F's sind für C 
optimiert aber 16F's konnte ich bisher auch gut in C programmieren.

von Krapao (Gast)


Lesenswert?

Das heisst konkret: Du musst ganz kurz entscheiden, entweder ob dir 1 
Hardware-PWM plus 3 Software-PWM reichen denn dann du kannst den 
PIC16F690 verwenden oder ob du 4 Hardware-PWM haben musst denn dann geht 
das PIC16F690 nicht aber es wurde vorgeschlagen auf andere PICs zu 
wechseln, die das bieten.

von Michael S. (rbs_phoenix)


Lesenswert?

Und was du ansonsten damit noch machen willst. Evtl brauchst du einen 
sparsameren oder schnelleren PIC. Aber wenns nur um die Farbsteuerung 
geht, reicht der 16F690 mit SoftPWM ansich aus.

von dave_chappelle (Gast)


Lesenswert?

Oke.. was ich mir einfach vorgestellt habe: Eine RGB-Leuchte die 1. 
einen Auto-Modus hat, der alle Farben durchspielt.
2. Einen Taster (2 Taster) für die Geschwindigkeit dieses Auto-Modus mit 
Ausgabe auf einer 10-Led Balkenanzeige.
3. 3 Taster (resp. 6 Taster) für das Verstellen von Rot, Grün und Blau 
ebenfalls mit einer Anzeige von je einer Led Balkenanzeige.

Alternativ dazu ein Display anstelle der Balkenanzeigen.. Aber da muss 
ich mich sowieso reinarbeiten.

Was für mich jetzt erstmal zählt: Der Automodus.
Was bedeutet ein Soft-PWM? Resp. was ist der Unterschied zu einem 
Hard-PWM?

Das mit dem EEPROM habe ich soweit verstanden, danke für die Erklärung.

von Krapao (Gast)


Lesenswert?

> Was bedeutet ein Soft-PWM?

Erster Abschnitt in Soft-PWM

> Besp. was ist der Unterschied zu einem Hard-PWM?

Die Hard-PWM arbeitet autonom bei der Soft-PWM muss der Softwarecode 
ausführen. D.h. dem restlichen Programm steht weniger Arbeitszeit und 
Programmplatz zur Verfügung.

Statt Taster für Digitaleingabe würde ich Potentiometer für 
Analogeingabe benutzen und diese Eingabe mit vier µC-integrierten 
AD-Wandlern aufnehmen. Es gibt ICs, die aus mit einem Spannungswert (der 
vom Potentiometer käme) eine LED Balkenanzeige ansteuern. Dieser Teil 
müsste nicht auf dem µC laufen.

Für eine Prototypenentwicklung würde ich mich sogar nur auf die PWM 
konzentrieren und die Dateneingabe per RS232/UART machen.

von dave_chappelle (Gast)


Lesenswert?

Oke das mit der Soft-PWM habe ich soweit verstanden, nur leider nicht 
wie ich jetzt mit dem PIC16F690 davon 3 unterschiedliche generieren kann 
:S?
Ich dachte das sei mit dem nicht möglich?

Das mit den IC's für die Balkenanzeige hört sich Spitze an.. denke auf 
so was werde ich dann zurückgreifen.

Ja das habe ich mir auch so vorgestellt, dass ich mich erst darauf 
konzentriere.

von Michael S. (rbs_phoenix)


Lesenswert?

Du kannst es damit machen, nur eben nicht mit Modulen sondern per 
Software (Soft PWM). Du guckst dir einfach an, wie ein Soft-PWM 
funktioniert und machst das gleich quasi 3 mal.

Das ist das, was ich meinte;) Es geht per Software und das wissen ist ja 
auch was Wert, aber mit einem PIC der >=3 PWM Module hat, geht das ganze 
fixer und einfacher von der Hand.

von Krapao (Gast)


Lesenswert?

> wie ich jetzt mit dem PIC16F690 davon 3 unterschiedliche generieren kann

Du schreibst ein entsprechendes Programm und das Programm klappert 
regelmäßig (Timer) mit der von dir festgelegten Häufigkeit (Frequenz) 
und den gewünschten HIGH-/LOW-Pegel Zeiten (Duty-Cycle) an drei 
Ausgangspins.

> IC's für die Balkenanzeige

LM3914
UAA180

Wobei... ist doch eine doppeltgemoppelte Sache. Anzeigen tut ja die 
RGB-LED so wie so. Warum das durch LED-Balken ergänzen?

von dave_chappelle (Gast)


Lesenswert?

Krapao schrieb:
> Wobei... ist doch eine doppeltgemoppelte Sache. Anzeigen tut ja die
> RGB-LED so wie so. Warum das durch LED-Balken ergänzen?
>
>
>
>     Beitrag melden | Bearbeiten | Löschen | Markierten Text zitieren | Antwort | 
Antwort mit Zitat

Also einerseits, geht es darum, etwas zu lernen und andererseits ist es 
einfacher einzustellen, da es nicht so einfach ist abzuschätzen welche 
Farbe jetzt wie intensiv aufleuchtet.

Oke dann muss ich mir mal die Portinitialisierung und so ansehen ich bin 
noch ziemlich verwirrt :P

Aber erstmal danke für die Hilfe!

von dave_chappelle (Gast)


Lesenswert?

Gut, ich habe das jetzt studiert und bin ehrlich gesagt ziemlich 
überfordert.
Ohne (einfaches) Beispiel kann ich mir das einfach nicht vorstellen :S
Könnte mir vielleicht jemand, der ein einfaches Programm mit Soft-PWM 
geschrieben hat einen Einblick in die relevantesten Zeilen gewähren?

von dave_chappelle (Gast)


Lesenswert?

Oke vergisst das habe mir jetzt den 16F767 geholt..

@Holger.. ob es wohl zu viel verlangt äwre, wenn ich dich darum bitten 
würde, mir kurz die Initialisierung der PWM Register aus deinem Programm 
zu schicken?

Ich wäre sehr sehr froh darum!

von Holger W. (holgerw)


Lesenswert?

schau mal hier, da ist auch der Sourcecode
Kein Meisterwerk, aber es tut.
Ist 3 Jahre her, wie viele graust es einen immer, alten Sourcecode 
anzusehen... heute würde ich vieles anders machen.

http://www.wagenlehner.net/Decoder/Ambiente/index.html

Wenn noch Fragen sind einfach melden.

Holger

von dave_chappelle (Gast)


Lesenswert?

Oke ich habe noch nie mit Assembler gearbeitet aber ich versuche das mal 
zu verstehen.. ich melde mich dann wieder.
Danke schonmal für die Hilfe, sieht Klasse aus nebenbei bemerkt!

von dave_chappelle (Gast)


Lesenswert?

Also gut ich habe dann mal die Initialisierung der PWM Register in C 
übersetzt..
Sehe ich das richtig so?:
1
PR2 = 0xFF;
2
RP0 = 0x00;
3
CCPR1L = 0x00:
4
CCPR2L = 0x00;
5
RP0 = 0xFF;
6
CCPR3L;
7
RP0 = 0x00;
8
9
CCP1CON = 0x0F;
10
CCP2CON = 0x0F;
11
RP0 =0xFF;
12
CCP3CON = 0x0F;
13
RP0 = 0x00;
14
15
T2CON = 0x15;

Dann aber meine Frage: Ich verstehe nicht, was dieses RP0 da soll? Resp. 
wieso es immer wider "Ein- und Ausgeschaltet" wird?

Die anderen Register habe ich nachgelesen, das habe ich so verstanden 
und eignet sich gut für meine Zwecke (Danke nochmals!)

von Corinna (Gast)


Lesenswert?

Hi,

also deine Register liegen auf unterschiedliche Bänke und mit RP0 bzw. 
RP1 wählst du dann die jeweilige Bank an. In deinem Datenblatt steht, 
auf welcher Bank welches Register liegt. Je nachdem, wie die Bits von 
RP0 und RP1 gesetzt sind, ist die jeweilige Bank angewählt und du kannst 
auf das Register zugreifen.

z.B. RP0=0 und RP1=0 -> Bank0
     RP0=1 und RP1=0 -> Bank1
     ...

Grüßle Corinna

von dave_chappelle (Gast)


Lesenswert?

Wenn ich jetzt aber später wieder die Werte für die PWM benutzen will 
(CCPR1L - CCPR3L) muss ich im Programm nicht jedes mal erst die Bank 
auswählen, oder?

Und wieso liegen diese 3 PWM Register nicht einfach in der gleichen Bank 
das ist ja irgendwie Quatsch..

Danke für deine Antwort!

von Corinna (Gast)


Lesenswert?

Hi,

also ich bin auch "Anfängerin" und soweit ich weiß, musst du jedesmal 
sobald du auf die Register zugreifen willst, die Bänke auswählen. Warum 
die nicht in der gleichen Bank liegen, kann ich dir auch nicht sagen.

Grüßle Corinna

von HolgerW (Gast)


Lesenswert?

Ich hab noch nie mit 16F und C gearbeitet, ich weiss nicht ob der die 
Bankumschaltung selber macht dann..
Kann man ja aber kontrollieren, Disassembler Listing anschauen.
CCPR3L liegt glaub ich in einer anderen Bank, die Umschalterei nervt. 
Das ist sicher historisch bedingt, irgendwann ist eben ein Register 
dazugekommen und da in der Bank kein Platz mehr war wurde das woanders 
hin geschoben. Damit hatte man eine gewisse abwärtskompatibilität, aber 
in dem fall nervt es eben.

Deshalb bin ich ja auch umgestiegen auf 18F und würde das jedem nur 
empfehlen.

Einige meiner Projekte hab ich auch auf C umgesetzt, dieses noch nicht, 
hab es aber noch vor, dann aber auch komplett neuer Prozessor.
Aber bisher laufen 2 dieser PWM Fader so gut das ich eigentlich nichts 
daran machen muß...

Holger

von Michael S. (rbs_phoenix)


Lesenswert?

Ich würde auch nur noch mit 18F's planen. Diese paar Cent, die diese 
teurer sind, machens dann meist auch nich. Und das Bank-Umschalten musst 
du nur machen, wenn du auch in eine andere Bank musst. Solange die 
benötigten Register in einer Bank liegen, musst du nicht vor jedem 
dieser Register die Bank-Bits ändern. Die Bank-Bits sind ja auch in 
einem Register und so wie jedes andere Register auch, speichert es die 
Werte, solange der Strom da ist. Deswegen schreibt man auch erst die 
Register in der ersten Bank, dann alle in der 2. usw...

Ich benutze für meine restlichen 16F's den C-Compiler von 
mikroElektronika und dieser "weiß", wo welches Register liegt und 
schaltet somit um.

von Michael S. (rbs_phoenix)


Lesenswert?

Zusätzlich...

Wenn man sich mal die Übersicht im Datenblatt anguckt, kann man daraus 
Ableiten, dass RP0 und RP1 quasi das 8. und das 9. Bit der 
Registeradressierung ist. So sehen das denke ich auch die C-Compiler.. 
PORTC ist beispielsweise das Register 0x07 und TRISC ist 0x87, also weiß 
der Compiler bei TRISC, dass es in Bank 1 sein muss, da die Adresse 
zwischen 0x7F und 0x100 liegt. Dazu ist das 8. Bit gesetzt und dieses 
ist ja representativ RP0.

von dave_chappelle (Gast)


Lesenswert?

Danke viel mal für die Hilfe.
Also ich benutze MPLab und ich schaue dann einfach mal ob der das von 
selber kapiert. Muss jetzt erst noch Platine ätzen und bestücken, geb 
euch dann Bescheid.

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.