Заголовок сообщения: 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 цифр сделать и в прерывание индикацию угнать а расчет отдельно как подпрограмму сделать так еще проще будет. Или Вам именно такой вариант нравится?
_________________ "Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения