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

Обсуждаем контроллеры компании Atmel.
Ответить
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

IDok писал(а):прошел и не раз.
Ну-ну.

1. Переменная М = 0. Выполняется условие "If M = 0...". Увеличивается значение переменной L1. Остальные условия тоже проверяются, но ни одно из них не выполняется. Так будет до тех пор, пока L1 не станет равна 255. Яркость первого светодиода растет, и в итоге он светит в полную яркость.

2. L1 = 255. Выполняется условие "If L1 = 255...". Переменной M присваивается значение 1. В следующей строке теперь выполняется условие "If M = 1" и переменная L2 увеличивается на 1. Она еще не равна 255, потому дальше условие не выполняется.

3. Следующая проверка на равенство M = 2. Тоже не истина. L3 тоже проверяется на равенство 255, но и оно не выполняется. Основной цикл начинается сначала.

4. Первая проверка M = 0. Это не так, она сейчас равна 1, пропускаем. Вторая проверка L1 = 255. Да, это так, присваиваем M = 1. Но это не страшно, она и так равна 1. Идем дальше.

5. M = 1, Значит прибавляем яркость второго светодиода. И так происходит до тех пор, пока яркость L2 не станет равна 255. Выполнится условие "If L2 = 255...". M присваивается значение 2. Горят оба светодиода.

6. Далее проверяем равенство M = 2. Да, это так, а значит прибавляем L3. Оно еще не 255, так что начинаем все сначала.

7. А вот здесь начинается самое интересное. Проверяем M = 0. Нет. Проверяем L1 = 255. Да! И M присваивается значение 1. А дальше что? А дальше проверка "If M=1 then incr L2". Она конечно выполняется, и L2 переваливается через 255, становясь равна 0. Светодиод 2 гаснет.

8. Далее уже условия для третьего светодиода не выполняются. В это время яркость второго светодиода растет. И так доходит до 255. При этом М становится равна 2.

9. На один шаг становится выше яркость L3. И тут же M становится равна 1, второй светодиод снова гаснет.

Резюме: Первый светодиод плавно зажигается, за ним так же плавно зажигается второй, и тут же гаснет. Яркость третьего прибавляется на шаг, первый так и горит в полную яркость, второй снова плавно зажигается и гаснет. Третий еще на шаг ближе к свету. И все повторяется снова и снова... :tea:
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Реклама
Встал на лапы
Сообщения: 122
Зарегистрирован: Ср фев 01, 2017 17:57:15

Сообщение IDok »

вот я дятел бетонных джунглей :facepalm:
последний раз программировал лет 20 назад, все навыки уже стерлись.... :(
Реклама
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 28
Зарегистрирован: Вс май 15, 2016 19:02:01
Откуда: Украина

Сообщение andrusha152 »

Приветствую всех участников форума. Прочитал все с большим удовольствием. Очень много полезного нашел для себя. Хочу сказать СПАСИБО всем! Есть и у меня вопросик.edm2007 есть у Вас проект, называется Термометр "Гном". ( http://radiokot.ru/circuit/digital/home/97/) Я сделал себе нечто подобное, все работает красиво, потребление в режиме индикации 8 mA. Но заметил один баг. При удержании кнопки программа начинает выполняться циклично. Контроллер засыпает и тут же просыпается снова, и до тех пор, пока не отпущу кнопку. У " Гнома" такого нет. Собрал несколько штук на подарки. Победить это я не смог. Прошу помощи. Вот код.


' Термометр
'****************************
$regfile = "attiny2313a.dat" ' Intel Core i7
$crystal = 1000000 ' частота

Config Porta = Output
Config Portb = Output
Config Portd = Output
Config Pind.5 = Input
Config Pind.2 = Input
Pind.2 = 1
Config 1wire = Portd.5 'DS18B20
Config Debounce = 50 'антидребезг
Config Int0 = Low Level
On Int0 Измеряем:
Enable Interrupts
Enable Int0
'****************************
' Переменные
'****************************
Dim W As Byte , Z As Byte , Y As Byte , I As Byte
Dim Ch(3) As Integer , T_p As Integer
Dim Индикация As Word
Dim T As Integer
Dim Минус As Bit
Dim N As Bit

'****************************
' Порты
'****************************
A Alias Portb.0 : B Alias Portb.4 : C Alias Portb.1 : D Alias Portd.0 ' назначаем порты на сегменты
E Alias Portb.5 : F Alias Portb.7 : G Alias Portb.3 : H Alias Portd.1
Dig3 Alias Portd.6 : Dig2 Alias Portb.2 : Dig1 Alias Portb.6 ' и аноды

'****************************
Do ' пустой цикл, без него не засыпает

Loop

'****************************
' Измерение
'****************************
Измеряем:
Set Portd.4 ' подаем питание на датчик
Waitms 100 ' чтобы не высвечивалось 85,0
1wreset
If Err = 1 Then
N = 1
Else
N = 0
End If
1wwrite &HCC
1wwrite &H44
Waitms 750
1wreset
1wwrite &HCC
1wwrite &HBE
T = 1wread(2)
Минус = T.15 ' читаем знак температуры
T = Abs(t)
T = T * 10
T = T / 16
If T = 0 Then Минус = 0 ' избавляемся от минуса при 0 градусов
Reset Portd.4 ' снимаем питание с датчика
'****************************
' Индикация
'****************************
For Индикация = 0 To 700 ' время индикации
T_p = T
For I = 1 To 3 ' разбиваем переменную
If Минус = 1 And T >= 100 Then ' если температура меньше - 10, то без десятых
T_p = T_p / 10
Ch(i) = T_p Mod 10
Else
Ch(i) = T_p Mod 10 ' если температура больше - 10. то с десятыми
T_p = T_p / 10
End If
Next I
If T < 100 Then Ch(3) = 11 ' гасим ноль, когда не нужен
If Минус = 1 Then Ch(3) = 10 ' знак минус, когда нужен
If N = 1 Then
Ch(1) = 13 : Ch(2) = 13 : Ch(3) = 12 ' Err, когда без датчика
End If
Set Dig1 : Set Dig2 : Set Dig3 ' гасим индикатор
Incr W : If W > 3 Then W = 1 ' выбираем какую цифру сейчас включать
Y = 0
Gosub Look : A = Z ' зажигаем сегменты
Gosub Look : B = Z
Gosub Look : C = Z
Gosub Look : D = Z
Gosub Look : E = Z
Gosub Look : F = Z
Gosub Look : G = Z

Select Case W ' включаем нужную цифру (w). Подаем плюс на общий провод конкретной цифры

Case 1 : ' а так же точку, где и когда надо
Reset Dig1
H = 0

Case 2 :
Reset Dig2
If Минус = 1 And T > 99 Or N = 1 Then ' гасим точку, когда не надо
H = 0
Else
H = 1
End If

Case 3 :
Reset Dig3
H = 0

End Select

Next Индикация

Portb = 0 : Reset Portd.0 : Reset Portd.1 : Reset Portd.6 ' обнуляем все порты
Gifr.6 = 1
Return

Look:
Z = Ch(w) * 7 : Z = Y + Z
Z = Lookup(z , Цифры)
Incr Y
Return

Powerdown ' спим, очень крепко
Цифры:

' для индикатора с общим минусом
Data 1 , 1 , 1 , 1 , 1 , 1 , 0 '0
Data 0 , 1 , 1 , 0 , 0 , 0 , 0 '1
Data 1 , 1 , 0 , 1 , 1 , 0 , 1 '2
Data 1 , 1 , 1 , 1 , 0 , 0 , 1 '3
Data 0 , 1 , 1 , 0 , 0 , 1 , 1 '4
Data 1 , 0 , 1 , 1 , 0 , 1 , 1 '5
Data 1 , 0 , 1 , 1 , 1 , 1 , 1 '6
Data 1 , 1 , 1 , 0 , 0 , 0 , 0 '7
Data 1 , 1 , 1 , 1 , 1 , 1 , 1 '8
Data 1 , 1 , 1 , 1 , 0 , 1 , 1 '9
Data 0 , 0 , 0 , 0 , 0 , 0 , 1 '10 "-"
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 '11 "" пусто
Data 1 , 0 , 0 , 1 , 1 , 1 , 1 '12 E
Data 0 , 0 , 0 , 0 , 1 , 0 , 1 '13 r
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

Здравствуйте.

Код я посмотрю, но пока могу сказать одно - прерывание по низкому уровню генерируется все время, пока этот уровень удерживается. Потому просто перед засыпанием можно погасить индикацию, и ждать отпускания кнопки (с антидребезгом, естественно). И только после этого засыпать.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 28
Зарегистрирован: Вс май 15, 2016 19:02:01
Откуда: Украина

Сообщение andrusha152 »

Большое спасибо. Прописал перед Powerdown - Bitwait PIND.2 , Set и все заработало, как надо.
Реклама
Встал на лапы
Сообщения: 122
Зарегистрирован: Ср фев 01, 2017 17:57:15

Сообщение IDok »

при попытке прошить тини85 баском пишет chip differs at byte address: 00040, [FF]-[81], фьюзы прошиваются,
программатор Usbasp, раньше работал нормально. это чип убился или программатор?
программка простейшая, мигание диодом на PB.4

Добавлено after 24 minutes 4 seconds:
замерял сейчас напряжения с программатора: без нагрузки = 4.9В, с подключеной тинькой = 4В, с тинькой+светодиод = 3В.
походу стабилизатор программатора накернился, хотя сам работает, 2313 только что несколько раз перешил и прошивка работала. а вот что с тини85 - это вопрос
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

IDok писал(а):походу стабилизатор программатора накернился
Запросто такое может быть. Если конечно подключенный контроллер не дохлый, или не сконфигурирован так, что своими ногами соорудил КЗ.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Встал на лапы
Сообщения: 122
Зарегистрирован: Ср фев 01, 2017 17:57:15

Сообщение IDok »

МК живой, ибо записанную программу отрабатывает. а стабилизатор программатора сдох походу во время икспириментов с тини85, когда на него динамик подключал на 8 Ом :(
а может и в перемычках заплутал и где-то коротыш устроил. придется теперь от отдельного стабилизатора запитываться... жаль...
так с тини85 что за ошибка такая - chip differs at byte address: 00040, [FF]-[81], ? не подскажете?
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

Ну никто не запрещает отремонтировать программатор. :) Я в своем самодельном USBasp питаю прошиваемый чип от программатора напрямую обычно, а стаб на 3,3В стоит, если устройству это важно. Конечно если к у контроллера в цифровой части что-то потребляющее есть то тут либо стороннее питание, либо джампер разрывающий потребителя, но это реже бывает.

Ошибка... Для начала приведите в порядок программатор. Если ошибка повторится, то попробуйте другой (такой же) МК.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Встал на лапы
Сообщения: 122
Зарегистрирован: Ср фев 01, 2017 17:57:15

Сообщение IDok »

edm2007 писал(а):Ну никто не запрещает отремонтировать программатор. :) МК.
всё запрещает. smd-элементы мне паять тупо нечем :(
да и пойди пойми их номиналы...
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

Ну если до Иркутска не очень далеко, то заезжайте в гости, отремонтируем. :))
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Встал на лапы
Сообщения: 122
Зарегистрирован: Ср фев 01, 2017 17:57:15

Сообщение IDok »

да проще уж из московии новый выписать за 150 рублев, или этот с отдельным питаловом использовать. неудобно просто, я как подпольщик - паяю по ночам и под столом :(
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск

Сообщение edm2007 »

Да я не заставлял, вроде. Проще - так выписывайте. А если контроллер приказал долго жить, закажете новый программатор, подключите и снова сдохнет стаб? Опять заказывать? Ведь вкорячить стабилизатор не такая и проблема. Даже в другом корпусе прикрутить не так сложно. Будет желание, сделайте хорошее фото программатора. Если двухслойка, то с обеих сторон.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Контактная информация:
Встал на лапы
Сообщения: 122
Зарегистрирован: Ср фев 01, 2017 17:57:15

Сообщение IDok »

а с компа с юсб можно взять 5В или они там недостаточно пятивольтовы?

Добавлено after 10 minutes 28 seconds:
Изображение
ну вот он, собственно. с обратной стороны элементов нет. если нужно фото лучше - то только завтра
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 28
Зарегистрирован: Вс май 15, 2016 19:02:01
Откуда: Украина

Сообщение andrusha152 »

А где на этой плате стоит стабилизатор? Походу у Вас сдох стабилитрон D1. Цвет у него не приятный. Может и D2, на фото не видно. Они на 3,3В. Используются для согласования уровней.
Встал на лапы
Сообщения: 122
Зарегистрирован: Ср фев 01, 2017 17:57:15

Сообщение IDok »

не, это не цвет, это синие полосочки так отобразились. а с виду они целые не горелые
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 28
Зарегистрирован: Вс май 15, 2016 19:02:01
Откуда: Украина

Сообщение andrusha152 »

А прозвонить?
Встал на лапы
Сообщения: 122
Зарегистрирован: Ср фев 01, 2017 17:57:15

Сообщение IDok »

не выпаивая? результаты могут озадачить. хотя конечно можно
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 28
Зарегистрирован: Вс май 15, 2016 19:02:01
Откуда: Украина

Сообщение andrusha152 »

На нормальных стабилитронах полоска более яркая. А здесь такое ощущение, что стабилитрон сильно нагрелся, и краска выгорела. Хотя, это может быть из-за качества фото. Но прозвонить нужно. В одну сторону бесконечное сопротивление, в другую где-то 500 Ом. Можно звонить и не выпаивая.
Встал на лапы
Сообщения: 122
Зарегистрирован: Ср фев 01, 2017 17:57:15

Сообщение IDok »

прозвонил. стабилитроны целые
Ответить

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