The Temp/Humidity/Dewpoint Datalogger: Final Product

Well, due to eBay difficulties, I was severely delayed in finishing this project. It seems that the person that I ordered my first blue LCD display from didn’t want to send a few folks their stuff this month. I went to check on the status of my order, and there were negative feedbacks from around the time that I placed it. So much for that. They sure were inexpensive.
Continue reading

Hot glue is the poor man’s way to make! Hot glue USB drive.

Measuring resistance of hot glueLately, hot glue has made its way into my projects. Some of my technical college classmates can remember me bringing in an Altoids can with LEDs and 5 sticks of hot glue melted on the inside. My PIC16F690 POV can was hot glued. Well, I had a USB disk drive stop working the other day so I tore it apart and tried to make sure it wasn’t dead. Well, after a little Hot glue thumb driveresearch I was able to revive it. Since the case was destroyed, I had to find something to put it in to protect it. I have found the solution. Hot glue! It’s an insulator, it applies easily, and it is durable. Above all, I think it looks totally cool being opaque and all.

I wasn’t sure if the heat would hurt the chips, so I ran to the freezer and placed it on ice after each application. I probably won’t lose this one. [9-6-2010 - I lost it!!! How ironic?!?!?!]

POV: Persistence of Vision with a PIC16F690

POV ImagePOV ImageOver the past two days my wife and child have been sick so I’ve had lots of home time to POV Imagework on this project. It’s pretty amazing to me that I just started this PIC16F690 POV project less than two days ago, and I already have it finished and working. I worked pretty hard to get the C files completed for this. I also drew a board with Eagle, but I just used some scrap perfboard. Nothing in the world beats point to point soldering. It was actually pretty easy since there isn’t really much to solder in this project.

Continue reading

POV: Persistence of Vision with a Picaxe 18X

POV ImageThis is a project that I finished around March 2008 which was well before the birth of http://Tech-tut.com. I read the first issue of Make magazine and saw a POV by a guy named Bunnie Huang (Make volume 1 Page 34-37, 186-189). This thing is really cool looking, but is way above a beginner’s head. Actually, this was when I started with the Picaxe. This was my first big project. Since then, most of this project has been lost, but I happened to find the program and the file containing the letters and numbers so I could copy and paste whatever words I wanted. I am including all this here. I’ll use my multimeter to make a new schematic. Nothing beats a little reverse engineering. Also, I may design a POV in C so that we can cater to the beginners and the advanced, but only time will tell. As for now, please enjoy the Tech-Tut POV.
Continue reading

Using the PIC16F690′s (and others’) Internal Timers to Keep Time

This one is so easy a kid could do it. Actually, once you see how easy it is  to keep a somewhat accurate count with an internal oscillator, you’ll probably wonder why I ever spent $7 on a DS1305. If you just want a simple, somewhat inaccurate timepiece, neglecting to use an RTC can make things really simple. The $7 for a real RTC is worth it :).

The first experiment is to check if our interrupts work. We are using timer 2 to generate an interrupt every millisecond. Inside the interrupt we have a 16-bit variable counting to 1000, and then it increments the seconds variable. Then, when seconds hit ten, it starts the loop back at 0. I then output the seconds byte to port C on the Pickit 2. The LEDs show a binary count of the seconds. Tune in for the next installment. I’ll have a clock with four blue 7-segment LEDs that I’m stealing from my first clock project that kept time right, but nothing else.

#include <16f690.h>
#fuses intrc_io,nowdt,nomclr,noborownout,put
int seconds=0; int16 milliseconds=0;

#INT_TIMER2
void incrementSeconds()
{
milliseconds++;
if (milliseconds==1000)
{milliseconds==0; seconds++}
if (seconds==10) seconds=0;
}

void main(void)
{
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);
setup_timer_2(timer_2_div_by_1,0×64,10); //1ms interrupt
set_timer2(0);
while (1)
{ output_c(seconds); } //binary count of seconds
}