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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
KOTик
Встал на лапы
Сообщения: 148
Зарегистрирован: Пн июн 07, 2010 16:16:57
Контактная информация:

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

Сообщение KOTик »

Прикрепляю весь код + протеус.
Буду признателен, если кто поможет.

3step_delay.rar
3step_delay.rar
(14.55 КБ) 194 скачивания

___
P.S. голова опухла :cry:
tomas111
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Вс мар 10, 2013 10:10:41

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

Сообщение tomas111 »

Подскажите, с CAN bascom справиться !? :))
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

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

Сообщение vem566 »

KOTик писал(а):Прикрепляю весь код + протеус.

В исходном коде есть переменные temp и wtime. Они описаны, им что то присваивается, но они нигде не используются.
У нас уже 0:30. Завтра вставать. Потом исправлю исходник, если сам не успеешь.
Аватара пользователя
KOTик
Встал на лапы
Сообщения: 148
Зарегистрирован: Пн июн 07, 2010 16:16:57
Контактная информация:

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

Сообщение KOTик »

vem566 писал(а):
KOTик писал(а):Прикрепляю весь код + протеус.

В исходном коде есть переменные temp и wtime. Они описаны, им что то присваивается, но они нигде не используются.
У нас уже 0:30. Завтра вставать. Потом исправлю исходник, если сам не успеешь.


Как не используются?
См. строку № 7-9

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

...
'/// ---> ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ
Dim V As Eram Byte                                'переменная EEPROM
Dim Click As Byte                                 'переменная шага для SETUP
Dim Store As Byte                                 'еще одна переменная для SETUP

'Dim Delaytime As Byte                            'переменная задержки
Dim Wtime As Byte                                  'переменная задержки
Dim Temp As Integer                               'переменная задержки
Wtime = 100                                           'положили 100 в переменную Wtime, далее будем ее увеличивать и записывать в переменную Temp

Dim Button As Bit
Button = 1


'/// ---> НАСТРОЙКА ПОРТОВ
Config Portb.0 = Output                           'OUT
Config Pinb.2 = Input                             'кнопка запуска
Config Pinb.4 = Input                             'кнопка установки временной задержки

Pinb.4 = 1
Portb = &B00010100                                'подтяжка PINB.2 и PINB.4

Zapusk Alias Pinb.2                               'Zapusk для PINB.2
Btn Alias Pinb.4                                  'Btn для PINB.4


'/// ---> НАЧАЛО ОСНОВНОГО ЦИКЛА ПРОГРАММЫ
Do
...
Debounce Zapusk , 1 , Led_on , Sub               'управляется плюсом (+)
Debounce Zapusk , 0 , Led_off , Sub              'управляется плюсом (+)

'/// ---> УСТАНОВКА ЗАДЕРЖКИ
If Click = 4 Then Click = 1                       'Если нажали 4ый раз, то переходим
If Click = 1 Then Temp = Wtime * 1000   'Если нажали 1 раз, увеличиваем переменную Wtime (у нас она равна 100) и кладем в переменную Temp
If Click = 2 Then Temp = Wtime * 2000
If Click = 3 Then Temp = Wtime * 3000
If Button = 1 Then
If Btn = 0 Then
Button = 0
Store = Click + 1                                 'Увеличиваем время задержки на 1 шаг (1 шаг равен 10секундам)
Waitms 50
V = Store                                         'записываем значение задержки в ЕЕПРОМ
End If
End If
If Btn = 1 Then Button = 1
...
Loop

'/// ---> ВЫКЛЮЧАЕМ ФОНАРЬ
Led_off:
Waitms 50
Portb.0 = 0
Waitms 50
Return

'/// ---> ВКЛЮЧАЕМ ФОНАРЬ
Led_on:
Waitms 50
Portb.0 = 1                    'включаем фонарь
Waitms 50
Click = Store
Store = V                      'считываем значением с ЕЕПРОМ и кладем ее в Store
Wait Store                     'Присваиваем Wait-у переменную задержки Store. Т.е. ждем столько секунд, сколько установили (было записано в ЕЕПРОМ)
Return                           'возврат в основной цикл

Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

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

Сообщение vem566 »

.... Если нажали 1 раз, увеличиваем переменную Wtime (у нас она равна 100) и кладем в переменную Temp ....

А дальше? В каком месте используются переменные Wtime и(или) Temp? И зачем это присвоение?
Кстати, при эмуляции в протеусе значение байта в eprom после нажатия кнопки не меняется. Т. е. ничего и не записывается.
Аватара пользователя
KOTик
Встал на лапы
Сообщения: 148
Зарегистрирован: Пн июн 07, 2010 16:16:57
Контактная информация:

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

Сообщение KOTик »

vem566 писал(а):.... Если нажали 1 раз, увеличиваем переменную Wtime (у нас она равна 100) и кладем в переменную Temp ....
А дальше? В каком месте используются переменные Wtime и(или) Temp? И зачем это присвоение?
Кстати, при эмуляции в протеусе значение байта в eprom после нажатия кнопки не меняется. Т. е. ничего и не записывается.

Каждое нажатие инкрементирует переменную Click и, как следствие, увеличивается задержка (Temp = Wtime * XX).
Затем Click кладем в Store и записываем ее в переменную V (еепром).
Больше нигде эти переменные не используются.

В том то и дело, что в еепром ничего не сохраняется.
Хотя этот же алгоритм Я использовал в 3-ступенчатом фонарике с еепром (это мой первый проектик с еепром) и там все замечательно работало и работает.
А тут 3 дня голову ломаю, все перелопатил и ничего :(
Аватара пользователя
amv2000
Опытный кот
Сообщения: 717
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

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

Сообщение amv2000 »

KOTик писал(а):Каждое нажатие инкрементирует переменную Click и, как следствие, увеличивается задержка (Temp = Wtime * XX).
Честно говоря не видно никакого следствия, у Вас задержка это Waitms, теперь далее
If Click = 1 Then Temp = Wtime * 1000 'Если нажали 1 раз, увеличиваем переменную Wtime (у нас она равна 100) и кладем в переменную Temp. А теперь поясните, как МК должен понять что Temp это значение задержки? Если бы явно было указано Wtime=Temp или же If Click = 1 Then Temp = Waitms * 1000, но нигде по тексту кода это не прослеживается. Получается Вы просто при каждом нажатии увеличиваете переменную Temp, которая ни к чему не привязана.
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

вопрос к знающим http://avrlife.pp.ua/project/page,1,5,104-voltmetr-termometr-i-chasy-na-mega8.html#comment здесь реализован спящий режим,при отсутствии основного питания мега8 питается от источника резервного питания в режиме спящего режима ,как можно организовать подобное в баском?
Аватара пользователя
amv2000
Опытный кот
Сообщения: 717
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

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

Сообщение amv2000 »

pavel1979 писал(а):в режиме спящего режима ,как можно организовать подобное в баском?

Можно тут ознакомиться http://avrproject.ru/publ/poleznaja_inf ... r/4-1-0-64
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

amv2000 писал(а):
pavel1979 писал(а):в режиме спящего режима ,как можно организовать подобное в баском?

Можно тут ознакомиться http://avrproject.ru/publ/poleznaja_inf ... r/4-1-0-64

ну это я видел,дело в том что даже при питании от резервной батареи часы идут,а значит генератор не должен останавливаться,этому соответствует Режим сна (Sleep mode),однако при этом мк будет снова просыпаться каждую секунду-прерывание через 1 сек,в остальных режимах часы остановятся...
вот думаю-может в той схеме в режиме сна просто отключается индикация,а мк работает?
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

При появлении на РВ5 нуля, уходим на подпрограмму, в которой:
- увеличиваем счётчик сек.,мин,час,и т.д.
-проверяем РВ5 на "0"
-уходим в паверсэйв (читаем даташит)
далее по кругу, пока не появится питание.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

точно,можно же после каждого прерывания опять уходить в сон,как-то не подумал,спасибо!
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

есть ли у кого пример работы с дисплеем нокиа 1280?а то в гугле только 11,, ивсе,1280 не нахожу..
Аватара пользователя
amv2000
Опытный кот
Сообщения: 717
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

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

Сообщение amv2000 »

pavel1979 писал(а):есть ли у кого пример работы с дисплеем нокиа 1280?
Так вроде они с 1202 похожи. http://we.easyelectronics.ru/blog/lcd_gfx/
что подтверждается и здесь http://shop.siriust.ru/product_info.php ... s_id/16418
и здесь http://bascom.at.ua/publ/podkljuchaem_k ... 5/1-1-0-69
Аватара пользователя
KOTик
Встал на лапы
Сообщения: 148
Зарегистрирован: Пн июн 07, 2010 16:16:57
Контактная информация:

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

Сообщение KOTик »

Ураааааа! :kill:
Добил я все-таки свой таймер :kill: :kill:
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

C индикаторами ничего не вышло
можно ли использовать переменный резистор как энкодер и как можно это организовать-смысл понимаю но вот программно..
значит так-переменный резистор,к крайним выв которого подано - и + 5 в,мк измеряет напряжение на среднем выв,при половине напряжения(резистор в среднем положении) переменная variable не изменяется.При небольшом повороте резистора variable увеличивается в ту или иную сторону в зависимости от направления поворота резистора,скорость изменения variable зависит от угла поворота ручки резистора,вернули ручку в среднее положение-variable не изменяется,как то так
Аватара пользователя
KOTик
Встал на лапы
Сообщения: 148
Зарегистрирован: Пн июн 07, 2010 16:16:57
Контактная информация:

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

Сообщение KOTик »

pavel1979 писал(а):C индикаторами ничего не вышло
можно ли использовать переменный резистор как энкодер и как можно это организовать-смысл понимаю но вот программно..
значит так-переменный резистор,к крайним выв которого подано - и + 5 в,мк измеряет напряжение на среднем выв,при половине напряжения(резистор в среднем положении) переменная variable не изменяется.При небольшом повороте резистора variable увеличивается в ту или иную сторону в зависимости от направления поворота резистора,скорость изменения variable зависит от угла поворота ручки резистора,вернули ручку в среднее положение-variable не изменяется,как то так

Я бы сделал как-то так
Писал на скорую руку, так что не судите строго.

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

Do
....
'/// ---> ЗАПУСК ADC
Start Adc                                         
U = Getadc(2)                               'Считываем значение с PINB.4 (tiny13)
If U >= 651 Then                          'Если значение больше или равно 651
Gosub inkrement                           'Переходим по метке inkrement, где увеличиваем Вашу переменную
Elseif U <= 650 Then                     'Если значение меньше или равно 650
Gosub dekrement                          'Переходим по метке dekrement, где уменьшаем Вашу переменную
...
...
Loop

'/// ---> ОБРАБОТЧИК
inkrement:
... 'здесь ваши операции с переменной(ами)
waitms 50
return

dekrement:
... 'здесь ваши операции с переменной(ами)
waitms 50
return

Если в нижнем/верхнем пределе, тогда инкрементируем/декрементируем переменную (что либо) с шагом 5, если в этом пределе находимся дольше NNN секунд,
то шаг инкремента/декремента увеличивается еще на 5 (или 10)
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

ну примерно тоже я и сделал,но нужно чтобы шаг зависел от угла поворота ручки.мах значение 1024,значит середина 1024/2=512
if U <= 500 or U>350 Then ste=1
if U <= 350 or U>150 Then ste=5
if U <= 150 Then ste=25
if U> 500 or U<525 Then ste=0
If ste<>0 Then 'если шаг не равен 0 то
Gosub inkrement 'Переходим по метке inkrement, где увеличиваем Вашу переменную


'/// ---> ОБРАБОТЧИК
inkrement:
variable =variable +ste
... 'здесь ваши операции с переменной(ами)
waitms 50
return
наверно так как то,попробую в железе
Аватара пользователя
KOTик
Встал на лапы
Сообщения: 148
Зарегистрирован: Пн июн 07, 2010 16:16:57
Контактная информация:

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

Сообщение KOTик »

pavel1979 писал(а):ну примерно тоже я и сделал,но нужно чтобы шаг зависел от угла поворота ручки.мах значение 1024,значит середина 1024/2=512

Вычислить угол поворота с потенциометра - Хмм... Не представляю себе.
Разве что, как я описал выше:
1. привязать инкремент к значению ЦАП и вычислять сколько секунд мы там находимся, затем увеличивать шаг
2. разбить значение ЦАП на 4 части и каждой "дольке" присвоить свой инкремент
т.е. если ЦАП <= 250 увеличиваем шаг = шаг + 10, если ЦАП >= 251 и меньше 501 тогда шаг = шаг + 5
то же самое делаем со значением АЦП >=500

Попробуйте
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

KOTик писал(а):
pavel1979 писал(а):ну примерно тоже я и сделал,но нужно чтобы шаг зависел от угла поворота ручки.мах значение 1024,значит середина 1024/2=512

Вычислить угол поворота с потенциометра - Хмм... Не представляю себе.

вот это и не могу сообразить,а variable постоянно должен изменяться если ручка резистора не в среднем положении,то есть чуть повернул ручку и убрал руку с ручки,variable меняется с шагом пропорциональным повороту ручки,повернули ручку сильнее и отпустили руку-variable меняется быстрее,повернули ручку в среднее положение-variable не меняется,ручки с небольшой фиксацией в середине,используется в автомагнитолах старых на "балансе"
использовать в данном случае энкодер не удобно-variable должен меняться от0 до 65535 с шагом 1,долго крутить :love:
Ответить

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