О применении среды Bascom для программирования Arduino было написано на хабре. Но было это давно
BASCOM-AVR это в первую очередь среда программирования для микроконтроллеров и в ней ведется работа не с номерами выводов (как в Arduino IDE), а с именами портов и номерами их битов.
Таблица номерами выводов и с соответствующими им именами портов для Arduino nano 3.
![nano30pins.gif BASCOM-AVR - альтернативная среда разработки для Arduino](https://cdn.homedistil.ru/fs/1602/19/46417.267587.gif)
Например если необходимо работать с выводом D2 ардуины, то следует взаимодействовать с выводами PortD.2 (запись) и PinD.2 (чтение).
Интересно было бы взглянуть на считывание температуры с DS18B20. Заранее спасибо.Алексей10, 19 Февр. 16, 18:00В простейшей случае, код будет таким
$regfile = "m328pdef.dat" ' ATmega328P.
$crystal = 16000000 ' Частота генератора, Гц.
$hwstack = 64 ' Размер стеков.
$swstack = 64
$framesize = 64
' Конфигурация
$baud = 9600 ' По умолчанию, скорость USART = 9600 бод
Config 1wire = Portd.2 ' Вывод к которому подключен контакт DQ DS18B20
Config Portd.3 = Output ' Вывод питания датчика
Portd.3 = 1 ' Для питания датчика
' Переменные и массивы
Dim 1w_data(9) As Byte ' Массив данных из DS18B20
Dim 1w_2byte As Integer At 1w_data Overlay
Dim Temp As Single
Do
1wreset ' Сброс датчика ' Нет ошибок
1wwrite &HCC ' Команда "Skip ROM"
1wwrite &H44 ' Команда "Convert T".
Waitms 750 ' Датчику нужно 750 миллисекунд для измерения температуры
1wreset ' Сброс датчика
1wwrite &HCC ' Команда "Skip ROM"
1wwrite &HBE ' Команда "Read scratchpad"
1w_data(1) = 1wread(2) ' Чтение 2 байт из датчика в массив
Temp = 1w_2byte / 16 ' Преобразование температуры в привычный нам вид.
Print Fusing(temp , "#.#") ' Передача по USART измеренной температуры
Loop
![ds18b20.jpg BASCOM-AVR - альтернативная среда разработки для Arduino](https://cdn.homedistil.ru/fs/1602/19/46417.267590.jpg)
Это упрощенный код. Для большей надежности необходимо добавить проверки на наличие ошибок датчика.
$regfile = "m328pdef.dat" ' ATmega328P.
$crystal = 16000000 ' Частота генератора, Гц.
$hwstack = 64 ' Размер стеков.
$swstack = 64
$framesize = 64
' Конфигурация
$baud = 9600 ' По умолчанию, скорость USART = 9600 бод
Config 1wire = Portd.2 ' Вывод к которому подключен контакт DQ DS18B20
Config Portd.3 = Output ' Вывод питания датчика
Portd.3 = 1 ' Для питания датчика
' Переменные и массивы
Dim 1w_data(9) As Byte ' Массив данных из DS18B20
Dim 1w_2byte As Integer At 1w_data Overlay
Dim Temp As Single
Do
1wreset ' Сброс датчика
If Err = 0 Then ' Нет ошибок
1wwrite &HCC ' Команда "Skip ROM"
1wwrite &H44 ' Команда "Convert T".
Waitms 750 ' Датчику нужно 750 миллисекунд для измерения температуры
1wreset ' Сброс датчика
1wwrite &HCC ' Команда "Skip ROM"
1wwrite &HBE ' Команда "Read scratchpad"
1w_data(1) = 1wread(9) ' Чтение 9 байт из датчика в массив
If 1w_data(9) = Crc8(1w_data(1) , 8) Then ' Проверка контрольной суммы.
Temp = 1w_2byte / 16 ' Преобразование температуры в привычный нам вид.
Print Fusing(temp , "#.#") ' Передача по USART измеренной температуры
Else
Print "CRC error"
End If
Else
Print "Sensor error"
Waitms 500
End If
Loop
![programmator.png BASCOM-AVR - альтернативная среда разработки для Arduino](https://cdn.homedistil.ru/fs/1602/19/46417.267592.png)
Сохраняем эти настройки. Теперь в меню Программа кликаем по Передать в МК и в появившемся окне, в меню МК кликаем по Писать буфер в МК. Прошивка запишется в ардуино.
Для тестирования работы, нужно запустить любую терминальную программу, в которой выбрать COM порт ардуины и скорость 9600 бод. Примерно раз в секунду ардуина будет сообщать измеренную температуру.