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
Und was bedeutet das konkret? Bin noch recht neu im Prozessor-Programmieren entschuldige die banale Frage :P
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 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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.