BASCOM AVR в вопросах и ответах
- Redrik Shuhart
- Друг Кота
- Сообщения: 3641
- Зарегистрирован: Пт апр 03, 2009 22:12:58
- Откуда: Из Украины, Кировоградская облась,
Re: BASCOM AVR в вопросах и ответах
Ок, Игорь..сейчас постараюсь расписать вес подробно:
Надо было сделать машинку для брейн-ринга на 4 комманды, и + возможность пускать 1 таймер на 1 минуту и еще 2-й на 20 секунд, при чем чтоб была индикация фальстарта
Естественно если хоть 1 команда нажмет 1-й кнопку, тогда все остальные кнопки должны отключатся чтоб не было возможности другим командам дать нажать кнопку, в тот же момент если нажмешь кнопку ДО старта 1-го таймера то будет защитан фальстарт.
1-я часть этого " чуда" это проверка на простой ответ, 2-я часть- фальстарт....
так как не смог написать таймер, то я ограничился просто нажатием кнопки старта ( там где А=А+1)
"схема" прилагается..
Надо было сделать машинку для брейн-ринга на 4 комманды, и + возможность пускать 1 таймер на 1 минуту и еще 2-й на 20 секунд, при чем чтоб была индикация фальстарта
Естественно если хоть 1 команда нажмет 1-й кнопку, тогда все остальные кнопки должны отключатся чтоб не было возможности другим командам дать нажать кнопку, в тот же момент если нажмешь кнопку ДО старта 1-го таймера то будет защитан фальстарт.
1-я часть этого " чуда" это проверка на простой ответ, 2-я часть- фальстарт....
так как не смог написать таймер, то я ограничился просто нажатием кнопки старта ( там где А=А+1)
"схема" прилагается..
- Реклама
Re: BASCOM AVR в вопросах и ответах
Ну со схемой понятно. С алгоритмом тоже ясно. Ты чего хочешь-то? Чтобы я за тебя программу написал? Я то могу и написать, конечно, а стыдно потом тебе не будет?
P.S.: А файлы у меня так и не крепятся.
Ур-р-р-ра!!! Прикрепился.
Для тех, кто не понял, чего ура и кто прикрепился, смотри выше про термометр с 4 датчиками DS18B20.
P.S.: А файлы у меня так и не крепятся.
Ур-р-р-ра!!! Прикрепился.
Для тех, кто не понял, чего ура и кто прикрепился, смотри выше про термометр с 4 датчиками DS18B20.
Последний раз редактировалось Igor_67 Вт мар 15, 2011 21:48:32, всего редактировалось 3 раза.
Цапу крутить надо!!! Ку или не ку?
-
Toxic
- Первый раз сказал Мяу!
- Сообщения: 27
- Зарегистрирован: Пт фев 18, 2011 12:38:34
- Откуда: Казахстан, Алматы
Re: BASCOM AVR в вопросах и ответах
Вставлю свои 5 копеек
1) вот это:
можно записать так:
2) вот это работать не будет:
надо так:
1) вот это:
Код: Выделить всё
Config Portd.0 = Input
Config Portd.1 = Input
Config Portd.2 = Input
Config Portd.3 = Input
Config Portb.0 = Input
Config Portb.1 = Input
Config Portb.2 = Output
Config Portb.3 = Outputможно записать так:
Код: Выделить всё
DDRD = &B11110000
DDRB = &B111100002) вот это работать не будет:
Код: Выделить всё
If Portd.0 = 1 Thenнадо так:
Код: Выделить всё
If Pind.0 = 1 Then- Redrik Shuhart
- Друг Кота
- Сообщения: 3641
- Зарегистрирован: Пт апр 03, 2009 22:12:58
- Откуда: Из Украины, Кировоградская облась,
Re: BASCOM AVR в вопросах и ответах
а я то думаю че оно не работает..
убил неправильными фузами мегу 8..хорошо что еще есть..
переставил на 8 мгц кварц...
Можно конечно,, будет очень стыдно =( ведь я то нуб в программировании но лучше научи\помоги
И как сделать чтоб после отпускания клавиши светодиод продолжал гореть..?
Моя тупость меня поражает....
убил неправильными фузами мегу 8..хорошо что еще есть..
переставил на 8 мгц кварц...
Ты чего хочешь-то? Чтобы я за тебя программу написал?
Можно конечно,, будет очень стыдно =( ведь я то нуб в программировании но лучше научи\помоги
И как сделать чтоб после отпускания клавиши светодиод продолжал гореть..?
Моя тупость меня поражает....
Последний раз редактировалось Redrik Shuhart Вт мар 15, 2011 21:54:37, всего редактировалось 1 раз.
- Реклама
Re: BASCOM AVR в вопросах и ответах
Ну дык... прочти внимательно, что тебе написали ранее, сделай работу над ошибками, переделай программу, а прошивать не торопись, попробуй ее в симуляторе ( чего зря проц жечь?), что не пошло - пиши, будем дальше анализировать, а если за тебя проги писать, то что толку-то с тебя будет? Согласен?
А мегу8, которую ты считаешь "убитой неправильными фузами" выкидывать не спеши. Здесь где-то на форуме есть проект разблокировщика для мег, поищи/собери/разблокируй/радуйся!

Пока не будет противоречащего условия или не последует Else после If, то светодиод и так останется зажженным.
А мегу8, которую ты считаешь "убитой неправильными фузами" выкидывать не спеши. Здесь где-то на форуме есть проект разблокировщика для мег, поищи/собери/разблокируй/радуйся!
Код: Выделить всё
If Pind.0 = 1 Then Set Portd.1
Последний раз редактировалось Igor_67 Вт мар 15, 2011 22:00:39, всего редактировалось 1 раз.
Цапу крутить надо!!! Ку или не ку?
- Redrik Shuhart
- Друг Кота
- Сообщения: 3641
- Зарегистрирован: Пт апр 03, 2009 22:12:58
- Откуда: Из Украины, Кировоградская облась,
Re: BASCOM AVR в вопросах и ответах
Согласен то да, но просто срочно надо... до завтрашнего ...утра, блин...плата сделана, запаяна....
ну ниче, еще ночь впереди, если че-то не придумаю до 23 то придется просить тебя помощи...
поставил лупы- после 1-го же зацикление..
изменил
поставил эндифы..
ну ниче, еще ночь впереди, если че-то не придумаю до 23 то придется просить тебя помощи...
поставил лупы- после 1-го же зацикление..
изменил
поставил эндифы..
Код: Выделить всё
$regfile = "m8def.dat"
$crystal = 8000000
Ddrd = &B11110000
Ddrb = &B11110000
Enable Interrupts
Dim A As Byte
A = 0
Do
If Portb.0 = 1 Then A = A + 1
If A = 1 Then Do
If Pind.0 = 1 Then
Portc.0 = 1
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Portd.3 = 0
Portd.2 = 0
Portd.1 = 0
End If
If Pind.1 = 1 Then
Portc.1 = 1
Config Portd.0 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Portd.3 = 0
Portd.2 = 0
Portd.0 = 0
End If
If Pind.2 = 1 Then
Portc.2 = 1
Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.3 = Output
Portd.3 = 0
Portd.0 = 0
Portd.1 = 0
End If
If Pind.3 = 1 Then
Portc.3 = 1
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.0 = Output
Portd.0 = 0
Portd.2 = 0
Portd.1 = 0
End If
Loop
If A = 0 Then Do
If Pind.0 = 1 Then
Portc.4 = 1
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Portd.3 = 0
Portd.2 = 0
Portd.1 = 0
End If
If Pind.1 = 1 Then
Portc.5 = 1
Config Portd.0 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Portd.3 = 0
Portd.2 = 0
Portd.0 = 0
End If
If Pind.2 = 1 Then
Portb.4 = 1
Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.3 = Output
Portd.3 = 0
Portd.0 = 0
Portd.1 = 0
End If
End
If Pind.3 = 1 Then
Portb.5 = 1
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.0 = Output
Portd.0 = 0
Portd.2 = 0
Portd.1 = 0
End If
Loop
Loop
End Re: BASCOM AVR в вопросах и ответах
Ладно, короче я спать пошел - завтра на работу. Вечером более детально разберусь и все напишем.
Цапу крутить надо!!! Ку или не ку?
- Redrik Shuhart
- Друг Кота
- Сообщения: 3641
- Зарегистрирован: Пт апр 03, 2009 22:12:58
- Откуда: Из Украины, Кировоградская облась,
Re: BASCOM AVR в вопросах и ответах
Код: Выделить всё
$regfile = "m8def.dat"
$crystal = 8000000
Ddrd = &B11110000
Ddrb = &B11110000
Enable Interrupts
Dim A As Byte
A = 0
Do
If Portb.0 = 1 Then A = A + 1
If A = 1 Then
If Pind.0 = 1 Then
Portc.0 = 1
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Portd.3 = 0
Portd.2 = 0
Portd.1 = 0
End If
If Pind.1 = 1 Then
Portc.1 = 1
Config Portd.0 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Portd.3 = 0
Portd.2 = 0
Portd.0 = 0
End If
If Pind.2 = 1 Then
Portc.2 = 1
Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.3 = Output
Portd.3 = 0
Portd.0 = 0
Portd.1 = 0
End If
If Pind.3 = 1 Then
Portc.3 = 1
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.0 = Output
Portd.0 = 0
Portd.2 = 0
Portd.1 = 0
End If
End If
If A = 0 Then
If Pind.0 = 1 Then
Portc.4 = 1
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Portd.3 = 0
Portd.2 = 0
Portd.1 = 0
End If
If Pind.1 = 1 Then
Portc.5 = 1
Config Portd.0 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Portd.3 = 0
Portd.2 = 0
Portd.0 = 0
End If
If Pind.2 = 1 Then
Portb.4 = 1
Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.3 = Output
Portd.3 = 0
Portd.0 = 0
Portd.1 = 0
End If
If Pind.3 = 1 Then
Portb.5 = 1
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.0 = Output
Portd.0 = 0
Portd.2 = 0
Portd.1 = 0
End If
End If
Loop
End 'end program
вот че понятнее, в конце зацикливается
Re: BASCOM AVR в вопросах и ответах
Ну и чё это опять за хрень?
Почему опять PORTB.0 а не PINB.0?
Будь внимательнее, "сахарный", а то я начинаю думать, что ты только в "МЯУ" флудить умеешь....

И вообще, я сомневаюсь, что так у тебя будут кнопки правильно работать. Они (кнопки), как известно, имеют такой параметр, как дребезг контактов, а у тебя в проге никакого "антидребезга" не сделано. Здесь тебе в помощь директива Debounce. Почитай про нее в хэлпе баскомовском - там все понятно...
Код: Выделить всё
If Portb.0 = 1 Then A = A + 1Почему опять PORTB.0 а не PINB.0?
Будь внимательнее, "сахарный", а то я начинаю думать, что ты только в "МЯУ" флудить умеешь....
И вообще, я сомневаюсь, что так у тебя будут кнопки правильно работать. Они (кнопки), как известно, имеют такой параметр, как дребезг контактов, а у тебя в проге никакого "антидребезга" не сделано. Здесь тебе в помощь директива Debounce. Почитай про нее в хэлпе баскомовском - там все понятно...
Последний раз редактировалось Igor_67 Вт мар 15, 2011 22:12:42, всего редактировалось 1 раз.
Цапу крутить надо!!! Ку или не ку?
- Redrik Shuhart
- Друг Кота
- Сообщения: 3641
- Зарегистрирован: Пт апр 03, 2009 22:12:58
- Откуда: Из Украины, Кировоградская облась,
Re: BASCOM AVR в вопросах и ответах
при компиле изменил...
блин... даже в протеусе ничего не пашет....
ок..почитаю..блин...ниччего не работает даже банальная мигалка...
Блин, помоги, пожалуйста =(
блин... даже в протеусе ничего не пашет....
ок..почитаю..блин...ниччего не работает даже банальная мигалка...
Блин, помоги, пожалуйста =(
Re: BASCOM AVR в вопросах и ответах
Колеги. Возник следующий вопрос. В Баскоме есть встроенный мастер Modify chip settings/ Что имеет приоритет? - скажем запись в mastere или тексте программы? Например, если я в програме указываю размер стека 16, а в мастере стоит 32. Что в итоге будет скомпилировано? Или в тексте проги процессор на 4 мегагерца , а в мастере прописано 8 мегегерц , ну и прочее. надо ли все время проверять на полное совпадение?
- kip96
- Держит паяльник хвостом
- Сообщения: 965
- Зарегистрирован: Ср авг 26, 2009 08:24:50
- Откуда: 1300км от Пупа
Re: BASCOM AVR в вопросах и ответах
Приоритет есть, но проверять надо!

Все делают ошибки, только мудрецы - новые, а дураки - старые.
Re: BASCOM AVR в вопросах и ответах
Slawakuzmich писал(а):serg_svd, поподробней опиши, что да как должно быть по третьей кнопке, ну и код программы. Сам сейчас реализовал пример, в котором одна кнопка выполняет три разных действия - в основной программе переключает одно, длительное нажатие запускает и останавливает подпрограмму, а в подпрограмме переключает другое.
У меня все 3 действия выполняются в основном режиме работы и описаны и так подробно выше. Возможную реализацию кода мне уже подсказали, вроде все работает, но надо сейчас в железе опробовать всю работу
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Re: BASCOM AVR в вопросах и ответах
To Redrik Shuhart:Начни с того, что прогу переделай вот так:
А потом вписывай нужные тебе операции...
А нормально схему нарисовать с обозначением всех портов и сигналов слабо???
А лучше сделай так, как во вложенном проекте, да и то там код можно в 2 раза уменьшить (подумай как?).
Код: Выделить всё
$regfile = "m8def.dat"
$crystal = 8000000
Ddrd = &B11110000
Ddrb = &B11110000
Enable Interrupts
Dim A As Byte
A = 0
Do
If Pinb.0 = 1 Then A = A + 1
If A = 1 Then
If Pind.0 = 1 Then
Set Portc.0
Ddrd = &B11111110
Reset Portd.3
Reset Portd.2
Reset Portd.1
End If
If Pind.1 = 1 Then
Set Portc.1
Ddrd = &B11111101
Reset Portd.3
Reset Portd.2
Reset Portd.0
End If
If Pind.2 = 1 Then
Set Portc.2
Ddrd = &B11111011
Reset Portd.3
Reset Portd.0
Reset Portd.1
End If
If Pind.3 = 1 Then
Set Portc.3
Ddrd = &B11110111
Reset Portd.0
Reset Portd.2
Reset Portd.1
End If
End If
If A = 0 Then
If Pind.0 = 1 Then
Set Portc.4
Ddrd = &B11111110
Reset Portd.3
Reset Portd.2
Reset Portd.1
End If
If Pind.1 = 1 Then
Set Portc.5
Ddrd = &B11111101
Reset Portd.3
Reset Portd.2
Reset Portd.0
End If
If Pind.2 = 1 Then
Set Portb.4
Ddrd = &B11111011
Reset Portd.3
Reset Portd.0
Reset Portd.1
End If
If Pind.3 = 1 Then
Set Portb.5
Ddrd = &B11110111
Reset Portd.0
Reset Portd.2
Reset Portd.1
End If
End If
Loop
End 'end programА потом вписывай нужные тебе операции...
А нормально схему нарисовать с обозначением всех портов и сигналов слабо???
А лучше сделай так, как во вложенном проекте, да и то там код можно в 2 раза уменьшить (подумай как?).
Цапу крутить надо!!! Ку или не ку?
- Redrik Shuhart
- Друг Кота
- Сообщения: 3641
- Зарегистрирован: Пт апр 03, 2009 22:12:58
- Откуда: Из Украины, Кировоградская облась,
Re: BASCOM AVR в вопросах и ответах
Вот схема
думаю, что уменьшить можно ввевши вместо ресетов 4 функции..
Блин, в железе ничего не работает =((
думаю, что уменьшить можно ввевши вместо ресетов 4 функции..
Блин, в железе ничего не работает =((
Re: BASCOM AVR в вопросах и ответах
Приоритет имеет то, что указано в тексте программы.nsl2004 писал(а): В Баскоме есть встроенный мастер Modify chip settings/ Что имеет приоритет? - скажем запись в mastere или тексте программы? Например, если я в програме указываю размер стека 16, а в мастере стоит 32.
Re: BASCOM AVR в вопросах и ответах
Мурик писал(а):Приоритет имеет то, что указано в тексте программы.nsl2004 писал(а): В Баскоме есть встроенный мастер Modify chip settings/ Что имеет приоритет? - скажем запись в mastere или тексте программы? Например, если я в програме указываю размер стека 16, а в мастере стоит 32.
Спасибо.
Re: BASCOM AVR в вопросах и ответах
ОК! , коты и котята!
Есть такой вопрос, почему при переходе времени с 00:00:59 на 00:01:00 на самом деле индикатор показывает 00:11:00, потом 00:22:00, и так далее, пока значение минут не станет 10, то же самое со значением часов. Может я чего напутал в преобразованиях. Кто сталкивался с такой проблемой, пожалуйста гляньте. код и проект протеуса прилагаются.
З.Ы. Да, чуть не забыл, целевой МК ATMega8 (CQFP32) + DS1307 + LED 4x7seg
Есть такой вопрос, почему при переходе времени с 00:00:59 на 00:01:00 на самом деле индикатор показывает 00:11:00, потом 00:22:00, и так далее, пока значение минут не станет 10, то же самое со значением часов. Может я чего напутал в преобразованиях. Кто сталкивался с такой проблемой, пожалуйста гляньте. код и проект протеуса прилагаются.
З.Ы. Да, чуть не забыл, целевой МК ATMega8 (CQFP32) + DS1307 + LED 4x7seg
Цапу крутить надо!!! Ку или не ку?
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Извините, а к чему такие сложности? В строку переводить, нужное выдирать, потом все это в порт распихивать... Не проще сразу разбивать да грузить в порт?
Если массив для 4 цифр сделать и в прерывание индикацию угнать а расчет отдельно как подпрограмму сделать так еще проще будет. Или Вам именно такой вариант нравится?
Код: Выделить всё
Gosub Getdatetime
Dig = _min Mod 10
Portd = Lookup(dig , Dat)
Set Portb.2 : Set Portb.3 : Set Portb.4 : Reset Portb.5
Waitms 8 : Set Portb.5
Gosub Getdatetime
Dig = _min / 10
Portd = Lookup(dig , Dat)
Set Portb.2 : Set Portb.3 : Reset Portb.4 : Set Portb.5
Waitms 8 : Set Portb.4
Если массив для 4 цифр сделать и в прерывание индикацию угнать а расчет отдельно как подпрограмму сделать так еще проще будет. Или Вам именно такой вариант нравится?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон


