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

Обсуждаем контроллеры компании Atmel.
Ответить
Встал на лапы
Сообщения: 113
Зарегистрирован: Чт июл 30, 2009 14:33:42

Сообщение Vet-RX »

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

Сообщение Igor_67 »

myx писал(а): В теории понял, а вот как на практике написать не знаю. Ради добавления возможности регулировать температуру с десятыми долями не хочется бэйсик изучать. Может накидаете кусок программы с изменениями?
Сейчас на работе целыми днями - некогда. В выходные посмотрю, если время позволит.
Цапу крутить надо!!! Ку или не ку?
Реклама
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

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

Можно еще дурацкий вопрос? Вот использую в проекте баском микросхему памяти 24lc64. А как во время работы в протеусе посмотреть как меняется её содержимое?
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

На самом деле все просто: как обычно загружаем в МК файл .OBJ, запускаем пошаговую отладку, а затем в меню "Отладка" выбираем в самом низу "I2C Memory Internal Memory".

Изображение

P.S. Если быть внимательным, то можно заметить что так же в списке присутствуют датчики DS18XXX, содержимое которых можно так же посмотреть. То бишь, что в проекте используется, то и можно подробно разглядеть. Что при отладке очень удобно. Вообще меню "Отладка" хранит массу сокровищ. Тут можно и содержимое регистров посмотреть, и EEPROM самого МК, да что там, можно даже исходный код на АСМе посмотреть. Так что стоит уделить немного времени, Proteus - это совсем не игрушка. :tea:
Вложения
leo_memory.gif
(85.91 КБ) 1265 скачиваний
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

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

Спасибо!!! :))) Сегодня после работы по эксперементирую. Пока так и не понял как в меню изменять константы. Меню сделал а толку то... Снова буду биться с баскомом :facepalm:
Реклама
Открыл глаза
Сообщения: 71
Зарегистрирован: Чт мар 18, 2010 23:31:57
Откуда: Домодедово

Сообщение ВасилийВикторович »

Внимание! Вопрос знатокам! Почему при нажатии кнопки на пульте, toggle выполняется два раза? Пробовал после toggle relay ставить wait, но один хрен хоть минуту задержку делай, все равно еще раз после задержки срабатывает.

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

$regfile = "attiny13.dat"
$crystal = 9600000
$lib "mcsbyte.lbx"

Dim Address As Byte
Dim Command As Byte
Config Portb.4 = Output
Relay Alias Portb.4
Config Rc5 = Pinb.0
Enable Interrupts 

Do
Getrc5(address , Command)             
Command = Command And &B01111111

If Command = 12 Then  
   Toggle Relay
End If
Loop   
End  
Причем делал тоже самое на 90s2313 и проблем небыло. Заметил вот что: если постараться на пульте жать кнопку очень коротко(что редко но случается) то все ок. Выходит что такой своеобразный "дребезг" получается. Вот если бы это был не пульт rc5 а простая кнопка подключенная к мк напрямую, я б дописал GIFR = 64 как здесь:

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

Button:
Toggle Relay
Waitms 100
Gifr = 64
 Return

End
А так уже не знаю что и делать, голова кипит уже.
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 497
Зарегистрирован: Ср дек 10, 2008 21:24:28
Откуда: Алтайский край, Барнаул

Сообщение max50 »

ВасилийВикторович писал(а):Пробовал после toggle relay ставить wait, но один хрен хоть минуту задержку делай, все равно еще раз после задержки срабатывает.
Надо не после toggle relay, а перед:

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

If Command = 12 Then  
   Waitms 200
   Toggle Relay
End If
И тут посмотри.
Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
Открыл глаза
Сообщения: 71
Зарегистрирован: Чт мар 18, 2010 23:31:57
Откуда: Домодедово

Сообщение ВасилийВикторович »

max50 писал(а):
ВасилийВикторович писал(а):Надо не после toggle relay, а перед:

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

If Command = 12 Then  
   Waitms 200
   Toggle Relay
End If
Так тоже пробовал, опрашивается rc5, затем задержка, и один хрен два раза toggle.

А вот за такую подсказку :

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

Config Rc5 = Pinb.3 , Wait = 200 ' *Wait - подбирать по стабильному срабатыванию
Благодарю! Завтра попробую, думаю должно помочь.
Хотя странно что в 2313 работает нормально.
Открыл глаза
Сообщения: 71
Зарегистрирован: Чт мар 18, 2010 23:31:57
Откуда: Домодедово

Сообщение ВасилийВикторович »

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

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

Мда... Думаю лучше все константы для меню хранить во внешней памяти. И оттуда их менять. Не получается у меня в меню менять константы, в протеусе начинаются глюки и ошибка вылетает... :?
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

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

Я понять не могу, в чем проблема-то? Что именно у Вас не получается? Вы вот когда говорите:
осторожно! леоныч!!! писал(а):в протеусе начинаются глюки и ошибка вылетает...
так уточняйте, какие глюки, какая ошибка, и при каком исходнике. И главное, что же Вы хотели получить. Чем подробнее и грамотнее будет вопрос, тем быстрее и точнее будет ответ.

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

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

Зря на меня сердитесь. Назвал не правильно, не спорю. Мне нужно изменять значение задержки waitms. А внешняя память нужна, не надо бабушек, тут и дедушек хватает, внешняя память в основном для сохранения значений регистра, причем эти значения еще и нумероваться будут. И записей не менее 100 будет. А поскольку есть внешняя память то почему бы в ней не держать значения? У неё и ресурс гораздо больше чем у памяти контроллера.

Есть значение "W" Его надо запоминать по нажатию кнопки, менять его задержку на переключение.

Я писал, наверняка не правильно (скорее всего 100%) Waitms = C ( С это то что нужно изменять в меню. Изначально условие что к примеру "С" = 50.

Ругаться и злится все умею, даже я, но я только учусь.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

осторожно! леоныч!!! писал(а):Зря на меня сердитесь.
Вот заняться мне нечем. :)

Проблема какая-то надуманная, а Вы ее решаете которую неделю... Кто мешает сделать так:

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

Dim Temp as Word   ' переменная, определяющая величину задержки (0 - 65535)

................

Waitms Temp
И меняйте эту переменную как Вам угодно. Не хочите? Или может Вам нужно изменять задержку в микросекундах (Waitus нельзя использовать с переменной)? Сделайте в виде подпрограммы:

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

Dim Count as Word, Temp as Word

..................

Any_delay:

For Count = 1 To Temp 

Waitus 1

Next

Return
Меняйте переменную Temp и вызывайте Gosub Any_delay когда угодно. Все равно не устраивает? Сделайте функцию, которой будете передавать нужное значение, цикл останется прежним.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

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

Ну вот... Видимо теории мало у меня. Хотя если честно нормальной книжки нету у меня. Поглащаю информацию отовсюду. Но такого варианта не видел. Еще раз спасибо. Буду пробовать! А бабушки и дедушки тут не причем :) Им лучше телевизор дома смотреть :))
Вымогатель припоя
Аватара пользователя
Сообщения: 566
Зарегистрирован: Вт ноя 18, 2008 20:33:17
Откуда: г.Луганск

Сообщение htscooter »

Уважаемые коты, подскажите, в чем может быть дело. Кусок кода, а именно

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

For I = 1 To 4
      Cyfra_ = Cyfra(i)
      Razryad_ = Cyfra_ * 8                                             'выбираем строку в таблице данных
      Razryad_ = Segment + Razryad_                                     'выбираем столбец в таблице данных
      Razryad_ = Lookup(razryad_ , Cifri)                               'забираем данные
      If Common_cathode = 1 Then Razryad_ = Not Razryad_                'инвертируем в случае общего катода
      Razryad(i) = Razryad_
Next I
вываливает ошибку в строчке Razryad(i) = Razryad_, пишет "Source variable does not match the target variable", несмотря на то, что все переменные одинаковые, и обозначены вначале кода, а именно

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

Dim Razryad_ As Byte
Dim Razryad(4) As Byte
Dim Cyfra(4) As Byte                                                    'хранение минут и секунд по разрядам (cyfra(1) - самый старший разряд, cyfra(4) - самый младший)
Dim Cyfra_ As Byte
Dim Segment As Byte
Dim I As Byte
Что за беда?
----
В причине не разобрался, но вылечилось добавлением в конце строчки апострофа для комментария :dont_know:
Хорошо и надежно работающая система безусловно красива
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

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

А какая версия компилятора?
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

htscooter писал(а):Что за беда?
Никогда не используйте символ "_" в таком виде, не создавайте себе проблемы на ровном месте. Дело в том что этот служебный символ воспринимается компилятором как символ переноса строки. Например, последняя команда трактуется как:

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

Razryad(i) = Razryad Next I 
что естественно является ошибкой. Вставка комментариев конечно помогает, они собственно и являются разделителями для кода. Но место это очень коварное, попробуйте ради интереса убрать комментарии в других строках, и все поймете сами. Правильным и полезным для визуального восприятия использованием данного символа будет, например, такой вариант (когда список переменных не умещается в одну строку):

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

Dim A As Byte , B As Byte , C As Byte , D As Byte , _
E As Byte , F As Byte , G As Byte , H As Byte
Резюмируем: Просто дайте нормальные имена переменным, и все будет в порядке. К слову, использовать символ "_" как псевдопробел можно спокойно, это наоборот улучшает читаемость кода (Flag_dot, например).
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 566
Зарегистрирован: Вт ноя 18, 2008 20:33:17
Откуда: г.Луганск

Сообщение htscooter »

Буду знать, спасибо!
Хорошо и надежно работающая система безусловно красива
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина

Сообщение vanyap1 »

Что то у меня не выходит получить информацию у вменяемом виде с датчика - tmp006. Локальную температуру получил, а температуру объекта не получается. Беспорядочно меняется значение от 100 до 200. Может у кого то уже есть опыт работы с таким датчиком? Ну и собственно кусок кода, тот который с расчетом этой температуры?

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

Tmp006:
I2cstart
I2cwbyte Tmp006w
I2cwbyte B1
I2cstart
I2cwbyte Tmp006r
I2crbyte Hightemp , Ack
I2crbyte Lowtemp , Nack
I2cstop
 Temp = Makeint(hightemp , Lowtemp )
  Return
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 5837
Зарегистрирован: Ср ноя 17, 2010 23:10:55
Откуда: Ижевск LO66NU

Сообщение svic »

Доброго времени суток всем пушистым! Прошу совета по небольшому вопросу - будет-ли мега8 физически отлавливать уровень на PD2 (рыба прилагается в архиве). Почему-то никак не получается сконфигурировать означенную ногу, как PIND.... :dont_know:
tun.rar
(100.72 КБ) 189 скачиваний
В начале жизнь мучает вопросами, в конце - ответами...
Контактная информация:
Ответить

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