Страница 100 из 304
Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср сен 28, 2011 22:38:06
Tom91
А почему у меня тогда не работает? что тут не так?
Код: Выделить всё
$regfile = "m16def.dat"
$crystal = 11059200
Dim Address As Byte
Dim Rc5 As Byte
Config Lcd = 20 * 4
Config Lcdpin = Pin , Rs = Pina.1 , E = Pina.2 , Db4 = Pina.3 , Db5 = Pina.4 , Db6 = Pina.5 , Db7 = Pina.6
Cls
Cursor Off
Config Rc5 = Pind.2
Enable Interrupts
Do
Getrc5(address , Rc5)
Lcd Rc5
Lcd Address
Wait 1
Cls
Loop
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт сен 29, 2011 12:35:18
Magicanin
Добрый день.
Есть готовое устройство (бегущая строка)
http://radioshemi.ucoz.ru/publ/ehlektro ... o/2-1-0-40.
Необходимо написать код в Bascom для дальнейшего развития в другом направлении. Родной код написан на С, с ним я не знаком, пишу только в васике. Никак не догоню алгоритм, пробую с функциями Shiftout, Pulseout, но должного результата не получется.
Объясните хоть на когтях принцип действия, лучше конечно в коде, но можно и на словах. Очень нужно.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт сен 29, 2011 13:40:00
Moto_v3x
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт сен 29, 2011 16:18:15
edm2007
Tom91 писал(а):А почему у меня тогда не работает? что тут не так?
А пульт точно по протоколу RC5 работает?
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт сен 29, 2011 17:23:46
Magicanin
Там принцип немножко другой.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт сен 29, 2011 17:40:20
Tom91
edm2007 писал(а):Tom91 писал(а):А почему у меня тогда не работает? что тут не так?
А пульт точно по протоколу RC5 работает?
в этом на 100% не уверен, но все 3 пульта из имеющихся не отзываются... один из них от телека (на пульте TOSHIBA CT-90119
http://www.teleradioz.com/4004.html)
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт сен 30, 2011 16:34:58
Magicanin
Подскажите хоть как бит из байта выбрать?
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт окт 04, 2011 14:09:11
Igor_67
Привет, Котятки!!!
Кто подскажет такой вопрос?: В программе производится опрос двух кнопок по прерываниям INT0 и INT1. В обработчиках этих прерываний увеличивается время (часы - на INT0, минуты - на INT1). Надо сделать так, чтобы при входе в обработчик любого из этих двух прерываний, запускался таймер и, если дальнейших нажатий не было, то возвращаемся назад в основной цикл, а если нажатия имели место, то выполнить все дальнейшие процедуры в обработчике, а уж потом выйти. Что-то уже пол-дня голову ломаю, а нифига не получается. Чувствую, что делается это как-то совсем просто, а вот как, не пойму...

. Собственно вот кусок кода, полный код - в приложенном архиве:
Код: Выделить всё
'************************[Процедуры обработки подпрограмм и прерываний]************************
But1:
Waitms 100
Reset Watchdog
Start Timer1
While Timer1 >= &HFFFF
Gosub Getdatetime
Sekund = _sec
Minut = _min
Chas = _hour
Incr Chas
If Chas > 23 Then Chas = 0
_hour = Chas
_min = Minut
_sec = Sekund
Gosub Settime
Wend
Return
But2:
Waitms 100
Reset Watchdog
Start Timer1
While Timer1 >= &HFFFF
Gosub Getdatetime
Sekund = _sec
Minut = _min
Chas = _hour
Incr Minut
If Minut > 59 Then Minut = 0
_hour = Chas
_min = Minut
_sec = Sekund
Gosub Settime
Wend
Return
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт окт 04, 2011 15:20:05
edm2007
Привет. Я что-то не понял, каких дальнейших нажатий? Можно проще сказать, как оно должно работать? Есть две кнопки, установка часов и минут. Нажали на минуты, ушли на прерывание и что? Вот мы ее нажали и не отпускаем. Минуты-то должны увеличиться? И если да, то как? Пока держим они увеличиваются по кругу, или что? Или нажали на кнопку и ничего не происходит пока не отпустим и снова не нажмем? По коду-то совсем непонятно...
P.S. К слову, таймер начинает считать сразу, как только будет настроен прескалер. Отсюда и смысла нет в строке Start Timer1. На данный момент только наблюдается увлекательная игра, где нужно нажать кнопку так, чтобы в счетном регистре было 65535. Только в этом случае будет обработан код между while... wend.

Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср окт 05, 2011 11:02:17
kip96
Думаю необходимо вообще изменить алгоритм программы. У Вас основной цикл проходит аж за 6 сек. практически в пустую!
Отсюда и проблеммы. Дальше будут такие дебри.
Один из вариантов, - по таймеру изменять переменную и через
select case (можно и в самом прерывании по таймеру) выбирать что будете показывать. А кнопки в основном цикле обрабатывать.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт окт 06, 2011 15:28:02
Igor_67
To
kip96:
Ну почему же "впустую?" - 2 сек - индикация времени; 2 сек - индикация одного термометра; 2 сек -индикация второго термометра. Что тут не так???

To
edm2007:
Так я для чего весь код-то выкладывал? Думаю, там нужно только поменять конфигурацию внешних прерываний, т.е., сделать
Config INT0 = Rising
Config INT1 = Rising
, и тогда все дальнейшее становится понятно. Т.е. , дальнейшее удерживание нажатой кнопки становится бессмысленным, а вот отпускание уже имеет значение...
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт окт 06, 2011 17:57:06
edm2007
Ох... Да посмотрел я весь код, что же Вы так недооцениваете-то меня... И надо оно Вам, что бы кто-то рассказывал как Ваш же код работает... Да как хотите...
1. Строка Config Timer1 = Timer , Prescale = 256 запускает таймер. Вот прошагали эту строчку и таймер уже тикает. С этим понятно.
2. Ковыряемся в основном цикле.
3. Нажимаем кнопку на прерывании (допустим, INT0)
4. Прерывание было разрешено, значит переходим на метку But1.
- Отрабатываем задержку 100 мс
- Сбрасываем сторожевой пес
- Запускаем Таймер1 (а он уже запущен, ему эта команда глубоко до голой жопы, его и не останавливали)
- Ну да и ладно, мы дальше проверяем, счетный регистр равен или больше &HFFFF ( While Timer1 >= &HFFFF ). Ну больше &HFFFF (65535) он быть не может, 16-ти битный все же. Куда ему больше-то...
- А тут два варианта. Либо мы выловили значение менее 65535 (тогда условие нарушено, и будет выполнен оператор после Wend (то бишь выход из прерывания)). Либо удача на нашей стороне и мы четко нажали кнопку когда в счетном регистре РОВНО 65535. Тогда попадаем в цикл и выполняем его...
- А дальше хоть полтора часа удерживайте кнопку, ничего не изменится. Не будет перепада - не будет и события. Уйдем в главный цикл и будем себе там сидеть, пока кнопку не отпустим и снова не нажмем...
Igor_67 писал(а):Думаю, там нужно только поменять конфигурацию внешних прерываний, т.е., сделать Config INT0 = Rising Config INT1 = Rising, и тогда все дальнейшее становится понятно.
Да ну? Вроде как, та же жопа, только сверху...

Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт окт 07, 2011 14:39:15
kip96
Igor_67 писал(а):Чувствую, что делается это как-то совсем просто, а вот как, не пойму... .
Код: Выделить всё
But1:
Do
Reset Watchdog
Waitms 100
Gosub Getdatetime
Sekund = _sec
Minut = _min
Chas = _hour
Incr Chas
If Chas > 23 Then Chas = 0
_hour = Chas
_min = Minut
_sec = Sekund
Gosub Settime
Loop Until Pind.2 = 1
Return
хорошо, вот Ваш пример доработанный. При удержании будет увеличиваться часы
, но алгоритм не верный. Это дебри, и Вы упорно в них лезете. "Сначала асфальт ложим, а потом трубы пркладываем."
Igor_67 писал(а): а если нажатия имели место, то выполнить все дальнейшие процедуры в обработчике, а уж потом выйти
К примеру здесь- нажали кнопку и удерживаете- а на индикаторе что? Вы в обработчике прерывания Int0, прерывания по таймеру нет и индикации нет.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт окт 07, 2011 14:40:48
Igor_67
Ну, тупанул... что поделаешь, звиняйте за тупость!

Замечания учел, буду исправлять... Спасибо!
P.S. Да, и вдогонку еще один вопросик. При опросе более, чем одного датчика DS18B20, индикация отрицательных температур кажет белиберду... Почему такое происходит и как надо исправить сие? Взять хоть даже мой предыдущий пост. При индикации положительных температур - все ОК, при отрицательных - лабуда! Хотя программа опроса - классическая. Или можно попробовать опрос датчиков по другому алгоритму?
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт окт 13, 2011 21:20:15
edm2007
Igor_67 писал(а):индикация отрицательных температур кажет белиберду...
Ну разумеется так и будет. Переменная-то знаковая, и мы не на LCD температуру выводим. Ну получится в результате расчетов I1 = -10, и как же это по разрядам разносить? Я что-то не увидел проверку на отрицательную температуру, и знака "-" тоже не увидел...
И еще, нет необходимости 2 раза запускать измерение. Команда:
Код: Выделить всё
1wreset
1wwrite &HCC ' Выдаем команду чтения ПЗУ
1wwrite &H44 ' Запуск измерения
является общей для всех датчиков на линии. Через 750 мс нужно будет просто поочередно обратиться уже к каждому датчику, и забрать результат. А если бы было 8 датчиков? Вы бы так же каждый раз линию опрокидывали и 750 мс ждали?

Алгоритм будет такой:
Код: Выделить всё
1. Команда запуска измерения для всех датчиков на линии
2. Ждем 750 мс
3. Обращаемся к первому датчику - забираем результат
4. Обращаемся ко второму датчику - забираем результат
...................
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пн окт 17, 2011 14:55:01
stepan darmoedov
Может кто знает какого хрена при вызове функции "f1" значение "a1" всегда равно 58,
это глюк ?. или нормальное явление в BASCOM-AVR 2.0.7.1
в других версиях не пробовал,может кто проверит?
$Regfile="m16def.dat"
$Crystal=4000000
$hwstack=32
$swstack=8
$framesize=24
declare Function f1(byval a1 as Byte,byval a2 as Byte,byval a3 as Byte,byval a4 as Byte)as Byte
dim r as Byte
r=f1 (&H0,&H0,&H0,&H0)
r=f1 (&H0,&H0,&H0,&H0)
stop
Function f1(byval a1 as Byte,byval a2 as Byte,byval a3 as Byte,byval a4 as Byte)as Byte
print a1
print a2
print a3
print a4
f1=0
end FUNCTION
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пн окт 17, 2011 20:13:38
Igor_67
Всем привет! У кого-нибудь есть баскомовская библиотека для LCD 8*2 или можно другую использовать?
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пн окт 17, 2011 20:22:43
edm2007
Привет. Я для дисплея 16*1 (на самом деле 8*2, просто в одну линию) использовал конфигурацию 16*2. Все замечательно работает.
А может там наоборот 16*1 в две строки...

Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт окт 18, 2011 14:37:49
edm2007
Magicanin писал(а):Подскажите хоть как бит из байта выбрать?
Хм, только сейчас увидел... Может кому и пригодится еще:
Код: Выделить всё
Dim Temp As Byte , Result As Byte
Temp = &B10101010 ' загружаем число во временную переменную
Result = Temp.5 ' забираем в переменную Result 5-й бит переменной Temp (результат = 1)
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт окт 18, 2011 18:56:59
Magicanin
Дорого времени суток.
Осваиваю AVR-DOS.
Замучил вопрос, каким образом средствами AVR-DOS побуквенно прочитать символы ASCII из текстового файла?
Буду благодарен за подсказку.