Hi, Ich brauch mal ne Schritt für Schritt beschreibung, wie ich ne PWM mit nem PIC ans laufen bring. -Wie richte ich die ein? -wie leg ich die frequenz fest? -Wie leg ich die Active/down Time fest? usw... (Am besten mit PIC-C Beispiel, arbeite mit dem MPLAB, C18 compiler) Mfg (Bitte KEINE Nachrichten wie "das geht mit nem AT-xy viel besser"... Ich komm mit PIC's bisher gut zurecht.)
nun ja, is ja ganz nett, aber der 18F1230 hat nen anderen aufbau der PWM, er besitzt NUR PWM kein CCP und auch einen speziellen Timer für die PWM, soweit ich bis jetzt weiß. Gibts keinen der schon ma mit dem Ding gearbeitet hat und mir mal nen Code-Schnippsel oder sowas dazu schicken könnte?
beim c18 sind ganze bibliotheken dabei, eine davon sogar für pwm ;)
Hallo Burghard, ich habe leider im Augenblick keine Zeit (Weil ich in der Arbeit bin; -) ) mich damit zu beschaeftigen. Ausserdem habe ich selber noch nicht mit diesem speziellen PIC gearbeitet. Das Source Program ist leider speziell auf CCS eingerichtet und zeigt nicht an wie die einzelnen SFRs eingestellt werden muessen. Im List File kann man die Konfigurierung natuerlich nachvollziehen. Ich Lege Dir aber ein Beispiel bei vom CCS Compiler mit dem List file. Anhand des list files kannst Du den Chip setup verfolgen und bei Dir anwenden. Ich hoffe das hilft Dir ein bischen. Gruss, Gerhard
So, hab nun mal den ersten Cod egeschrieben, leider funzt der überhaupt nicht. Ich denke der Fehler liegt irgendwo in der Konfiguration, den auf dem angeschlossenen Oszi seh ich überhaupt nichts. Normalerweise müsste ich doch auch wenn der PDCOL nicht gesetzt ist ein PWM-Signal sehen oder? Auch hab ich mal probiert die PC0L PD0H manuell beide auf 0x11111111 bzw. 0b00001111 zu setzen, was aber auch keine veränderung brachte. Als letztes hab ich versucht an PORT RA0 und RA1 eine LED anzuschließen, die praktisch anzeigen sollte (blinken) das der PIC läuft. Ohne den ganzen PWM Kram gings auch, nur mit dem restlichen code nicht mehr... #include "p18f1230.h" #include "stdio.h" void delay (void) { int i; while(i<100) {i++;} } void main() { int dc ; TRISB = 0 ; // set PORTB as output PORTB = 0 ; // clear PORTB TRISA = 0 ; // set PORTA as output PORTA = 0 ; // clear PORTA //PTCON1 = 0b01111100 ; //unused PTCON0 = 0b00000011 ; //configure: 1:1 Scale, Time base is 1:1, continuous up/down PWMCON0 = 0b01000111 ; //All PWM-Pins enable, PWM 0-2 in independent Mode PWMCON1 = 0b10000000 ; // PWM Timer active for(;;) // forever { for(dc = 0 ; dc < 256 ; dc++)//count the PDC-L upwards, PDC-H is ignored { //PORTA = 0b11000000; Delay; (Die Test LED) PDC0L = dc; //PORTA = =0; (Die Test LED) delay(); } for(dc = 256 ; dc > 0 ; dc--)//count the PDC-L downwards, PDC-H is ignored { PDC0L = dc; delay(); } } }
Hat keiner von euch ne Ahnung worans liegt? Das kann doch nicht so'n riesiges Problem sein.
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.