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
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?
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
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
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.
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.
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?
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
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.
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.
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.
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.
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.
> 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.
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.
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.
> 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 BalkenanzeigeLM3914
UAA180
Wobei... ist doch eine doppeltgemoppelte Sache. Anzeigen tut ja die
RGB-LED so wie so. Warum das durch LED-Balken ergänzen?
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!
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?
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!
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
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!
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!)
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
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!
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
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
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.
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.
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.