need someone to look code over, lcd will not display data, and alarm will not reset
sport270
Posts: 82
' {$STAMP BS2} ' {$PBASIC 2.5} ' -----[ I/O Definitions ]------------------------------------------------- TX PIN 15 ' serial output to LCD ' -----[ Constants ]------------------------------------------------------- #SELECT $STAMP #CASE BS2, BS2E, BS2PE T2400 CON 396 T9600 CON 84 T19K2 CON 32 #CASE BS2SX, BS2P T2400 CON 1021 T9600 CON 240 T19K2 CON 110 #CASE BS2PX T2400 CON 1646 T9600 CON 396 T19K2 CON 188 #ENDSELECT LcdBaud CON T19K2 LcdBkSpc CON $08 ' move cursor left LcdRt CON $09 ' move cursor right LcdLF CON $0A ' move cursor down 1 line LcdCls CON $0C ' clear LCD (use PAUSE 5 after) LcdCR CON $0D ' move pos 0 of next line LcdBLon CON $11 ' backlight on LcdBLoff CON $12 ' backlight off LcdOff CON $15 ' LCD off LcdOn1 CON $16 ' LCD on; cursor off, blink off LcdOn2 CON $17 ' LCD on; cursor off, blink on LcdOn3 CON $18 ' LCD on; cursor on, blink off LcdOn4 CON $19 ' LCD on; cursor on, blink on LcdLine1 CON $80 ' move to line 1, column 0 LcdLine2 CON $94 ' move to line 2, column 0 LcdCC0 CON $F8 ' define custom char 0 LcdCC1 CON $F9 ' define custom char 1 LcdCC2 CON $FA ' define custom char 2 LcdCC3 CON $FB ' define custom char 3 LcdCC4 CON $FC ' define custom char 4 LcdCC5 CON $FD ' define custom char 5 LcdCC6 CON $FE ' define custom char 6 LcdCC7 CON $FF ' define custom char 7 ' DIR0 = 0 'pin to read left saw or X1X DIR1 = 0 'pin to read right saw or X2X DIR2 = 0 'Pin to read xauger or X3X DIR3 = 0 'pin to read pot for alarms on saws or A1A and is also A2A DIR4 = 0 'pin to read pot for alarm on xauger or A2A DIR5 = 0 'pin to turn on buzzer connected to blue pulsing buzzer through transistor DIR6 = 0 'pin to turn on led for alarm DIR7 = 0 ' pin saved to read GROUND SPEED at later date DIR8 = 0 ' DIR9 = 0 ' DIR10 = 0 ' DIR11 = 0 ' DIR12 = 0 ' DIR13 = 0 ' DIR14 = 0 ' DIR15 = 0 ' ' ' -----[ Variables ]------------------------------------------------------- X1X VAR Word ' variable tag for rpm value of Left saw X2X VAR Word ' variable tag for rpm value of right saw X3X VAR Word ' variable tag for rpm value of xauger A1A VAR Word ' variable tag for alarm set point of BOTH saws A2A VAR Word ' variable tag for alarm set point of auger A3A VAR Word ' variable tag for alarm set point of right saw BUT REALLY EQUAL TO A1A ALARM VAR Word ' variable tag to turn on alarm ' -----[ Initialization ]-------------------------------------------------- Reset: HIGH TX ' setup serial output pin PAUSE 100 ' allow LCD to initialize ' -----[ Program Code ]---------------------------------------------------- ' Clear the display and remove cursor and blinking attributes. Main: SEROUT TX, LcdBaud, [LcdBLon, LcdOn1, LcdCls] PAUSE 100 ' GOSUB Pot_SAWS ' GET pot for alarms on saws ' GOSUB Pot_XAUGER ' GET pot for alarm on Xauger ' GOSUB X1X_SPEED 'GET SPEED OF LEFT SAW WITH COUNT ' GOSUB X2X_SPEED 'GET SPEED OF RIGHT SAW WITH COUNT ' GOSUB X3X_SPEED 'GE SPEED OF XAUGER WITH COUNT ' GOSUB Compare ' compare rpms to alarm set points ' 'gosub Set_ALARMS ' did this in compare ' GOSUB Update_LCD ' refreshes lcd display ' ' ' GOTO main ' ' ' ' -----[ Subroutines ]----------------------------------------------------- Update_LCD: SEROUT TX, LcdBaud, [LcdLine1, " ", DEC3 X1X, " ", DEC3 X3X, " ", DEC3 X2X] SEROUT TX, LcdBaud, [LcdLine2, " ", DEC3 A1A, " ", DEC3 A3A, " ", DEC3 A2A] RETURN 'NEW CODE BLOCKS************************************ ' ' ' ' ' '************************************* Pot_SAWS: 'input pin 03 .. 10K TRIMPOT, .1uf cap and 220 ohm in series to ' A1A = 0 'reset to 0 HIGH 3 'precharge the cap PAUSE 100 ' RCTIME 3,1,A1A ' PAUSE 10 ' 'debug "A1A is ",dec A1A,CR 'used to get real scale ' ' A1A = A1A+0 ' Add to or change scale to get into the range needed ' DEBUG "A1A is ",DEC A1A,CR ' ' PAUSE 100 ' ' A2A = A1A 'sets alarm for right saw the same as left ' RETURN ' '****************************** ' ' ' Pot_Xauger: 'input pin 04 .. 10K TRIMPOT, .1uf cap and 220 ohm in series to ' A3A = 0 'reset to 0 HIGH 4 'precharge the cap PAUSE 100 ' RCTIME 4,1,A3A ' PAUSE 10 ' 'debug "A3A is ",dec A3A,CR 'used to get real scale ' ' A3A = A3A+0 ' Add to or change scale to get into the range needed ' DEBUG "A3A is ",DEC A3A,CR ' ' PAUSE 100 ' ' ' RETURN ' ' ' '********************************** ' ' X1X_SPEED: 'get speed of left saw on pin 0 ' COUNT 0,500,X1X ' count pin 0 for 1/2 second X1X = X1X*2 ' correct reading to full second DEBUG "X1X IS ", DEC X1X,CR ' PAUSE 100 ' RETURN ' ' ' '################################### ' ' X2X_SPEED: 'get speed of left saw on pin 1 ' COUNT 1,500,X2X ' count pin 1 for 1/2 second X2X = X2X*2 ' correct reading to full second DEBUG "X2X IS ",DEC X2X,CR ' PAUSE 100 ' RETURN ' ' ' '********************************** ' ' X3X_SPEED: 'get speed of left saw on pin 2 ' COUNT 2,500,X3X ' count pin 2 for 1/2 second X3X = X3X*2 ' correct reading to full second DEBUG "X3X IS ",DEC X3X,CR ' PAUSE 100 ' RETURN ' ' ' '******************************** ' ' COMPARE: ' COMPARE SPEEDS TO ALARM SETPOINTS ' ALARM = 0 ' IF X1X < A1A THEN X2 ' ALARM = ALARM +1 'FLAG TO SET ALARM IF ANY ARE BELOW SETPOINT ' x2: ' IF X2X < A2A THEN X3 ' ALARM = ALARM +1 ' FLAG FOR ALARM ' X3: ' IF X3X < A3A THEN Alarm_SET ' ALARM = ALARM +1 ' ' Alarm_SET: ' ' ' IF ALARM >0 THEN A_ON ' ALARM=0 'RESET ALARM FLAG DEBUG "alarm off",CR ' LOW 5 'TURNS OFF BUZZER LOW 6 'TURNS OFF LED ' RETURN ' ' A_ON: 'TURNS ON ALARMS & BUZZER DEBUG "alarm on", CR ' HIGH 5 'turn on buzzer HIGH 6 'TURN ON LED PAUSE 100 'PAUSE LONG ENOUGH TO CHARGE CAP TO KEEP LED & BUZZER CONSTANT AND NOT INTERMITTENT 'ALARM=0 'RESET ALARM FLAG 'LOW 5 'TURNS OFF BUZZER 'LOW 6 'TURNS OFF LED ' RETURN ' ' 'Z**********************************
Comments
Interesting...the code you had should have worked if you moved the LCD init code above Main. Replacing the GOTO with a LOOP should have caused a LOOP without DO error.
The LCD shouldn't do any blinking unless you are executing the following block of code repeatedly.
This code should only ever execute once. The Update_LCD routine is designed to overwrite the entire screen in such a way that you should never have to clear it and should not see any blink.
anyone ever see this happen. the top row gets three signals into the bs2, and displays the three speeds across top, the bottom row has three alarm setpoints that go with the speeds on the top row, and sound an alarm and led if the speed drops below the set point. this worked for about a day, now display shows this. and the center speed is no longer showing the speed of the signal.
i ran the signal speed of a mag pickup coil sensor thru a 220ohm resister then through, a In4004 diode with stripe facing sensor, then had a 4.7v zenier diode to ground and a 100k to +5v then straight into bs2. schematic below. lcd is 16x2 backlit serial connection