Страница 48 из 304
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт дек 10, 2010 23:17:02
edm2007
avrman писал(а):Может это и просто, но без примеров не разобраться, особенно мне. Если не трудно покажите на примере как сделать так, чтобы при превышении напряжения на прямом выводе компаратора относительно инверсного, мк давал признаки жизни, скажем менял уровень на одной из своих ног.
Если напряжение на неинвертирующем входе больше чем на инвертирующем - светодиод зажигается.
Код: Выделить всё
Config Portb.0 = Input ' компаратор
Config Portb.1 = Input
Config Portb.2 = Output ' светодиод
*************[Начало основной программы]*************
Do
Portb.2 = Acsr.5
Loop
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт дек 10, 2010 23:44:12
avrman
спасиб

Re: BASCOM AVR в вопросах и ответах
Добавлено: Сб дек 11, 2010 00:10:27
edm2007
avrman писал(а):спасиб

Да не за что.

Удобнее конечно прерывание использовать. Там тоже все просто.
Код: Выделить всё
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).

Re: BASCOM AVR в вопросах и ответах
Добавлено: Вс дек 12, 2010 14:57:48
avrman
а как настроить компаратор на захват текущего значения таймера? например надо так:
в обработчике прерывания компаратора нужно определить в какой момент произошло срабатывание и выполнять соответствующий код:
Код: Выделить всё
comparator:
if timer1<32700 then
"выполняем один код"
else
"выполняем другой код"
return
Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср дек 15, 2010 18:42:05
Alex_Megavolt_79
Товарищи коты, будьте так добры подсказать мне такой вопрос - как после АЦП преобразования значение напряжения выводилось на дисплей с дробной частью. Код дёрнул с обучалки с одного сайта, убрал заставку, да вместо численного значения АЦП по формуле рассчитал значение напруги (нужно в качестве обучения).Теперь показывает целое значение. Исходник прилагаю.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср дек 15, 2010 19:16:35
Alex_Megavolt_79
Сам дошёл добавил ещё одну переменную. и в теле цикла такой код сделал
Код: Выделить всё
U = W * 5
U = U / 1023
Locate 1 , 5 ' позиция курсора
Lcd "ADC(0):" ; Fusing(u , "##.##")
U типа Single
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт дек 16, 2010 08:18:12
xaker-man
Помогите ещё вот с чем, можно ли как-нибудь сделать так: waitus N - где N переменная? Просто так не работает, а когда руками вписано значение все ок.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт дек 16, 2010 09:08:58
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
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт дек 16, 2010 16:36:54
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. 
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт дек 17, 2010 11:15:27
Kesha
Есть у кого пример работы с 74HC595?
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт дек 17, 2010 12:10:08
aleksandr-zh
Kesha писал(а):Есть у кого пример работы с 74HC595?
используете простой сдвиг, команда
SHIFTOUT
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт дек 17, 2010 12:18:18
Kesha

Все же хотелось бы на готовый пример посмотреть.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт дек 17, 2010 13:38:24
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
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт дек 17, 2010 13:47:53
Kesha
aleksandr-zh спасибо, попробую разобраться.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт дек 17, 2010 14:05:32
kip96
Вот подкинули мне индикатор-SPC 16010D (на плате вытравленно EC1601D)
Подключил я его и всё заработало, но-
Командой LCD пишит только 8 символов, что-бы перейти на следующие 8 нужно делать ловерлайн.
В Баскоме я ни как не смогу это обойти? Получается Shiftlcd мне уже не применить!
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт дек 17, 2010 14:53:09
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 запараллеливаются.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт дек 17, 2010 14:55:43
Секретный кот
kip96 писал(а):В Баскоме я ни как не смогу это обойти?
Попробуйте с Config Lcd поиграться (16*1/16*1a).
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт дек 17, 2010 15:20:06
Kesha
aleksandr-zh, с самой 74HC595 уже разобрался. Теперь осталось как все реализовать в баскоме

Но пинок в сторону SHIFTOUT, пример твоего кода и справочник Кулиша многое разъяснил

Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт дек 17, 2010 15:34:07
kip96
Секретный кот писал(а):Попробуйте с Config Lcd поиграться (16*1/16*1a).
не помогло.
В Баскоме в симуляторе при 16*1
a вообще LCD в две строки выскакивает.
Наверное индикатор какой-то хитрый, ибо и протеусе и в симуляторе без ловерлайн работает нормально. Ещё заметил что при пустом индикаторе и и сильной контрастности только 8 квадратиков темнеют

.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт дек 17, 2010 15:36:32
aleksandr-zh
kip96 писал(а):Ещё заметил что при пустом индикаторе и и сильной контрастности только 8 квадратиков темнеют

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