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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

Ну вот, внимательно вкурив даташит, наваял следующее безобразие:

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

$regfile = "m16def.dat"
$crystal = 8000000
Config Lcdpin = Pin , Rs = Portd.0 , E = Portd.1
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7
Config Lcd = 16 * 2
Config Adc = Free , Prescaler = Auto , Reference = Avcc

Dim W As Word
Dim S As String * 16
Dim M As Single

Admux = &B11101001
Start Adc

Do
   W = Getadc(0 , 1)
   M = W * 5
   M = M / 1024
   M = M / 200
   S = Fusing(m , "#.##")
   Cls
   Lcd S
   Waitms 300
Loop

Вот только в результате должно получиться 1.3 вольта, а получается 1.5 :shock:
А вот где тут собака порылась, не пойму...
Может кто разбирался с этим?
Все файлы во вложении.
Вложения
!!!!!.rar
(20.07 КБ) 150 скачиваний
Цапу крутить надо!!! Ку или не ку?
осторожно! леоныч!!!
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

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

Сообщение осторожно! леоныч!!! »

Код изменен.

Do

Debounce Button , 0 , 3leds , Sub ' обработка нажатия кнопки
Led = Not Button ' при нажатой кнопке зажигаем светодиод


Loop

Как видно не значительно. Но все как я писал выше. Надо как то пролинвертировать "led" чтоли.....
Аватара пользователя
amv2000
Опытный кот
Сообщения: 717
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

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

Сообщение amv2000 »

осторожно! леоныч!!! писал(а):Код изменен. Как видно не значительно.

Не вижу изменений, код от edm2007

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

'**************************************** Основной цикл *****************************************************

Do

Debounce Button , 0 , 3leds , Sub                           ' обработка нажатия кнопки
Led = Not Button                                            ' при нажатой кнопке зажигаем светодиод

Loop

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

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

Сообщение amv2000 »

Igor_67 писал(а):Вот только в результате должно получиться 1.3 вольта, а получается 1.5

Попробуйте в железе.
осторожно! леоныч!!!
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

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

Сообщение осторожно! леоныч!!! »

Debounce Button , 0 , 3leds , Sub Вместо 0 была 1. Иначе светодиод горит постоянно. И еще. Все светодиоды у меня подключены на минус (-) питания.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

осторожно! леоныч!!! писал(а):Debounce Button , 0 , 3leds , Sub Вместо 0 была 1. Иначе светодиод горит постоянно.


Вы издеваетесь? Где Вы там увидели 1? Вот код из моего примера:

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

Do

Debounce Button , 0 , 3leds , Sub                           ' обработка нажатия кнопки
Led = Not Button                                            ' при нажатой кнопке зажигаем светодиод

Loop


осторожно! леоныч!!! писал(а):И еще. Все светодиоды у меня подключены на минус (-) питания.


Вам скриншот из протеуса скинуть, где все светодиоды сидят на минусе? Я вообще не понимаю, в чем Вы нашли проблему?

В основном цикле команда Debounce считывает состояние пина порта, к которому подключена кнопка. Так как кнопка подтянута к питанию (программно), то считается 1 (при ненажатой, естественно). Далее на пин порта дополнительного светодиода будет выдан уровень, инверсный по отношению к кнопке. Там 1 - на светодиоде 0. Светодиод погашен.

Как только кнопка будет нажата, с пина кнопки считается 0. Программа уйдет по метке 3leds, где будет включен светодиод. Произойдет это очень быстро, мы снова вернемся в основной цикл где и будет записан в пин порта светодиода уровень, обратный кнопочному. Мы кнопку нажали? Нажали. Уровень на пине 0? Ноль. Значит инверсный (NOT) равен 1. Светодиод светится. И светиться он будет до тех пор, пока нажата кнопка. Мы никуда из основного цикла не уйдем, потому что та же Debounce ждет отпускания кнопки. А вот таймер включеные основные светодиоды сбросит запросто. Что требовалось - то и получили.

А вот если Вы не включили подтяжку кнопки, замыкаете ее на плюс, или дополнительный светодиод у Вас подключен иначе, или еще что-то подобное, то я здесь совершенно не при чем. Приведите свой полный код, и я скажу Вам в чем дело.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
осторожно! леоныч!!!
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

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

Сообщение осторожно! леоныч!!! »

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

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

Сообщение amv2000 »

осторожно! леоныч!!! писал(а):Кнопку я подключил через резистор на минус питания. При нажатии на вход контроллера подается плюс (+)

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

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

Сообщение edm2007 »

осторожно! леоныч!!!, а Вы опасный человек. :)) Сначала значит:

осторожно! леоныч!!! писал(а):Применил строчки из кода который вы в последний раз дали. Получилось все наоборот


А потом:

осторожно! леоныч!!! писал(а):Кнопку я подключил через резистор на минус питания. При нажатии на вход контроллера подается плюс (+).


И Вас правда удивило, что все заработало наоборот? :)) На самом деле-то нужно было убрать программную подтяжку (очень логично), изменить 0 на 1 в опросе кнопки (совсем логично) и убрать инверсию при включении дополнительного светодиода (тоже далеко не гениальная идея). :)

осторожно! леоныч!!! писал(а):всего не усмотришь


Вы это серьезно? Вот правда пишете прошивки и так думаете? Мол, ну а чо там, всякое ведь бывает. И тут тоже как-нибудь оно выйдет. :solder:

осторожно! леоныч!!! писал(а):А вот злиться тоже не надо


Это да, хороший совет. А так как иначе я не могу (ну буквально на десятом вопросе "вокруг да около" начинаю нервничать и болеть душой), то перейду я, пожалуй, в разряд наблюдателей. Давно собирался... :tea:

amv2000 писал(а):Не понял это как, должно быть наоборот при нажатии на вход подается минус ибо вы резистором к минусу притянули(плюс там по умолчанию), или все же к плюсу?


Если я правильно понял, то подтяжка внешняя к шине земли. А подается именно плюс. Имеющий право на жизнь вариант.
Вложения
3ledsV3.rar
(15.12 КБ) 177 скачиваний
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
осторожно! леоныч!!!
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

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

Сообщение осторожно! леоныч!!! »

Большое спасибо edm2007. Не надо никуда уходить , ни в какие наблюдатели. Лучше я свалю со своими тупыми вопросами.

А за помощь я вам очень благодарен! На этом примере я многому научился. Понял главное.
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

Сегодня еще немножко поколдовал со своей проблемой. Судя по ДШ, ADMUX = &B11101001 - это то же самое, что Getadc(0,233) - 233 здесь опционально и равно тому же двоичному числу (11101001), только в десятеричном коде. Получается масло-масленое! То есть, 01001 - это содержание первых пяти битов регистра ADMUX, которые указывают, что преобразование производится со входов ADC1(положительный вход) и ADC0(отрицательный вход) с коэффициентом усиления х10. Следовательно, для получения результата,надо воспользоваться формулой из ДШ для дифференциального включения входов ( стр.210 ДШ). Следовательно код изменился вот так:

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

$regfile = "m16def.dat"
$crystal = 8000000
Config Lcdpin = Pin , Rs = Portd.0 , E = Portd.1
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7
Config Lcd = 16 * 2
Config Adc = Free , Prescaler = Auto , Reference = Avcc

Dim W As Word
Dim S As String * 16
Dim M As Single

Admux = &B11101001
Start Adc

Do
   W = Getadc(0 , 233)
   M = W * 5
   M = M / 5120                                       ' 5120 - это 512*10 (по формуле)
   S = Fusing(m , "#.##")
   Cls
   Lcd S
   Waitms 300
Loop

Только опять лажа выходит. На вход ADC0 подан ноль питания (для упрощения), на вход ADC1 подано 3,6 В, а результирующая получилась 3,2 В!!! Нихрена не понимаю!!! :shock:
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

осторожно! леоныч!!!, подобные вопросы не могут быть тупыми, в принципе. Если человек переспрашивает одно и то же, то либо он и не хочет сам учиться (тут дело понятное), либо так объясняют. Гораздо опаснее другое. Это дезинформация. Или недосказанность. Я ведь не просто так пытался выяснить, в чем разница Вашего варианта. И что получил?

осторожно! леоныч!!! писал(а):Считаем что ваш пример без изменений, надо просто индицировать нажатие кнопки. Кнопка нажата - отдельный светодиод горит, отпущена - не горит. При это функция счета 3 светодиодов должна оставаться.


Ну что просили - то и получили. :) На будущее: говорите все как есть. И подобных недоразумений не будет.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
осторожно! леоныч!!!
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

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

Сообщение осторожно! леоныч!!! »

:oops: :oops: :oops: Стыдно.....
TIP
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс июл 03, 2011 06:27:35

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

Сообщение TIP »

Доброго дня всем!
Спецы, подскажите как в проге задать длительность паузы между импульсами в сотню наносекунд?
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

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

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

TIP писал(а):Доброго дня всем!
Спецы, подскажите как в проге задать длительность паузы между импульсами в сотню наносекунд?

При использовании кварца на 20 МГц достаточно двух NOP.
Даже остановленные часы два раза в сутки показывают правильное время.
осторожно! леоныч!!!
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

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

Сообщение осторожно! леоныч!!! »

Секретный кот писал(а):
TIP писал(а):Доброго дня всем!
Спецы, подскажите как в проге задать длительность паузы между импульсами в сотню наносекунд?


Мне вот интересно зачем? :dont_know: :idea: И вообще сможет ли так быстро работать регистр контроллера :dont_know:
Serhio
Прорезались зубы
Сообщения: 249
Зарегистрирован: Вс авг 15, 2010 20:42:44
Откуда: Тюмень
Контактная информация:

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

Сообщение Serhio »

Решил написать программку в Bascom для AVR разумеется. Бейсик хорошо знал в школе и универе. Подскажите какую русскоязычную литературу лучше почитать, что бы вспомнить операторы, команды и тд бейсика? К сожалению нету времени прочитать все 150 страниц форума))))))
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

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

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

Serhio писал(а):Подскажите какую русскоязычную литературу лучше почитать, что бы вспомнить операторы, команды и тд бейсика? К сожалению нету времени прочитать все 150 страниц форума))))))

http://progbook.ru/basic/
Только есть ли в этом смысл? Бейсиков много, а BASCOM такой один. То, что справедливо для другого бейсика, может не подойти к баскому, и наоборот.
Даже остановленные часы два раза в сутки показывают правильное время.
Serhio
Прорезались зубы
Сообщения: 249
Зарегистрирован: Вс авг 15, 2010 20:42:44
Откуда: Тюмень
Контактная информация:

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

Сообщение Serhio »

Спасибо!))) Читал здесь
http://decada.org.ru/project/lessons/bascom_avr/, но тут больше о самой среде Баском. А где можно посмотреть непосредственно о самом языке Баском: что справедливо для него, какой у него синтаксис, какие он использует операторы, список операторов?
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

Serhio писал(а):Спасибо!))) Читал здесь
http://decada.org.ru/project/lessons/bascom_avr/, но тут больше о самой среде Баском. А где можно посмотреть непосредственно о самом языке Баском: что справедливо для него, какой у него синтаксис, какие он использует операторы, список операторов?

А чем встроенный "хелп" не устраивает? Там как раз все это есть, правда на аглицком, но понять не трудно, тем более, по вашим словам, вы бейсик давно изучаете, так что проблем с аглицкими словами быть не должно! 8)
Цапу крутить надо!!! Ку или не ку?
Ответить

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