BASCOM AVR в вопросах и ответах
Re: BASCOM AVR в вопросах и ответах
Для перехода в режим настроек, вовсе необязательно использовать прерывание. Можно посмотреть как это сделано например в этой конструкции.
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Gordon Shumway писал(а):Насколько я помню - это делать не обязательно если вы установили сопротивление от pind.2 на плюс.
Я никогда не прописывал порт прерывания на вход.
Тут дело не в сопротивлении а в том, что изначально все регистры DDR обнулены. Следовательно, все порты настроены на вход. И это очень хорошо, можно не бояться что не успеешь сконфигурировать порт и его убьет какой-нибудь входной сигнал.
Таким образом можно настраивать только выходные пины, а входные уже настроены сами по себе. Это конечно личное дело каждого, но я считаю что настраивать нужно. Это и нагляднее, и надежнее, и вероятность ошибки уменьшает. Но работать у автора должно и без этого.
P.S. А задержки в прерывании это дурной тон. Так делать очень плохо.

"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- ev3658
- Слесарь-программист
- Сообщения: 341
- Зарегистрирован: Вт сен 11, 2012 23:08:28
- Откуда: город Кстово Нижегородская обл.
Re: BASCOM AVR в вопросах и ответах
Привет! Подскажите пожалуйста, не могу сбросить INT6 на Atmega128
Eifr - не работает?
Ставлю в код выполнения прерывания, всё равно раза два повторится от дребезга. Значиния уже разные ставил.
Документацию читал, стр.-246 - http://kazus.ru/nuke/users_files/19082009/8967238.pdf
Eifr - не работает?
Ставлю в код выполнения прерывания, всё равно раза два повторится от дребезга. Значиния уже разные ставил.
Документацию читал, стр.-246 - http://kazus.ru/nuke/users_files/19082009/8967238.pdf
Код: Выделить всё
On Int6 Stopsys
Config Int6 = Falling
...
...
...
...
Stopsys:
Eifr = 3 '1 2 4 8 16 32 64 128
Goto Menu4:
Return- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
ev3658 писал(а):Значиния уже разные ставил.
Вы методом перебора действуете, что ли? Есть же все флаги:

Вам нужен INTF6. Ну так и сбрасывайте его:
Код: Выделить всё
EIFR = 64
или
EIFR.INTF6 = 1
Впрочем, оно Вам вряд ли поможет. Второй раз прерывание срабатывает в момент отпускания кнопки (опять же из-за дребезга). Делайте проверку на зажатую кнопку / ожидание отпускания и прочее. Только не в самом прерывании, естественно. А так Вы кнопку нажали, прерывание обработали, флаг вызванный дребезгом сбросили и вышли. А при отпускании-то кнопка тоже дребезжит. Что и вызовет второе срабатывание прерывания.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Gordon Shumway
- Мучитель микросхем
- Сообщения: 485
- Зарегистрирован: Пн авг 20, 2007 21:35:45
- Откуда: Мытищи, Московская область
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
edm2007 писал(а): А задержки в прерывании это дурной тон. Так делать очень плохо.
А как будет правильно ? Нужно же как-то паузу выдержать, кнопка-то "звенит"...
С уважением,
Алексей.
Алексей.
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Прерывание останавливает выполнение программы. Это даже хуже задержек в циклах. Там это топтание на месте, а тут на целых 300 !!! мс встанет все, включая остальные прерывания. А у вопрошающего динамическая индикация, между прочим. Представите, что будет при нажатии кнопки?
Наиболее оптимальным является использование флагов, которые выставляются в прерывании, а обработка происходит уже в основном цикле.
Наиболее оптимальным является использование флагов, которые выставляются в прерывании, а обработка происходит уже в основном цикле.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: BASCOM AVR в вопросах и ответах
попробовал просимулировать в протеусе частотомер на аттини2313,более 100 кгц толком не измеряет,может кто поможет поправить программу?
текст не мой
'in Anlehnung an Elektor 7-8 2005 70 / Hergen Breitzke
$regfile = "ATtiny2313.dat" 'spezifiziert den Prozessor
$crystal = 8000000 'benutzt den exernen Oszillator ohne Teiler durch 8
'Lock Bits auf ext. Oszillator setzen nicht vergessen!
Config Pind.1 = Output 'LED fьr Torzeit
Config Pind.0 = Input 'Taster fьr ungekьrzte Anzeige
Portd.0 = 1 'pull-up R ein
Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portb.0 , Rs = Portd.6
Config Lcd = 16 * 2
Config Lcdbus = 4
Config Lcdmode = Port
Config Timer0 = Timer , Prescale = 1024
Config Timer1 = Counter , Edge = Rising
'*******************************************
Dim Temp As Long 'to ensure proper calculations these variables have to be "long"
Dim Ovf0 As Long
Dim Ovf1 As Long
Dim Freq As Long
Dim Anzeige As String * 7
Dim Anzeigevorne As String * 3
Dim Anzeigehinten As String * 4
Dim Pos As Byte
Enable Interrupts
Enable Timer0 'Timer interrupt
On Timer0 Incr_ovf0
Enable Timer1 'Counter interrrupt
On Timer1 Incr_ovfl
'************** main loop ***********************
Cls
Lcd "Start"
Do
Portd.1 = 1 'Zдhlertor auf
Timer0 = 0 'reset timer and counter
Counter1 = 0
Ovf0 = 0
Ovf1 = 0
While Ovf0 <= 30 'little bit less then one second loop @ 20 MHz
nop
Wend
Waitus 3900 'compensate the timing error
Portd.1 = 0 'Zдhlertor zu
Disable Timer0 'Stop Timer0
Stop Counter1 'stop the counter
Temp = Ovf1 * 65536 'calculate the frequency
Freq = Temp + Counter1
Cls 'LCD lцschen
Locate 1 , 1
Anzeige = Str(freq)
Select Case Freq
Case Is >= 1000000 : Goto Mhz
Case Is >= 100000 : Goto Khzxxx
Case Is >= 10000 : Goto Khzxx
Case Is > 1000 : Goto Khzx
End Select
'1-999 Hz Bereich
Pos = 7 - Len(anzeige)
Locate 1 , Pos
Lcd Freq ; " Hz"
Goto Weitergehts
Mhz:
Anzeigevorne = Left(anzeige , 1)
Anzeigehinten = Mid(anzeige , 2 , 4)
Lcd Anzeigevorne ; "." ; Anzeigehinten ; " MHz"
Goto Weitergehts
Khzxxx:
Anzeigevorne = Left(anzeige , 3)
Anzeigehinten = Mid(anzeige , 4 , 2)
Lcd Anzeigevorne ; "." ; Anzeigehinten ; " KHz"
Goto Weitergehts
Khzxx:
Anzeigevorne = Left(anzeige , 2 )
Anzeigehinten = Mid(anzeige , 3 , 3)
Lcd Anzeigevorne ; "." ; Anzeigehinten ; " KHz"
Goto Weitergehts
Khzx:
Anzeigevorne = Left(anzeige , 1 )
Anzeigehinten = Mid(anzeige , 2 , 4)
Lcd " " ; Anzeigevorne ; "." ; Anzeigehinten ; " KHz"
Goto Weitergehts
Weitergehts:
Locate 2 , 1 'zweite LCD-Zeile ansteuern
If Pind.0 = 0 Then Lcd Anzeige ; " Hz" ' Taster gedrьckt: ungekьrzte Anzeige in Zeile 2
Cursor Off
'start the timer and counter
Enable Timer0
Start Counter1
Loop
'*****************************************
Incr_ovfl:
Incr Ovf1 'increment timer interrupt counting variable
Return
'*****************************************
Incr_ovf0:
Incr Ovf0 'increment counter interrupt counting variable
Return
End
текст не мой
Спойлер
'Frequenzzдhler bis ca. 5 MHz, mit ex. 20 MHz Oszillator'in Anlehnung an Elektor 7-8 2005 70 / Hergen Breitzke
$regfile = "ATtiny2313.dat" 'spezifiziert den Prozessor
$crystal = 8000000 'benutzt den exernen Oszillator ohne Teiler durch 8
'Lock Bits auf ext. Oszillator setzen nicht vergessen!
Config Pind.1 = Output 'LED fьr Torzeit
Config Pind.0 = Input 'Taster fьr ungekьrzte Anzeige
Portd.0 = 1 'pull-up R ein
Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portb.0 , Rs = Portd.6
Config Lcd = 16 * 2
Config Lcdbus = 4
Config Lcdmode = Port
Config Timer0 = Timer , Prescale = 1024
Config Timer1 = Counter , Edge = Rising
'*******************************************
Dim Temp As Long 'to ensure proper calculations these variables have to be "long"
Dim Ovf0 As Long
Dim Ovf1 As Long
Dim Freq As Long
Dim Anzeige As String * 7
Dim Anzeigevorne As String * 3
Dim Anzeigehinten As String * 4
Dim Pos As Byte
Enable Interrupts
Enable Timer0 'Timer interrupt
On Timer0 Incr_ovf0
Enable Timer1 'Counter interrrupt
On Timer1 Incr_ovfl
'************** main loop ***********************
Cls
Lcd "Start"
Do
Portd.1 = 1 'Zдhlertor auf
Timer0 = 0 'reset timer and counter
Counter1 = 0
Ovf0 = 0
Ovf1 = 0
While Ovf0 <= 30 'little bit less then one second loop @ 20 MHz
nop
Wend
Waitus 3900 'compensate the timing error
Portd.1 = 0 'Zдhlertor zu
Disable Timer0 'Stop Timer0
Stop Counter1 'stop the counter
Temp = Ovf1 * 65536 'calculate the frequency
Freq = Temp + Counter1
Cls 'LCD lцschen
Locate 1 , 1
Anzeige = Str(freq)
Select Case Freq
Case Is >= 1000000 : Goto Mhz
Case Is >= 100000 : Goto Khzxxx
Case Is >= 10000 : Goto Khzxx
Case Is > 1000 : Goto Khzx
End Select
'1-999 Hz Bereich
Pos = 7 - Len(anzeige)
Locate 1 , Pos
Lcd Freq ; " Hz"
Goto Weitergehts
Mhz:
Anzeigevorne = Left(anzeige , 1)
Anzeigehinten = Mid(anzeige , 2 , 4)
Lcd Anzeigevorne ; "." ; Anzeigehinten ; " MHz"
Goto Weitergehts
Khzxxx:
Anzeigevorne = Left(anzeige , 3)
Anzeigehinten = Mid(anzeige , 4 , 2)
Lcd Anzeigevorne ; "." ; Anzeigehinten ; " KHz"
Goto Weitergehts
Khzxx:
Anzeigevorne = Left(anzeige , 2 )
Anzeigehinten = Mid(anzeige , 3 , 3)
Lcd Anzeigevorne ; "." ; Anzeigehinten ; " KHz"
Goto Weitergehts
Khzx:
Anzeigevorne = Left(anzeige , 1 )
Anzeigehinten = Mid(anzeige , 2 , 4)
Lcd " " ; Anzeigevorne ; "." ; Anzeigehinten ; " KHz"
Goto Weitergehts
Weitergehts:
Locate 2 , 1 'zweite LCD-Zeile ansteuern
If Pind.0 = 0 Then Lcd Anzeige ; " Hz" ' Taster gedrьckt: ungekьrzte Anzeige in Zeile 2
Cursor Off
'start the timer and counter
Enable Timer0
Start Counter1
Loop
'*****************************************
Incr_ovfl:
Incr Ovf1 'increment timer interrupt counting variable
Return
'*****************************************
Incr_ovf0:
Incr Ovf0 'increment counter interrupt counting variable
Return
End
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Здравствуйте Коты.
Попался мне тут дисплей от автомагнитолы, думал пристрою его куда то по быстрому. Но не тут то было, проблему заметил как только удалось его завести. Собственно дисплей построен на контроллере от Филипс - PCF8576 .
Обычно я стараюсь дисплей подключить так, чтобы 1 байт соответствовал одному разряду. А тут все смещено в право и на каждом следующем байте смещение + 1 бит дополнительно.
Все сегменты спутаны. В первых двух байтах находятся сегменты правой части 4-го разряда и левой части 5-го разряда. Еще два сегмента 5-го разряда находятся в третьем байте.
Всего чтобы завести все сегменты надо загрузить в контроллер дисплея 16 байт.
Каким образом можно закодировать для него таблицу символов кроме как делать таблицу истинности сегментов + таблицу символов?
Потому как иначе получится очень громоздкий код.

Попался мне тут дисплей от автомагнитолы, думал пристрою его куда то по быстрому. Но не тут то было, проблему заметил как только удалось его завести. Собственно дисплей построен на контроллере от Филипс - PCF8576 .
Обычно я стараюсь дисплей подключить так, чтобы 1 байт соответствовал одному разряду. А тут все смещено в право и на каждом следующем байте смещение + 1 бит дополнительно.
Все сегменты спутаны. В первых двух байтах находятся сегменты правой части 4-го разряда и левой части 5-го разряда. Еще два сегмента 5-го разряда находятся в третьем байте.
Всего чтобы завести все сегменты надо загрузить в контроллер дисплея 16 байт.
Каким образом можно закодировать для него таблицу символов кроме как делать таблицу истинности сегментов + таблицу символов?
Потому как иначе получится очень громоздкий код.

- Balzercvua
- Потрогал лапой паяльник
- Сообщения: 311
- Зарегистрирован: Вт дек 31, 2013 17:36:43
Re: BASCOM AVR в вопросах и ответах
pavel1979 писал(а):частотомер
Скинь проект в протеусе подровняем!!
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: BASCOM AVR в вопросах и ответах
vanyap1 попробуй грузить 16 байт,состоящих только из нолей и одной единички,примерно так ...000001 -записываем какой сегмент загорелся,потом ....000010,опять записываем и т д---стоп,там и2с,неправильно написал
сам мудохался с тик8148,убил день,разобрался
вот мой частотомер
сам мудохался с тик8148,убил день,разобрался
вот мой частотомер
- Вложения
-
- 123.rar
- (15.61 КБ) 175 скачиваний
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: BASCOM AVR в вопросах и ответах
Gordon Shumway писал(а):А как будет правильно ? Нужно же как-то паузу выдержать, кнопка-то "звенит"...
Можно в обработчике отключить прерывание(не глобальные), а в основном цикле делать проверку удержания кнопки, как только кнопка отпущена далее выдержка небольшой паузы в несколько миллисекунд, только тогда сбрасываем флаг прерывания и включаем прерывание снова.
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Я разобрался где какой сегмент подключен. И могу зажигать их как хочу. всего их 119
Если я правильно понимаю логику работы, то нужно -
- Привести сегменты в порядок в соответствии с разрядами, т.е надо чтобы два байта отвечали за один любой разряд (сегментов в разряде - 13).
- Делать таблицу символов.
Если я правильно понимаю логику работы, то нужно -
- Привести сегменты в порядок в соответствии с разрядами, т.е надо чтобы два байта отвечали за один любой разряд (сегментов в разряде - 13).
- Делать таблицу символов.
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: BASCOM AVR в вопросах и ответах
кстати,PCF8576 стоят в идикаторах мэлт-может поможет
- Balzercvua
- Потрогал лапой паяльник
- Сообщения: 311
- Зарегистрирован: Вт дек 31, 2013 17:36:43
Re: BASCOM AVR в вопросах и ответах
pavel1979 писал(а):вот мой частотомер
Разобрались это глюкавит симулятор
Но так вроде работает
купи себе вишбоард и тестируй в реальных условиях
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: BASCOM AVR в вопросах и ответах
Balzercvua спасибо!
а что такое "вишбоард"?
перевел в гугле,пишет-доска желаний
а что такое "вишбоард"?
- Balzercvua
- Потрогал лапой паяльник
- Сообщения: 311
- Зарегистрирован: Вт дек 31, 2013 17:36:43
Re: BASCOM AVR в вопросах и ответах
pavel1979 писал(а):Balzercvua спасибо!
а что такое "вишбоард"?
перевел в гугле,пишет-доска желаний
http://www.wishmaker.com.tw/cubecat/fro ... ategory=19
Очень помагает пошурику протестировать
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: BASCOM AVR в вопросах и ответах
спасибо еще раз,я так и подумал макетная плата
увы,я живу в россии,а не в китае
у нас есть http://electronica.bashel.ru/?item=78-78-20 и http://electronica.bashel.ru/?item=78-78-21 но где купить джампера и т д
мелеуз,башкирия,пытаюсь связаться с магазином,жду ответа спеца
дозвонился-джамперов нет ни в комплекте,ни отдельно
увы,я живу в россии,а не в китае
у нас есть http://electronica.bashel.ru/?item=78-78-20 и http://electronica.bashel.ru/?item=78-78-21 но где купить джампера и т д
мелеуз,башкирия,пытаюсь связаться с магазином,жду ответа спеца
дозвонился-джамперов нет ни в комплекте,ни отдельно
Последний раз редактировалось pavel1979 Пн янв 19, 2015 14:21:31, всего редактировалось 2 раза.
- Balzercvua
- Потрогал лапой паяльник
- Сообщения: 311
- Зарегистрирован: Вт дек 31, 2013 17:36:43
Re: BASCOM AVR в вопросах и ответах
А в каком городе??
- АлександрЛ
- Друг Кота
- Сообщения: 43785
- Зарегистрирован: Пн ноя 30, 2009 03:00:01
- Откуда: Нерезиновая
Re: BASCOM AVR в вопросах и ответах
Не морочьте себе голову с этими джамперами- http://www.chipdip.ru/product/wjw70/ http://www.chipdip.ru/product/wjw-60b/ я наоборот от них отказался- лучше лишнюю плату купить, а "джамперы" можно самому наделать- из "одножилки" от витой пары или телефонного кабеля.. Тем более, что эти "джамперы" (имхо) жутко неудобны - толстые и жёсткие. Кстати, эти платы стыкуются между собой как по "вертикали", так и по "горизонтали", можно спокойно вместо платы на металлическом основании купить две или три платы БЕЗ металлического основания, и собрать из них БОЛЬШУЮ ПЛАТУ, приклеив потом всё это на какое- то самодельное основание- у меня это- "бракованный" кусок стеклотекстолита - сначала сделал ОДНУ, а потом ещё одну "пристыковал.. Вообще их ТРИ было, одну сыну отдал-pavel1979 писал(а):я так и подумал макетная плата
увы,я живу в россии,а не в китае
у нас есть но где купить джампера и т д
Вот ещё вариант плат- жаль, только, что они с предыдущим вариантом не совместимы..
- kkozyrev
- Открыл глаза
- Сообщения: 67
- Зарегистрирован: Пт дек 11, 2009 02:40:44
- Откуда: C-Петербург
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
не мучайтесь и берите вот это
http://www.ebay.com/itm/1pcs-MB102-Breadboard-830-Point-Solderless-PCB-Bread-Board-Test-Develop-DIY-/121142945487?pt=LH_DefaultDomain_0&hash=item1c34aea6cf
и еще вот это
http://www.ebay.com/itm/40PCS-Dupont-Wire-Color-Connector-Cable-2-54mm-1P-1P-For-Arduino-GOOD-QUALITY/300895459196?_trksid=p2047675.c100005.m1851&_trkparms=aid%3D222007%26algo%3DSIC.MBE%26ao%3D1%26asc%3D27675%26meid%3D450b06bef96b4779b364fcb69ad2efe4%26pid%3D100005%26rk%3D3%26rkt%3D6%26mehot%3Dpp%26sd%3D290935235761&rt=ncURL макетная плата [/url]
и это
http://www.ebay.com/itm/65Pcs-Male-Male-Solderless-Flexible-Breadboard-Jumper-Cable-Wires-Arduino-/251543303545?pt=LH_DefaultDomain_0&hash=item3a91263579
очень дешево и удобно
http://www.ebay.com/itm/1pcs-MB102-Breadboard-830-Point-Solderless-PCB-Bread-Board-Test-Develop-DIY-/121142945487?pt=LH_DefaultDomain_0&hash=item1c34aea6cf
и еще вот это
http://www.ebay.com/itm/40PCS-Dupont-Wire-Color-Connector-Cable-2-54mm-1P-1P-For-Arduino-GOOD-QUALITY/300895459196?_trksid=p2047675.c100005.m1851&_trkparms=aid%3D222007%26algo%3DSIC.MBE%26ao%3D1%26asc%3D27675%26meid%3D450b06bef96b4779b364fcb69ad2efe4%26pid%3D100005%26rk%3D3%26rkt%3D6%26mehot%3Dpp%26sd%3D290935235761&rt=ncURL макетная плата [/url]
и это
http://www.ebay.com/itm/65Pcs-Male-Male-Solderless-Flexible-Breadboard-Jumper-Cable-Wires-Arduino-/251543303545?pt=LH_DefaultDomain_0&hash=item3a91263579
очень дешево и удобно
не судите, я учусь -)