Problem with 16F688 and Hserout


Results 1 to 14 of 14

Threaded View

  1. #5
    Join Date
    Feb 2005
    Location
    Revelstoke BC Canada
    Posts
    14


    Did you find this post helpful? Yes | No

    Default

    I caught that one to Darrel, I originally had it set that way, but it made no difference. When I power up the chip, it sends a portamento on command,(I don't know why, it should not) so it seems that the serial port is working, but nothing else is.

    here is the code with the typo's corrected.

    ' PicBasic file for midi footpedal interface using a Pic16F688
    ' foot pedals must have TRS plugs
    ' will work with 5-50k linier pots
    ' set osc to HS when programming

    DEFINE OSC 20 ' tell program we are using a 20mhz oscillator
    DEFINE HSER_RCSTA 90h ' enable hardware serial port
    DEFINE HSER_TXSTA 24h ' enable high speed transmit
    DEFINE HSER_BAUD 31250 ' set the baud rate
    DEFINE ADC_BITS 10 ' set the number of bits in the sample
    DEFINE ADC_SAMPLEUS 50 ' set the sample time

    TRISA = %00111111 ' Set PORTA to inputs
    TRISC = %00101111 ' set PORTC to inputs
    ANSEL = %11110000 ' enable analog 4,5,6,7 the rest as digital
    ADCON0 = %1000001 ' set VREF to VDD and right justify result
    ADCON1 = %00100000 ' set conversion clock FOSC/32
    CMCON0 = 7 ' turn off comparitors
    OPTION_REG.7 = 0 ' enable internal pull-ups on porta

    C0 Var word ' create C0 to store result from Volume pot
    C1 Var word ' create C1 to store result from Expression pot
    C2 Var word ' create C2 to store result from Foot Controller pot
    C3 Var word ' create C3 to store result from Portamanto Time pot
    vol Var byte ' create variable for volume
    exp Var byte ' create variable for expression
    foo Var byte ' create variable for foot controller
    por Var byte ' create variable for portamento time
    volout Var byte ' create variable for volume output
    expout Var byte ' create variable for expression output
    fooout Var byte ' create variable for foot controller output
    porout Var byte ' create variable for portamento time output
    sw1 Var byte ' create variable to hold switch1 value (sustain on/off)
    sw2 Var byte ' create variable to hold switch2 value (portamento on/off)

    loop:
    ADCIN 4,C0 ' read Volume pot and place value in C0
    vol = C0 / 8 ' convert reading to a midi value from 1-127
    If vol <> volout Then ' check to see if the value has changed
    volout = vol
    HSEROUT [176,7,volout] ' send Volume out serial port as midi information
    Endif

    ADCIN 5,C1 ' read expression pot and place value in C1
    exp = C1 / 8 ' convert reading to a midi value from 0-127
    If exp <> expout Then ' check to see if the value has changed
    exp = C1
    HSEROUT [176,11,expout] ' send exptession out serial port as midi information
    Endif

    ADCIN 6,C2 ' read foot controller pot and place value in C2
    foo = C2 / 8 ' convert reading to a midi value from 0-127
    If foo <> fooout Then ' check to see if the value has changed
    fooout = foo
    HSEROUT [176,4,fooout] ' send foot controller out serial port as midi information
    Endif

    ADCIN 7,C3 ' read portamento time pot and place value in C3
    por = C3 / 8 ' convert reading to a midi value from 0-127
    If por <> porout Then ' check to see if the value has changed
    porout = por
    HSEROUT [176,5,porout] ' send portamento time out serial port as midi information
    Endif

    If porta.0 = 0 Then sw1on ' check sustain pedal
    If porta.0 = 1 Then sw1off
    If porta.1 = 0 Then sw2on ' check portamento pedal
    If porta.1 = 1 Then sw2off

    If porta.2 = 0 Then
    Hserout [255] ' reset all controllers
    Endif

    Goto Loop ' go back to continuous monitoring

    sw1on:
    If sw1 = 0 Then ' check to see if sustain is off
    sw1 = 127
    Hserout [176,64,sw1] ' turn on sustain
    Endif

    sw1off:
    If sw1 = 127 Then ' check to see if sustain is on
    sw1 = 0
    Hserout [176,64,sw1] ' turn off sustain
    Endif

    sw2on:
    If sw2 = 0 Then ' check to see if portamento is off
    sw2 = 127
    Hserout [176,65,sw2] ' turn on portamento
    Endif

    sw2off:
    If sw2 = 127 Then ' check to see if portamento is on
    sw2 = 0
    Hserout [176,65,sw2] ' turn off portamento
    Endif

    Dave
    Last edited by DWV; - 22nd February 2005 at 04:51. Reason: would not accept my file attachment

Similar Threads

  1. Math problem on 16F688
    By PlantBob in forum mel PIC BASIC
    Replies: 4
    Last Post: - 14th June 2008, 22:51
  2. TX problem
    By Christopher4187 in forum General
    Replies: 5
    Last Post: - 19th October 2005, 00:48

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts