Microcontroladores: Protocolos SPI

Interface em Visual Basic

(Daqui em diante assume-se que o leitor está minimamente familiarizado com o programa Visual Basic.)

Para a interface pode-se começar por criar o layout da mesma:

Protocolo SPI: interface Visual Basic

Um dos componentes mais importantes desta interface é o componente MSComm. É aqui que se define como irá ser usada a porta de série do PC. Também se adicionam duas caixas de texto e dois botões.

Assim que o programa for executado configura-se a porta de  série 1. Estes parâmetros têm que estar de acordo com os dados da inicialização da USART do microcontrolador.

Private Sub Form_Load()
  ' chose correct settings for your device
  Settings = "115200,N,8,1"
  MSComm1.Settings = Settings

  ''''''''''''''''''''''''''''''
  ' Open COM1
  MSComm1.CommPort = 1
  MSComm1.OutBufferSize = 4
  MSComm1.PortOpen = True
  ' Make sure DTR line is low to prevent Stamp reset
  MSComm1.DTREnable = False
  MSComm1.RThreshold = 1
  MSComm1.InputLen = 1
End Sub

É possível tornar esta interface mais robusta, para que perante situações não previstas esta reaja de uma forma esperada.

A caixa de texto referente à tensão da DAC tem o nome tensão_dac e  o botão tem o nome send_butom.

Assim, quando o botão send_butom for pressionado será enviado o valor da caixa de texto para o microcontrolador.

Para não complicar a compreensão do código e para usar os recursos disponíveis no VB, optou-se por enviar o valor da tensão num conjunto de 3 bytes, antecedidos do carácter s .

Private Sub send_Click()
  MSComm1.Output = "s"
  MSComm1.Output = Hex(tensao_dac.Text)
End Sub

Para se receber a tensão da ADC do microcontrolador usa-se o botão que tem a inscrição TensãoADC[mV]. A este botão foi dado o nome Request_butom. Assim, quando este for pressionado, será enviado o carácter r.

Private Sub request_Click()
  MSComm1.Output = "r"
End Sub

Assim que o microcontrolador receber o carácter r, vai activar a ADC. Após a conversão envia o valor para a sua USART. Assim que o microcontrolador tiver enviado o valor da conversão pela USART, a porta série do PC receberá esse valor.

Private Sub MSComm1_OnComm()
  Dim sData As String
  Dim Lido As Integer

  ' If Rx Event then get data
  ' and process
  If MSComm1.CommEvent = comEvReceive Then
    sData = MSComm1.Input
    tensao_adc.Text = Round( Asc(sData) * 19,4)
  End If
End Sub

A ADC fez uma conversão de 8 bits. O resultado dessa conversão estará compreendido entre 0 e 255, o que implica que este valor tenha que ser adaptado à natureza da conversão. Daí se multiplicar o valor recebido por 19.4. Para terminar a interface é conveniente que se desactive a porta de série para que não existam conflitos futuros… Para testar tanto o envio de informação para a DAC pode-se ligar a ADC do microcontrolador à saída da DAC. A não coincidência da tensão lida da ADC com a tensão de saída da DAC está relacionada com o facto da ADC ser de 8 bits.