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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
vem566
Друг Кота
Сообщения: 4733
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

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

Сообщение vem566 »

Я бы кормил от внешнего кварца. Настройки чисто частотные, а стабильность внутреннего генератора... Хотя, я думаю, если в приемнике приличная АПЧ есть, то должна справится с нестабильностью RC. Не такой и большой уход частоты. Опять же, если время интеграции значительно выше частоты дискретизации, то вообще без разницы.
Реклама
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

спасибо,попробую,а то синтез для простого приемника думаю слишком шикарно...
Реклама
goldskif
Открыл глаза
Сообщения: 68
Зарегистрирован: Пт окт 25, 2013 17:13:03

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

Сообщение goldskif »

Здравствуйте.
Посоветоваться хочу.
Нужно немного переделать простой минутный таймер обратного счета. Сделать так, чтобы пользователь мог устанавливать время только из ограниченного диапазона. Допустим, только от 5 до 12 минут.
Иметь для удобства две кнопки + и - установки времени.
При нажатии Пуск - включается нагрузка, время на индикаторе уменьшается и после отработки времени нагрузка выключается.
Индикатор - однострочный ЖКИ.
Спойлер

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

$regfile = "attiny2313.dat"
$crystal = 10000000

Declare Sub Tim()
Declare Sub Ok()
Declare Sub Main()

Config Lcd = 16 * 1

Config Pind.6 = Input
Config Pinb.0 = Input
Config Pinb.1 = Input
Config Portd.3 = Output
Config Portd.5 = Output
Portd.3 = 0
Portd.5 = 0
Pind.6 = 1
Pinb.0 = 1
Pinb.1 = 1

Const Loaddelay = 1000

Dim Minu As Byte
Dim Altim As Long
Dim Ptime As Byte

Ptime = 5
Minu = 0

Deflcdchar 1 , 32 , 32 , 1 , 2 , 20 , 8 , 32 , 32

Cls
Cursor Off
Lcd "     TEXT1       "
Wait 2
Cls
Lcd "  TEXT2   "
Wait 2
Call Main()
End

Sub Main()
Cls
Lcd "         Time  0"

Do

Waitms 100


If Pinb.1 = 0 Then
Minu = Minu + 1

If Minu < 10 Then
Cls
Locate 1 , 16
Lcd Minu
Else
Locate 1 , 15
Lcd Minu
End If

End If

If Pinb.0 = 0 Then
Minu = Minu - 1

If Minu < 10 Then
Cls
Locate 1 , 16
Lcd Minu
Else
Locate 1 , 15
Lcd Minu
End If

End If

If Pind.6 = 0 Then Call Tim()
Loop
End Sub

Sub Ok()
Sound , Portd.4 , 100 , 500
Portd.5 = 0

Wait 3
Sound , Portd.4 , 100 , 1000
Portd.3 = 0

Do
If Pind.6 = 0 Then Call Main()
Loop
End Sub

Sub Tim()                                                   '

Do
If Minu = 0 Then Call Ok()

Minu = Minu - 1

If Minu < 10 Then
Locate 1 , 16
Lcd Minu
Else
Locate 1 , 15
Lcd Minu
End If

Wait 2
Locate 1 , 14
Lcd "  "

Loop
End Sub
Последний раз редактировалось goldskif Пт окт 25, 2013 19:46:31, всего редактировалось 1 раз.
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

как-то у вас сложно получается...
а точность нужна?
попробую помочь-заняться нечем и как раз есть связка тини+индикатор 0802
Реклама
Эиком - электронные компоненты и радиодетали
goldskif
Открыл глаза
Сообщения: 68
Зарегистрирован: Пт окт 25, 2013 17:13:03

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

Сообщение goldskif »

pavel1979 писал(а):как-то у вас сложно получается...
а точность нужна?
попробую помочь-заняться нечем и как раз есть связка тини+индикатор 0802
нет, секундной вполне достаточно.
Это для облучателя бактерицидного. Чтоб воздух в помещении обеззараживать. Можно сделать из разбитой ДРЛ-ки. Но нужно четко ограничить, чтобы меньше 5 минут нельзя было выставить (раньше все равно лампа на режим не выйдет) и чтобы больше, допустим 12 минут нельзя было поставить (чтоб большую дозу даже случайно не сделать). Вот как-то так.

Приведенный код мне тоже не нравится. Я его взял за основу из скачанного в инете.
Да, еще желательно записать установленное значение времени в память, чтобы каждый раз не устанавливать. Обыватель обычно для размеров одного помещения просто установит сразу 8 (допустим) минут и дальше только вкл-выкл...
Реклама
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

подправил вашу программу,в симуляторе Sound , Portd.4 , 100 , 500 не работает-не знаю почему,вот
Спойлер$regfile = "attiny2313.dat"
$crystal = 10000000
'$sim
Declare Sub Tim() '
Declare Sub Ok() '
Declare Sub Main() 'предварительная установка ,после установки вкл нагрузки с интервалом 3 сек

Config Lcd = 16 * 1

Config Pind.6 = Input 'далее-пуск
Config Pinb.0 = Input 'минус
Config Pinb.1 = Input 'плюс
Config Portd.3 = Output
Config Portd.5 = Output
Portd.3 = 0
Portd.5 = 0
Pind.6 = 1
Pinb.0 = 1
Pinb.1 = 1

Const Loaddelay = 1000

Dim Minu As Byte
Dim Secund As Byte
Dim Altim As Long
Dim Ptime As Byte

Ptime = 5
Minu = 8
Secund = 0
Deflcdchar 1 , 32 , 32 , 1 , 2 , 20 , 8 , 32 , 32

Cls
Cursor Off
Lcd " TEXT1 "
Wait 2
Cls
Lcd " TEXT2 "
Wait 2
Call Main()
'сама программа,точность не очень
Do
Incr Secund
If Secund > 59 Then Call Tim() 'как только сек=60 идем на Tim()
Wait 1
Loop
'предустановки
Sub Main()
Cls
Lcd " Time 0"
Do
Waitms 100
If Pinb.1 = 0 And Minu < 10 Then Incr Minu
If Pinb.0 = 0 And Minu > 5 Then Decr Minu
Locate 1 , 14
If Minu < 10 Then Lcd " "
Lcd Minu
If Pind.6 = 0 Then Goto Label
Loop
Label:
'Sound , Portd.4 , 100 , 500
Portd.5 = 1
Wait 3
'Sound , Portd.4 , 100 , 1000
Portd.3 = 1
Call Tim()
End Sub
'обнуление секунд,минут-1,проверка,обновление индикации
Sub Tim() '
Secund = 0
Minu = Minu - 1
Locate 1 , 14
If Minu < 10 Then Lcd " "
Lcd Minu
If Minu = 0 Then Call Ok()
End Sub
'отключение нагрузок
Sub Ok()
'Sound , Portd.4 , 100 , 500
Portd.5 = 0
Wait 3
'Sound , Portd.4 , 100 , 1000
Portd.3 = 0

Do
If Pind.6 = 0 Then Call Main()
Loop
End Sub
подправил,как можно выложить в протеусе?
Реклама
Аватара пользователя
Adagumer
Поставщик валерьянки для Кота
Сообщения: 2300
Зарегистрирован: Чт ноя 15, 2012 20:47:59
Откуда: Крымск

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

Сообщение Adagumer »

goldskif писал(а):Можно сделать из разбитой ДРЛ-ки.
У ДРЛки очень жесткое излучение, можно пожечь окружающие предметы.
Лучше использовать специальные бактерицидные лампы, продаются в электротоварах.
goldskif
Открыл глаза
Сообщения: 68
Зарегистрирован: Пт окт 25, 2013 17:13:03

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

Сообщение goldskif »

Sound у меня в протеусе тоже не работал, потому что сначала в стыренной с Инета схеме пищалка была подключена напрямую к Attiny через резистор. А когда сделал через транзистор 2N711 - тогда запищала. То есть с выхода Attiny на базу транзистора через 1К, а уже в коллекторе стоит пищалка.
--
Про излучение я в курсе. В принципе, оно все равно тоже самое будет, диапазона УФ-С. Просто ДРЛка мощнее медицинской лампы. Некоторым оно даже на пользу, сосед хочет обеззаразить погреб, а то сырость и плесень и прочие микроорганизмы завелись.
--
а файлы протеуса сюда архивом пихать можно?
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

goldskif писал(а):а файлы протеуса сюда архивом пихать можно?
тоже пытался,но в протеусе работает нормально,в программе сделал индикацию секунд и закоментировал звук
Вложения
таймер.rar
(16.33 КБ) 190 скачиваний
servnt
Открыл глаза
Сообщения: 61
Зарегистрирован: Вс фев 14, 2010 11:29:12
Откуда: РФ, Рязань

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

Сообщение servnt »

Коты, подскажите, пожалуйста. Всю бошку себе расчесал уже от раздумий.
Вот пример кода, из учебника, практически

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

$regfile = "m8535.dat"
$crystal = 8000000

'êîíôèãóðàöèÿ ïîðòîâ
Config Porta.2 = Input
Config Portc.0 = Input
Config Portd.7 = Output
Config Portc.4 = Output
Config Adc = Free , Prescaler = Auto , Reference = Avcc
Config Timer2 = Timer , Prescale = 1024
Pot Alias Pina.2
Pwr Alias Pinc.0
Pump Alias Portd.7
Dim Pump_discret As Byte
Dim Pump_ignition As Byte
Dim Pot_count As Byte
Dim Pump_on_time As Integer
Dim Abc As Byte
Const Timer1pre = 255
Stop Timer2
Timer2 = Timer1pre
Start Timer2



Do

Enable Interrupts
Enable Timer2
On Timer2 Pulse:

Loop

Pulse:
  'Set Pump
  'Waitms 150
  Stop Timer2
  Timer2 = Timer1pre
  Toggle Pump
  Start Timer2
Return

End                                                         'end program
При изменении значений таймера от 1 до 255 период импульса не меняется и составляет примерно 65,5ms.
Проверяю все в Протеусе.
Почему так? Где я косячу?
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

удалил
Последний раз редактировалось pavel1979 Сб окт 26, 2013 12:38:21, всего редактировалось 1 раз.
Аватара пользователя
vem566
Друг Кота
Сообщения: 4733
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

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

Сообщение vem566 »

Config Timer2 = Timer , Prescale = 1024
On Timer2 Pulse:
Pot Alias Pina.2
Pwr Alias Pinc.0
Pump Alias Portd.7
Dim Pump_discret As Byte
Dim Pump_ignition As Byte
Dim Pot_count As Byte
Dim Pump_on_time As Integer
Dim Abc As Byte
Const Timer1pre = 255
Enable Timer2
Enable Interrupts
Stop Timer2
Timer2 = Timer1pre
Start Timer2


Do
Loop

Перенесенные строчки выделены. Вот так все будет работать. Цикл Do-Loop пустой.
servnt
Открыл глаза
Сообщения: 61
Зарегистрирован: Вс фев 14, 2010 11:29:12
Откуда: РФ, Рязань

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

Сообщение servnt »

Вот текущий код

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

$regfile = "m8535.dat"
$crystal = 8000000

'êîíôèãóðàöèÿ ïîðòîâ
Config Porta.2 = Input
Config Portc.0 = Input
Config Portd.7 = Output
Config Portc.4 = Output
Config Adc = Free , Prescaler = Auto , Reference = Avcc
Config Timer2 = Timer , Prescale = 1024
On Timer2 Pulse:
Pot Alias Pina.2
Pwr Alias Pinc.0
Pump Alias Portd.7
Dim Pump_discret As Byte
Dim Pump_ignition As Byte
Dim Pot_count As Byte
Dim Pump_on_time As Integer
Dim Abc As Byte
Const Timer1pre = 1
Enable Interrupts
Enable Timer2
Stop Timer2
Timer2 = Timer1pre
Start Timer2

Do
Loop

Pulse:
  'Set Pump
  'Waitms 150
  Stop Timer2
  Timer2 = Timer1pre
  Toggle Pump
  Start Timer2
Return

End                                                         'end program
Что 1 давать таймеру, что 255 - все одно.
Может, Протеус глючит?
Аватара пользователя
vem566
Друг Кота
Сообщения: 4733
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

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

Сообщение vem566 »

А в отладке протеуса посмотреть состояние таймера?
servnt
Открыл глаза
Сообщения: 61
Зарегистрирован: Вс фев 14, 2010 11:29:12
Откуда: РФ, Рязань

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

Сообщение servnt »

Да, в отладке все показывает правильно.
Но только, если использовать TIMER1:
Изображение
А вот, если TIMER2, то регистра нет :dont_know:
Изображение

Так же и TIMER0
harrd
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Ср апр 01, 2009 17:52:51

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

Сообщение harrd »

Здравствуйте, у меня проблема с кодом ( и, наверное, с мозгами). Делаю часы на attiny2313, часах реального времени DS1307 и неоновых индикаторах. Прошивка не моя, она с проекта LED часов, я её переделал под свои нужды. Там динамическая индикация и выход на дешифратор к155ид1. В протеусе всё нормально работает, а в реальном устройстве (монтаж перепроверен сто раз) глючит, контроллер выдаёт какую-то муть на выходе. Ткните носом в ошибку. Буду особо признателен (в том числе и материально), если подробно прокомментируете каждую строчку кода

$regfile = "attiny2313.dat"
$crystal = 8000000

Dim Count As Byte
Dim Number(4) As Integer
Dim Pointmem As Byte
Dim Point As Bit
Dim Mine As Byte
Dim Hour As Byte
Dim Seco As Byte
Config Porta.1 = Output
Config Portb = Output
Config Porta.0 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.6 = Output
Config Sda = Portd.5
Config Scl = Portd.4
Config Pind.0 = Input
Config Pind.1 = Input
Config Timer1 = Timer , Prescale = 64
On Timer1 Awake:
Config Timer0 = Timer , Prescale = 64
On Ovf0 Refresh
Dig1 Alias Portb.0 : Dig2 Alias Portb.1 : Dig3 Alias Portb.2 : Dig4 Alias Portb.3
Enable Interrupts
Enable Ovf0
Enable Timer1
Start Timer1

Hour = 0
Mine = 0

If Pind.1 = 0 And Pind.0 = 0 Then
Hour = 0
Mine = 0
Seco = 1

Seco = Makebcd(seco)
I2cstart
I2cwbyte &HD0
I2cwbyte 0
I2cwbyte Seco
I2cstop

Mine = Makebcd(mine)
I2cstart
I2cwbyte &HD0
I2cwbyte 1
I2cwbyte Mine
I2cstop

Hour = Makebcd(hour)
I2cstart
I2cwbyte &HD0
I2cwbyte 2
I2cwbyte Hour
I2cstop
End If

Do
I2cstart
I2cwbyte &HD0
I2cwbyte &H00
I2cstart
I2cwbyte &HD1
I2crbyte Seco , Ack
I2crbyte Mine , Ack
I2crbyte Hour , Nack
I2cstop
Seco = Makedec(seco)
Mine = Makedec(mine)
Hour = Makedec(hour)

If Seco = 80 Then
Seco = 10
Seco = Makebcd(seco)
I2cstart
I2cwbyte &HD0
I2cwbyte 0
I2cwbyte Seco
I2cstop
End If

If Hour > 9 Then
Number(1) = Hour / 10
Number(1) = Abs(number(1))
Else
Number(1) = 0
End If

Number(2) = Hour Mod 10

If Mine > 9 Then
Number(3) = Mine / 10
Number(3) = Abs(number(3))
Else
Number(3) = 0
End If

Number(4) = Mine Mod 10

If Pind.1 = 0 Then

If Mine = 59 Then
Mine = 0
Else
Incr Mine
End If

Mine = Makebcd(mine)
I2cstart
I2cwbyte &HD0
I2cwbyte 1
I2cwbyte Mine
I2cstop
Else

If Pind.0 = 0 Then
If Hour = 23 Then
Hour = 0
Else
Incr Hour
End If
Hour = Makebcd(hour)
I2cstart
I2cwbyte &HD0
I2cwbyte 2
I2cwbyte Hour
I2cstop
End If
End If

Waitms 250
Loop

Awake:
If Point = 1 Then
Point = 0
Else
Point = 1
End If
Return

Refresh:
Reset Dig1 : Reset Dig2 : Reset Dig3 : Reset Dig4
Incr Count : If Count > 4 Then Count = 1

If Count = 2 And Point = 1 Then Toggle Porta.1

Portb = Lookup(number(count) , Digits)

Select Case Count
Case 1 : Set Dig1
Case 2 : Set Dig2
Case 3 : Set Dig3
Case 4 : Set Dig4
End Select
Return

Digits:

Data &B00000000 , &B10000000 , &B01000000 , &B11000000 , &B00100000
Data &B10100000 , &B01100000 , &B11100000 , &B00010000 , &B10010000

Вот схема http://img.radiokot.ru/files/10708/medium/65r4hgr2r.jpg
Кто поможет, переведу деньги на яндекс или киви
aleksandr-zh
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

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

Сообщение aleksandr-zh »

так с наскоку сложно ваш код понять
но нет защиты от дребезга контактов, нет анализа данных

ps
и покажите на фото ваш монтаж, особо обвязку часовой м-мы
harrd
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Ср апр 01, 2009 17:52:51

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

Сообщение harrd »

aleksandr-zh, монтаж выполнен на двух платах, на одной микроконтроллер с микросхемой часов, на другой дешифратор с ключами. Обвязка DS1307 идентична рабочему прототипу (LED часы), так что там должно быть всё нормально. Мне кажется более вероятным глюк в прошивке. Если вас не затруднит, разберитесь в программе и прокомментируйте, чтобы был ясен примерный алгоритм работы.
Аватара пользователя
uni
Встал на лапы
Сообщения: 137
Зарегистрирован: Пт дек 07, 2007 11:17:40
Откуда: г. Екатеринбург
Контактная информация:

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

Сообщение uni »

Проект, в состав которого входит модуль Console для работы с ANSI-терминалами: ansibas.
Экспортировать к себе при помощи плагина к проводнику TortoiseSVN.

На картинке ниже показан пример работы модуля для отображения состояния ОЗУ мк ATmega16 в Proteus.

Изображение
Россия навсегда!
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

uni писал(а):Проект, в состав которого входит модуль Console для работы с ANSI-терминалами: ansibas.
Экспортировать к себе при помощи плагина к проводнику TortoiseSVN.

На картинке ниже показан пример работы модуля для отображения состояния ОЗУ мк ATmega16 в Proteus.

Изображение
а смысл,если в протеусе можно просматривать всю программу(именно программу!) пошагово http://bascom.at.ua/publ/poshagovaja_ot ... m/1-1-0-58
по часам-попробуйте подтянуть резисторами выв ABCD дешифратора к плюсу
Последний раз редактировалось pavel1979 Вс окт 27, 2013 19:41:14, всего редактировалось 1 раз.
Ответить

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