hi everyone...
I've writen a PB program to controll a pulse motor...
It compiles without any errors or warnings...
It runs in the oshon soft pic simulation IDE with out a problem
As soon as i try to run it in a PIC random ports become high but don't change...
I have a test program that runs fine and that uses the same serout2 command and it sends data to my PC without a problem...
I'm guessing i missed something that i should have setup... can someone take a look and tell me what i missed?
I've got no idea on where to begin to diagnose this type of problem...
Thank youCode:include "bs1defs.bas" Define CONF_WORD = 0x3F3A Define OSC 20 ' Set clock speed Define ADC_BITS 10 ' Set number of bits in result Define ADC_SAMPLEUS 10 ' Set sampling time in uS ADCON0.7 = 0 ' ADC clock set to Fosc/2 ADCON0.6 = 0 ' ADC clock set to Fosc/2 ADCON1.6 = 0 ' ADC clock set to Fosc/2 INTCON = 0 ' Disable all interupts 'DEFINE SER2_BITS 8 ' Ser2 number of data bits 'RCSTA = %10010000 ' Enable serial port and continuous receive 'TXSTA = %00100100 ' Enable transmit and asynchronous mode with BRGH 1 'SPBRG = 20 ' Set baud rate to 57600 with 20mhz clock (BRGH = 1) ADT1 var word ' Create ADT1 to store curent ad conversion for AD channel 0 ADT1MAX var word ' Create ADT1MAX to store curent ADC0 max val ADT1MAX = 0 ADT1VAL var word ADT1VAL = 0 ADV1 var word VOLT1H var word VOLT1L var word C1N var bit C1N = 0 C1S var bit C1S = 0 PCOUNTER var byte PCOUNTER = 0 PTICK var bit PTICK = 0 RPM var word RPM = 0 TMR1_VAL var word TMR1_VAL = 0 TRISE = 255 ' Set PortE to all inputs TRISD = 0 ' Set PortD to all outputs TRISC = 0 ' Set PortC to all outputs TRISB = 0 ' Set PortB to all outputs TRISA = 255 ' Set PORTA to all input ADCON1 = 0 ' PORTA is analog PIE1.0 = 0 ' Disable TMR1 interupt (double check) T1CON.5 = 1 ' Setup TMR1 timings T1CON.4 = 1 T1CON.3 = 1 T1CON.1 = 0 T1CON.0 = 1 main: gosub getadc gosub control gosub backemfreuse gosub rpmcounter gosub adcvonvert gosub telemetry goto main getadc: ADCIN 0, ADT1 return adcvonvert: ADT1 = ADT1 / 64 VOLT1H = ((48 * ADT1) / 10000) VOLT1L = ((48 * ADT1) - (((48 * ADT1) / 10000) * 10000)) / 100 return rpmcounter: if PCOUNTER = 4 then T1CON.0 = 0 ' Pause TMR1 TMR1_VAL.lowbyte = TMR1L ' Load TMR1 Low end byte TMR1_VAL.Highbyte = TMR1H ' Load TMR1 High end byte RPM = 60000 / ((TMR1_VAL * 16)/10000) PCOUNTER = 0 TMR1L = 0 TMR1H = 0 T1CON.0 = 1 endif return telemetry: 'HSEROUT ["V1:",DEC5 VOLT1H,".",DEC5 VOLT1L," RPM:", DEC5 RPM,10] SEROUT2 PORTD.0,16468,["V1:",DEC VOLT1H,".",DEC VOLT1L," RPM:",DEC RPM,10] RETURN control: 'IF ADT1 > 200 and ADT2 > 200 then ' LOW PORTB.0 ' LOW PORTB.1 ' C1N = 0 ' C1S = 0 ' return ' ENDIF IF ADT1 > 200 then high PORTB.0 LOW PORTD.7 C1N = 1 IF PTICK = 0 then PCOUNTER = PCOUNTER + 1 PTICK = 1 endif endif IF ADT1 < 200 then LOW PORTB.0 C1N = 0 IF PTICK = 1 then PTICK = 0 endif endif return backemfreuse: if C1N = 0 then 'and C1S = 0 High PORTD.7 Else LOW PORTD.7 endif return end




Bookmarks