BASCOM AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Redrik Shuhart
Друг Кота
Сообщения: 3641
Зарегистрирован: Пт апр 03, 2009 22:12:58
Откуда: Из Украины, Кировоградская облась,

Re: BASCOM AVR в вопросах и ответах

Сообщение Redrik Shuhart »

Ок, Игорь..сейчас постараюсь расписать вес подробно:
Надо было сделать машинку для брейн-ринга на 4 комманды, и + возможность пускать 1 таймер на 1 минуту и еще 2-й на 20 секунд, при чем чтоб была индикация фальстарта

Естественно если хоть 1 команда нажмет 1-й кнопку, тогда все остальные кнопки должны отключатся чтоб не было возможности другим командам дать нажать кнопку, в тот же момент если нажмешь кнопку ДО старта 1-го таймера то будет защитан фальстарт.

1-я часть этого " чуда" это проверка на простой ответ, 2-я часть- фальстарт....
так как не смог написать таймер, то я ограничился просто нажатием кнопки старта ( там где А=А+1)


"схема" прилагается..
Реклама
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Re: BASCOM AVR в вопросах и ответах

Сообщение Igor_67 »

Ну со схемой понятно. С алгоритмом тоже ясно. Ты чего хочешь-то? Чтобы я за тебя программу написал? Я то могу и написать, конечно, а стыдно потом тебе не будет?
P.S.: А файлы у меня так и не крепятся.



Ур-р-р-ра!!! Прикрепился.
Для тех, кто не понял, чего ура и кто прикрепился, смотри выше про термометр с 4 датчиками DS18B20.
Последний раз редактировалось Igor_67 Вт мар 15, 2011 21:48:32, всего редактировалось 3 раза.
Цапу крутить надо!!! Ку или не ку?
Реклама
Toxic
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Пт фев 18, 2011 12:38:34
Откуда: Казахстан, Алматы

Re: BASCOM AVR в вопросах и ответах

Сообщение Toxic »

Вставлю свои 5 копеек :)
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 = &B11110000

2) вот это работать не будет:

Код: Выделить всё

If Portd.0 = 1 Then

надо так:

Код: Выделить всё

If Pind.0 = 1 Then
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Re: BASCOM AVR в вопросах и ответах

Сообщение Igor_67 »

Совершенно правильно! 8)
Цапу крутить надо!!! Ку или не ку?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Redrik Shuhart
Друг Кота
Сообщения: 3641
Зарегистрирован: Пт апр 03, 2009 22:12:58
Откуда: Из Украины, Кировоградская облась,

Re: BASCOM AVR в вопросах и ответах

Сообщение Redrik Shuhart »

а я то думаю че оно не работает..
убил неправильными фузами мегу 8..хорошо что еще есть..
переставил на 8 мгц кварц...

Ты чего хочешь-то? Чтобы я за тебя программу написал?


Можно конечно,, будет очень стыдно =( ведь я то нуб в программировании но лучше научи\помоги
И как сделать чтоб после отпускания клавиши светодиод продолжал гореть..?

Моя тупость меня поражает....
Последний раз редактировалось Redrik Shuhart Вт мар 15, 2011 21:54:37, всего редактировалось 1 раз.
Реклама
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Re: BASCOM AVR в вопросах и ответах

Сообщение Igor_67 »

Ну дык... прочти внимательно, что тебе написали ранее, сделай работу над ошибками, переделай программу, а прошивать не торопись, попробуй ее в симуляторе ( чего зря проц жечь?), что не пошло - пиши, будем дальше анализировать, а если за тебя проги писать, то что толку-то с тебя будет? Согласен?
А мегу8, которую ты считаешь "убитой неправильными фузами" выкидывать не спеши. Здесь где-то на форуме есть проект разблокировщика для мег, поищи/собери/разблокируй/радуйся! :)) :))

Код: Выделить всё

If Pind.0 = 1 Then Set Portd.1
Пока не будет противоречащего условия или не последует Else после If, то светодиод и так останется зажженным.
Последний раз редактировалось Igor_67 Вт мар 15, 2011 22:00:39, всего редактировалось 1 раз.
Цапу крутить надо!!! Ку или не ку?
Реклама
Аватара пользователя
Redrik Shuhart
Друг Кота
Сообщения: 3641
Зарегистрирован: Пт апр 03, 2009 22:12:58
Откуда: Из Украины, Кировоградская облась,

Re: BASCOM AVR в вопросах и ответах

Сообщение Redrik Shuhart »

Согласен то да, но просто срочно надо... до завтрашнего ...утра, блин...плата сделана, запаяна....
ну ниче, еще ночь впереди, если че-то не придумаю до 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                                           
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Re: BASCOM AVR в вопросах и ответах

Сообщение Igor_67 »

Ладно, короче я спать пошел - завтра на работу. Вечером более детально разберусь и все напишем.
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
Redrik Shuhart
Друг Кота
Сообщения: 3641
Зарегистрирован: Пт апр 03, 2009 22:12:58
Откуда: Из Украины, Кировоградская облась,

Re: BASCOM AVR в вопросах и ответах

Сообщение Redrik Shuhart »

Код: Выделить всё

$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


вот че понятнее, в конце зацикливается
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Re: BASCOM AVR в вопросах и ответах

Сообщение Igor_67 »

Ну и чё это опять за хрень?

Код: Выделить всё

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 в вопросах и ответах

Сообщение Redrik Shuhart »

при компиле изменил...

блин... даже в протеусе ничего не пашет....
ок..почитаю..блин...ниччего не работает даже банальная мигалка...
Блин, помоги, пожалуйста =(
Аватара пользователя
nsl2004
Мучитель микросхем
Сообщения: 402
Зарегистрирован: Пт май 29, 2009 10:14:29

Re: BASCOM AVR в вопросах и ответах

Сообщение nsl2004 »

Колеги. Возник следующий вопрос. В Баскоме есть встроенный мастер Modify chip settings/ Что имеет приоритет? - скажем запись в mastere или тексте программы? Например, если я в програме указываю размер стека 16, а в мастере стоит 32. Что в итоге будет скомпилировано? Или в тексте проги процессор на 4 мегагерца , а в мастере прописано 8 мегегерц , ну и прочее. надо ли все время проверять на полное совпадение?
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

Re: BASCOM AVR в вопросах и ответах

Сообщение kip96 »

Приоритет есть, но проверять надо! :)) :)) :))
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Re: BASCOM AVR в вопросах и ответах

Сообщение serg_svd »

Slawakuzmich писал(а):serg_svd, поподробней опиши, что да как должно быть по третьей кнопке, ну и код программы. Сам сейчас реализовал пример, в котором одна кнопка выполняет три разных действия - в основной программе переключает одно, длительное нажатие запускает и останавливает подпрограмму, а в подпрограмме переключает другое.

У меня все 3 действия выполняются в основном режиме работы и описаны и так подробно выше. Возможную реализацию кода мне уже подсказали, вроде все работает, но надо сейчас в железе опробовать всю работу
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Re: BASCOM AVR в вопросах и ответах

Сообщение Igor_67 »

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

А потом вписывай нужные тебе операции...
А нормально схему нарисовать с обозначением всех портов и сигналов слабо??? :shock:
А лучше сделай так, как во вложенном проекте, да и то там код можно в 2 раза уменьшить (подумай как?).
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
Redrik Shuhart
Друг Кота
Сообщения: 3641
Зарегистрирован: Пт апр 03, 2009 22:12:58
Откуда: Из Украины, Кировоградская облась,

Re: BASCOM AVR в вопросах и ответах

Сообщение Redrik Shuhart »

Вот схема

думаю, что уменьшить можно ввевши вместо ресетов 4 функции..


Блин, в железе ничего не работает =((
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: BASCOM AVR в вопросах и ответах

Сообщение Мурик »

nsl2004 писал(а): В Баскоме есть встроенный мастер Modify chip settings/ Что имеет приоритет? - скажем запись в mastere или тексте программы? Например, если я в програме указываю размер стека 16, а в мастере стоит 32.
Приоритет имеет то, что указано в тексте программы.
Аватара пользователя
nsl2004
Мучитель микросхем
Сообщения: 402
Зарегистрирован: Пт май 29, 2009 10:14:29

Re: BASCOM AVR в вопросах и ответах

Сообщение nsl2004 »

Мурик писал(а):
nsl2004 писал(а): В Баскоме есть встроенный мастер Modify chip settings/ Что имеет приоритет? - скажем запись в mastere или тексте программы? Например, если я в програме указываю размер стека 16, а в мастере стоит 32.
Приоритет имеет то, что указано в тексте программы.

Спасибо.
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Re: BASCOM AVR в вопросах и ответах

Сообщение Igor_67 »

ОК! , коты и котята!
Есть такой вопрос, почему при переходе времени с 00:00:59 на 00:01:00 на самом деле индикатор показывает 00:11:00, потом 00:22:00, и так далее, пока значение минут не станет 10, то же самое со значением часов. Может я чего напутал в преобразованиях. Кто сталкивался с такой проблемой, пожалуйста гляньте. код и проект протеуса прилагаются.
З.Ы. Да, чуть не забыл, целевой МК ATMega8 (CQFP32) + DS1307 + LED 4x7seg
!!.rar
!!prot.rar
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

Извините, а к чему такие сложности? В строку переводить, нужное выдирать, потом все это в порт распихивать... Не проще сразу разбивать да грузить в порт?

Код: Выделить всё

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

Вернуться в «AVR»