Showing posts with label 16F684. Show all posts
Showing posts with label 16F684. Show all posts

Saturday, January 9, 2010

Analog Inputs

I've been fighting since late last night trying to get analog inputs working on my PIC16F684.

I finally got somewhere this evening, oddly enough for some reason, in some regions of the pot it goes really quick then just a small bit over will slow it down drastically.

All my code does is initialize everything to setup RA0 as an analog input, then it turns on the ADC waits until it's done then toggles the LED and waits the amount of time in the combination of ADRESH and ADRESL, all I had to do was put ADRESH into the integer value I had, shift it 8 positions left, then or the ADRESL in, then pass it to my wait routine.

Outside of that it's finally working, the last hiccup I had was well frankly I forgot to turn it back on after trying turning it off as a troubleshooting measure. Of Course I'll continue to plug VERSION CONTROL, had I gotten this working and decided to play a little here and there to make it say be more sensitive, I may have done myself in by messing something up, now I have no fear of that.

I am posting the code on my SVN server, and one day would like to be able to make that public so everyone can get to it, but I suspect my ISP won't like me using a web server out of my house, so I'll for now plan to upload it to Google Docs.

Below you'll find the vid of the PIC Kit 1 in action with the LED's toggling quickly then as I rotate the pot it slows down.


Here's the code to do it, there may be some unneeded stuff, let me know if you see anything off!

For the sake of testing I uploaded this file to YouTube and am going to see what the difference in appearance is here!


Wednesday, January 6, 2010

Interrupts

In ECE 344 we learned about interrupts and how to use them, of course we were programming in assembly, so we had to setup our interrupt vector, then write some code at the appropriate offset.

That turned out to be pretty easy, but the problem is let's say we want to write some code in C and try to handle interrupts. This is a little tricky if you don't have all the information you need.

Well of course since I can't seem to think logically sometimes, I didn't look at any manuals and just headed over to stackoverflow.com, where I got some great answer's here: Interrupts

The simple answer was this:
void interrupt my_interrupt_handler (void) {
handle_interrupts_here();
}
I did some testing and once I had the right bit's turned on I just ended up in my interrupt routine with this (about 90% borrowed from here:Microchipc):
void interrupt isr(void)
{
if (T0IF)
{
TMR0=TMR0_SETTING;
T0IF=0;
RA5=1;
//code right here is executed every 800us
}

My newest project I'll be working on with this microcontroller is to find some way to create a simple serial interface which I can transmit and receive a piece of data. Since I can interrupt on a timed interval. I should be able to read data passed at an expected rate.

I'll keep you updated when I get more work done.