I am using a function generator for the input on this board. Based on the PWM, the 4431 will change its PWM channels too. The input signal is 100 hz. There is a 'pause' in the output side on PWM1,3,5,7. I am assuming I have something set up wrong and its not a hardware problem. I have tried this on four 4431's. The PWM will be fine then go high for an amount of time then go back to pulsing. If I am at 50% duty cycle the pause is the smallest. 20 and 80% is the worst. My function generator won't go lower or higher.
Code:define CODE_SIZE 32 define osc 20 Include "modedefs.bas" ' Mode definitions for Serout Include "Elapsed-18.bas" OnOff1 var PortE.1 'Input Signal from GPS to activate/deactivate row OnOff2 var PortE.0 'Input Signal from GPS to activate/deactivate row OnOff3 var PortA.5 'Input Signal from GPS to activate/deactivate row OnOff4 var PortB.5 'Input Signal from GPS to activate/deactivate row Switch1 var PortD.0 ''Output to 4066; activates Speed1 Switch2 var PortE.2 ''Output to 4066; activates Speed2 Switch3 var PortC.0 ''Output to 4066; activates Speed3 Switch4 var PortC.3 ''Output to 4066; activates Speed4 MotorSpeed var PortC.1 'Input from 4066 Population var PortC.2 'Input from GPS Enable1 var PortD.1 ''Output Turns on Motor1 driver Enable2 var PortD.2 ''Output Turns on Motor2 driver Enable3 var PortD.3 ''Output Turns on Motor3 driver Enable4 var PortD.4 ''Output Turns on Motor4 driver SinglePair var PortD.7 'Input Determines code path Input1 var PortB.0 'PWM0 Input2 var PortB.1 'PWM1 Input3 var PortB.2 'PWM2 Input4 var PortB.3 'PWM3 LCD var PortD.5 Duty1 Var Word Duty2 Var Word Duty3 Var Word Duty4 Var Word BCD1 var byte BCD10 var byte Rate var word DisplayTenths var word MotorCount var byte 'Tracks motorspeed input Mod1 var byte 'Offset tracker to correct motorspeed Mod2 Var Byte 'Offset tracker to correct motorspeed Mod3 var byte 'Offset tracker to correct motorspeed Mod4 Var byte 'Offset tracker to correct motorspeed PosMin1 var bit PosMin2 var bit PosMin3 var bit PosMin4 var bit HighTime var word LowTime var word TotalTime var word Freq var word Prefix con $FE ' needed before each command LcdCls CON $51 ' clear LCD (use PAUSE 5 after) LcdLine1 CON $00 ' move cursor to line 1 LcdLine2 con $40 ' move curson to line 2 LcdLine3 con $14 ' move curson to line 3 lcdLine4 con $54 ' move curson to line 4 LcdCol1 con $00 ' move cursor to column 1 LcdCol2 con $07 ' move cursor to column 7 Backlight con $53 ' Backlighting 1-8 CursorPS con $45 'Cursor Position CursorOn con $47 'Cursof On CursorOff con $48 'Cursor Off INTCON = 0 'Interrupts off for now INTCON2.7 = 1 'Pull Ups disabled ADCON0 = 0 'A/D OFF ANSEL0 = %00000000 'All analogue channels to digital ANSEL1 = %00000000 'All analogue channels to digital TRISA = %111111 'PortA to inputs TRISB = %00010000 'PortB to outputs, except B5 TRISC = %00000110 'PortC, Switch3 and Switch4 outputs; Motorspeed and Population inputs TRISD = %00000000 'PortD, Switch 1 output; Enable1-4 TRISE = %011 PWMCON0=%01111111 'All odd PWMs enabled, all independent SSPCON=%00000000 'Disables Serial Port 'DTCON = %00000101 ' ~500nS dead-time (for complementary outputs only) PTCON0 = %00000010 ' 1:1 postscale, Fosc/4 1:1 prescale, free running mode Freq=%11111111 PTPERL =0'Freq.LowByte PTPERH =1'Freq.HighByte PWMCON1 = 1 ' updates enabled, overrides sync w/timebase PTCON1 = %11000000 ' PWM time base is ON, counts up 500hz FLTCONFIG = %00000010 ' enable fault A, cycle-by-cycle mode Serout2 LCD, 84, [Prefix,LcdCLS] pause 5 Test: Gosub BCD 'Open Loop Motor Control If BCD1 = 0 then 'gosub RowControl HIGH Enable1 HIGH Enable2 HIGH Enable3 HIGH Enable4 pulsin Population, 0, Rate Duty1 = (Rate*10)/492 '10% 489 Duty2 = (Rate*10)/492 '20% 977 Duty3 = (Rate*10)/492 '50% 2461 Duty4 = (Rate*10)/492 '80% 3924 Duty1 = Duty1*10 Duty2 = Duty2*10 Duty3 = Duty3*10 Duty4 = Duty4*10 PDC0L = Duty4.LowByte PDC0H = Duty4.HighByte PDC1L = Duty2.LowByte PDC1H = Duty2.HighByte PDC2L = Duty3.LowByte PDC2H = Duty3.HighByte PDC3L = Duty1.LowByte PDC3H = Duty1.HighByte DisplayTenths=Duty1-(Duty1/10*10) SEROUT2 LCD,84, [Prefix,CursorPS,0, "Rate ", #Rate, " ", "Duty ", #Duty1/10, ".", #DisplayTenths, "%"] endif gosub TEst BCD: BCD1=PORTA BCD1=BCD1 & $0F BCD1=BCD1^ $0F 'BCD10=PORTC 'BCD10=BCD10 & $F0 'BCD10=BCD10^ $F0 'BCD10 = BCD10 >>4 BCD10=PORTC BCD10=BCD10 & $0F BCD10=BCD10^ $0F return




Bookmarks