Paul & Lynn Tyrer wrote: > (The new water meter > outside does not have slow flow indicatior until the sun has turned the > display on.) > Flashlight works on mine ... which is inside.... > I need to look at Input / > output again and whetheri can wait for the whole code to finish before the > switch gets polled, seems like a delay ! > a 3/4" pipe will likely not do over 40GPM, which means less than 1 pulse per second. Shouldn't be a problem. > Regarding the bounce, i origianally had problems witht he hall switch > bouncing. but i now used a relay for the switch to contact, and have yet no > bounce problems when flashing a led with this setup. However this was before > i put a PIc in the picture. > We're generally talking about bounces down 50 milliseconds... so as long as you insert a hundred milliscond delay, you should be ok (1000 ms in a sec). If your code takes over 100ms to complete, you can also just use it as the debouncer.... Mainly what you don't want to have happen is you read the pin, determine it is high, then read it too soon again - because there is a chance that it will turn on and off a whole bunch of times within the first few milliseconds of turning it on. Thus getting false counts. > I will look at other languages too, but i think as my book is all Assembly I > am going to sturggle redesigning the lcd part. > The mikroe basic compiler I suggested has LCD part built in... Plus the basic might free you up to play with things like metering on a last-minute, last-hour, and last day basic (think about creating a small array in memory of buckets)... want ideas for this later, shoot me or the list a ide... Sample code for your application, assuming bits as described below: Program Meter 'Adjust the following dim LCD_RS as sbit at RB4_bit LCD_EN as sbit at RB5_bit LCD_D4 as sbit at RB0_bit LCD_D5 as sbit at RB1_bit LCD_D6 as sbit at RB2_bit LCD_D7 as sbit at RB3_bit LCD_RS_Direction as sbit at TRISB4_bit LCD_EN_Direction as sbit at TRISB5_bit LCD_D4_Direction as sbit at TRISB0_bit LCD_D5_Direction as sbit at TRISB1_bit LCD_D6_Direction as sbit at TRISB2_bit LCD_D7_Direction as sbit at TRISB3_bit hallsensor as sbit at RB6_bit dim lasthall as bit dim thishall as bit dim hundreths as byte dim gallons as word dim hundrethsstring as string[2] dim gallonsstring as string[4] main: ' Adjust the following as needed for your processor and wiring. TRISB = 0 PORTB = 0xff TRISB = 0xff Lcd_Init() 'Initialize display Lcd_Cmd(_LCD_CLEAR) ' Clear Display Lcd_Cmd(_LCD_CURSOR_OFF) 'Turn cursor off lasthall=0 hundreths = 0 gallons = 0 while TRUE thishall=hallsensor ' capture so if it bounces quickly, we don't have logic errors if thishall<>lasthall then delay_ms (50) ' adjust as needed to eliminate bounces hundreths=hundreths+2; // add 2 hundredths if hundredths>99 then hundreths=hundredths-100 gallons=gallons+1 end if ByteToStr(hundreths, hundrethsstring) if hundredthsstring[0]=' ' then hundrethsstring[0]='0' ' Handle single digits correctly WordToStr(gallons, gallonsstring) Lcd_Out(1,5,gallons) Lcd_Chr(1,10,'.') Lcd_Out(1,11,hundrethsstring) if thishall then Lcd_Chr(1,1,'H') 'show status of hall sensor at 1,1 else Lcd_Chr(1,1,'L') 'show status of hall sensor at 1,1 end if wend end. The above should (besides the fact I never tested it in mikro basic, and I likely have typos and the like) do exactly what you are asking for. Other thank the mikro-basic that should be mostly what you need. -- http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist