Re: BASCOM AVR в вопросах и ответах
Добавлено: Сб май 11, 2013 19:37:49
Судя по даташиту инициализация у МЭЛТ похожая. Фьюзы верно стоят? Попробуйте неиспользуемые DB0 - DB3 на землю посадить.
Здесь можно немножко помяукать :)
https://radiokot.ru/forum/
Я нескольких схемах видел что DB0 - DB3 заземлены, в массе же они висят в воздухе. Как всё-таки правильно поступать? Разъясните кто знает.edm2007 писал(а):Попробуйте неиспользуемые DB0 - DB3 на землю посадить.
Да, один в один как на картинке.amv2000 писал(а):Соединяли так?
Отпаял припаял заново и все заработало. Подскажи как сделать что бы побыстрее работал, а то он с затуплением цыфры изменяет...edm2007 писал(а):Проверил:
На всякий случай HEX прикрепил. Как видно, он точно рабочий.
Значит в монтаже косяк был.tomas111 писал(а): Отпаял припаял заново и все заработало.
Ага, фьюзы. По умолчанию мега 8 зашита на 1 MHz, а тебе нужно 8. Либо фьюзы изменить, либо в коде поправить (это если в меге фьюзы не менялись никогда). Чем шьешь?tomas111 писал(а):fuse !?
Код: Выделить всё
$regfile = "m8def.dat" ' используем ATmega8
$crystal = 8000000 ' тактовая частотаЭто бред.tomas111 писал(а):8 Mgz это сильно быстро ... наверное нужно около 4 что бы не сильно все мелькало
Ну так я выше и писал:amv2000 писал(а):У Вас же в коде забито
Только если в коде править, то нужно твердо быть увереным, что МК работает на известной частоте. Но я вижу, что и с такими элементарными вещами проблемы...edm2007 писал(а):Либо фьюзы изменить, либо в коде поправить
Правильно пишется цифра, через И.tomas111 писал(а):цыфра на дисплеи...
Я учтуamv2000 писал(а):Правильно пишется цифра, через И.tomas111 писал(а):цыфра на дисплеи...
$regfile = "m8def.dat" ' используем ATmega8
$crystal = 8000000 ' тактовая частота
Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7
Config Lcd = 16 * 2 'используем дисплей на 2 строчки по 16 знакомест в каждой
Cursor Off ' курсор выключен
Const Negativ = -1
Dim Ch As Integer
Dim Count As Byte ' вспомогательный счетчик
Dim Adc_value As Single
Dim Any_var As Single ' значение АЦП
Dim Adc_channel(4) As Single ' 4 значения, готовые для вывода
Config Single = Scientific , Digits = 2 ' ограничение до двух знаков
Dim V As Integer
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'конфигурация АЦП
Start Adc 'запускаем аналого-цифровое преобразование
'--------------выводим заставку-------------------------------
Cursor Off 'отключаем отображение курсора на ЖК
Cls 'очитка дисплея
Locate 1 , 1 'позиция курсора
Lcd "аoІpo Ёo¶a»oіaїД" 'выводим надпись
Locate 2 , 4 ' позиция курсора
Lcd "BepcёЗ 1.1" 'выводим надпись
Wait 2 'задержка 1 секунды
Cls
For V = 1 To 16
Locate 1 , 5
Lcd "¤aґpy·єa"
Locate 2 , V ' Задержка на 150 мс
Lcd "."
Waitms 400
Next
Cls 'очитка дисплея
'-------------------------------------------------------------
'главный цикл программы
Do
For Count = 1 To 4 Step 1 ' забираем значения всех четырех каналов АЦП
Ch = Getadc(count) ' и расчитываем для вывода
Adc_value = Ch
Any_var = Adc_value / 2000 ' 2000 - можно задавать изгиб линии
Any_var = Negativ * Any_var ' Если закоментировать, изменим направление изгиба экспоненты
Any_var = Exp(any_var)
Adc_value = 1023 - Adc_value 'Инверсия
Adc_value = Adc_value / 12.786 ' диапазон до 80
'Adc_value = Adc_value * 8
'Adc_value = Adc_value / 1023
Any_var = Adc_value * Any_var
Adc_channel(count) = Any_var / 10
Next
Locate 1 , 1 ' вывод всех значений на индикатор
Lcd ; Adc_channel(1) ;
Locate 1 , 13
Lcd ; Adc_channel(2) ;
Locate 2 , 1
Lcd ; Adc_channel(3) ;
Locate 2 , 13
Lcd ; Adc_channel(4) ;
Waitms 600 ' задержка между чтениями
Loop
End
Так ради Кота, кто Вам мешает-то? Заводите таймер, настраивайте на отсчет минуты, и делайте там что хотите. Или в коде заводите счетчик проходов. Вариантов-то много.tomas111 писал(а):можно ли во время подсчета что бы с переодичностью допустим одна минута вылазила заставка !?
Так откуда же я знаю? Я понятия не имею, что именно Вы считаете. И как. Пройдите сами по коду уже. Допустим, значение переменной Adc_value = 123, в результате выполнения строки Any_var = Adc_value / 2000 в переменной Any_var будет значение 0,0615. А так как у нас ограничение до двух знаков, то 0,06... Ну и так далее, строку за строкой. И сами поймете, что и как получается. А то Вы где-то этот код подглядели, а я в курсе должен быть. Что там за экспонента, и какой у нее изгиб.tomas111 писал(а):что не правильно в расчетах !?