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

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

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

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

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

Странно. Компилятор ругается.
ошибка.JPG

Исправил кое что. Все отлично! Это уже моя невнимательность! Грипп дает о себе знать.
Спасибо большое за советы! С вами интересно учиться! Вы настоящие спецы своего дела! :beer:
Ну а мне еще учиться и учиться :)))
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2314
Зарегистрирован: Чт ноя 15, 2012 20:47:59
Откуда: Крымск

Сообщение Adagumer »

А вот таким способом не пробовали.

I = Fusing(m , "####.#")

I у нас - Dim I As String * 8

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

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

Хм... А это не одно и то же? Или я ошибаюсь?
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2314
Зарегистрирован: Чт ноя 15, 2012 20:47:59
Откуда: Крымск

Сообщение Adagumer »

осторожно! леоныч!!! писал(а):Хм... А это не одно и то же?
Возможно так и есть, но с Фузингом почему-то легче получается.
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 602
Зарегистрирован: Пн дек 29, 2008 01:40:28
Откуда: (Украина, г. Стаханов, Луганская обл.) теперь Кемерово :)

Сообщение константин_KoSS_89 »

Подскажите, может кто знает как написать программу пид регулятора? Может кто знает где пример программы есть?
Реклама
Встал на лапы
Сообщения: 124
Зарегистрирован: Пт янв 25, 2013 02:48:32

Сообщение _Vasilij_ »

А в сэмплах самого баскома смотрел ? там есть какой-то пример SinglePID , глянь мож оно.
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

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

Тут был код ПИД регулятора. Почитайте внимательно http://m.radiokot.ru/forum/viewtopic.ph ... start=3600
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

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

Друзья! Кто подскажет по какой формуле получить из нескольких разных чисел одно? Причем порядок чисел важен!

Например есть

Dim Dig1 As byte
Dim Dig2 As Byte
Dim Dig3 As Byte
Dim Dig4 As Byte
Dim Dig5 As Byte
Dim Dig6 As Byte

В них цифры, например так

Dig1 в нем 1
Dig2 в нем 4
Dig3 в нем 5
Dig4 в нем 5
Dig5 в нем 0
Dig6 в нем 0

Надо получить к примеру число dim digsumm as Long
в виде digsumm = 145500

Вроде бы должно быть не сложно но я как новичек застрял на этом...
Встал на лапы
Сообщения: 124
Зарегистрирован: Пт янв 25, 2013 02:48:32

Сообщение _Vasilij_ »

вчера ж только в обратную сторону раскладывали, тут еще проще
digsumm = dig1*100000+dig2*10000+dig3*1000+dig4*100+dig5*10+dig6

но это в общем представлении, а в код все построчно придется вставлять и с использованием промежуточной переменной, потому как компилятор не проглотит даже 2 арифметических действия, т.е a=a+b еще можно писать, а вот a=a+b+с уже нет, так как уже две операции сложения
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

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

Во как... Блин я забыл совсем про вчерашние разборки с цифрами. Думаю попробовать в подпрограмме все это безобразие воплотить. Эх переменных куча будет :) Надо подумать как это все разложить чтоб нормальный результат получался.
Встал на лапы
Сообщения: 124
Зарегистрирован: Пт янв 25, 2013 02:48:32

Сообщение _Vasilij_ »

осторожно! леоныч!!! писал(а):Эх переменных куча будет :)
промежуточную переменную можно вообще одну на всю программу использовать, где то уже вроде там была temp as long, вот ею же можно и пользоваться каждый раз, когда нужно воспользоваться промежуточной переменной.

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

temp = dig1*100000
digsumm = temp

temp=dig2*10000
digsumm = digsumm+temp

temp=dig3*1000
digsumm = digsumm+temp

ит.д.
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 307
Зарегистрирован: Ср мар 31, 2010 11:45:58
Откуда: Славянск

Сообщение Moto_v3x »

или так
digsumm = digsumm+dig1
digsumm = digsumm*10
digsumm = digsumm+dig2
digsumm = digsumm*10
digsumm = digsumm+dig3
digsumm = digsumm*10
digsumm = digsumm+dig4
digsumm = digsumm*10
digsumm = digsumm+dig5
digsumm = digsumm*10
digsumm = digsumm+dig6

переменные dig расположить в соответствующем порядке
Сверлит текстолит когтями
Сообщения: 1156
Зарегистрирован: Вт дек 09, 2008 20:31:56

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

Спасибо ребят. А то я вот так попробовал

Dig1 = Dig1 * 100000
Dig2 = Dig2 * 10000
Dig3 = Dig3 * 1000
Dig4 = Dig4 * 100
Dig5 = Dig5 * 10
Dig6 = Dig6

Digsumm = Dig1 + Dig2
Digsumm = Digsumm + Dig3
Digsumm = Digsumm + Dig4
Digsumm = Digsumm + Dig5
Digsumm = Digsumm + Dig6

И получил ерунду полную.

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

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

Вот снова вопрос возник из за которого проблемы.
Как сделать правильно?
Есть строка

If "переменная" <> 20 Then Incr "переменная"

Как впилить паузу сюда чтоб была задержка?
То есть если переменная изменилась,нужно сделать паузу чтоб она перестала изменяться и только потом Записать её значение в другую переменную и выполнить incr для переменной в этой строке. Что то не соображу ни как...

И вопрос на засыпку. Сколько раз можно стереть\прошить атмэловский контроллер серии ATMEGA?
Вымогатель припоя
Аватара пользователя
Сообщения: 602
Зарегистрирован: Пн дек 29, 2008 01:40:28
Откуда: (Украина, г. Стаханов, Луганская обл.) теперь Кемерово :)

Сообщение константин_KoSS_89 »

Примерно так, если я всё правильно понял

If X <> 20 Then
Do
Incr X
Wait 1 'ждать секунду
A = X
Loop Until X = 20
End If

По второму вопросу - много...

И по пид регулятору вопрос в силе, может кто знает как реализовать программно, есть уставка и переменная с ацп, может есть у кого пример простой желалтельно с каментами, как поддержывать заданную температуру...Буквально в пару строк, только расчёт.
Мучитель микросхем
Аватара пользователя
Сообщения: 442
Зарегистрирован: Пт авг 29, 2008 09:22:37

Сообщение dimon-790 »

константин_KoSS_89 вот здесьhttp://www.mcselec.com/index.php?option ... &Itemid=57 глянь , правда под 8051 но под авр-ы переделать ноль проблем .
Сам чуть позже тоже хочу попробовать , диммерное или пид регулирование.
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 442
Зарегистрирован: Пт авг 29, 2008 09:22:37

Сообщение dimon-790 »

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

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

Задам вопрос так.

Есть строка

If Temp = 7 Then
Incr Temp3
A = Temp
Call Podprogramma
End If

Переменная Temp может иметь значение в диапазоне от - 0 до 20.
В моей строчке программа будет реагировать на число 7!
Но мне надо обрабатывать несколько чисел сразу, больше половины числа 20!
Как написать эту строку чтоб реакция происходила только на определенные числа?
То есть ряд чисел.
Мучитель микросхем
Аватара пользователя
Сообщения: 497
Зарегистрирован: Ср дек 10, 2008 21:24:28
Откуда: Алтайский край, Барнаул

Сообщение max50 »

осторожно! леоныч!!! писал(а):Как написать эту строку чтоб реакция происходила только на определенные числа?
То есть ряд чисел.
Если правильно понял, то:

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

Select Case Temp

  Case 1 : Print "1"

  Case 3 To 5 : Print "3-5"

  Case 7 : Incr Temp3
  A = Temp : Call Podprogramma

End Select
Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
Ответить

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