Display Message when sound received
(and finished) on LCD
The sound input is filtered and amplified using a 324 op-amp.
To remove small transients, the application
Checks the TMR1 count once every 20 msecs and compares
the current value to see if it has increased by 5 over
the previous 20 msec poll.
This is a two wire interface using a 76LS1784 as a shift
register and the code called from the mainline
(and timed from TMR0 interrupt)
Hardware Notes:
PIC16F874 Running at 4 MHz
RB 1 - CLock Signal to the LCD
RB 2 - Data Signal to the LCD
Global Variables
Real Time Clock Counter
Initialization Delay Value
Current LCD State
static volatile bit Clock
static volatile bit ClockTRIS
static volatile bit Data
static volatile bit DataTRIS
Message to be Sent Out
Index to current Message Byte
Message when sound
Message when nothing
msecs for Sound Check
Timer Values
0 - No Sound
1 - Sound Received, Check Next
2 - Sound Received, Ended
Configuration Fuses
PIC116F627 Configuration Fuses
External "XT" Oscillator
RA6/RA7 Digital I/O
External Reset
70 msecs Power Up Timer On
Watchdog Timer Off
Code Protection Off
BODEN Enabled
Delay Specified Number of msecs
1 Second Delay Variable
Get the End Time
Send Nybble to LCD
Repeat for six bits
Write the "0"s into the '174
Output the "AND" Value
Output the RS Bit Value
Output the Nybble
Output the High Order Bit
Strobe the Clock
Shift up Nybble for Next Byte
Toggle the "E" Clock Bit
Send Byteto LCD
Send High Nybble
Send Low Nybble
Initialize the LCD I/O Pins
Low I/O Bits
End LCDInit
Output the Data String
Wait for LCD Available
Load up the string
Start Sending the String
Interrupt Handler
TMR0 Interrupt Handler
Reset Interrupt Flag
Increment the Clock
Put additional interface code for 1 msec interrupt here
Sound Check Software
Check the Current Sound Value
Time to Check?
Reset
Indicate Sound Received
Save Current Counter
Check to see if Sound still active
Time to Check?
Reset
Indicate Sound Finished
Save Current Counter
LCD State Machine
Process the State Machine information
Step 1 - Send Init Char
Start LCD Initialization Process
Wait 20 msecs for LCD to reset
Step 2 - Send Init Char
Wait for Command to Complete
Step 3 - Send Init Char
Step 4 - Send Init Char
Step 5 - Set Operating
Interface Size (4 Bits)
Step 6 - Set Operating
Step 7 - Display Off
Step 8 - Clear Display
Wait 5 msecs for Clear to Complete
Wait for Command to Complete
Step 9 - Shift
Step 10 - Display On
Ready to Run
Output a Character in "MessageOut"
At the End of the Message
Reset Message Index
Clear Display
Command Byte follows
All other characters
Message Delay
endswitch
endif
Put Different Interrupt Handlers here
End Interrupt Handler
Mainline
Template Mainline
Assign Prescaler to TMR0
Prescaler is /4
Reset the Timer for Start
Enable Timer Interrupts
Enable Interrupts
Initialize the LCD Port
Put in Interface initialization code here
Initialize Timer 1
1:1 Prescaler
T1OSCEN Off
_T1SYNC Active
TMR1CS is Exteral Clock
TMR1ON
Loop forever
Put in Robot high level operation code here
Wait for Sound Received
Indicate "Sound"
Wait 1 Second
Clear the Sound Message
Reset and wait for next sound
endwhile
End of Mainline