Угу.raf65 писал(а):вот так она и вызывается
BASCOM AVR в вопросах и ответах
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Реклама
Re: BASCOM AVR в вопросах и ответах
в данной конкретной программе нет чего то долгого, кроме вывода на дисплей, хотя Вы правы, здесь нет проверки на конкретное удержание, и периодическое нажатие на копку, в конце концов приведет к срабатыванию
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Угу. По мне так это лишнее. Все же проще зафиксировав сам факт нажатия, проверять все остальное.raf65 писал(а):периодическое нажатие на копку, в конце концов приведет к срабатыванию
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
-
vitalkalm
- Первый раз сказал Мяу!
- Сообщения: 36
- Зарегистрирован: Пт май 23, 2008 03:48:36
- Откуда: Украина
Re: BASCOM AVR в вопросах и ответах
edm2007, raf65
Такой код сегодня попробую переработать под свои нужды. Спасибо.
Такой код сегодня попробую переработать под свои нужды. Спасибо.
Последний раз редактировалось vitalkalm Вс дек 25, 2011 19:03:05, всего редактировалось 1 раз.
-
vitalkalm
- Первый раз сказал Мяу!
- Сообщения: 36
- Зарегистрирован: Пт май 23, 2008 03:48:36
- Откуда: Украина
Re: BASCOM AVR в вопросах и ответах
Так можно применить и If .. Then, сделав возврат на начало подпрограммы по меткам. Будет работать также как и While ..Wend.edm2007 писал(а): Лично я вижу не кусок кода а законченую подпрограмму Knoblong, о чем явно говорит Sub. Покажите мне вызов этой подпрограммы. Проверка If .. Then позволяет проверить условие только в один проход. Это же не While .. Wend, которое проверяет "до тех пор пока..."
Код: Выделить всё
If Pind.2 = 0 Then
Goto Startknoblong
End If
Goto Endknoblong
Startknoblong:
Nlock1 = 1
Startknoblong2:
Nlock1 = Nlock1 + 1
Waitms 100
If Nlock1 = 20 Then
If Pind.0 = 1 Then
Reset Portd.0
Else
Set Portd.0
End If
End If
Goto Startknoblong2
End If
Endknoblong:
- Реклама
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Да ради бога, кто запрещает-то. Я и более смешные способы знаю. 
P.S. Да, забыл совсем, у Вас в коде встречаются такие штуки как "если = 1 то = 0, иначе = 1". Это касаемо смены состояния на противоположное. Так есть замечательная команда Toggle. Она как раз состояние на противоположное и меняет. Toggle PORTD.0 и всех делов.
P.S. Да, забыл совсем, у Вас в коде встречаются такие штуки как "если = 1 то = 0, иначе = 1". Это касаемо смены состояния на противоположное. Так есть замечательная команда Toggle. Она как раз состояние на противоположное и меняет. Toggle PORTD.0 и всех делов.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
-
vitalkalm
- Первый раз сказал Мяу!
- Сообщения: 36
- Зарегистрирован: Пт май 23, 2008 03:48:36
- Откуда: Украина
Re: BASCOM AVR в вопросах и ответах
Со стороны смешно, наверное. Просто в первый раз разбираю программу на BASCOM-е. В CVAVR чё-то правил для себя. 15 лет назад в универе давали азы в Бейсике. Для серьёзных дел, видимо, прийдется углубиться в изучение предмета.Да ради бога, кто запрещает-то. Я и более смешные способы знаю.
Да на PORTD.0 хочу прицепить реле, и "длинной" кнопкой делать вкл-выкл.
PS Пока в железе код не реализован...
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Нет, со стороны пока не совсем понятно... Вы в итоге хотите просто чей-то исходник под себя поправить? Или это полностью своя реализация будет? Вот уже понятнее про реле. А короткое нажатие что должно делать?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
-
vitalkalm
- Первый раз сказал Мяу!
- Сообщения: 36
- Зарегистрирован: Пт май 23, 2008 03:48:36
- Откуда: Украина
Re: BASCOM AVR в вопросах и ответах
Вот http://avr.ru/ready/contr/power/power . Автор raf65. Проделал большую работу и исходники не пожалел.
Я собрал-бы и забыл, но пошло-поехало... Короче, там и форум есть, в которм писались проблемы и их решения. Но как-то он там вяленький (форум).
Я собрал-бы и забыл, но пошло-поехало... Короче, там и форум есть, в которм писались проблемы и их решения. Но как-то он там вяленький (форум).
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Может есть примеры работы с tda7313?
- amv2000
- Опытный кот
- Сообщения: 720
- Зарегистрирован: Вт апр 26, 2011 13:58:36
- Откуда: Ростовская область
Re: BASCOM AVR в вопросах и ответах
Примеры чего? кода или схемы применения...
Схема к примеру здесь http://service4u.narod.ru/html/tda7313.html
Схема к примеру здесь http://service4u.narod.ru/html/tda7313.html
-
vitalkalm
- Первый раз сказал Мяу!
- Сообщения: 36
- Зарегистрирован: Пт май 23, 2008 03:48:36
- Откуда: Украина
Re: BASCOM AVR в вопросах и ответах
Тут где-то рядом коты обсуждали.vanyap1 писал(а):Может есть примеры работы с tda7313?
- amv2000
- Опытный кот
- Сообщения: 720
- Зарегистрирован: Вт апр 26, 2011 13:58:36
- Откуда: Ростовская область
Re: BASCOM AVR в вопросах и ответах
http://radiokot.ru/circuit/audio/amplifier/31/ здесьvitalkalm писал(а):Тут где-то рядом коты обсуждали.
http://radiokot.ru/circuit/audio/filter/05/ здесь
http://radiokot.ru/circuit/audio/amplifier/27/ и здесь
- max50
- Мучитель микросхем
- Сообщения: 497
- Зарегистрирован: Ср дек 10, 2008 21:24:28
- Откуда: Алтайский край, Барнаул
Re: BASCOM AVR в вопросах и ответах
Всех С НОВЫМ 2012 ГОДОМ!
Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Хотел кусок кода для работы с этой микросхемой.amv2000 писал(а):http://radiokot.ru/circuit/audio/amplifier/31/ здесьvitalkalm писал(а):Тут где-то рядом коты обсуждали.
http://radiokot.ru/circuit/audio/filter/05/ здесь
http://radiokot.ru/circuit/audio/amplifier/27/ и здесь
... так, для примера и общего познания.
- Gordon Shumway
- Мучитель микросхем
- Сообщения: 486
- Зарегистрирован: Пн авг 20, 2007 21:35:45
- Откуда: Мытищи, Московская область
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Доброго времени суток !
Всех с Новым 2012 годом !!!
Решил вот в выходные поиздеваться над часиками DS1307... Благо Баском и Протеус под рукой всегда, а паяльник - только на работе !
Как читать время и дату и как ее корректировать - это понятно, все работает.
Непонятно - как перевести ее из 24-часового режима в 12-часовой ? В даташите написано:
Еще до кучи: объясните, плиз, что делают операторы
И еще хочу разобраться - как использовать встроенное ОЗУ для своих нужд. Это на будущее, сразу после шестого бита
PS не судите строго, зависон головы случился...
PPS Всех с праздником !
Всех с Новым 2012 годом !!!
Решил вот в выходные поиздеваться над часиками DS1307... Благо Баском и Протеус под рукой всегда, а паяльник - только на работе !
Как читать время и дату и как ее корректировать - это понятно, все работает.
Непонятно - как перевести ее из 24-часового режима в 12-часовой ? В даташите написано:
Но как добраться до этого бита - никак не пойму.Бит 6 регистра часов отвечает за
выбор 12- или 24-часового режима. Когда он установлен в 1, выбран 12-часовой режим.
Код: Выделить всё
I2cstart
I2cwbyte Ds1307w
I2cwbyte 2
I2cwbyte Hour
I2cstop
Код: Выделить всё
bcd
makebcd
makedec И еще хочу разобраться - как использовать встроенное ОЗУ для своих нужд. Это на будущее, сразу после шестого бита
PS не судите строго, зависон головы случился...
PPS Всех с праздником !
Последний раз редактировалось Gordon Shumway Вт янв 03, 2012 21:39:22, всего редактировалось 2 раза.
С уважением,
Алексей.
Алексей.
Re: BASCOM AVR в вопросах и ответах
Эх, а я в этом году осилил статейку про робота. Код для контроллера написан на бейсике. Он конечно не совершенен (код), но работает. 
зы: целая проблема была с отправкой/приёмом нуля в баскоме (в обще привычном бейсике таких проблем нет).
зы: целая проблема была с отправкой/приёмом нуля в баскоме (в обще привычном бейсике таких проблем нет).
- mr4ester
- Держит паяльник хвостом
- Сообщения: 900
- Зарегистрирован: Чт авг 27, 2009 20:09:01
- Откуда: Приднестровье г.Бендеры
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Вообщем пишу первую свою программу на бейсике, да и вообще первую. Программу вроде бы написал, но столкнулся с такой проблемой каждые 3 сек счет часов, а именно секунд немного притормаживает и не могу придумать что в коде поменять, и как оптимизировать, может вам с более большим опытом что то придет в голову?
Код: Выделить всё
$regfile = "m16def.dat"
$crystal = 8000000
$baud = 9600
$lib "mcsbyte.lbx" ' for smaller code
$lib "ds1307clock.lib" ' modified lib
$framesize = 16
$hwstack = 24
$swstack = 16
Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = Porta.0 , E = Porta.1 , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5
Cls
Cursor Off
'* * * настройка пинов для подключния lcd
'* * * подключаем библиотеку ds1307
$lib "ds1307clock.lib"
Config Clock = User
'* * * конфигурируем scl и sda пины
Config Sda = Portd.6 ' I2C Data
Config Scl = Portd.5 ' I2C Clock
Config 1wire = Portd.4
'* * * заводим константы на биты чтения и записи ds1307
Const Ds1307w = &HD0 ' бит записи
Const Ds1307r = &HD1 ' бит чтения
'* * * заводим и разрешаем прерывания от UART
On Urxc Getchar
Enable Interrupts
Enable Urxc
'* * * заводим переменные для своих нужд
Dim C As Word
Dim Seco As Byte
Dim Mine As Byte
Dim Hour As Byte
Dim Day As Byte
Dim Dat As Byte
Dim Month As Byte
Dim Year As Byte
Dim S As String * 5 ' переменная для работы UART
Dim Byte0 As Byte
Dim Byte1 As Byte
Dim Signtemperatura As String * 1
Dim T1 As Single
Dim T2 As Integer
Dim Ttemp As Byte
Dim Hh As Byte
Dim Mm As Byte
Deflcdchar 0 , 28 , 20 , 28 , 32 , 32 , 32 , 32 , 32
Locate 1 , 4
Lcd "२§OMH®¦"
Locate 2 , 6
Lcd "ЁPOEKT"
Wait 2
Cls
Locate 1 , 1
Lcd "----ᥪPOBO¦---- "
Locate 2 , 1
Lcd "----TEPMOMETP---"
Wait 2
Cls
'* * * * * * основной цикл программы
Do
Gosub Ds1307 'уходим на выполнение подпрограммы чтобы узнать время и дату
Gosub Ds18b20
Gosub Displey 'выполняем подпрограмму вывода на дисплей
Loop
'-------------------------------------------------------------------------------
'* * * узнаем время и дату
Ds1307:
I2cstart ' даем часам понять что сейчас будем с ними работать
I2cwbyte Ds1307w ' отправляем
I2cwbyte &H00 ' адрес откуда начачинаем читать данные
I2cstart ' даем сигнал старт
I2cwbyte Ds1307r ' на прочтение данных
I2crbyte Seco , Ack ' ловим секунды
I2crbyte Mine , Ack ' минуты
I2crbyte Hour , Ack ' часы
I2crbyte Day , Ack ' день недели
I2crbyte Dat , Ack ' число месяца
I2crbyte Month , Ack ' месяц
I2crbyte Year , Nack ' год
I2cstop
Seco = Makedec(seco)
Mine = Makedec(mine)
Hour = Makedec(hour)
Day = Makedec(day)
Dat = Makedec(dat)
Month = Makedec(month)
Year = Makedec(year)
Return
'__________________________________
'*** измеряем температуру
Ds18b20:
1wreset
If Err = 1 Then 'если при опросе появился флаг ошибки
Cls
Locate 1 , 12
Lcd "Ѕeї" 'нет
Locate 2 , 10
Lcd "гaїАёєa" ' датчика
Wait 1
Else
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 700 ' задержка
1wreset
1wwrite &HCC
1wwrite &HBE ' Команда чтения ОЗУ датчика
Byte0 = 1wread() ' Читаем нулевой байт
Byte1 = 1wread() ' Читаем первый байт
End If
If Byte1 >= 248 Then ' Проверяем на отрицательную температуру.248 в десятичном - 11111000 в двоичном. Если температура отрицательная - вычитаем из &HFF
Byte0 = &HFF - Byte0
Byte1 = &HFF - Byte1
Signtemperatura = "-"
Else
Signtemperatura = "+"
End If
T1 = Byte0 / 16 ' Сдвигаем нулевой байт вправо на 4 бита (2*2*2*2=16)
T2 = Byte1 * 16 ' Сдвигаем первый байт влево на 4 бита (2*2*2*2=16)
T1 = T1 + T2
Hh = Fix(t1) 'отсекаем от температуры все после запятой
Ttemp = T1 * 10 '
Mm = Ttemp Mod 10 'берем десятичную часть температуры
Return
'-------------------------------------------------------------------------------
'* * * подпрограмма вывода на дисплей
Displey:
Locate 1 , 1
If Hour < 10 Then
Lcd "0" ; Hour ; ":"
Else ' выводим время
Lcd Hour ; ":" ;
End If
If Mine < 10 Then
Lcd "0" ; Mine ; ":" ;
Else
Lcd Mine ; ":" ;
End If
If Seco < 10 Then
Lcd "0" ; Seco
Else
Lcd Seco
End If
Locate 2 , 1 ' выводим дату
Lcd Dat
Locate 2 , 3
Lcd "/"
Locate 2 , 4
If Month < 10 Then
Lcd "0" ; Month
Else
Lcd Month
End If
Locate 2 , 12
'обзываем каждый месяц
If Day = 1 Then
Lcd "ѕoЅeг" 'январь
End If
If Day = 2 Then
Lcd "іїopЅ" 'февраль
End If
If Day = 3 Then
Lcd "cpeгa" 'март и так далее
End If
If Day = 4 Then
Lcd "Аeїі"
End If
If Day = 5 Then
Lcd "ѕЗїЅ"
End If
If Day = 6 Then
Lcd "cyІoї"
End If
If Day = 7 Then
Lcd "іocєp"
End If
Locate 2 , 6
Lcd "/" ; "20" ; Year
Locate 1 , 10
Lcd Signtemperatura ; Hh ; "." ; Mm 'выводим целую часть потом рисуем точку потом десятую часть температуры
Locate 1 , 15
Lcd Chr(0) ; "C"
Return
'-------------------------------------------------------------------------------
'* * * обработчик прерывания UART
Getchar:
Input S 'то что пришло по UART
If S = "сек" Then 'настроим секунды
Print "введите секунды"
Input C
Seco = C
Seco = Makebcd(seco)
I2cstart ' подаем сигнал старт
I2cwbyte Ds1307w ' отправляем команду записи
I2cwbyte 0 ' отправляем адрес куда пишем - &H00
I2cwbyte Seco ' записываем значение переменной по этому адресу
I2cstop ' закончили работать с I2C
Cls
End If
If S = "min" Then 'настроим минуты
Print "input min..."
Input C
Mine = C
Mine = Makebcd(mine)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 1 'адрес хранения минут &H01
I2cwbyte Mine
I2cstop
Cls
End If
If S = "hour" Then 'настроим часы
Print "input hour..."
Input C
Hour = C
Hour = Makebcd(hour)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 2 'адрес хранения часов
I2cwbyte Hour
I2cstop
Cls
End If
If S = "day" Then 'настроим дату
Print "input day..."
Input C
Day = C
Day = Makebcd(day)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 3 'адрес хранения дня недели
I2cwbyte Day
I2cstop
Cls
End If
If S = "dat" Then 'настроим дату
Print "input dat..."
Input C
Dat = C
Dat = Makebcd(dat)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 4 'адрес хранения даты
I2cwbyte Dat
I2cstop
Cls
End If
If S = "month" Then 'настроим месяц
Print "input month..."
Input C
Month = C
Month = Makebcd(month)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 5 'адрес хранения месяца
I2cwbyte Month
I2cstop
Cls
End If
If S = "year" Then 'настроим год
Print "input year..."
Input C
Year = C
Year = Makebcd(year)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 6 'адрес хранения года
I2cwbyte Year
I2cstop
Cls
End If
Return
EndРабота избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Re: BASCOM AVR в вопросах и ответах
такое происходит если читать ds1307 ассинхронно от нее
поэтому используйте выход "SWQ/OUT" ds1307 для синхронизации
поэтому используйте выход "SWQ/OUT" ds1307 для синхронизации
- mr4ester
- Держит паяльник хвостом
- Сообщения: 900
- Зарегистрирован: Чт авг 27, 2009 20:09:01
- Откуда: Приднестровье г.Бендеры
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
можно небольшой пример? если бы не примеры я бы даже не написал и эту программу.
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)


