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

Обсуждаем контроллеры компании Atmel.
Tom91
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт окт 08, 2010 15:43:55

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

Сообщение 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
Аватара пользователя
Magicanin
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Чт янв 13, 2011 11:36:16
Откуда: Красноярский край

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

Сообщение Magicanin »

Добрый день.
Есть готовое устройство (бегущая строка) http://radioshemi.ucoz.ru/publ/ehlektronika/ehlektronika/begushhaja_stroka_stx_1_modifikacii_hobby_i_intro/2-1-0-40.
Необходимо написать код в Bascom для дальнейшего развития в другом направлении. Родной код написан на С, с ним я не знаком, пишу только в васике. Никак не догоню алгоритм, пробую с функциями Shiftout, Pulseout, но должного результата не получется.
Объясните хоть на когтях принцип действия, лучше конечно в коде, но можно и на словах. Очень нужно.
[size=85][color=#80BF00][b]Извращение это[/b][/color]: программатор - [color=#40BFBF]AVR910 by Prottoss[/color], прошивка - [color=#40BFBF]Doper[/color], драйвер - [color=#40BFBF]Osamu Tamura[/color], называется - [color=#FF0000]STK500[/color]![/size]
Аватара пользователя
Moto_v3x
Потрогал лапой паяльник
Сообщения: 307
Зарегистрирован: Ср мар 31, 2010 11:45:58
Откуда: Славянск

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

Сообщение Moto_v3x »

Magicanin

посмотрите здесь: http://bascom.at.ua/publ/1-1-0-7
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Tom91 писал(а):А почему у меня тогда не работает? что тут не так?


А пульт точно по протоколу RC5 работает?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Magicanin
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Чт янв 13, 2011 11:36:16
Откуда: Красноярский край

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

Сообщение Magicanin »

Moto_v3x писал(а):Magicanin

посмотрите здесь: http://bascom.at.ua/publ/1-1-0-7


Там принцип немножко другой.
[size=85][color=#80BF00][b]Извращение это[/b][/color]: программатор - [color=#40BFBF]AVR910 by Prottoss[/color], прошивка - [color=#40BFBF]Doper[/color], драйвер - [color=#40BFBF]Osamu Tamura[/color], называется - [color=#FF0000]STK500[/color]![/size]
Tom91
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт окт 08, 2010 15:43:55

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

Сообщение Tom91 »

edm2007 писал(а):
Tom91 писал(а):А почему у меня тогда не работает? что тут не так?


А пульт точно по протоколу RC5 работает?

в этом на 100% не уверен, но все 3 пульта из имеющихся не отзываются... один из них от телека (на пульте TOSHIBA CT-90119
http://www.teleradioz.com/4004.html)
Аватара пользователя
Magicanin
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Чт янв 13, 2011 11:36:16
Откуда: Красноярский край

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

Сообщение Magicanin »

Подскажите хоть как бит из байта выбрать?
[size=85][color=#80BF00][b]Извращение это[/b][/color]: программатор - [color=#40BFBF]AVR910 by Prottoss[/color], прошивка - [color=#40BFBF]Doper[/color], драйвер - [color=#40BFBF]Osamu Tamura[/color], называется - [color=#FF0000]STK500[/color]![/size]
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение 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
Вложения
Project.rar
Проект Протеуса
(19.88 КБ) 214 скачиваний
Code.rar
Код
(19.4 КБ) 219 скачиваний
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Привет. Я что-то не понял, каких дальнейших нажатий? Можно проще сказать, как оно должно работать? Есть две кнопки, установка часов и минут. Нажали на минуты, ушли на прерывание и что? Вот мы ее нажали и не отпускаем. Минуты-то должны увеличиться? И если да, то как? Пока держим они увеличиваются по кругу, или что? Или нажали на кнопку и ничего не происходит пока не отпустим и снова не нажмем? По коду-то совсем непонятно...

P.S. К слову, таймер начинает считать сразу, как только будет настроен прескалер. Отсюда и смысла нет в строке Start Timer1. На данный момент только наблюдается увлекательная игра, где нужно нажать кнопку так, чтобы в счетном регистре было 65535. Только в этом случае будет обработан код между while... wend. :)
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

Думаю необходимо вообще изменить алгоритм программы. У Вас основной цикл проходит аж за 6 сек. практически в пустую! :shock: :kill:
Отсюда и проблеммы. Дальше будут такие дебри.
Один из вариантов, - по таймеру изменять переменную и через select case (можно и в самом прерывании по таймеру) выбирать что будете показывать. А кнопки в основном цикле обрабатывать.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

To kip96:
Ну почему же "впустую?" - 2 сек - индикация времени; 2 сек - индикация одного термометра; 2 сек -индикация второго термометра. Что тут не так??? :dont_know:
To edm2007:
Так я для чего весь код-то выкладывал? Думаю, там нужно только поменять конфигурацию внешних прерываний, т.е., сделать
Config INT0 = Rising
Config INT1 = Rising
, и тогда все дальнейшее становится понятно. Т.е. , дальнейшее удерживание нажатой кнопки становится бессмысленным, а вот отпускание уже имеет значение...
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение 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, и тогда все дальнейшее становится понятно.


Да ну? Вроде как, та же жопа, только сверху... :)
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение 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, прерывания по таймеру нет и индикации нет.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

Ну, тупанул... что поделаешь, звиняйте за тупость! :) Замечания учел, буду исправлять... Спасибо!
P.S. Да, и вдогонку еще один вопросик. При опросе более, чем одного датчика DS18B20, индикация отрицательных температур кажет белиберду... Почему такое происходит и как надо исправить сие? Взять хоть даже мой предыдущий пост. При индикации положительных температур - все ОК, при отрицательных - лабуда! Хотя программа опроса - классическая. Или можно попробовать опрос датчиков по другому алгоритму?
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Igor_67 писал(а):индикация отрицательных температур кажет белиберду...


Ну разумеется так и будет. Переменная-то знаковая, и мы не на LCD температуру выводим. Ну получится в результате расчетов I1 = -10, и как же это по разрядам разносить? Я что-то не увидел проверку на отрицательную температуру, и знака "-" тоже не увидел...

И еще, нет необходимости 2 раза запускать измерение. Команда:

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

1wreset
1wwrite &HCC           ' Выдаем команду чтения ПЗУ
1wwrite &H44            ' Запуск измерения


является общей для всех датчиков на линии. Через 750 мс нужно будет просто поочередно обратиться уже к каждому датчику, и забрать результат. А если бы было 8 датчиков? Вы бы так же каждый раз линию опрокидывали и 750 мс ждали? :) Алгоритм будет такой:

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

1. Команда запуска измерения для всех датчиков на линии
2. Ждем 750 мс
3. Обращаемся к первому датчику - забираем результат
4. Обращаемся ко второму датчику - забираем результат
...................
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
stepan darmoedov
Родился
Сообщения: 4
Зарегистрирован: Вт окт 26, 2010 12:07:29

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

Сообщение 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
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

Всем привет! У кого-нибудь есть баскомовская библиотека для LCD 8*2 или можно другую использовать?
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Привет. Я для дисплея 16*1 (на самом деле 8*2, просто в одну линию) использовал конфигурацию 16*2. Все замечательно работает.

А может там наоборот 16*1 в две строки... :solder:
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

Magicanin писал(а):Подскажите хоть как бит из байта выбрать?


Хм, только сейчас увидел... Может кому и пригодится еще:

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

Dim Temp As Byte , Result As Byte

Temp = &B10101010   ' загружаем число во временную переменную

Result = Temp.5  ' забираем в переменную Result 5-й бит переменной Temp (результат = 1)
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Magicanin
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Чт янв 13, 2011 11:36:16
Откуда: Красноярский край

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

Сообщение Magicanin »

Дорого времени суток.
Осваиваю AVR-DOS.
Замучил вопрос, каким образом средствами AVR-DOS побуквенно прочитать символы ASCII из текстового файла?
Буду благодарен за подсказку.
[size=85][color=#80BF00][b]Извращение это[/b][/color]: программатор - [color=#40BFBF]AVR910 by Prottoss[/color], прошивка - [color=#40BFBF]Doper[/color], драйвер - [color=#40BFBF]Osamu Tamura[/color], называется - [color=#FF0000]STK500[/color]![/size]
Ответить

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