Recent Changes

Tuesday, November 8

  1. page Writing data from Host to Target edited Private Function TX_Dispatch() As Boolean Dim i&, j& If doTX_CommReset Then mTX_CommR…

    Private Function TX_Dispatch() As Boolean
    Dim i&, j&
    If doTX_CommReset Then
    mTX_CommReset
    Else
    For i = 0 To UBound(aoAllSysData)
    If 0 < aoAllSysData(i).doTX_kSetReq Then 'SET DATA
    For j& = 0 To aoAllSysData(i).mData(idxSysData_T0).mDataCount - 1
    mTX_WriteData aoAllSysData(i).myVarId, aoAllSysData(i).mData(idxSysData_T0).zData(j&), j&
    TX_Dispatch = True
    Next
    aoAllSysData(i).doTX_kSetReq = aoAllSysData(i).doTX_kSetReq - 1
    ElseIf 0 < aoAllSysData(i).doTX_kGetReq Then 'GET DATA
    mTX_ReqVar aoAllSysData(i)
    'MsgBox aoAllSysData(i).sVarName$
    End If
    Next
    End If
    End Function
    Private Sub mTX_WriteData(Id&, Value, Offs&) 'Generic set variable value
    Static nTimer!
    While nTimer! = Timer
    Stop
    Wend
    oUART.PushData kSetReq, 1
    oUART.PushData Id, 1
    oUART.PushData Offs&, 1
    oUART.PushData Value, 4
    End Sub
    Public Enum CmdTypes
    kReady = 0
    kErrMsg = 13
    kHandshake = 104 '"Handshake"
    kCommInit = 101 '"Initialize Protocol request to DSP and preample for returned data [SymbolicVarName, VarId,ArraySize and Type]
    kDSP2HostData = 201 'Response to DSP2HostCmd with data from DSP
    kGetReq = 111 'Request to read variable, this will increase a pointer in the target causing a send of the variable
    kSetReq = 102 'Host write to DSP memory
    kSendByte = 208
    kSend24Bit = 224
    kSend32Bit = 232
    End Enum
    Obsolete
    (view changes)
    6:26 am
  2. page Reading data from Target to Host edited Public Enum CmdTypes kReady = 0 kErrMsg = 13 kHandshake = 104 '"Handshake" kCommIn…

    Public Enum CmdTypes
    kReady = 0
    kErrMsg = 13
    kHandshake = 104 '"Handshake"
    kCommInit = 101 '"Initialize Protocol request to DSP and preample for returned data [SymbolicVarName, VarId,ArraySize and Type]
    kDSP2HostData = 201 'Response to DSP2HostCmd with data from DSP
    kGetReq = 111 'Request to read variable, this will increase a pointer in the target causing a send of the variable
    kSetReq = 102 'Host write to DSP memory
    kSendByte = 208
    kSend24Bit = 224
    kSend32Bit = 232
    End Enum
    Public myTXCmd As CmdTypes 'The header identifying type of data 'Header prolog
    Public myVarId As Byte 'Code identifying the variable '2 param in header
    Public doTX_kSetReq As Byte 'set values of a variable in target (Rev.140508)
    Public doTX_kGetReq As Byte 'requests to read variable from target (Rev.140508)
    Private Sub mTX_ReqVar(oD As cSysVar) 'Request a variable from device
    Dim i&
    Static nTimer!
    While nTimer! = Timer
    Stop
    Wend
    '? If oD.myTXCmd = kGetReq Then 'What should this be?
    oUART.PushData CmdTypes.kGetReq, kCmdBytes
    oUART.PushData oD.myVarId, kVarIdBytes
    oD.doTX_kGetReq = oD.doTX_kGetReq - 1 'Decrease queue
    End Sub
    Private Function RX_Dispatch() As Boolean 'Host side Called by buffer full interrupt
    'This will receive the data and dispatch them into their respective
    'variables
    Static cmd As CmdTypes, CmdStage&, VarId&, Data1 'State of decoding
    Static nWatchDogTimer! 'If negative, the operation has timed out. Receive error is issued by setting this negative
    Dim i&
    For i = 1 To 10 'Maximum 10 times of popping
    If oUART.CanPop(1) = False Then Exit Function 'At least 1 byte is expected
    If cmd = kReady Then
    cmd = oUART.PopWord(kk_CmdBytes)
    CmdStage = 0 'Reset FSSM state if Cmd = kReady
    nWatchDogTimer! = Timer + 10 'Get the state
    ElseIf cmd = kErrMsg Then
    Msg1 "Error message received " & cmd
    cmd = kReady 'Acknowledge
    fMsg.Show
    'First process pending decode preamble
    ElseIf (cmd = kSend32Bit) Or (cmd = kSend24Bit) Then
    GetDataPack cmd, CmdStage&, VarId, Data1
    If cmd = kReady Then
    RX_CopyData2SysData VarId, UBound(Data1) + 1, Data1
    End If
    ElseIf (cmd = kGetReq) Then 'Get acknowledge of kGetReq and insert it into protocol
    ' RX_DSP2HostCmd Cmd
    ElseIf (cmd = kDSP2HostData) Then 'we are in DSP2HostData decoding state
    ' RX_DSP2HostData_Decode Cmd&, CmdStage& 'Take next command on success
    ElseIf cmd = kCommInit Then 'Receive the exposed vars in the protocol
    mRX_ReadProtocol cmd, CmdStage
    ElseIf cmd = kHandshake Then
    'RX_Handshake Cmd
    ElseIf (nWatchDogTimer! < Timer) Then
    Stop
    fMsg.Show
    Msg1 "Watchdog timeout"
    oUART.Flush
    cmd = kReady
    Else 'Error
    ' its a unexpected command
    Msg1 "??Cmd=" & cmd
    cmd = kReady
    oUART.Flush
    'A problem occoured, lets reset the protocol
    End If
    Next
    End Function
    Private Sub GetDataPack(cmd&, CmdStage&, VarId1&, Data)
    'Receive a datapack of type cmd in progressive stages by CmdStage
    'The varId and Data received will be returned
    'On error the CMD will show kErr
    ' There are 4 stages (CmdStage&)
    ' 0: Initialization, set process pointers
    ' 1: Receive Var Id
    ' 2: Receive Package size
    ' 3: Receive elements of datapack
    ' 0/err: End of pack success/failure
    Static VarId&, DataIdx&, DataCount&, WordSize&
    Dim Rcvd
    If CmdStage& < 1 Then 'Start pack processing
    CmdStage& = 1
    If cmd = kSend32Bit Then
    WordSize& = 4
    ElseIf cmd = kSend24Bit Then
    WordSize& = 3
    Else
    Exit Sub
    End If
    End If
    If (CmdStage = 1) And oUART.CanPop(1) Then
    VarId = oUART.PopWord(1)
    DataIdx& = 0
    CmdStage& = 2
    End If
    If CmdStage& = 2 And oUART.CanPop(1) Then 'Get data length
    DataCount& = oUART.PopWord(1)
    If (DataIdx& < DataCount&) And (DataCount& < 200) Then
    ReDim Data(DataCount& - 1)
    CmdStage& = 3 'Start data indexing
    Else
    cmd = kErrMsg 'Error
    Exit Sub
    End If
    End If
    While (CmdStage& = 3) And oUART.CanPop(WordSize) 'Get the word
    Rcvd = oUART.PopWord(WordSize&)
    Data(DataIdx&) = Rcvd
    DataIdx& = DataIdx& + 1
    If DataIdx& >= DataCount& Then 'Received all
    VarId1 = VarId
    cmd = kReady ' success
    Exit Sub
    End If
    Wend
    End Sub
    Private Function TX_Dispatch() As Boolean
    Dim i&, j&
    If doTX_CommReset Then
    mTX_CommReset
    Else
    For i = 0 To UBound(aoAllSysData)
    If 0 < aoAllSysData(i).doTX_kSetReq Then 'SET DATA
    For j& = 0 To aoAllSysData(i).mData(idxSysData_T0).mDataCount - 1
    mTX_WriteData aoAllSysData(i).myVarId, aoAllSysData(i).mData(idxSysData_T0).zData(j&), j&
    TX_Dispatch = True
    Next
    aoAllSysData(i).doTX_kSetReq = aoAllSysData(i).doTX_kSetReq - 1
    ElseIf 0 < aoAllSysData(i).doTX_kGetReq Then 'GET DATA
    mTX_ReqVar aoAllSysData(i)
    'MsgBox aoAllSysData(i).sVarName$
    End If
    Next
    End If
    End Function
    Private Function RX_Dispatch() As Boolean 'Host side Called by buffer full interrupt
    'This will receive the data and dispatch them into their respective
    'variables
    Static cmd As CmdTypes, CmdStage&, VarId&, Data1 'State of decoding
    Static nWatchDogTimer! 'If negative, the operation has timed out. Receive error is issued by setting this negative
    Dim i&
    For i = 1 To 10 'Maximum 10 times of popping
    If oUART.CanPop(1) = False Then Exit Function 'At least 1 byte is expected
    If cmd = kReady Then
    cmd = oUART.PopWord(kk_CmdBytes)
    CmdStage = 0 'Reset FSSM state if Cmd = kReady
    nWatchDogTimer! = Timer + 10 'Get the state
    ElseIf cmd = kErrMsg Then
    Msg1 "Error message received " & cmd
    cmd = kReady 'Acknowledge
    fMsg.Show
    'First process pending decode preamble
    ElseIf (cmd = kSend32Bit) Or (cmd = kSend24Bit) Then
    GetDataPack cmd, CmdStage&, VarId, Data1
    If cmd = kReady Then
    RX_CopyData2SysData VarId, UBound(Data1) + 1, Data1
    End If
    ElseIf (cmd = kGetReq) Then 'Get acknowledge of kGetReq and insert it into protocol
    ' RX_DSP2HostCmd Cmd
    ElseIf (cmd = kDSP2HostData) Then 'we are in DSP2HostData decoding state
    ' RX_DSP2HostData_Decode Cmd&, CmdStage& 'Take next command on success
    ElseIf cmd = kCommInit Then 'Receive the exposed vars in the protocol
    mRX_ReadProtocol cmd, CmdStage
    ElseIf cmd = kHandshake Then
    'RX_Handshake Cmd
    ElseIf (nWatchDogTimer! < Timer) Then
    Stop
    fMsg.Show
    Msg1 "Watchdog timeout"
    oUART.Flush
    cmd = kReady
    Else 'Error
    ' its a unexpected command
    Msg1 "??Cmd=" & cmd
    cmd = kReady
    oUART.Flush
    'A problem occoured, lets reset the protocol
    End If
    Next
    End Function
    Private Sub GetDataPack(cmd&, CmdStage&, VarId1&, Data)
    'Receive a datapack of type cmd in progressive stages by CmdStage
    'The varId and Data received will be returned
    'On error the CMD will show kErr
    ' There are 4 stages (CmdStage&)
    ' 0: Initialization, set process pointers
    ' 1: Receive Var Id
    ' 2: Receive Package size
    ' 3: Receive elements of datapack
    ' 0/err: End of pack success/failure
    Static VarId&, DataIdx&, DataCount&, WordSize&
    Dim Rcvd
    If CmdStage& < 1 Then 'Start pack processing
    CmdStage& = 1
    If cmd = kSend32Bit Then
    WordSize& = 4
    ElseIf cmd = kSend24Bit Then
    WordSize& = 3
    Else
    Exit Sub
    End If
    End If
    If (CmdStage = 1) And oUART.CanPop(1) Then
    VarId = oUART.PopWord(1)
    DataIdx& = 0
    CmdStage& = 2
    End If
    If CmdStage& = 2 And oUART.CanPop(1) Then 'Get data length
    DataCount& = oUART.PopWord(1)
    If (DataIdx& < DataCount&) And (DataCount& < 200) Then
    ReDim Data(DataCount& - 1)
    CmdStage& = 3 'Start data indexing
    Else
    cmd = kErrMsg 'Error
    Exit Sub
    End If
    End If
    While (CmdStage& = 3) And oUART.CanPop(WordSize) 'Get the word
    Rcvd = oUART.PopWord(WordSize&)
    Data(DataIdx&) = Rcvd
    DataIdx& = DataIdx& + 1
    If DataIdx& >= DataCount& Then 'Received all
    VarId1 = VarId
    cmd = kReady ' success
    Exit Sub
    End If
    Wend
    End Sub
    Obsolete

    (view changes)
    6:24 am

Thursday, November 3

  1. page Protocol Initialization edited State = Communication Initialization While Read kCommInit mRX_ReadProtocol End while mRX_Re…

    State = Communication Initialization
    While
    Read kCommInit
    mRX_ReadProtocol
    End while
    mRX_ReadProtocol {
    Variables
    nStrLen as byte
    sVarName as char string[nStrLen]
    VarId byte
    nArrLen as byte
    nTypeId as type enumerator
    case state:
    Read nStrLen length of string ‘VarName’
    Read sVarName ‘VarName’
    Read VarId ‘VarId’
    Read nArrLen length of the array that VarName points to
    Read nTypeId //type identification code for VarName
    End case
    }
    Snippets for visual basic implementation
    Public aoAllSysData() As cSysVar 'Sysvar contains an object of each variable in the protocol
    obsolete

    (view changes)
    6:50 am

Monday, September 26

  1. page Mark edited ... of Mark - A vision statement A story about a different path to greater autonomy. A ficti…

    ...
    of Mark - A vision statement
    A story about a different path to greater autonomy. A fiction based upon personal accounts where we imagine how this project could be useful
    Last year Marco has had an accident. He remembers the last show: did the animator on the holiday park and was entertaining the audience with his "final stunt".
    He had done it so many times and it was always a success when he, all dressed up, made an acrobatic somersault dive from the stage into the pool. Perhaps because he was tired, perhaps because .... nobody knows... by accident the stage was this time in the wrong end of the pool. Head down in just 30 cm of water! ... no chance!When he woke up he continued to say that it was just a dream ... a bad dream. The doctor's verdict could not be accepted by his mind. “No walking, no swimming, no…”. For his 19 years birthday a wheelchair was not what he had dreamed of.Mark has now found peace with himself in relation to his condition. Bound to a wheelchair for the rest of his life, but at least the arms have not completely lost their functionality. He learned to get by with the help of family and friends but it is important to be able to do many things by yourself. It annoys him not to have a good grip with his hands. He fails, for example, to lift a bottle of water or a glass. His backpack is full of various aids that he has had built.Before the accident he had enrolled in the degree course in physiotherapy: now he will have to consider other possibilities. Maybe he should become an engineer!Surfing the web and found a project, open source. It is a system that could serve to improve the hand function, just what would serve him!One day, talking to his old friend Peter, a passionate maker who is always looking for new challenges for his 3D printer, he asked him if he thought it was possible to copy a project seen on the web.- "Wow .. a hybrid: exoskeleton -neuroprosthesis! ... interresting!" Peter said "he always likes these cutting edge things."Come on, Mark, I do it right away.""No wait! ... I do not know if I'm interested," said Marco ... "maybe it's not the case: the doctors always tell me that certain things should not be built with the DIY.""Peter! .... It cost nothing to try .... well we study the question ... did you see the video on the site? That guy has got an improved grip and ... even though I do not understand anything of English scientific seems to me that this research is the result of much work, you know ?! ""You've convinced me: I think I'd really like you to do the neuroprosthesis.""Obviously we will need the advice of a doctor. 'Cause we do not try to contact your primary dell' spinal unit?"All 'spinal unit, where Marco often have to travel (for its different problems), are always willing to help those who want to experiment with new solutions for the disabled.Meanwhile, that Mark is there, for one of his many visits, he calls to the primary if he knows the project, because it would prove it. The primary, who already knows a similar technology, agrees. Marco submit to a brief examination electrophysiology: the outcome confirms that the flexors of the fingers of the left hand respond to electrical stimulation, and the same hand possesses, also, a good extension.So, the neuroprosthesis, might work.Instead, the right hand does not respond so well as the left: Marco although it had placed greater hopes for him being the dominant one."At least let's try with the left hand," he says Peter excited to help his friend.Marco instead is a bit 'down."I do not know, I have some doubts because with the left I always really struggled in precision gestures.""All right ... but it can not hurt," interjects Peter"Let's see what we will have to spend," says Marco.
    (From here it’s a Google translation, please bear or help us)
    ...
    components. "States PeterSure,Peter" Sure, a little
    ...
    this invention.
    October 2015

    (Please join in on the wiki to improve this essay).
    (view changes)
    6:41 am

Tuesday, August 30

  1. page Communication Protocol edited This document is obsolete. Please see team documentation 'Comm Protocol' for the latest version …

    This document is obsolete. Please see team documentation 'Comm Protocol' for the latest version
    Bluetooth WT11i Per collegamento al nostro Host vedi WT11i Configuration
    Specifications of communication
    ...
    nCmdB = [ pack type]<packlength>
    data = <array of data>
    ...
    all nCmdB maymay require data.
    Below is a list of pack types.
    nCmdB
    (view changes)
    12:11 pm

Monday, August 29

  1. page Hardware V1 - Idefix edited ... VCCS-SMPS Versione 10 MeCFES. Si trova su: https://sourceforge.net/projects/mecfes/upload/Cani…
    ...
    VCCS-SMPS Versione 10 MeCFES. Si trova su: https://sourceforge.net/projects/mecfes/upload/Canibalismo/
    MUX Versione 10 MeCFES
    {idefixv1.png} Outdated per 160829
    Stato di avanzamento per il layout
    https://sourceforge.net/projects/mecfes/files/Idefix/
    ...
    ADUCM-SMPS
    In progress
    Filter calculations for the AD8232
    (view changes)
    1:02 pm
  2. page AD8232 Filter edited Dimensioning of the circuit around AD8232 {http://wiki.analog.com/_media/resources/eval/ad8232-ev…
    Dimensioning of the circuit around AD8232
    {http://wiki.analog.com/_media/resources/eval/ad8232-evalz_sch.jpg?cache=&w=900&h=666&tok=93c281} AD8232-EVALZ_sch
    According
    This page has been moved to the application note evaluation board: AD8232_EVBoard www.analog.com/media/en/technical-documentation/user-guides/AD8232-EVALZ_UG-514.pdf
    Low-Pass Filter
    The internal uncommitted op amp is used to build a two-pole low pass filter with gain, using a
    Sallen-Key configuration. The following design equations set the low-pass cut-off frequency, gain and
    Q.
    f c = 1 / [2π √(R10 C8 R13 C9)]
    Gain = 1 + R16/R17
    For EMG applications a band pass filter with high pass cut off (Fch=16Hz) and low pass cut off (Fcl =500Hz) is adequate
    R1
    R2
    C1
    C2
    FcHP
    1,00E+05
    1,00E+05
    1,00E-07
    1,00E-07
    15,91549
    1,00E+04
    1,00E+04
    3,30E-08
    3,30E-08
    482,2877
    so for a cut off frequency of ca 500Hz the following values could be used
    R1
    R2
    C1
    C2
    FcHP
    200k
    1M
    10n
    22n
    24Hz
    1,00E+04
    1,00E+04
    3,30E-08
    3,30E-08
    482,2877
    so for a cut off frequency of ca 500Hz the following values could be used
    R1=R2=10kOhm
    C1=C2=33nF
    These values would yield Fc=482Hz
    Lillefix SCH
    AD Application note
    Value
    Notes
    R117
    R1
    10k
    R118
    R2
    10k
    C107
    C1
    33nF
    C109
    C2
    33nF
    High-Pass Filters
    f c = 100 / (2π R11 C7)Evaluaton board has R11= 10MΩ and C7 = 0.22μF
    Hardware documentation
    hosted on google docs as per 160829

    (view changes)
    12:59 pm

Friday, August 26

  1. page CURRENT STATE OF THE PROJECT edited ... - sleeve was cut in two half's in order to be enable it's opening and closing in order to put …
    ...
    - sleeve was cut in two half's in order to be enable it's opening and closing in order to put the forearm inside and then to lock the sleeve on the forearm
    - electrodes were attached to Velcro strip
    - strip was stretched between the horizontal bars of the structure in order to make the sleeve close itself wile the forearm applies it's weight on the strip
    - the locking/unlocking movement which was a crucial point due to user's impaired movement, had to become as easy as possible
    - as a simple solution, user would have to push down on the upper half of the structure on order to lock It to the second
    - the hooks which are located on the both braces of the structures will lock the sleeve on the forearm
    ( image )
    - disposable
    {IMG_20160826_111956_HDR[1].jpg} {IMG_20160826_112117_HDR.jpg}
    -disposable
    electrodes were
    ...
    be wet ionin order to
    - while using wet leather/ foam, electrodes are able to slide upon the skin wile maintaining electric contact, but they will need to be pushed passively to remain on the place and transmit electricity to the muscles
    4. Evaluation and solutions
    - the rigid structure is blocking the pronation of the wrist, movement that is used by some of target users to extend the palm
    - it was decided to use dynamic structure that allows the relative rotation between the braces
    ( dynamic structure various positions image){IMG_20160826_110017_1472202068936.jpg}
    - the braces were connected by four bars
    - the joint between the bar and the brace have to allow the relative movement (rotation and pronation)
    ...
    - the double hook locking mechanism gives a strong and secured lock, but its hard to open, easier solution will be needed
    - the interior surface of the braces needs softening for ergonomic skin contact
    ( softening image )
    - In order to maintain the electrodes in constant position
    4.5. Second concept
    after evaluating the first models,
    ...
    printed components
    4.1

    5.1
    joints
    {https://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Rotula.png/220px-Rotula.png}
    {IMG_20160826_122909_HDR[1].jpg}
    the key request for designing the joints was their grade of freedom between the brace and the bar. In order to enable the relative movement the bar will need to turn in all the axes.
    {4.jpg}
    It as decided to use the ball joint which gives maximum freedom, yet could be limited in motion for particular positions. in order to verify the validity of the solution 3d printing trials were made.
    The final shape that proved itself as mechanically resistant enough was a solid sphere shape that had an inserting area on the internal part of the brace. The braces will be located on the brace's interior board.
    4.25.2 bar length
    Bar length would need to variate in max of 10mm. Such little length request was obtained by positioning the joint in the way that the bar wound be extended on its initial position(mounting position), this way it would shorten and then straighten again while it's rotating towards the final position(with palm upwards). In order to enable the variation of the length, the bar was divided in two components, one of which will slide on the inside of the other, this way the mechanism will be hided and won't cause any discomfort.
    ( three moving phases images)
    (image of the bar components)
    4.3
    {IMG_20160826_110749_HDR.jpg}
    {IMG_20160826_110647_HDR.jpg} {IMG_20160826_121408_HDR.jpg}
    .3
    locking mechanism
    As it was seen before, the hook to hook mechanism was a strong and secure solution which had an detaching issue.
    ...
    use a snapclip mechanism that
    ...
    detachment easier
    ( fastener image)
    4.4

    {IMG_20160826_105541_HDR[1].jpg}
    5.4
    unlocking action
    As unlocking action It was chosen to use pulling movement, when the user pulls the bar of the structure towards himself. In order to pull the bar, user's fingers would need to inserted between the bar and the forearm.
    ( image of inserting the fingers )
    4.5
    {IMG_20160826_112327.jpg} {IMG_20160826_112346.jpg} {IMG_20160826_112359.jpg}
    5.5
    softening layer
    The area of application of the softening layer are the interior surfaces of the braces. As a softening layer could be used any material, that is compatible with skin contact and has a softening effect, foam, textile, neoprene etc.
    ( image of softened braces )
    4.6
    {IMG_20160826_110417_HDR.jpg}
    5.6
    electrode holders
    since electrode bars are straight and are not attached to the skin, the electrodes which are positioned on the extreme of the strip needs to be somehow applied to the skin and held still in the determined position
    In order to achieve this result, another component was developed. This component (electrode holder ) will tun around the bar, applying the electrodes to the skin when the hand while the forearm is being placed inside the structure
    ( electrode holder image )
    5.
    {IMG_20160826_121250_HDR.jpg}
    6.
    Model 2
    {SALVATORE PROVA MODELLO -TUTTO.jpg}
    5.16.1 Сonclusions
    The user has succeeded to manage the prototype but there few complications were present
    - upgrade of the fastening mechanism is needed in order to make the detaching movement easier
    - more intuitive shape of the user interacting components in needed
    6.7. Third concept
    Third concept would have to solve the problems discovered previously and will combine the ergonomic solutions of the previous versions with the electronic components which have to be integrated with the structure, considering it's dynamic behavior
    6.7.1 Model 3
    ...
    with user
    6.1

    7.2
    Test conclusions
    7.

    7.3
    Exterior cover
    8. Service strategy
    Such innovative approach as open source and personalized 3d printing, requires a design of a new kind of service that will connect all the phases of the production.
    (view changes)

More