selco писал(а):Кто знает,как сделать на 3310 логарифмическую шкалу
Как вариант сделать серию изображений от пустой шкалы до заполнения (какая дискретность, столько и рисунков), измеряем уровень на АЦП и в зависимости от уровня через Select case выводим нужный рисунок.
Я делал похожее, но на дисплее 1100 - делал вертикальную шкалу для термометра. Для этого я просто перерисовал ненужные символы из библиотеки (сделал вместо них разное количество горизонтальных черточек) и выводил по необходимости. Грубо говоря 0 - пробел. 1 - символ с одной чертой, 2 - с двумя и т.д... Насколько я помню библиотеку от 3310 - там это можно сделать в файле 3310end.bas.
Согласен , пожалуй мне надо более глубоко изучить мат часть. Хотел нахаляву разъдобыть , думал мож кто уже занимался подобмными весчами . Видать прийдётся стать первооткрывателем ...
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
[quote="Gordon Shumway"]
Всё это я понимаю,но,программа выполняет ещо и другие функции. Когда изменяется шкала то естественно чистится экран,цифры и другие надписи в этот момент мигают. нельзя ли сделать очистку определённой строки? Пробовал в end файле добавить вторую очистку,но он чистит всегда с верху,менял значение от 0 до 503 и всё равно чистит с верху. Мне нужна только нижняя строчка. Помогите.
Не получится. Все уже открыто до вас. Ваша проблема не в том, что НЕТУ, просто нету именно ТОГО, что вам нужно. Есть основа, а ее придется изучить понять и переделать. Обыкновенное обучение на начальном уровне. Без выхода на этот уровень, а потом и на более высокие, открытий не сделаете.
vanyap1 писал(а):Как пользоваться дифференциальным усилителем у меги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.
Gordon Shumway писал(а):
Всё это я понимаю,но,программа выполняет ещо и другие функции. Когда изменяется шкала то естественно чистится экран,цифры и другие надписи в этот момент мигают. нельзя ли сделать очистку определённой строки? Пробовал в end файле добавить вторую очистку,но он чистит всегда с верху,менял значение от 0 до 503 и всё равно чистит с верху. Мне нужна только нижняя строчка. Помогите.
Я так понимаю, что очистка экрана идет в цикле? А если отслеживать по изменению уровня? Если уровень уменьшился, тогда очищаем экран и перерисовываем, а если увеличился, тогда очищать не надо, просто добавить к шкале n-ное количество пикселей. Наверное так будет меньше моргать. Другой вариант - увеличить частоту перерисовки экрана, только это, наверное, уже придется 32 разрядный МК использовать или ПЛИС.
$regfile = "m8535.dat"
$crystal = 8000000
$baud = 9600
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Serialin = Buffered , Size = 255 ', Bytematch = All
Config Lcdpin = Pin , Db7 = Porta.3 , Db6 = Porta.2 , Db5 = Porta.5 , Db4 = Porta.4 , Rs = Porta.7 , E = Porta.6
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
чё я там накасячил ? вроде всё по учебнику . ..
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Пытаюсь освоить Баском, вроде что-то понимаю, но подводные камни все таки нахожу. Пишу программу для своего дивайса, но столкнулся с проблемой.
Мне нужно сделать ретранслятор уарта, те контроллер принимает посылку и передает. Посылки разные по длине байт. Подскажите, как это реализовать, а то он их режет по 4 байта, не могу победить.
-------------------
все никак победить не могу, теперь он при посылке теряет байты через один. Отправил 33 34 35 36, получил 33 35, как победить, наставьте на путь истинный
а почему не использовать хардовый юарт ? в 2313 он есть. По сути вопроса , вы пытаетесь впихнуть несколько байт в один . Переменная I в вашем случае , составляет 1-байт , а посылку принимаете много байтную естественно теряете часть посылки.
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
$regfile = "m8535.dat"
$crystal = 8000000
$baud = 9600
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Serialin = Buffered , Size = 10
'Config Serialout = Buffered , Size = 10 ', Bytematch = All
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
Большое спасибо, все работает, но принимать мне необходимо от 4 до 125 байт в посылке, а буфер соответственно с этим не справляется, возможно сделать это через запись в ЕЕПРОМ или все это бесполезно? Посоветуйте, какие еще есть выходы из данной ситуации?
Здравствуйте уважаемые Господа Коты! Подскажите пожалуйста как организовать таймаут по приему UART? Раньше програмировал на пик барсике, там все просто: HSERIN, timeout,метка,переменная. А тут случилось что надо написать прогу под мегу8, ломаю голову как вывести из состояния приема, если ничего не получено. В баскоме новичек, не ругайте, заранее спасибо