Hello,
I am currently working on a project that consists of a Seconds Counter, 2 A/D inputs(1 for Temperature, 1 for monitoring battery voltage). The idea is to take the data and transmit via morse code. I have it all wired up to an 2x16 LCD display, and a piezo speaker until I can get everything running correctly. Currently using a PIC16F88 to test all of this, in the end I will be using a PIC12F675.
flow should be as follows
1)Read A/D
2)Turn on Tx
3)Send morsecode in this order: Counter, Temperature, Battery Voltage, and Identification
4)Turn off for 15sec
5)Repeat
My problem is, I am not so sure my A/D is working correctly.. my temperature displayed stays at 77degrees F. the voltage input to the processor is 3.16v Im using an LM335z which is calibrated at 10mv/K..and I know its not 109degree's F. more like 73 F...
I dont mean to come here and get all the answers, although I would love to get some constructive critizism. Not just about problem previously mentioned, but my coding in general..
Thanks in advance,
James
Code is as follows:
Code:'Define LCD connections ' Define LCD_DREG PORTB 'LCD data bits on PORTB Define LCD_DBIT 0 'PORTB starting address Define LCD_RSREG PORTB 'LCD RS bit on PORTB Define LCD_RSBIT 5 'LCD RS bit address Define LCD_EREG PORTB 'LCD E bit on PORTB Define LCD_EBIT 4 'LCD E bit address Define LCD_BITS 4 'LCD in 4-bit mode DEFINE LCD_LINES 2 'LCD has 2 rows ' Define ADCIN parameters ' Define OSC 8 'Set oscillator at 8MHz Define ADC_BITS 8 'Set number of bits in result Define ADC_CLOCK 3 'Set Clock source (3 = rc) DEFINE ADC_SAMPLEUS 50 'Set sampling time in uS CMCON = 7 'Turn comparators OFF '------( Variables )------ ' tx var byte 'Transmitter variable adval var byte 'A/D input for temperature adval2 var byte 'A/D input for . . . . tempF var byte 'Result of A/D after temperature conversion counter var byte 'Time variable dit var byte 'for morse code "dot" dah var byte 'for morse code "dash" ditpause var byte 'for morse code pauses between letters/numbers wordpause var byte 'Pause between words i var byte 'Variable for subroutine dig1 var byte 'Variable for subroutine dig2 var byte '------( Registers )------ ' 76543210 TRISA = %00000001 'PortA.0 = input, all else = outputs TRISB = %00000000 'PortB = outputs OSCCON = %01110000 ' ADCON0 = %01000001 'Make AN0 analog inputs, ADCON1 = %00000000 'Format selection/divide clock 'Reference voltage = VDD ANSEL = %00001001 'Sets all A/D off, except RA0 & '------( Initialization )------ ' dit = 4 'Length of dot in morse code(Lower number is Faster) dah = dit * 3 'Length of dash in morse code ditpause = dit * 12 'Length of pause between dits & dahs in morse code wordpause = ditpause * 5 'Pause between letters/numbers counter = 0 'Clear time to 0 Pause 18 'Wait for LCD to initialize LCDOUT $FE, 2, "Loading..." '------( Main Code )------ ' Loop: pause 1000 tx = 1 'PORTA.3 = 1 ' Tx ON counter = counter + 1 'Increment time ADCIN 0, adval 'Read channel 0 - Temperature pause 20 adcin 3, adval2 'Read channel 3 - Battery Voltage tempf = adval / 10 ' Tempf = tempf - 273 '** Conversion from 10mV/K to Fahrenheit** TempF = Tempf * 9 ' tempf = tempf / 5 ' tempf = tempf + 32 ' LCDout $FE, 1 LCDOUT $FE, 2,$14,$14,$14,$14,$14,$14,$14,$14,$14, "A=", #adval2 LCDOUT $FE, 2, "Cnt=", #counter Lcdout $FE, $C0, "F=", #tempf,$14,$14,$14,"ID:N3PX" '------( Subroutine )------ ' for i = 2 to 0 step -1 ' dig1 = counter dig i 'Subroutine to send out :Time gosub outdigit ' next i pause 1000 'Pause before sending next reading for i = 2 to 0 step -1 ' dig1 = tempf dig i 'Subroutine to send out :Temperature gosub outdigit ' next i pause 1000 'Pause before sending next reading for i = 2 to 0 step -1 ' dig1 = adval2 dig i 'Subroutine to send out :Battery Monitor gosub outdigit ' next i Pause 1000 'Pause before sending Callsign gosub a ' gosub num3 'Subroutine to send out :Callsign gosub b ' gosub c ' tx = 0 'PORTA.3 = 0 'Tx off Pause 2000 'Pause before recycling goto loop outdigit: Branchl dig1, [num0,num1,num2,num3,num4,num5,num6,num7,num8,num9]






Bookmarks