Кто знает,как сделать на 3310 логарифмическую шкалу
Как вариант сделать серию изображений от пустой шкалы до заполнения (какая дискретность, столько и рисунков), измеряем уровень на АЦП и в зависимости от уровня через Select case выводим нужный рисунок.
Я делал похожее, но на дисплее 1100 - делал вертикальную шкалу для термометра. Для этого я просто перерисовал ненужные символы из библиотеки (сделал вместо них разное количество горизонтальных черточек) и выводил по необходимости. Грубо говоря 0 - пробел. 1 - символ с одной чертой, 2 - с двумя и т.д... Насколько я помню библиотеку от 3310 - там это можно сделать в файле 3310end.bas.
Согласен , пожалуй мне надо более глубоко изучить мат часть. Хотел нахаляву разъдобыть , думал мож кто уже занимался подобмными весчами . Видать прийдётся стать первооткрывателем ...
_________________ Все мы работаем по методу Робинзона Крузо – ждем пятницу.
[quote="Gordon Shumway"] Всё это я понимаю,но,программа выполняет ещо и другие функции. Когда изменяется шкала то естественно чистится экран,цифры и другие надписи в этот момент мигают. нельзя ли сделать очистку определённой строки? Пробовал в end файле добавить вторую очистку,но он чистит всегда с верху,менял значение от 0 до 503 и всё равно чистит с верху. Мне нужна только нижняя строчка. Помогите.
Не получится. Все уже открыто до вас. Ваша проблема не в том, что НЕТУ, просто нету именно ТОГО, что вам нужно. Есть основа, а ее придется изучить понять и переделать. Обыкновенное обучение на начальном уровне. Без выхода на этот уровень, а потом и на более высокие, открытий не сделаете.
Как пользоваться дифференциальным усилителем у меги16? Точнее - как измерять ток через шунт с помощью АЦП без внешнего ОУ?
Пример из даташита меги16:
Example: ADMUX = 0xED (ADC3 - ADC2, 10x gain, 2.56V reference, left adjusted result) Voltage on ADC3 is 300 mV, voltage on ADC2 is 500 mV. ADCR = 512 * 10 * (300 - 500) / 2560 = -400 = 0x270 ADCL will thus read 0x00, and ADCH will read 0x9C. Writing zero to ADLAR right adjusts the result: ADCL = 0x70, ADCH = 0x02.
Всё это я понимаю,но,программа выполняет ещо и другие функции. Когда изменяется шкала то естественно чистится экран,цифры и другие надписи в этот момент мигают. нельзя ли сделать очистку определённой строки? Пробовал в end файле добавить вторую очистку,но он чистит всегда с верху,менял значение от 0 до 503 и всё равно чистит с верху. Мне нужна только нижняя строчка. Помогите.
Я так понимаю, что очистка экрана идет в цикле? А если отслеживать по изменению уровня? Если уровень уменьшился, тогда очищаем экран и перерисовываем, а если увеличился, тогда очищать не надо, просто добавить к шкале n-ное количество пикселей. Наверное так будет меньше моргать. Другой вариант - увеличить частоту перерисовки экрана, только это, наверное, уже придется 32 разрядный МК использовать или ПЛИС.
_________________ Цапу крутить надо!!! Ку или не ку?
Dim Na As Byte , Buf_count As Byte , A As Byte 'Ucsrb.5 = 0 Enable Interrupts 'Clear Serialin '$timeout = 500000 Do
If Ischarwaiting() = 1 Then 'если байт в регистре Inputbin Na 'Забираем Его В Na Incr Buf_count 'увеличиваем счётчик кол-ва байт End If
Waitms 2 'ждём немного
If Ischarwaiting() = 0 Then 'если буфер попрежнему пуст If Buf_count > 1 Then 'а счётчик кол-ва байт больше единицы Cls 'выдаём получиные на индикатор Lcd Hex(na) Lowerline Lcd Buf_count Buf_count = 0 ' End If End If
Loop
поковырялся немного вчера , вроде получил что хотел . Но как всегда , терзают смутные сомнения , особенно задержка между условиями . Интересно , как ещё можно узнать, что приём последнего байта закончен ?.
_________________ Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Похоже мне "везёт" на чудеса . Попытался запустить тиньку , с софтовым юарт-ом не тут-то было ! не принимает воообще никак . Передача прекрасно а приём фиг-вам . Народ гляньте код ,
Код:
$regfile = "attiny45.dat" $crystal = 8000000 Dim Na As String * 6
Open "comb.1:9600,8,n,1" For Output As #1 Open "comb.2:9600,8,n,1" For Input As #2
Do
Na =Waitkey (#2) Print #1 , Na
Loop
чё я там накасячил ? вроде всё по учебнику . ..
_________________ Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
Добавлено: Пн сен 03, 2012 08:39:24
Открыл глаза
Зарегистрирован: Вс май 30, 2010 20:27:33 Сообщений: 63 Откуда: Санкт-Петербург
Рейтинг сообщения:0
Добрый день!
Товарищи форумчане, нужна Ваша помощь!
Пытаюсь освоить Баском, вроде что-то понимаю, но подводные камни все таки нахожу. Пишу программу для своего дивайса, но столкнулся с проблемой.
Мне нужно сделать ретранслятор уарта, те контроллер принимает посылку и передает. Посылки разные по длине байт. Подскажите, как это реализовать, а то он их режет по 4 байта, не могу победить.
---------- все никак победить не могу, теперь он при посылке теряет байты через один. Отправил 33 34 35 36, получил 33 35, как победить, наставьте на путь истинный
а почему не использовать хардовый юарт ? в 2313 он есть. По сути вопроса , вы пытаетесь впихнуть несколько байт в один . Переменная I в вашем случае , составляет 1-байт , а посылку принимаете много байтную естественно теряете часть посылки.
_________________ Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Open "comc.1:9600,8,n,1" For Input As #1 Open "comc.0:9600,8,n,1" For Output As #0
Dim Na(10)as Byte , Buf_count As Byte , A As Byte
Enable Interrupts Clear Serialin Buf_count = 1 Do
If Ischarwaiting() = 1 Then 'если байт в регистре Inputbin Na(buf_count) , 1 'Забираем Его В na Incr Buf_count 'увеличиваем счётчик кол-ва байт End If
Waitms 2 'ждём немного
If Ischarwaiting() < 1 Then 'если буфер попрежнему пуст
If Buf_count > 1 Then 'а счётчик кол-ва байт больше единицы For Buf_count = Buf_count To 2 Step -1 Incr A Printbin #0 , Na(a) ; 1 'выдаём полученые данные Next A = 0 Clear Serialin ' End If End If
Loop
Close #1 Close #0
приём по хардовому юарту передача по софтовому.
Вложения:
Комментарий к файлу: файлик для моделирования в протеусе uart.rar [14.65 KiB]
Скачиваний: 212
_________________ Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
Добавлено: Сб сен 08, 2012 09:29:43
Открыл глаза
Зарегистрирован: Вс май 30, 2010 20:27:33 Сообщений: 63 Откуда: Санкт-Петербург
Рейтинг сообщения:0
Большое спасибо, все работает, но принимать мне необходимо от 4 до 125 байт в посылке, а буфер соответственно с этим не справляется, возможно сделать это через запись в ЕЕПРОМ или все это бесполезно? Посоветуйте, какие еще есть выходы из данной ситуации?
Здравствуйте уважаемые Господа Коты! Подскажите пожалуйста как организовать таймаут по приему UART? Раньше програмировал на пик барсике, там все просто: HSERIN, timeout,метка,переменная. А тут случилось что надо написать прогу под мегу8, ломаю голову как вывести из состояния приема, если ничего не получено. В баскоме новичек, не ругайте, заранее спасибо
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 409
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения