Hi Leute, nachdem ich hier schon so manche Beiträge quergelesen hab und manch sinnvolle Info aus dem Board ziehen konnte jetzt auch mal der aktive Part. Ich hab gestern die "Aufgabe" bekommen, bei unsrem Azubiprojekt mitzuhelfen welche da aktuell eine Binäruhr werden wird. Die ganze logik dahinter steht schon (gute alte 78er und 40er Logik diskret). Allerdings haben sich meine Kollegen jetzt überlegt, dass sie gerne RGB LEDs verwenden wollen um diese dann quasi durchzufaden, dabei sollen alle LEDs die gleiche Farbe haben. Die Logik hinter der Binäruhr hängt wie üblich an der Kathode der LEDs, für die Helligkeit der einzelnen Farben muss sowieso die Anode ran. Als Ansteuerung dachte ich an einen Mikrocontroller der mir 3 unterschiedliche PWM signale ausgibt, mit denen 3 Mosfettreiber oder ähnliches dann die Anoden der LEDs ansteuern. Der Blick ist dabei auf den PIC16F887 gefallen, weil mir die 16er Serie von Microchip immernoch die "vertrauteste" ist, dadurch dass wir auf einem 16F84A in der Schule lernen und mein Prüfungsaufbau für Zwischen/Abschlussprüfung auf dem 887 basiert. (Azubi EGS im 2. LJ) Der µC besitzt ja an und für sich 4 PWM Outputs, die im Single, half Bridge oder full Bridge modus arbeiten können (Pin 17, 28, 29 30 entsprechend konfiguriert) Allerdings hab ich beim durchwälzen des Datenblatts noch keine Info darüber gefunden, ob ich die 4 Outputs wirklich getrennt im Duty Cycle einstellen kann. Der Takt kommt mir ja sowieso synchron. Interessant wäre auch mal wie man das genau programmiert, ein Snipet in Assembler würde mir da schon viel helfen, insbesondere was die Initialisierung/Config des ganzen angeht, auch scheint es auf den ersten blick keine separaten Register für jede einzelne PWM zu geben. Soweit mal die Fragerei in die Runde LG Sebl
Der Chip besitzt 2 pwm , welche man auch unabhängig die duty cycle vergeben kann, nicht aber die pwm frequenz. Du könntest 2x pwm sowie 1x DAC verwenden, auf ein 4-fach opv und beim pwm ein rc filter davor. Dabei sind dann für eine Farbe nur 16 Intensitäten vorhanden. Ansonsten SW PWM ist die Lösung schau dir mal an1074 an.
Sebastian P. schrieb: > ob ich die 4 Outputs > wirklich getrennt im Duty Cycle einstellen kann. Nein, du kannst nur zwei Dutycyles unabhängig voneinander einstellen. Such dir einen PIC mit >=3 CCP/ECCP/PWM Modulen. Da fällt mir so schnell der PIC12F1501 oder wenn du mehr IOs haben willst der PIC16F1503 ein. Beide haben 4 unabhängige PWM Module. Solltest der 12F1501 passen: Hier ein Programm, das LEDs an PORTA blinken lässt:
1 | list p=12F1501 ; list directive to define processor |
2 | #include <p12F1501.inc> ; processor specific variable definitions |
3 | |
4 | |
5 | __CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _BOREN_OFF & _CLKOUTEN_OFF |
6 | __CONFIG _CONFIG2, _WRT_OFF & _STVREN_OFF & _BORV_HI & _LPBOR_ON & _LVP_OFF |
7 | |
8 | delay_cnt0 equ 0x70 |
9 | delay_cnt1 equ 0x71 |
10 | delay_cnt2 equ 0x72 |
11 | |
12 | ORG 0x00 |
13 | goto start |
14 | |
15 | ORG 0x04 |
16 | retfie |
17 | |
18 | start: |
19 | BANKSEL OSCCON |
20 | movlw b'01111010' |
21 | movwf OSCCON ; 16 MHz, Internal oscillator block |
22 | |
23 | BANKSEL PORTA |
24 | clrf PORTA ;Init PORTA |
25 | BANKSEL LATA ;Data Latch |
26 | clrf LATA |
27 | BANKSEL ANSELA |
28 | clrf ANSELA ;digital I/O |
29 | BANKSEL TRISA |
30 | clrf TRISA |
31 | |
32 | BANKSEL LATA |
33 | |
34 | loop: |
35 | movlw 0xFF |
36 | xorwf LATA,f |
37 | |
38 | movlw .5 |
39 | movwf delay_cnt2 |
40 | decfsz delay_cnt0,f |
41 | goto $-1 |
42 | decfsz delay_cnt1,f |
43 | goto $-3 |
44 | decfsz delay_cnt2,f |
45 | goto $-5 |
46 | |
47 | goto loop |
Nachtrag: Initialisierung eines PWM Moduls (10bit, 15625Hz @ Fosc=16MHz):
1 | BANKSEL T2CON |
2 | movlw b'00000100' ; 1:1 Postscaler, Timer2 is on, Prescaler is 1 |
3 | movwf T2CON |
4 | |
5 | BANKSEL PIE1 |
6 | bcf PIE1,TMR2IE |
7 | |
8 | BANKSEL PR2 |
9 | movlw 0xFF |
10 | movwf PR2 |
11 | |
12 | BANKSEL PWM3CON |
13 | bsf PWM3CON,PWM3EN ;PWM3 module is enabled (RA4) |
14 | bsf PWM3CON,PWM3OE ;Output to PWMx pin is enabled |
15 | bcf PWM3CON,PWM3POL ;PWM output is active-high |
:
Bearbeitet durch User
Oha, so unterschiedlich sind die Pics der gleichen "kategorie" im bereich der programmierung also. Kaum hab ich n bissl erfahrung aufm 16f84a kommt n anderer daher der was kann was mir grad gefallen würde und boom, der programmiert sich vollkommen anders. bei dem 16f1503 hab ich im datenblatt auch keine ordentliche auflistung der SFR gefunden...
Sebastian P. schrieb: > bei dem 16f1503 hab ich im datenblatt auch keine ordentliche auflistung > der SFR gefunden... page 19 ...
Sebastian P. schrieb: > Oha, so unterschiedlich sind die Pics der gleichen "kategorie" im > bereich der programmierung also. Ach wo, das sind doch nur ganz kleine Unterschiede. Die PIC16's mit vierstelligen Teilenummern haben übrigens teilweise einen erweiterten Befehlssatz. Ich würde ansonsten nicht gar so sehr mit diesen BANKSEL Makros herumschmeißen. Wenn ich das richtig sehe, dann hat dieser PIC nix weiter zutun, als deine LED's zu dimmen - richtig? Dann würde ich das ganze Hardware-PWM einfach bleiben lassen und die PWM's einfach per Software machen. Das ist allemal schnell genug zum LED-Dimmen. W.S.
Das mit der Software hab ich mir auch schon überlegt, aber ob ichs damit hinkrieg, 3 getrennte ausgänge in einem quasi dreieck, wenn man die PWM im sinne vom "effektivwert" ineinander verschachteln kann ohne vorher nen drehwurm zu bekommen? Also ziel isses, alle möglichen farben anfahren zu können in anschwellender Art und Weise durch das sequentielle programmieren könnte das noch interessant werden, aber für den fall könnte ich auch meinen 16f84a nehmen, von dem ich noch n paar hier liegen hab.
ich hab leider noch nicht die Zeit gehabt, mich in die PWM programmierung richtig reinzufinden (interrupt programmierung ist noch n neues thema für mich un rein sequentiell wirds auch nicht ganz trivial). Allerdings brauch ich natürlich Hardwareseitig auch noch Transistoren, die mir die Anoden von meinen RGB LEDs schalten. da ich die von meinem Kollegen eingesetzten LEDs nicht genau kenne geh ich mal grob von im schlimmsten Fall 500mA pro Transistor aus, als maximale Schaltfrequenz setz ich jetzt mal 2khz an, ließe sich sicher noch nach unten korregieren. Da ich ja die Anode schalte, bietet sich ja der P-Kanal Mosfet an, richtig? Geschalten wird über den Pic idealerweise direkt, ergo ein Logiclevel Typ, damit ich den p-kanal "dicht" bekomme? (ist ja bei Ugs=0V komplett offen, richtig?)Geschalten werden ebenfalls 5V, Strom wird über einzelne Vorwiderstände an den LEDs begrenzt. Oder tuts ein üblicher Verdächtiger, so à la irf4905? Könnte vom Gehäuse her wohl auch noch kleiner sein, sofern der das ungekühlt mitmacht. Gibts empfehlenswerte p-kanal fets mit LL Input die für meine Anwendung passen würden? bei Reichelt hab ich auf die schnelle nix gefunden was den Anforderungen entspricht.
Sebastian P. schrieb: > Logiclevel Typ, damit ich den p-kanal "dicht" bekomme? (ist ja bei > Ugs=0V komplett offen, richtig?) Wenn's ein depletion-FET (selbstleitend), dann ja. Meist verwendet man aber enhancement-FETs (selbstsperrend). Vgs>=0V --> Sperren, negatives Vgs --> Leiten. > Gibts empfehlenswerte p-kanal fets mit LL Input die für meine Anwendung > passen würden? Ja, einer davon ist der IRLML2244. Wenn du SMD ablehnst wird's schwierig, ich habe in meiner vor SMD Zeit erfolglos nach THT LogL-P-Mosfets gesucht.
:
Bearbeitet durch User
Tja dann wird das wohl was eigene Entwürfe angeht mein Debüt mit SMD Steinchen, reizt mich schon lange, aber lohnt sich wohl nur wenn man ordentlich 2-seitig platinen ätzen kann, womit ich noch keine Erfahrung hab. Ich hab heute nachmittag mal ne Runde gelayoutet, Layout + Schaltplan im Anhang. Die 3-Fach klemme wird der Output zur Platine vom Kollegen, die untere 2-Fach klemme als Versorgung und oben noch 2 vorbereitete Inputs für Taster oder dergleichen um den Pic ansteuern zu können. Bin für Feedback offen da ich noch nicht sehr viel an Layouts gemacht hab und auch das nur frei Schnauze sozusagen.
Sebastian P. schrieb: > aber lohnt sich wohl nur wenn man > ordentlich 2-seitig platinen ätzen kann Das würde ich nicht sagen, ich verwende SMD (vor allem 1206 und SOT23) auch auf Lochraster und wenn es das passende Bauteil nicht in THT gibt, lohnt es sich auf jeden Fall. > Bin für > Feedback offen Ich würde einen Anschluss fürs Programmiergerät hinzufügen. Wieso verwendest du eigentlich diesen alten PIC? Der hat kein einziges PWM Modul und neue PICs haben in der Regel bessere Peripherie und sind billiger, siehe: https://www.mikrocontroller.net/articles/PIC#Alte_und_neue_PICs Ich würde noch darüber nachdenken, ob es nicht Vorteile dringen würde zu K2 noch einen Massepin hinzuzufügen. Zusätzlich wären Pullups an den Gates der FETs nicht schlecht, da die IOs nach dem Reset als Eingänge konfiguriert sind und die Gates deshalb floaten und die undefiniert verhalten.
:
Bearbeitet durch User
Seht euch auch mal das an: http://www.zabex.de/site/sofabeleuchtung.html Nen schönen RGB-Verlauf hinzubekommen ist garnicht so leicht! Es wird zwar ein Atmega mit C programmiert, aber da solltet ihr auch einige Tricks abkucken können. Die drei unabhängigen 16bit-PWM müsst ihr allerdings anders erzeugen, Atmega und PIC sind ja verschieden. Vielleicht kommt ihr auch mit ner 12bit PWM aus mit effektiv 6bit für die Farben statt 8.
Beschreibung PWM bei PIC16F887 http://www.mikroe.com/chapters/view/6/chapter-5-ccp-modules/ Ab der Stelle: CCP1 in PWM mode Dto., mit Code für Compiler (mit ASM und dem "BANKSEL" sollte man sich nicht mehr befassen...) http://geekilyinteresting.wordpress.com/2013/09/06/playing-with-pics-4-dimming-leds-with-pwm/ Gruss
Erich schrieb: > (mit ASM und dem "BANKSEL" sollte man sich nicht mehr befassen...) Wenn er ASM bereits kann wird es sicher einfacher als eine Hochsprache zu lernen.
:
Bearbeitet durch User
Max H. schrieb: > Wenn er ASM bereits kann wird es sicher einfacher als eine Hochsprache > zu lernen. Jaja. Ganz bestimmt. Besonders wenn er das fertige und funktionsfähige C Programm selbst in seine ASM Umgebung umcodieren darf. Deswegen baut man ja auch zuerst bei der Anschaffung eines neuen Auto das elektrische Licht aus und um auf http://de.wikipedia.org/wiki/Karbidlampe Gruss
Erich schrieb: > Jaja. > Ganz bestimmt. Schön dass du mir zustimmst. > fertige und funktionsfähige C Programm Das Problem bei deinem Programm ist nur, dass der 16F887 ein CCP Modul zu wenig hat und er wenn er bei diesem PIC bleiben will Soft PWM machen muss. Schade dass deine "fertige Lösung" einfach nur den ADC-Wert an einem PWM-Kanal ausgibt. > Deswegen baut man ja auch zuerst bei der Anschaffung eines neuen Auto > das elektrische Licht aus und um auf > http://de.wikipedia.org/wiki/Karbidlampe Der Vergleich hinkt, das el. Licht ist im Gegensatz zu deinem Link eine fertige und funktionstüchtige Lösung.
:
Bearbeitet durch User
> fertige und funktionsfähige C Programm Ok, danke für deine Hinweise, Max H. (hartl192) Allerdings ist >dass deine "fertige Lösung" etwas übertrieben. Ich habe lediglich GOOGLE bemüht mir Ergebnisse zu zeigen, wo genau der genannte uC in Verbindung mit "PWM" oder "dimming" benutzt wird. Insofern wollte ich dem TE nur eine kleine Hilfestellung geben. Das er irgendwas machen will, wozu sein von ihm herausgesuchter uC nicht ausreichende Peripherie hat, soweit habe ich seinen Text (zu meiner Schande) gar nicht gelesen. Vielleicht sollte der TE insofern hier nochmals nachdenken und einen uC mit mehr Funktionalität wählen (und GOOGLE selbst nach geeigneten Beispielen absuchen). Gruss
So ich muss das thema grad nochmal aufwärmen, hab grad mal wieder n Moment lust an der schaltung rumzudenken. Ich werde letztenendes wohl mit einem PIC16F1503 arbeiten, an dem hab ich auch noch 3 pins frei für AD wandler, um den PWM Dutycycle von hand via trimmer oder poti einstellen zu können. Was mir gerade noch Kopfzerbrechen bereitet ist das Highside schalten mit den P-Kanal Mosfets. Funktioniert das so wie in dem Schaltplan einige Posts weiter oben gezeichnet? Also Source geht an die 5V, an den drain kommen die Anoden der LEDs, dahinter der Vorwiderstand und Schaltlogik, Das Gate hängt direkt (?) am PWM des Microcontrollers (Vorwiderstand um die 100 Ohm zur Inrushstrom-Begrenzung sinnvoll?) Wenn die PWM Auf Low steht ist das Gate gegenüber Source negativ, der FET leitet und meine LED kann leuchten, zieht der µC das Gate auf 5V sperrt der FET, so richtig von der Logik her? Mit welcher Frequenz lässt sich die PWM noch ohne große Verluste fahren? Strom wird nie über 1A kommen, eher im Bereich zwischen 100-500mA. Ich layoute noch n bissl was dann kommt nochmal n Schaltplan + Layout
Sebastian P. schrieb: > Wenn die PWM Auf Low steht ist das Gate gegenüber Source negativ, der > FET leitet und meine LED kann leuchten, zieht der µC das Gate auf 5V > sperrt der FET, so richtig von der Logik her? Richtig. Wenn du willst, kannst du das PWM Signal vom PIC invertiert ausgeben lassen.
So, die letzten Stunden mit Layouten verbracht, Vermutlich is das ganze stark verbesserungswürdig, aber schön sieht ne einseitige platine ja leider selten aus. Mit der Kombination aus Reset und Vpp für die ICSP schnittstelle bin ich mir allerdings ganz und garnicht sicher. Da Reset ja normalerweise einen Pullup kriegt wenn man ihn via Jumper auslösen können will, da aber im Programmierfall auch die x V Programmierspannung drauf geht hab ich das ganze mit einer Schottkydiode abgeblockt, geht das so in der Konstellation? Die Belegung der Buchsenleiste sollte passen um mit dem Brenner8p was anfangen zu können. Im schlimmsten Fall tritt wieder der fall mit dem µC umstecken ein, aber erstmal Kritik abwarten Die beiden weiteren Jumper dienen, um im Programm irgendwelche Paramter von außen bestimmen zu können, die LEDs rechts oben dienen als Indikator, um ohne den rest der Schaltung Ergebnisse sehen zu können. Soweit mal vorerst
Dein µC Schaltbild, stimmt nicht mit dem im Datenblatt überein. Nochmal nachschauen. So funktioniert es nicht.
Wenn du mir jetzt noch sagst wo der fehler sein soll? beim kurz überfliegen erschließt sich mir kein unterschied. Das schaltbild hab ich gestern erstellt und eigentlich mehrfach überprüft.
Ich würde mich bei der Stiftleiste zum Flashen an der Pinbelegung des PICkits orientieren, der Brenner8 verwendet die gleiche. Die Schottky wird manchmal so verbaut, ist aber laut Microchip nicht notwendig.
Sebastian P. schrieb: > Vermutlich is das ganze stark verbesserungswürdig Eine Sache ist ganz einfach zu verbessern: Wenn du beim Schaltplan den ganzen Karokram und die Pin-Nummern wegschaltest würdest, wäre der deutlich einfacher zu lesen. Linien und Karos sind eine Schreibhilfe. Beim Lesen stören sie meist und verringern den Kontrast für die Leitungsverbindungen.
Stefan schrieb: > Brille nicht geputz ? :-) > MCLR ist auf Pin 4, im Datenblatt. Oha, den fehler hätte ich weiß gott nicht gefunden, hab das wohl mit dem RA4 durcheinandergeworfen, danke! Karokram ist auch weg, ist mmn viel mehr zeichenhilfe als schreibhilfe damit die Bauteile nicht vollkommen rumtanzen, aber gut. Am ICSP hatte ich Vpp und Vdd vertauscht, geändert und sollte passen jetzt 1 Vpp 2 Vdd 3 Vss 4 Data 5 Clock So stehts im Brenner 8 Handbuch Durch das Vertauschen von Pin3 mit Pin4 kam jetzt noch eine Brücke mehr dazu Die Massefläche ist nur auf dem Bild so fleckig, im Ausdruck passt die durchgängige Fläche Die Pads der Mosfets hab ich auch nochmal etwas nachgearbeitet. Nächster Versuch
Du hast im Layout die Maßefläsche als Linien. Die Fläsche sollte gefüllt sein. Druck mal aus, und schau mal ob du da auch Linien hast oder ob die Maßefläsche gefüllt ist. Ich würde noch einen Widerstand am Gate machen.
Die bohrungen für die Elkos waren sogar nur 0,6, hab ich auf von Hand machbare Pads aufgebessert. Die Massefläche muss bei Target offenbar in Streifen umgewandelt werden, um Inseln rauszukriegen, wenn man dabei den Streifenabstand auf 0 Setzt ist die Fläche sauber.
Ja ist richtig mit den Maßefläschen. Scheinst eine ältere Version zu benutzen. In der neuen Targetversion haste keine Linien mehr. Brücke in Maßefläsche ist ohne Aura schwer zu löten. Mußte ausprobieren ob du es hin bekommst diese zu löten. Braucht man mehr Hitze zum anlöten.
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.