COOL!!!
You are using MPLAB!!!!
Tool bar - configure - configuration bits.
That shows the current sttings.
COOL!!!
You are using MPLAB!!!!
Tool bar - configure - configuration bits.
That shows the current sttings.
Dave
Always wear safety glasses while programming.
Haha, you make it sound soooooooooo easy :P
'XT'Cheers
I was hoping that this would help with my serial comm's issue but it hasn't lol. Maybe try another PIC, one with a serial interface built in perhaps?!
I'll persist with this PIC for now and try to do some error-checking handshaking.
I can say that I've definitely learned something today
Best regards to all
J.
Now that the configs seem to be worked out, post your code and tell what is happening or not happening and we will see what can be done about it.
Dave
Always wear safety glasses while programming.
Hi there,
I think I was having a Friday moment. It all seems to be working very well now that it's using the external osc'. I've even bumped up the baud rate to 9600 and getting a good response. Just putting together a simple algorithm to take input over the serial but and set the pulse frequency/duty cycle for HPWM via Hyperterminal.
Many thanks all for all your help. When I get the code done I'll post it on here as a working version. Won't be long.
Cheers
J.
Hi again,
Ok, not the most elegant piece of code, but it works. Basically this allows you to instruct the 12F683 to output a regular pulse at a desired frequency or duty cycle on pin 5. You can communicate with the chip via a serial com port [I'm using a USB to RS232 converter].
Personally, I establish a connection with hyperterminal that comes with XP.
Press 'f' to set frequency [press enter after you type a value in Hz]
Press 'f' to set the dutycycle (0 - 100%) [+enter] - the program will auto scale it 0 - 255.
Or alternatively, type 'f?' or 'd?' to determine the current set dutycycle of frequency.
Note: There is little in the way of error checking on the input. I just wanted to get this back to you guys to show what I'd done and that I was grateful for your help last Friday. Now that I have reliable 2-way com's on the serial bus, I'll set it up with a nice little application in MatLab.
Best regards, J.
P.S. One thing I couldn't sort out was clearing the screen at the start in hyperterminal from the serial port. People say to use Esc/[2J or something but I can't get it to work!!!
Include "modedefs.bas"
ANSEL=0
CMCON0 = %00000111
define osc 4
Serial_out var gpio.0
Serial_in var gpio.1
command var byte
input_char var byte
pulse_width var word
pulse_width_percent var byte
pulse_width_percent_new var byte
pulse_frequency var word
pulse_frequency_new var word
variable_output var word
pulse_width = 128
pulse_width_percent = 50
pulse_frequency = 20000
pause 100
serout Serial_out,T9600,[13]
pause 100
serout Serial_out,T9600,[13," "]
pause 100
SEROUT Serial_out,T9600,[13,"This is a test",13,10]
SEROUT Serial_out,T9600,[13,"f for frequency",13,10]
SEROUT Serial_out,T9600,[13,"d for dutecycle (0-100)",13,10]
SEROUT Serial_out,T9600,[13,"Press ? after f/d to find current value",13,10]
mainloop:
Serin Serial_in,T9600,command
If (command = 100) then
SEROUT Serial_out,T9600,["Enter duty cycle : "]
input_char = 0
pulse_width_percent_new = 0
while input_char<10
pulse_width_percent_new = (pulse_width_percent_new * 10) + input_char
gosub getchar
wend
if input_char <> 15 then
pulse_width = pulse_width_percent_new * 256 / 100
hpwm 1,pulse_width,pulse_frequency
SEROUT Serial_out,T9600,[10,13]
else
SEROUT Serial_out,T9600,[#pulse_width_percent,10,13]
endif
pulse_width_percent = pulse_width_percent_new
endif
If (command = 102) then
SEROUT Serial_out,T9600,["Enter frequency cycle : "]
pulse_frequency_new = 0
input_char = 0
while input_char<10
pulse_frequency_new = (pulse_frequency_new * 10) + input_char
gosub getchar
wend
if input_char <> 15 then
pulse_frequency = pulse_frequency_new
hpwm 1,pulse_width,pulse_frequency_new
SEROUT Serial_out,T9600,[10,13]
else
SEROUT Serial_out,T9600,[#pulse_frequency,10,13]
endif
endif
Goto mainloop
getchar:
serin Serial_in,T9600,input_char
input_char = input_char - 48
if input_char < 10 then
serout Serial_out,T9600,[48+input_char]
endif
return
COOL! Glad you got it working!
I do use hyperterminal much so I do not know for sure the command but here is something from way back. Looks like it says almost the same as you are trying???
http://list.picbasic.com/forum/messa...tml?1054384602
Dave
Always wear safety glasses while programming.
Hi,
Thanks for your email. I saw that webpage before but couldn't get it to work. However, the problem was just familiarity with picbasic/this whole setup! I simply looked up the ascii codes and send them as you would expect, and it 'does' work
serout Serial_out,T9600,[27,91,50,74]
I'm just putting some error checking into the routine, to try and make it at least a little fool proof. It just feels so good now that I have comm's with the PIC. Feel like I've got over a full hurdle. Reliable comm's back and forth is so important to allow one to develop this stuff!
I'll not add any further questions to this thread as I'm going off topic with my next issue. I'll see how it goes and then if desperation calls, I'll call you! I want to try to have 3 pic's all reading off the same RS232 RX line[and TXing on the same line]. Each PIC will be programmed separately with a unique identifier and will only address the TX line if it received data relevant to itself. But, I don't want to cover the board with 4 MHz xtals so I'm going to try to run 3 of them off the one xtal! Not sure how possible that is, but if it works, then great :P
Anyway,
Thanks to you and all for your help in getting me started on this PIC stuff. Feel like I've just been given my first car and have the freedom to go anywhere!
J.
Bookmarks