BASCOM AVR в вопросах и ответах
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Именно в коде? Да как минимум то, что Wait непригодна для точного отсчета временных интервалов. Даже при работе на внутреннем генераторе и используя таймер, будет погрешность отсчета. Что уж тут говорить про Wait. Ну а про то, что микроконтроллер сидит целую секунду в задержке, я вообще молчу. В этой конструкции оно не важно, но начинающие запросто утягивают такие "решения", и потом втыкают их во все свои проекты.
Асинхронный режим хорош, да. В статье речь идет о часах, там Баском своими силами все настраивает и запускает. Но сконфигурировать таймер для своих целей не составит труда. Только обработчик самому нужно будет написать.
Асинхронный режим хорош, да. В статье речь идет о часах, там Баском своими силами все настраивает и запускает. Но сконфигурировать таймер для своих целей не составит труда. Только обработчик самому нужно будет написать.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Реклама
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: BASCOM AVR в вопросах и ответах
Внутренний генератор вообще не стабильная штука.
- amv2000
- Опытный кот
- Сообщения: 717
- Зарегистрирован: Вт апр 26, 2011 13:58:36
- Откуда: Ростовская область
Re: BASCOM AVR в вопросах и ответах
Извиняюсь edm2007, но прошу помощи!
Вопрос, если используем не 4-х, а 3-х разрядные LED индикаторы, меняем значение разрядов в коде соответственно на 3, а цифры обрезаются со старшего разряда т.е было 1234 выводится 234 я честное слово не пойму?
Вопрос, если используем не 4-х, а 3-х разрядные LED индикаторы, меняем значение разрядов в коде соответственно на 3, а цифры обрезаются со старшего разряда т.е было 1234 выводится 234 я честное слово не пойму?
Код: Выделить всё
'************************ [прерывание таймера Т0] ******************************
Refresh:
'=============== Разряды ===================
Incr Count : If Count > 3 Then Count = 1 ' увеличиваем значение счетчика на 3 разряда
Ledout = Lookup(count , Razr) ' забираем номер разряда
Gosub Registr
'========== Второй индикатор ===============
Ledout = Lookup(number(count + 3) , Digits) ' забираем код цифры для ВТОРОГО индикатора
If H_flag2(count) = 1 Then ' если установлен флаг
Ledout = Ledout Xor &B10000000 ' зажигаем точку
End If
Gosub Registr 'закидываем в регистр
'========== Первый индикатор ===============
Ledout = Lookup(number(count) , Digits) ' забираем код цифры для ПЕРВОГО индикатора
If H_flag1(count) = 1 Then ' если установлен флаг
Ledout = Ledout Xor &B10000000 ' зажигаем точку
End If
Gosub Registr ' закидываем в регистр
Pulseout Portc , 2 , 20 ' защелкиваем данные (для 4МГц импульс 5мкс)
Return
'<---------- подпрограмма отправки данных в регистр
Registr:
Shiftout 595data , 595clock , Ledout , 1 'задвигаем данные
Return- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
А разнос по разрядам как выглядит?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- amv2000
- Опытный кот
- Сообщения: 717
- Зарегистрирован: Вт апр 26, 2011 13:58:36
- Откуда: Ростовская область
Re: BASCOM AVR в вопросах и ответах
Выложил весь проект.
Код: Выделить всё
Led_indikator: ' в прерывании выводим данные на LED индикаторы
'................................. Разряды .....................................
Incr Count : If Count > 3 Then Count = 1 ' увеличиваем значение счетчика на 3 разряда
Ledout = Lookup(count , Razr) ' забираем номер разряда
Gosub Registr ' закидываем в регистр
'---------- Второй индикатор (ток) ----------
Call Preobraz_chisel ' преобразуем данные с АЦП
Pr = 2 ' устанавливаем флаг
Ledout = Lookup(number(count + 3) , Digits) ' забираем код цифры для ВТОРОГО индикатора
'<................ управление точками ВТОРОГО индикатора
If H_flag2(count) = 1 Then ' если установлен флаг
Ledout = Ledout Xor &B10000000 ' зажигаем точку
End If
Goto Registr ' закидываем в регистр
'---------- Первый индикатор (напряжение)----------
Call Preobraz_chisel()
Pr = 1
Ledout = Lookup(number(count) , Digits) ' забираем код цифры для ПЕРВОГО индикатора
'<................ управление точками ПЕРВОГО индикатора
If H_flag1(count) = 1 Then ' если установлен флаг
Ledout = Ledout Xor &B10000000 ' зажигаем точку
End If
Goto Registr
Pulseout Portc , 2 , 20 ' защелкиваем данные (для 4МГц импульс 5мкс)
Return
'<---------- подпрограмма отправки данных в регистр
Registr:
Shiftout 595data , 595clock , Ledout , 1 ' задвигаем данные
Return
'********************* подпрогр измерения тока и напряж ************************
Sub Adc_opros
Start Adc ' запускаем преобразование
V_adc = Getadc(0) : I_adc = Getadc(1) ' <---- приравниваем переменную V_adc, I_adc к числу которое получили с 0, 1 канала АЦП
Stop Adc ' останавливаем работу АЦП
End Sub
'*************************** подпрограмма расчета ******************************
Sub Raschet(lcd_print As Single , V_adc As Word , Perem_v As Single ) 'подпрограмма приведения
Lcd_print = V_adc * Perem_v ' данных к удобовоспроизводимому виду
End Sub
'***************** [Считываем показания с АЦП преобразуем в цифры] *************
Sub Preobraz_chisel ' переводим значение АЦП в цифры
Call Adc_opros
If Pr = 1 Then Goto Pr1
If Pr = 2 Then Goto Pr2
Pr1:
Call Raschet(lcd_print , V_adc , Perem_v)
Value = Lcd_print ' переменная для разноса
For Temp = 3 To 1 Step -1 ' в цикле разбиваем переменную по разрядам
Number(temp) = Value Mod 10
Value = Value / 10
Next
Pr2:
Call Raschet(lcd_print , I_adc , Perem_i)
Value = Lcd_print ' переменная для разноса
For Temp = 6 To 4 Step -1 ' в цикле разбиваем переменную по разрядам
Number(temp) = Value Mod 10
Value = Value / 10
Next
End Sub
- Вложения
-
- LED на 3 разряда.7z
- (62.67 КБ) 192 скачивания
Последний раз редактировалось amv2000 Вс июл 22, 2012 14:19:20, всего редактировалось 1 раз.
- Реклама
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
amv2000 писал(а):было 1234 выводится 234 я честное слово не пойму?
Я вот тоже не пойму, какие 1234, если индикатор трехразрядный? При разносе на 3 разряда мы и получим 234.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- amv2000
- Опытный кот
- Сообщения: 717
- Зарегистрирован: Вт апр 26, 2011 13:58:36
- Откуда: Ростовская область
Re: BASCOM AVR в вопросах и ответах
edm2007 писал(а): При разносе на 3 разряда мы и получим 234.
Ну я считал, что 123...Где мы задаем количество цифр, в цикле?
Код: Выделить всё
Incr Count : If Count > 3 Then Count = 1 ' увеличиваем значение счетчика на 3 разряда
Ledout = Lookup(count , Razr) ' забираем номер разряда- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
При разносе 1234 на три разряда?
Код: Выделить всё
1. 1234 mod 10 = 4 <<<
1234 / 10 = 123
2. 123 mod 10 = 3 <<<
123 / 10 = 12
3. 12 mod 10 = 2 <<<
12 / 10 = 1
уходим...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- amv2000
- Опытный кот
- Сообщения: 717
- Зарегистрирован: Вт апр 26, 2011 13:58:36
- Откуда: Ростовская область
Re: BASCOM AVR в вопросах и ответах
В принципе я уже выкрутился можно брать код и на 4 разряда, просто отключить 4 по схеме, но интересно собственно берется только 4 цифры Value = 1234, или можно и три Value = 123 ???
Или во втором случае надо менять
Или во втором случае надо менять
Код: Выделить всё
Синтаксис:
SHIFTOUT Data , Clock , var , option
Data - пин микроконтроллера для вывода данных
Clock - пин микроконтроллера для вывода тактовых импульсов
var - переменная, которую необходимо отправить в регистр
option - может принимать значения от 0 до 3:
0 – старший значащий бит идет первым, Clock активный уровень низкий
1 – старший значащий бит идет первым, Clock активный уровень высокий
2 – младший значащий бит идет первым, Clock активный уровень низкий
3 – младший значащий бит идет первым, Clock активный уровень высокий- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Да при чем тут это-то? Это совсем не имеет никакого отношения к проблеме. Еще раз говорю, если разбивать переменную 1234 в цикле For Temp = 3 To 1 Step -1, то на выходе мы и получим 2 3 4. Это же очевидно.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- amv2000
- Опытный кот
- Сообщения: 717
- Зарегистрирован: Вт апр 26, 2011 13:58:36
- Откуда: Ростовская область
Re: BASCOM AVR в вопросах и ответах
edm2007 писал(а):если разбивать переменную 1234 в цикле For Temp = 3 To 1 Step -1
Воооот, а если разбивать 123? почему собственно 1234?
Я опрашиваю АЦП, преобразую данные и вывожу их на LED, мне не понятно почему данные на 4 знака?
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Так и разбивайте, кто мешает-то?! Если у Вас индикатор на три разряда, так какого же Вы кота туда пытаетесь вывести четырехразрядную переменную?!! Что вы хотите получить? Индикация пробегает три разряда, разнос выполняется по трем разрядам, а Вам 1234 надо? Передавайте подпрограмме разноса соответствующее значение, и все будет хорошо:

Только смените тип на Dim Number(6) As Word, разносятся значения более 255...
Так это Вас спросить нужно, зачем Вы на трехразрядный индикатор пытаетесь вывести 4 знака...
Код: Выделить всё
Value = 789
For Temp = 3 To 1 Step -1
Number(temp) = Value Mod 10
Value = Value / 10
Next
.....................................................
Value = 123
For Temp = 6 To 4 Step -1
Number(temp) = Value Mod 10
Value = Value / 10
Next
Только смените тип на Dim Number(6) As Word, разносятся значения более 255...
amv2000 писал(а):мне не понятно почему данные на 4 знака?
Так это Вас спросить нужно, зачем Вы на трехразрядный индикатор пытаетесь вывести 4 знака...
- Вложения
-
- LCD+3LED.png
- (2.62 КБ) 768 скачиваний
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- amv2000
- Опытный кот
- Сообщения: 717
- Зарегистрирован: Вт апр 26, 2011 13:58:36
- Откуда: Ростовская область
Re: BASCOM AVR в вопросах и ответах
edm2007 писал(а):Так это Вас спросить нужно, зачем Вы на трехразрядный индикатор пытаетесь вывести 4 знака...
Тут и не поспоришь, попробовал вручную прописать значение Value и все выводится. Где то в моих преобразованиях косяк, буду смотреть.
Спасибо большое, извините за назойливый выходной!
PS: Нашел! понагорадил переменных даже сам не разберусь, пошел поработал лопатой и ум прояснился.
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Ну так правильно, максимальное значение регистра АЦП - 1023 (что уже не влезет), а Вы в дальнейшем его еще и умножаете...
Тут вот интересно еще:
Это у Вас выбор действия в зависимости от значения? Это так задумано, что при Pr = 2 будет выполняться блок Pr2, а при Pr = 1 будут выполняться оба?
Тут вот интересно еще:
Код: Выделить всё
If Pr = 1 Then Goto Pr1
If Pr = 2 Then Goto Pr2
Pr1:
Pr2:
Это у Вас выбор действия в зависимости от значения? Это так задумано, что при Pr = 2 будет выполняться блок Pr2, а при Pr = 1 будут выполняться оба?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- amv2000
- Опытный кот
- Сообщения: 717
- Зарегистрирован: Вт апр 26, 2011 13:58:36
- Откуда: Ростовская область
Re: BASCOM AVR в вопросах и ответах
edm2007 писал(а):Это так задумано, что при Pr = 2 будет выполняться блок Pr2, а при Pr = 1 будут выполняться оба?
Вообще то нет, замечание принимается. Я еще было засомневался, как говорят в юмористическом монологе...
Так будет правильно?
Код: Выделить всё
If Pr = 1 Then Goto Pr1
If Pr = 2 Then Goto Pr2
Pr1:
Return
Pr2:
Return или так
Код: Выделить всё
If Pr = 1 Then Goto Pr1
If Pr = 2 Then Goto Pr2
Pr1:
Goto Preobr
Pr2:
Preobr:
Return - zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: BASCOM AVR в вопросах и ответах
Правильней тогда без возврата:
Если с возвратом, то так:
Код: Выделить всё
If Pr = 1 Then Goto Pr1
If Pr = 2 Then Goto Pr2
Pr1:
Goto Preobr
Pr2:
Preobr:Если с возвратом, то так:
Код: Выделить всё
If Pr = 1 Then Gosub Pr1
If Pr = 2 Then Gosub Pr2
Pr1:
Return
Pr2:
Return- amv2000
- Опытный кот
- Сообщения: 717
- Зарегистрирован: Вт апр 26, 2011 13:58:36
- Откуда: Ростовская область
Re: BASCOM AVR в вопросах и ответах
Код: Выделить всё
If Pr = 1 Then Goto Pr1
If Pr = 2 Then Goto Pr2
Pr1:
Goto Preobr
Pr2:
Preobr:
End subДа скорее это, спасибо!
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: BASCOM AVR в вопросах и ответах
Пожалуйста! 

- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Два Return это плохо. А что за тяга к прыжкам?
Кто мешал сделать нормальный выбор?
Код: Выделить всё
If Pr = 1 Then
...................
ElseIf Pr = 2 Then
...................
End If
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- amv2000
- Опытный кот
- Сообщения: 717
- Зарегистрирован: Вт апр 26, 2011 13:58:36
- Откуда: Ростовская область
Re: BASCOM AVR в вопросах и ответах
edm2007 писал(а):А что за тяга к прыжкам?Кто мешал сделать нормальный выбор?
Да ответ очевиден не догадался
Как в Армии х... тут думать прыгать надо.


