Документация

± 12 бит данных АЦП, сигнатура "±" в 13 бите

У кого есть возможность, пожалуйста, проверьте в железе.


Исходник Bascom

'-----------------------  Конфигурация контроллера  ----------------------------
  $map       ' Получаем карту распределения памяти компилятором Bascom
  $regfile = "m328pdef.dat"       ' Используемый контроллер, документация производителя - http://www.atmel.com/Images/Atmel-2549- … asheet.pdf
  $crystal = 1000000       ' 1 МГц, частота для расчета временных задержек компилятором, должна соответствовать запрограммированым фьюзам МК
  $framesize = 64       ' Размер области используемой и необходимой для преобразований
  $hwstack = 64       ' Размер аппаратного стека
  $swstack = 64       ' Размер программного стека

'-----------------------  Конфигурация USART  ----------------------------------
  $baud = 4800       ' Скорость трансляции
  Config Com1 = Baud , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
  Ucsr0a.1 = 1       ' Baud = Baud * 2

'-----------------------  Конфигурация MCP330x  --------------------------------
  Cs_mcp330x Alias Portb.2 : Config Cs_mcp330x = Output : Cs_mcp330x = 1
  Din_mcp330x Alias Pinb.4 : Config Din_mcp330x = Input
  Sck_mcp330x Alias Portb.5 : Config Sck_mcp330x = Output : Reset Sck_mcp330x

'---------------  Используемые переменные, для работы с MCP330x ----------------
  Dim A_mcp330x As Byte
  Dim Сигнатура_mcp330x As Byte
  Dim Данные_mcp330x_word As Word

'===============================================================================
  Главный_цикл:
'===============================================================================

        Gosub Ацп_mcp330x

        Print Данные_mcp330x_word
        Waitms 500

'===============================================================================
  Goto Главный_цикл
End
'===============================================================================

'===============================================================================
  Ацп_mcp330x:
'-------------------------------------------------------------------------------
        Sck_mcp330x = 0
        Cs_mcp330x = 0

        Sck_mcp330x = 1
        Sck_mcp330x = 0
        Sck_mcp330x = 1
        Sck_mcp330x = 0

        Sck_mcp330x = 1
        Sck_mcp330x = 0

        If Pinb.4 = 1 Then
            Сигнатура_mcp330x = 1
          Else
            Сигнатура_mcp330x = 0
        End If

        For A_mcp330x = 11 To 0 Step -1

            Sck_mcp330x = 1
            Sck_mcp330x = 0

            If Pinb.4 = 1 Then
                Данные_mcp330x_word.a_mcp330x = 1
              Else
                Данные_mcp330x_word.a_mcp330x = 0
            End If

        Next A_mcp330x

        Cs_mcp330x = 1
'-------------------------------------------------------------------------------
  Return
'===============================================================================

Исходник ASM

'-----------------------  Конфигурация контроллера  ----------------------------
  $map       ' Получаем карту распределения памяти компилятором Bascom
  $regfile = "m328pdef.dat"       ' Используемый контроллер, документация производителя - http://www.atmel.com/Images/Atmel-2549- … asheet.pdf
  $crystal = 1000000       ' 1 МГц, частота для расчета временных задержек компилятором, должна соответствовать запрограммированым фьюзам МК
  $framesize = 64       ' Размер области используемой и необходимой для преобразований
  $hwstack = 64       ' Размер аппаратного стека
  $swstack = 64       ' Размер программного стека

'-----------------------  Конфигурация USART  ----------------------------------
  $baud = 4800       ' Скорость трансляции
  Config Com1 = Baud , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
  Ucsr0a.1 = 1       ' Baud = Baud * 2

'-----------------------  Конфигурация MCP330x  --------------------------------
  Pin_din_mcp330x Alias 4
  Port_din_mcp330x Alias Pinb
  Din_mcp330x Alias Pinb.4 : Config Din_mcp330x = Input

  Cs_mcp330x Alias Portb.2 : Config Cs_mcp330x = Output : Cs_mcp330x = 1
  Sck_mcp330x Alias Portb.5 : Config Sck_mcp330x = Output : Reset Sck_mcp330x

'---------------  Используемые переменные, для работы с MCP330x ----------------
  Dim A_mcp330x As Byte
  Dim Сигнатура_mcp330x As Byte
  Dim Данные_mcp330x_word As Word

'===============================================================================
  Главный_цикл:
'===============================================================================

        Gosub Ацп_mcp330x

        Print Данные_mcp330x_word
        Waitms 500

'===============================================================================
  Goto Главный_цикл
End
'===============================================================================

'===============================================================================
  Ацп_mcp330x:
'-------------------------------------------------------------------------------
    Sck_mcp330x = 0
    Cs_mcp330x = 0

    Sck_mcp330x = 1
    Sck_mcp330x = 0
    Sck_mcp330x = 1
    Sck_mcp330x = 0

   Чтение_сигнатуры_mcp330x:
    !clr R16
    Sck_mcp330x = 1
    Sck_mcp330x = 0
    !SBIC Port_din_mcp330x , Pin_din_mcp330x
    !SET
    !sBIs Port_din_mcp330x , Pin_din_mcp330x
    !clt
    !BLD R16 , 0
    !sts {Сигнатура_mcp330x} , R16

   'Принимаем старший байт
    !clr R16
    !ldi R17 , 4
   Чтение_mcp330x_high:
    Sck_mcp330x = 1
    Sck_mcp330x = 0
    !SBIC Port_din_mcp330x , Pin_din_mcp330x
    !SET
    !sBIs Port_din_mcp330x , Pin_din_mcp330x
    !clt
    !BLD R16 , 0
    !mov R27 , R16
    !LSl R16
    !dec R17
    !brne Чтение_mcp330x_high

   'Принимаем младший байт
    !clr R16
    !ldi R17 , 8
   Чтение_mcp330x_low:
    Sck_mcp330x = 1
    Sck_mcp330x = 0
    !SBIC Port_din_mcp330x , Pin_din_mcp330x
    !SET
    !sBIs Port_din_mcp330x , Pin_din_mcp330x
    !clt
    !BLD R16 , 0
    !mov R26 , R16
    !LSl R16
    !dec R17
    !brne Чтение_mcp330x_low

   'Забираем, что намеряли
    !sts {Данные_mcp330x_word} , R26
    !sts {Данные_mcp330x_word + 1} , R27

    Cs_mcp330x = 1
'-------------------------------------------------------------------------------
  Return
'===============================================================================