BASCOM AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

avrman писал(а):Может это и просто, но без примеров не разобраться, особенно мне. Если не трудно покажите на примере как сделать так, чтобы при превышении напряжения на прямом выводе компаратора относительно инверсного, мк давал признаки жизни, скажем менял уровень на одной из своих ног.


Если напряжение на неинвертирующем входе больше чем на инвертирующем - светодиод зажигается. :)

Код: Выделить всё

Config Portb.0 = Input                                      ' компаратор
Config Portb.1 = Input
Config Portb.2 = Output                                     ' светодиод

*************[Начало основной программы]*************

Do

Portb.2 = Acsr.5

Loop
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
avrman
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Пт окт 01, 2010 20:17:58
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение avrman »

спасиб :beer:
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

avrman писал(а):спасиб :beer:


Да не за что. :) Удобнее конечно прерывание использовать. Там тоже все просто.

Код: Выделить всё

Config Aci = On , Trigger = Toggle   ' настраиваем условие прерывания компаратора
On Aci Comparator                         ' обзываем прерывание

Enable Interrupts                            ' разрешаем прерывания
Enable Aci

'**********[Начало основной программы]**********

Do

Loop

'**********[Процедуры обработки прерываний]**********

Comparator:

Portb.2 = 1
Waitms 500
Portb.2 = 0

Return


В данном случае светодиод будет мигать каждый раз когда напряжение на входе AIN0 становится больше или меньше чем на AIN1. Разумеется, можно настроить прерывание на что-то одно (rising/falling). :)
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
avrman
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Пт окт 01, 2010 20:17:58
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение avrman »

а как настроить компаратор на захват текущего значения таймера? например надо так:
в обработчике прерывания компаратора нужно определить в какой момент произошло срабатывание и выполнять соответствующий код:

Код: Выделить всё

comparator:
if timer1<32700 then
   "выполняем один код"
  else
   "выполняем другой код"
return
Аватара пользователя
Alex_Megavolt_79
Грызет канифоль
Сообщения: 262
Зарегистрирован: Пт окт 30, 2009 22:33:56
Откуда: Санкт-Петербург

Re: BASCOM AVR в вопросах и ответах

Сообщение Alex_Megavolt_79 »

Товарищи коты, будьте так добры подсказать мне такой вопрос - как после АЦП преобразования значение напряжения выводилось на дисплей с дробной частью. Код дёрнул с обучалки с одного сайта, убрал заставку, да вместо численного значения АЦП по формуле рассчитал значение напруги (нужно в качестве обучения).Теперь показывает целое значение. Исходник прилагаю.
Вложения
ADC_LCD.txt
(2.1 КБ) 241 скачивание
Аватара пользователя
Alex_Megavolt_79
Грызет канифоль
Сообщения: 262
Зарегистрирован: Пт окт 30, 2009 22:33:56
Откуда: Санкт-Петербург

Re: BASCOM AVR в вопросах и ответах

Сообщение Alex_Megavolt_79 »

Сам дошёл добавил ещё одну переменную. и в теле цикла такой код сделал

Код: Выделить всё

 
U = W * 5
  U = U / 1023
  Locate 1 , 5                                              ' позиция курсора
  Lcd "ADC(0):" ; Fusing(u , "##.##")


U типа Single
xaker-man
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Сб июн 05, 2010 20:44:58

Re: BASCOM AVR в вопросах и ответах

Сообщение xaker-man »

Помогите ещё вот с чем, можно ли как-нибудь сделать так: waitus N - где N переменная? Просто так не работает, а когда руками вписано значение все ок.
aleksandr-zh
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

Re: BASCOM AVR в вопросах и ответах

Сообщение aleksandr-zh »

xaker-man писал(а):Помогите ещё вот с чем, можно ли как-нибудь сделать так: waitus N - где N переменная? Просто так не работает, а когда руками вписано значение все ок.

вопрос уже поднимался: читайте инструкцию, где сказано о невозможности использования переменной в задержках

я использовал ассм:

Код: Выделить всё

$asm ; Waitms
 _wait_ms:
        ldi  r20,20
 _wms1:
      ldi  r21,133
 _wms2:
        dec  r21
         brne _Wms2
        dec  r20
         brne _Wms1
        dec  zl
         brne _wait_ms
  ret
$end Asm


ВЫЗОВ: 

    $asm                                                    ' равносильно waitms [color=#FF0000][b]1[/b][/color]
       ldi  zl, [color=#FF0000][b]1[/b][/color]
       rcall  _wait_ms
    $end Asm


для 8 мгц и делал на мега8
user2007
Открыл глаза
Сообщения: 66
Зарегистрирован: Пт дек 10, 2010 18:29:26

Re: BASCOM AVR в вопросах и ответах

Сообщение user2007 »

xaker-man писал(а):Помогите ещё вот с чем, можно ли как-нибудь сделать так: waitus N - где N переменная? Просто так не работает, а когда руками вписано значение все ок.

К сожалению, переменная N в данной макрокоманде не может быть использована(см.описание макрокоманды WAITUS в help'е).
Но выход достаточно прост:
в "шапке" записываем:
Const N1 = 1 'или 2,3 и т.д. - N1 задана как постоянная с заданным и неизменяемым значением
Dim N As Word ' N задана как переменная с размерностью WORD - 0...65535

N=10
'В программе записываем цикл:
WHILE N>0 'пока переменная больше ноля
WAITUS N1 'на каждом витке цикла - задержка N1 микросекунд
DECR N 'уменьшение N на единицу
WEND 'выход из цикла при N=10 в данном случае.

Итого - общая задержка = N х N1 микросекунд (в данном случае - 10N1).

Но автор компилятора Марк Альбертс предупреждает при этом, что задержка WAITUS не является прецизионной (см.описание макрокоманды WAITUS в help'е).Чем выше частота процессора, тем точнее результат.В принципе, вместо N1 можно вписать любое число от 1 - задержка будет кратной ему. Естественно, что при задержке больше 1000 мкс лучше использовать WAITMS. :)
Последний раз редактировалось user2007 Пт дек 24, 2010 13:19:57, всего редактировалось 2 раза.
Kesha
Нашел транзистор. Понюхал.
Сообщения: 175
Зарегистрирован: Вс мар 04, 2007 14:38:49

Re: BASCOM AVR в вопросах и ответах

Сообщение Kesha »

Есть у кого пример работы с 74HC595?
aleksandr-zh
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

Re: BASCOM AVR в вопросах и ответах

Сообщение aleksandr-zh »

Kesha писал(а):Есть у кого пример работы с 74HC595?

используете простой сдвиг, команда SHIFTOUT
Kesha
Нашел транзистор. Понюхал.
Сообщения: 175
Зарегистрирован: Вс мар 04, 2007 14:38:49

Re: BASCOM AVR в вопросах и ответах

Сообщение Kesha »

:) Все же хотелось бы на готовый пример посмотреть.
aleksandr-zh
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

Re: BASCOM AVR в вопросах и ответах

Сообщение aleksandr-zh »

у меня нет под Bascom - еще не делал, есть под FastAVR:

Код: Выделить всё

$Device= m8
$Stack = 32
$Clock = 1

$Def Led7_1 = PORTB.5
$Def Led7_2 = PORTB.4
$Def Led7Load = PORTB.1

$Def Led = PORTB.7

$ShiftOut Data=PORTB.0, Clock=PORTB.2, Lsb

DDRB=255: PORTB =0      ' OUTput

'===  Выводим два числа на 7-сегм. индикатор  ============
Sub Print_7seg(digit01 As Byte, digit02 As Byte)
' Выключены оба индикатора

Led7Load = 0            ' Низкий уровень на "загрузка" регистра

ShiftOut digit01        ' Выдаём байт в регистр
Led7Load = 1            ' Загружаем регистр, вывод данных на ножки регистра
Led7Load = 0

Led7_1 = 1                      ' Включаем первый индикатор
WaitUs 10
'=====

ShiftOut digit02        ' Выдаём байт в регистр
Led7_1 = 0                      ' Выключаем первый индикатор
Led7Load = 1            ' Загружаем регистр, вывод данных на ножки регистра
Led7Load = 0

Led7_2 = 1                      ' Включаем второй индикатор
WaitUs 22
Led7_2 = 0                      ' Выключаем второй индикатор

End Sub

GoTo Start_prog

' ==
'1 = 238
'2 = 146
'3 = 162
'4 = 228
'5 = 161
'6 = 129
'7 = 234
'8 = 128
'9 = 160
'0 = 136

'- = 247
'A = 192
'b = 133
'С = 153
'с = 151
'd = 134
'E = 145
'F = 209
'G = 137
'H = 196
'h = 197
'I = 221
'J = 138
'L = 157
'n = 199
'O = 136
'o = 135
'P = 208
'r = 215
'S = 161
't = 149
'U = 140
'u = 143
'Y = 164

Kesha
Нашел транзистор. Понюхал.
Сообщения: 175
Зарегистрирован: Вс мар 04, 2007 14:38:49

Re: BASCOM AVR в вопросах и ответах

Сообщение Kesha »

aleksandr-zh спасибо, попробую разобраться.
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

Re: BASCOM AVR в вопросах и ответах

Сообщение kip96 »

Вот подкинули мне индикатор-SPC 16010D (на плате вытравленно EC1601D)
Подключил я его и всё заработало, но-
Командой LCD пишит только 8 символов, что-бы перейти на следующие 8 нужно делать ловерлайн.
В Баскоме я ни как не смогу это обойти? Получается Shiftlcd мне уже не применить!
Все делают ошибки, только мудрецы - новые, а дураки - старые.
aleksandr-zh
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

Re: BASCOM AVR в вопросах и ответах

Сообщение aleksandr-zh »

0. Устанавливаешь на входе -RESET (10) уровень 1,
на входах CLK (11), LOAD (12) и -OE (13) уровень 0.

1. Устанавливаешь нужный уровень на входе DATA (14)
2. Подаешь на CLK уровень 1. При этом сдвиговый регистр делает один сдвиг
3. Подаешь на CLK уровень 0.
Пункты 1-3 повторяешь 8 раз.

4. Подаешь на LOAD уровень 1.
При этом содержимое сдвигового регистра переписывается в параллельный регистр

5. Подаешь на LOAD уровень 0

Всё

Если 595-ых будет несколько, выход D7' предыдущего регистра соединяется со входом DATA (14) следующего. -RESET, CLK, LOAD и -OE запараллеливаются.
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение Секретный кот »

kip96 писал(а):В Баскоме я ни как не смогу это обойти?

Попробуйте с Config Lcd поиграться (16*1/16*1a).
Даже остановленные часы два раза в сутки показывают правильное время.
Kesha
Нашел транзистор. Понюхал.
Сообщения: 175
Зарегистрирован: Вс мар 04, 2007 14:38:49

Re: BASCOM AVR в вопросах и ответах

Сообщение Kesha »

aleksandr-zh, с самой 74HC595 уже разобрался. Теперь осталось как все реализовать в баскоме :)
Но пинок в сторону SHIFTOUT, пример твоего кода и справочник Кулиша многое разъяснил :)
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

Re: BASCOM AVR в вопросах и ответах

Сообщение kip96 »

Секретный кот писал(а):Попробуйте с Config Lcd поиграться (16*1/16*1a).

не помогло.
В Баскоме в симуляторе при 16*1a вообще LCD в две строки выскакивает.
Наверное индикатор какой-то хитрый, ибо и протеусе и в симуляторе без ловерлайн работает нормально. Ещё заметил что при пустом индикаторе и и сильной контрастности только 8 квадратиков темнеют :shock: .
Все делают ошибки, только мудрецы - новые, а дураки - старые.
aleksandr-zh
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

Re: BASCOM AVR в вопросах и ответах

Сообщение aleksandr-zh »

kip96 писал(а):Ещё заметил что при пустом индикаторе и и сильной контрастности только 8 квадратиков темнеют :shock: .

так и должно быть

попробуйте в настройках ЖКИ указать большее количество символов в строке и только одну строку
Например, 20х1 или 40х1
Ответить

Вернуться в «AVR»