Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт мар 15, 2011 21:34:06
Друг Кота
Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Пт апр 03, 2009 22:12:58 Сообщений: 3641 Откуда: Из Украины, Кировоградская облась,
Рейтинг сообщения:0
Ок, Игорь..сейчас постараюсь расписать вес подробно: Надо было сделать машинку для брейн-ринга на 4 комманды, и + возможность пускать 1 таймер на 1 минуту и еще 2-й на 20 секунд, при чем чтоб была индикация фальстарта
Естественно если хоть 1 команда нажмет 1-й кнопку, тогда все остальные кнопки должны отключатся чтоб не было возможности другим командам дать нажать кнопку, в тот же момент если нажмешь кнопку ДО старта 1-го таймера то будет защитан фальстарт.
1-я часть этого " чуда" это проверка на простой ответ, 2-я часть- фальстарт.... так как не смог написать таймер, то я ограничился просто нажатием кнопки старта ( там где А=А+1)
Ну со схемой понятно. С алгоритмом тоже ясно. Ты чего хочешь-то? Чтобы я за тебя программу написал? Я то могу и написать, конечно, а стыдно потом тебе не будет? P.S.: А файлы у меня так и не крепятся.
Ур-р-р-ра!!! Прикрепился. Для тех, кто не понял, чего ура и кто прикрепился, смотри выше про термометр с 4 датчиками DS18B20.
_________________ Цапу крутить надо!!! Ку или не ку?
Последний раз редактировалось Igor_67 Вт мар 15, 2011 21:48:32, всего редактировалось 3 раз(а).
Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт мар 15, 2011 21:49:35
Друг Кота
Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Пт апр 03, 2009 22:12:58 Сообщений: 3641 Откуда: Из Украины, Кировоградская облась,
Рейтинг сообщения:0
а я то думаю че оно не работает.. убил неправильными фузами мегу 8..хорошо что еще есть.. переставил на 8 мгц кварц...
Цитата:
Ты чего хочешь-то? Чтобы я за тебя программу написал?
Можно конечно,, будет очень стыдно =( ведь я то нуб в программировании но лучше научи\помоги И как сделать чтоб после отпускания клавиши светодиод продолжал гореть..?
Моя тупость меня поражает....
Последний раз редактировалось Redrik Shuhart Вт мар 15, 2011 21:54:37, всего редактировалось 1 раз.
Ну дык... прочти внимательно, что тебе написали ранее, сделай работу над ошибками, переделай программу, а прошивать не торопись, попробуй ее в симуляторе ( чего зря проц жечь?), что не пошло - пиши, будем дальше анализировать, а если за тебя проги писать, то что толку-то с тебя будет? Согласен? А мегу8, которую ты считаешь "убитой неправильными фузами" выкидывать не спеши. Здесь где-то на форуме есть проект разблокировщика для мег, поищи/собери/разблокируй/радуйся!
Код:
If Pind.0 = 1 Then Set Portd.1
Пока не будет противоречащего условия или не последует Else после If, то светодиод и так останется зажженным.
_________________ Цапу крутить надо!!! Ку или не ку?
Последний раз редактировалось Igor_67 Вт мар 15, 2011 22:00:39, всего редактировалось 1 раз.
Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт мар 15, 2011 21:56:31
Друг Кота
Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Пт апр 03, 2009 22:12:58 Сообщений: 3641 Откуда: Из Украины, Кировоградская облась,
Рейтинг сообщения:0
Согласен то да, но просто срочно надо... до завтрашнего ...утра, блин...плата сделана, запаяна.... ну ниче, еще ночь впереди, если че-то не придумаю до 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
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
Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
Добавлено: Вт мар 15, 2011 22:04:33
Друг Кота
Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Пт апр 03, 2009 22:12:58 Сообщений: 3641 Откуда: Из Украины, Кировоградская облась,
Рейтинг сообщения:0
Код:
$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
Почему опять PORTB.0 а не PINB.0? Будь внимательнее, "сахарный", а то я начинаю думать, что ты только в "МЯУ" флудить умеешь.... И вообще, я сомневаюсь, что так у тебя будут кнопки правильно работать. Они (кнопки), как известно, имеют такой параметр, как дребезг контактов, а у тебя в проге никакого "антидребезга" не сделано. Здесь тебе в помощь директива Debounce. Почитай про нее в хэлпе баскомовском - там все понятно...
_________________ Цапу крутить надо!!! Ку или не ку?
Последний раз редактировалось Igor_67 Вт мар 15, 2011 22:12:42, всего редактировалось 1 раз.
Колеги. Возник следующий вопрос. В Баскоме есть встроенный мастер Modify chip settings/ Что имеет приоритет? - скажем запись в mastere или тексте программы? Например, если я в програме указываю размер стека 16, а в мастере стоит 32. Что в итоге будет скомпилировано? Или в тексте проги процессор на 4 мегагерца , а в мастере прописано 8 мегегерц , ну и прочее. надо ли все время проверять на полное совпадение?
serg_svd, поподробней опиши, что да как должно быть по третьей кнопке, ну и код программы. Сам сейчас реализовал пример, в котором одна кнопка выполняет три разных действия - в основной программе переключает одно, длительное нажатие запускает и останавливает подпрограмму, а в подпрограмме переключает другое.
У меня все 3 действия выполняются в основном режиме работы и описаны и так подробно выше. Возможную реализацию кода мне уже подсказали, вроде все работает, но надо сейчас в железе опробовать всю работу
_________________ "Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
To Redrik Shuhart:Начни с того, что прогу переделай вот так:
Код:
$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 раза уменьшить (подумай как?).
_________________ Цапу крутить надо!!! Ку или не ку?
В Баскоме есть встроенный мастер Modify chip settings/ Что имеет приоритет? - скажем запись в mastere или тексте программы? Например, если я в програме указываю размер стека 16, а в мастере стоит 32.
Приоритет имеет то, что указано в тексте программы.
В Баскоме есть встроенный мастер Modify chip settings/ Что имеет приоритет? - скажем запись в mastere или тексте программы? Например, если я в програме указываю размер стека 16, а в мастере стоит 32.
Приоритет имеет то, что указано в тексте программы.
ОК! , коты и котята! Есть такой вопрос, почему при переходе времени с 00:00:59 на 00:01:00 на самом деле индикатор показывает 00:11:00, потом 00:22:00, и так далее, пока значение минут не станет 10, то же самое со значением часов. Может я чего напутал в преобразованиях. Кто сталкивался с такой проблемой, пожалуйста гляньте. код и проект протеуса прилагаются. З.Ы. Да, чуть не забыл, целевой МК ATMega8 (CQFP32) + DS1307 + LED 4x7seg
Вложение:
!!.rar
Вложение:
!!prot.rar
_________________ Цапу крутить надо!!! Ку или не ку?
Извините, а к чему такие сложности? В строку переводить, нужное выдирать, потом все это в порт распихивать... Не проще сразу разбивать да грузить в порт?
Код:
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 цифр сделать и в прерывание индикацию угнать а расчет отдельно как подпрограмму сделать так еще проще будет. Или Вам именно такой вариант нравится?
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 60
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения