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

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

Сообщение edm2007 »

Там на самом деле не 1 градус ошибки при таких расчетах а 0,1. А минус ноль конечно будет появляться, ведь температура не меняется скачкообразно от 0 до -1. Есть ведь и -0,1C и все в том же духе. Это мы не выводим в данном случае десятые, но они ведь существуют. :) А чтобы этого нелепого минуса небыло, как раз и достаточно прибавить 1 к отрицательным значениям. Правда в этом случае мы немножко наврем (потому как при реальной температуре -0,1C мы сразу же будем показывать -1С), но я думаю что ничего страшного. :)
Последний раз редактировалось edm2007 Вс янв 29, 2012 22:56:55, всего редактировалось 1 раз.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Реклама
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина

Сообщение vanyap1 »

Фактически, для кода где нет десятых градуса оно актуально. А почему бы и не отображать для 0,1 градуса - минус?...

Но для погрешности в 0,1 градус я считаю ничего предпринимать не надо, ибо ds18b20 не обладает столь высокой точностью.

Мой пульт меня достал сцуко! Уже стырил код для обработки НЕК протокола, итак ничего не работает!

Но импульсы к МК идут 100500%, проверил. Настроил прерывания на подъем уровня и заработало, но мне не надо реагировать на все что в пределах 36 КГц.... Я в ужасе от этих пультов.
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

Ну разумеется когда десятые выводятся то минус нужен. И действительно погрешность 0,1C в минусах это ерунда. Но у автора-то лишь целые. И тут минус ноль смотрится как-то нелепо. Впрочем, в этом случае можно не заморачиваться совсем, а просто написать: если температура равна 0, то на месте знака - пусто. А +0,3C там на самом деле, или -0,7С нам уже не важно. Все равно десятых нет. Так даже лучше и точнее будет, и ничего прибавлять не надо.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 900
Зарегистрирован: Чт авг 27, 2009 20:09:01
Откуда: Приднестровье г.Бендеры

Сообщение mr4ester »

вообщем то я только сегодня переписал программу под десятые градуса :)) и случайно наткнулся на то что при отрицательной температуре прибавляют 1, меня это с смутило и решил спросить, выходит с вышесказанными разъяснениями, придется убрать это действие, спасибо за разъяснение :beer:
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина

Сообщение vanyap1 »

Собрал все таки передатчик rc-5 на тини 2313 (теперь он точно rc-5, и не надо подбирать пульты).
Код устроен так: при подаче питания команда и адрес равно - 0, и при каждой последующей передачи команда инкрементируется.

Но приемник все равно не работает как надо, иногда принимает каждую 10-ю команду. Ито после танцов с бубном, убрал задержку после опроса rc-5 и добавил условие - если команда и адрес не равно 255 то записать в другие переменные, которые потом выводятся на ЖКИ.


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

Сообщение edm2007 »

Я как-то спрашивал, а приемник какой? Точно 36 kHz?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Реклама
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина

Сообщение vanyap1 »

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

Сообщение Magicanin »

Здравия желаю всем Котам. :music:
Нужна помощь сведущих. Конструируируя собственную цму, встала проблема в анализе звукового потока, не могу добиться четкого разделения частотных каналов, в основном светодиоды мигают хаотически. Анализ взят из "Виктория" и добавлен шим на 4 канала от "Светодиодный диммер". При отсутствии звука светики не горят, как и должно быть, а при подаче звука хаос.
Пробовал даже варианты анализа отсюда http://bascomavr.3bb.ru/viewtopic.php?id=28&p=2
Стало хуже, мигает только второй канал, остальные в полную мощность.
Тактирование пробовал и внешнее на 16 и внутреннее.
Может несогласованность с шим, не знаю что думать? :o

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

$regfile = "m32def.dat"
$crystal = 8000000
                                     
Config Adc = Single , Prescaler = Auto , Reference = Internal  
Enable Adc                                              
Start Adc                                                  

Config Timer0 = Timer , Prescale = 1                  
Enable Timer0                                          
On Timer0 Pwms                                            
Start Timer0
                                           
Enable Interrupts

Config Portd = Output                                       

Dim Tik As Byte                                             
Dim Y(4) As Byte
Dim A1 As Word , A2 As Word , A3 As Word , A4 As Word , A5 As Word       
Dim X1 As Single , X2 As Single , X3 As Single , X4 As Single , X5 As Single      
Dim Ym1 As Byte , Ym2 As Byte , Ym3 As Byte , Ym4 As Byte   
Dim Temp5 As Single , Temp6 As Single , Temp7 As Single    
Dim Temp8 As Byte                                          

Do
Disable Timer0

A1 = Getadc(7)
'Waitus 25
A2 = Getadc(7)
'Waitus 25
A3 = Getadc(7)
'Waitus 25
A4 = Getadc(7)
'waitus 25
A5 = Getadc(7)

Enable Timer0

 X1 = A1 / 103
 X2 = A2 / 103
 X3 = A3 / 103
 X4 = A4 / 103
 X5 = A5 / 103

          Temp5 = X1 - X5
          Temp6 = X2 - X4
          Temp8 = Temp5 + Temp6
          Ym1 = Temp8 / 3
         'Ñ×1
          Temp5 = X1 + X5
          Temp6 = X3 * 2
          Temp8 = Temp5 - Temp6
          Ym2 = Temp8 / 4
         'Ñ×2
          Temp5 = X1 - X5
          Temp7 = X2 - X4
          Temp6 = Temp7 * 2
          Temp8 = Temp5 - Temp6
          Ym3 = Temp8 / 6
         'Â×
          Temp5 = X1 + X5
          Temp7 = X2 + X4
          Temp6 = Temp7 * 4
          Temp8 = Temp5 - Temp6
          Ym4 = Temp8 / 18


Y(1) = Ym1
Y(2) = Ym2
Y(3) = Ym3
Y(4) = Ym4

Loop
End


'*******************************************************************************

Pwms:
Incr Tik
 If Tik = 255 Then
  Tik = 0
  Portd = 0
 End If
   If Tik > Y(1) Then Portd.0 = 1
   If Tik > Y(2) Then Portd.1 = 1
   If Tik > Y(3) Then Portd.2 = 1
   If Tik > Y(4) Then Portd.3 = 1
Return
[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]
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина

Сообщение vanyap1 »

Как стабилизировать данные АЦП меги8?
АЦП отключен, включаю только при измерении и до начала вычисления отключаю, немного сузился диапазон прыжков. Прыгает как от внутреннего ИОН так и от питающего опорного.
Но ведь они не должны прыгать если опорное напряжение еще и питающее!
Вот кусок кода:

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

Do
Start Adc
Wadc = Getadc(0)
Stop Adc
U = Wadc / 204.6

Locate 1 , 1
Lcd "ADC= " ; Wadc ; "   "
Locate 2 , 1
Lcd "Voltage= " ; Fusing(u , "#.#") ; "  "
Waitms 100
Loop
Конденсаторы в схеме есть, установлены по схеме из даташита. Питается все это пока что от ЮСБ программатора.
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 184
Зарегистрирован: Чт янв 13, 2011 11:36:16
Откуда: Красноярский край

Сообщение Magicanin »

http://www.lcdinfo.ru/html.cgi/txt/doc/ ... 3_58_8.htm
Прыгает не опорное, а входное напряжение.
[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]
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина

Сообщение vanyap1 »

Мне кажется что это не есть хорошо для блока питания, если надо измерять и контролировать напряжение одновременно.
ШИМ может дать большие помехи для АЦП.

Думал сгладить шим и дать опорное напряжение с него на ИБП. Может и RC цепочку на вход АЦП подключить...?
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 184
Зарегистрирован: Чт янв 13, 2011 11:36:16
Откуда: Красноярский край

Сообщение Magicanin »

RC хорошо бы, можно еще входное сопротивление уменьшить подтяжкой на массу штоб не болтался на ветру.
[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]
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина

Сообщение vanyap1 »

Magicanin писал(а):Извращение это: программатор - AVR910 by Prottoss, прошивка - Doper, драйвер - Osamu Tamura, называется - STK500!

:))) Достаточно неплохо работает сие чудо техники...
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 184
Зарегистрирован: Чт янв 13, 2011 11:36:16
Откуда: Красноярский край

Сообщение Magicanin »

vanyap1 писал(а):
Magicanin писал(а):Извращение это: программатор - AVR910 by Prottoss, прошивка - Doper, драйвер - Osamu Tamura, называется - STK500!

:))) Достаточно неплохо работает сие чудо техники...
Только этим чудом и пользуюсь, уже второй год.
[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]
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина

Сообщение vanyap1 »

Я тоже пользуюсь, но все время после прошивки ошибка вылетает, компенсирует скорость прошивки.
Еще иногда становится недоступным программатор, надо передернуть с ЮСБ.
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 184
Зарегистрирован: Чт янв 13, 2011 11:36:16
Откуда: Красноярский край

Сообщение Magicanin »

Я пользуюсь им только в Bascom-AVR 1.11.9.8 По-моему самая удачная сборка из всех версий.
[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]
Опытный кот
Аватара пользователя
Сообщения: 725
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

Сообщение amv2000 »

Magicanin писал(а):Я пользуюсь им только в Bascom-AVR 1.11.9.8 По-моему самая удачная сборка из всех версий.
Согласен на все 100%, а касаемо программатора наверное дело привычки, как говорится, что русскому хорошо то немцу смерть.
Да простят мне флуд, не удержался.
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина

Сообщение vanyap1 »

Как оставить после комы только один знак, а все остальное убрать? Это надо сделать до вывода на экран.

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

Lcd "Voltage= " ; Fusing(u , "#.#") ; "  "  
Команду "Fusing" вроде понял, но никак она не хочет работать

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

U = Fusing(U , "#.#")
Или ввести еще одну переменную и сделать так -

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

U2 = Fusing(U , "#.#")
U = U2
?
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 184
Зарегистрирован: Чт янв 13, 2011 11:36:16
Откуда: Красноярский край

Сообщение Magicanin »

Попробуй это из хелпа:

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

S = "12345"
S = Format(s , "000.0")
Print S
Но она раотает только со стрингами, иначе добавь Str(S)
[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]
Опытный кот
Аватара пользователя
Сообщения: 725
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

Сообщение amv2000 »

Пример тоже из хелпа
СпойлерDim S As Single , Z As String * 10



'присвоить значение переменной single

S = 123.45678

'используя str() преобразуем числовое значение в строковое

Z = Str(s)

Print Z 'выводим 123.456779477



Z = Fusing(s , "#.##")



'после форматирования используем 2 цифры после запятой с округлением

Print Fusing(s , "#.##") 'выводим 123.46



'после форматирования используем 2 цифры после запятой без округления

Print Fusing(s , "#.&&") 'выводим 123.45
Fusing Форматирует переменную типа Single согласно формату строки, при необходимости выполняет округление.
Последний раз редактировалось amv2000 Вт янв 31, 2012 18:00:24, всего редактировалось 3 раза.
Ответить

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