Ну и можете проект с протеусом прикрепить, ежели чего...
BASCOM AVR в вопросах и ответах
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Ну отлично, Вы все правильно делаете, значит.
А теперь поставьте точку останова в исходнике там, где идет обработка нажатой при включении кнопки (брекпоинт ставится двойным нажатием по строке исходника). Теперь при запуске симуляция остановится на этой точке. Или не остановится, если туда не попадет. А далее можно будет пошагово (кнопка с ботинком) пройти по коду, смотря что творится.
Ну и можете проект с протеусом прикрепить, ежели чего...
Ну и можете проект с протеусом прикрепить, ежели чего...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Реклама
Re: BASCOM AVR в вопросах и ответах
[uquote="edm2007",url="/forum/viewtopic.php?p=3095790#p3095790"]А теперь поставьте точку останова в исходнике там, где идет обработка нажатой при включении кнопки (брекпоинт ставится двойным нажатием по строке исходника). Теперь при запуске симуляция остановится на этой точке. Или не остановится, если туда не попадет. А далее можно будет пошагово (кнопка с ботинком) пройти по коду, смотря что творится.[/uquote]
Поставил красную точку break point. Запускаю симуляцию (F12)и она останавливается в указанной точке (строка, где происходит проверка кнопки до подачи питания).
Далее нажимаю на ботинок(и) (пошагово) - происходит проверка Debounce кнопок и всех условий If внутри цикла Do...Loop
Поставил красную точку break point. Запускаю симуляцию (F12)и она останавливается в указанной точке (строка, где происходит проверка кнопки до подачи питания).
Далее нажимаю на ботинок(и) (пошагово) - происходит проверка Debounce кнопок и всех условий If внутри цикла Do...Loop
исходник и протеус на предыдущей странице, 2-3 постами выше.Ну и можете проект с протеусом прикрепить, ежели чего...
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
А почему Вы перед изменением режима, не считываете его номер из EEPROM? Ведь
всегда равна 1. Эта единица и будет всегда записываться в EEPROM, при попытке изменить режим.
Код: Выделить всё
Mmode = Mmode + 1 'инкрементируем
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Re: BASCOM AVR в вопросах и ответах
[uquote="edm2007",url="/forum/viewtopic.php?p=3095838#p3095838"]А почему Вы перед изменением режима, не считываете его номер из EEPROM? Ведь
всегда равна 1. Эта единица и будет всегда записываться в EEPROM, при попытке изменить режим.[/uquote]
Ой. А вот и первый баг
Исправил, но все равно не фурычит. И даже режим не переключается.
Привожу кусочек код опроса кнопки до включения:
всегда равна 1. Эта единица и будет всегда записываться в EEPROM, при попытке изменить режим.[/uquote]
Ой. А вот и первый баг
Исправил, но все равно не фурычит. И даже режим не переключается.
Привожу кусочек код опроса кнопки до включения:
Код: Выделить всё
If Btn = 0 Then
Mmode = S ---->> ДОБАВИЛ ТОЛЬКО ЭТУ СТРОЧКУ.
Waitms 500
Mmode = Mmode + 1 'инкрементируем
Waitms 500
S = Mmode 'сохраняем в S Eram
Waitms 500
Led = 1 'мигаем 1 раз
Waitms 100
Led = 0
Waitms 100
If Mmode >= 2 Then 'Сбрасывам в ноль, если Mmode больше или равно 2.
Mmode = 0
Else 'в противном случае
If Btn = 1 Then 'если кнопку не нажимали
Waitms 500
Mmode = S 'считываем раннее записанное значение Mmode (режима)
End If 'конец условия
Wait 3
End If 'конец условия
End If 'конец условия- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Второй нюанс работы с EEPROM: изначально по всем адресам записано значение FF. А значит при первом включении нужно инициализировать нужные ячейки. Вообще в Вашем случае при первой попытке изменить режим должно считаться 255, далее 255 +1 = 0. И этот 0 запишется в память. При следующей попытке изменить режим уже будет 1. Далее - 2. А значит выполнится условие
Но тут нет сохранения в EEPROM. А значит Mmode будет при зажатой кнопке равна 2 (и сразу 0), и так далее. Проще говоря, Mmode всегда будет 0 (а в EEPROM при этом счетчик будет шагать, переменную S ведь никто не обнулял в этом условии).
Добавлено after 5 minutes 44 seconds:
Кстати, для того чтобы полностью сбросить МК в протеусе (и EEPROM в том числе), при остановленной симуляции выберите "Отладка -> Сброс постоянных данных модели".
Код: Выделить всё
If Mmode >= 2 Then 'Сбрасывам в ноль, если Mmode больше или равно 2.
Mmode = 0
Но тут нет сохранения в EEPROM. А значит Mmode будет при зажатой кнопке равна 2 (и сразу 0), и так далее. Проще говоря, Mmode всегда будет 0 (а в EEPROM при этом счетчик будет шагать, переменную S ведь никто не обнулял в этом условии).
Добавлено after 5 minutes 44 seconds:
Кстати, для того чтобы полностью сбросить МК в протеусе (и EEPROM в том числе), при остановленной симуляции выберите "Отладка -> Сброс постоянных данных модели".
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Реклама
Re: BASCOM AVR в вопросах и ответах
Сделал так:
В эмуляторе в этом случае переменная Mmode каждый раз увеличивается, при смене режима. А вместе с ней и значение в еепром.
Почему то Mmode не сбрасывается в 0, ведь стоит следующее условие:
Таким образом Mmode не равно 1, следовательно, режим сменить не получается 
Вот-вот!
Я как раз об этом. Вы меня опередили.
Как решить эту проблему?
Код: Выделить всё
Mmode = S
If Btn = 0 Then
Waitms 500
....
Почему то Mmode не сбрасывается в 0, ведь стоит следующее условие:
Код: Выделить всё
If Mmode >= 2 Then 'Сбрасываем в ноль, если Mmode больше или равно 2.
Mmode = 0Вот-вот!
Я как раз об этом. Вы меня опередили.
Как решить эту проблему?
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Смотрите, как сейчас дело обстоит у Вас.
1. Включаем агрегат с зажатой кнопкой. Из EEPROM считывается 255.
2. Mmode = 255 + 1 = 0
3. Этот 0 сохраняется в EEPROM.
4. В итоге Mmode = 0 и S = 0, идем в основной цикл.
//----------------------------------------
1. Включаем агрегат с зажатой кнопкой. Из EEPROM считывается 0.
2. Mmode = 0 + 1 = 1
3. Эта 1 сохраняется в EEPROM.
4. В итоге Mmode = 1 и S = 1, идем в основной цикл.
//----------------------------------------
1. Включаем агрегат с зажатой кнопкой. Из EEPROM считывается 1.
2. Mmode = 1 + 1 = 2
3. Эта 2 сохраняется в EEPROM.
4. Теперь выполняется условие If Mmode >= 2 Then, и Mmode становится равна нулю.
5. В итоге Mmode = 0, а S = 2 (ее-то никто не сбросил), идем в основной цикл.
//----------------------------------------
1. Включаем агрегат с зажатой кнопкой. Из EEPROM считывается 2.
2. Mmode = 2 + 1 = 3
3. Эта 3 сохраняется в EEPROM.
4. Снова выполняется условие If Mmode >= 2 Then, и Mmode становится равна нулю.
5. В итоге Mmode = 0, а S = 3, идем в основной цикл.
Таким образом, значение в EEPROM увеличивается при каждой попытке изменить режим, а вот переменная Mmode так и будет равна 0. Так будет до тех пор, пока S не станет равна 255, потом снова перевалится в 0, и вот тогда на один раз Mmode станет равна 1. А потом все повторится снова...
1. Включаем агрегат с зажатой кнопкой. Из EEPROM считывается 255.
2. Mmode = 255 + 1 = 0
3. Этот 0 сохраняется в EEPROM.
4. В итоге Mmode = 0 и S = 0, идем в основной цикл.
//----------------------------------------
1. Включаем агрегат с зажатой кнопкой. Из EEPROM считывается 0.
2. Mmode = 0 + 1 = 1
3. Эта 1 сохраняется в EEPROM.
4. В итоге Mmode = 1 и S = 1, идем в основной цикл.
//----------------------------------------
1. Включаем агрегат с зажатой кнопкой. Из EEPROM считывается 1.
2. Mmode = 1 + 1 = 2
3. Эта 2 сохраняется в EEPROM.
4. Теперь выполняется условие If Mmode >= 2 Then, и Mmode становится равна нулю.
5. В итоге Mmode = 0, а S = 2 (ее-то никто не сбросил), идем в основной цикл.
//----------------------------------------
1. Включаем агрегат с зажатой кнопкой. Из EEPROM считывается 2.
2. Mmode = 2 + 1 = 3
3. Эта 3 сохраняется в EEPROM.
4. Снова выполняется условие If Mmode >= 2 Then, и Mmode становится равна нулю.
5. В итоге Mmode = 0, а S = 3, идем в основной цикл.
Таким образом, значение в EEPROM увеличивается при каждой попытке изменить режим, а вот переменная Mmode так и будет равна 0. Так будет до тех пор, пока S не станет равна 255, потом снова перевалится в 0, и вот тогда на один раз Mmode станет равна 1. А потом все повторится снова...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Re: BASCOM AVR в вопросах и ответах
А как записать 255 в еепром?
В самом начале кода
прописал так: Mmode = 255
При нажатии на кнопку увеличивается на 1 и как бы сохраняется. А вот при повторном включении все-равно Mmode = 255 и так по кругу. Я чего-то не догоняю, туплю
Пойду отдохну маленко, обмозгую...
В самом начале кода
прописал так: Mmode = 255
При нажатии на кнопку увеличивается на 1 и как бы сохраняется. А вот при повторном включении все-равно Mmode = 255 и так по кругу. Я чего-то не догоняю, туплю
Пойду отдохну маленко, обмозгую...
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Вы не о том думаете, запутывая себя же самого. Зачем записывать 255? Перечитайте

Оно там уже есть у чистого контроллера. Я расписал как работает сейчас программа, я не писал что нужно сделать.edm2007 писал(а):изначально по всем адресам записано значение FF
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Re: BASCOM AVR в вопросах и ответах
[uquote="edm2007",url="/forum/viewtopic.php?p=3095994#p3095994"]я не писал что нужно сделать.
[/uquote]
Учитель
Может быть завести еще одну переменную Flag?
Не пинайте сильно.
Поправьте, если не так.
Учитель
Может быть завести еще одну переменную Flag?
Не пинайте сильно.
Код: Выделить всё
Dim S As Eram Byte
Dim Mmode As Byte
Dim Flag As Byte
If Btn = 0 Then
Flag = S
Waitms 500
Flag = Mmode + 1 'инкрементируем
Waitms 500
S = Flag 'сохраняем в S Eram
Waitms 500
Led = 1 'мигаем 1 раз
Waitms 100
Led = 0
Waitms 100
If Flag >= 2 Then 'Сбрасывам в ноль, если Flag больше или равно 2.
Flag = 0
Else 'в противном случае
If Btn = 1 Then 'если кнопку не нажимали
Waitms 500
Flag = S 'считываем раннее записанное значение Mmode (режима)
End If 'конец условия
Wait 3
End If 'конец условия
End If 'конец условия
Do
....
Loop
...
...
'================= О Б Р А Б О Т Ч И К П Р Е Р Ы В А Н И Й ==
'/// ---> ВЫКЛЮЧАЕМ ДХО
Drl_off: 'метка
If Flag = 1 And Turn = 1 Then 'Если выбран Flag=1 и включен поворотник, тогда
Pwm0a = 255 'Включаем ШИМ на полную яркость
Else 'В противном случае, Flag=0 + включен поворотник, тогда
Pwm0a = 0 'Выключаем ШИМ вовсе
End If 'конец условия
Bitwait Turn , Reset 'ждем когда поворотник перестанет мигать
Return 'выходим- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Хе. Давайте с самого начала, режим должен переключаться как? 0 - 1 - 0 - 1? Вы в условии
сбрасываете режим в ноль, но при этом оставляете его в переменной S, хотя это копия режима. Как минимум, должно быть так
Только без Ваших новшеств с флагами...
Код: Выделить всё
If Mmode >= 2 Then 'Сбрасывам в ноль, если Mmode больше или равно 2.
Mmode = 0
Код: Выделить всё
If Mmode >= 2 Then 'Сбрасывам в ноль, если Mmode больше или равно 2.
Mmode = 0
S = Mmode 'сохраняем в S Eram
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Re: BASCOM AVR в вопросах и ответах
[uquote="edm2007",url="/forum/viewtopic.php?p=3097224#p3097224"]сбрасываете режим в ноль, но при этом оставляете его в переменной S, хотя это копия режима. Как минимум, должно быть так
[/uquote]
Спасибо!
Сделал так:
В симуляторе работает просто замечательно
Гляжу в окна AVR Variables и AVR EPROM Memory = Переменные Mmode и S меняются одинаково: 1 и 0; 0 и 1.
Вечером в железе попробую.
Еще раз спасибо, учитель!
Эта строка мне столько крови выпила вы прошлый уик-энд. Да и из головы что-то вылетело условие, что если Mmode = 0 его тоже нужно сохранять.
Урааа!
Код: Выделить всё
If Mmode >= 2 Then 'Сбрасывам в ноль, если Mmode больше или равно 2.
Mmode = 0
S = Mmode 'сохраняем в S Eram
Спасибо!
Сделал так:
Код: Выделить всё
'/// ---> НАСТРОЙКА РЕЖИМА РАБОТЫ
'До подачи питания нажимаем кнопку и держим до тех пор,
'Значение Mmode не изменится
'LED мигнет 1раз сигнализируя о том, что настройка сохранилась
Mmode = S
If Btn = 0 Then
Waitms 500
Mmode = Mmode + 1 'инкрементируем
Waitms 500
S = Mmode 'сохраняем в S Eram
Waitms 500
Led = 1 'мигаем 1 раз
Waitms 100
Led = 0
Waitms 100
If Mmode >= 2 Then 'Сбрасывам в ноль, если Mmode больше или равно 2.
Mmode = 0
S = Mmode ------> 'ВОТ ЭТА СТРОЧКА, из-за которой вся головная боль началась :)
Else 'в противном случае
If Btn = 1 Then 'если кнопку не нажимали
Waitms 500
Mmode = S 'считываем раннее записанное значение Mmode (режима)
End If 'конец условия
Wait 3
End If 'конец условия
End If 'конец условияВ симуляторе работает просто замечательно
Гляжу в окна AVR Variables и AVR EPROM Memory = Переменные Mmode и S меняются одинаково: 1 и 0; 0 и 1.
Вечером в железе попробую.
Еще раз спасибо, учитель!
Эта строка мне столько крови выпила вы прошлый уик-энд. Да и из головы что-то вылетело условие, что если Mmode = 0 его тоже нужно сохранять.
Урааа!
-
rojnov
- Встал на лапы
- Сообщения: 127
- Зарегистрирован: Вс мар 27, 2011 07:48:48
- Откуда: г. Екатеринбург
Re: BASCOM AVR в вопросах и ответах
Приветствую всех, кто не спит, и прошу посильной помощи. Написал малюсенькую, но очень
нужную, программульку, а она не хочет работать, хотя по идее должна была. Задача такая: в
рабочем режиме контакты на входе замкнуты( использую INT0 у Tiny13 на 6 ноге). На выходе МК
(PB.2) стоит оптореле, которое далее по схеме включает силовую часть. Периодичести раз в 2
мин контакты на входе размыкаются на 1 сек, и надо, чтобы выход на эти размыкания не
реагировал. Но если вход разомкнут более чем на 2 сек, устройство на выходе выключается.
Прошу посмотреть свежим взглядом, чего ему не хватает. Собрал на макетке, вместо оптореле
воткнул светодиод.
Добавлено after 9 hours 25 minutes 37 seconds:
Понял, что через Int0 работать не будет. Сделал еще проще. Но светик, вместо того, чтобы
спокойно гореть, очень часто мигает. На размыкание кнопки на входе реакции тоже нет. Пока
думаю.
нужную, программульку, а она не хочет работать, хотя по идее должна была. Задача такая: в
рабочем режиме контакты на входе замкнуты( использую INT0 у Tiny13 на 6 ноге). На выходе МК
(PB.2) стоит оптореле, которое далее по схеме включает силовую часть. Периодичести раз в 2
мин контакты на входе размыкаются на 1 сек, и надо, чтобы выход на эти размыкания не
реагировал. Но если вход разомкнут более чем на 2 сек, устройство на выходе выключается.
Прошу посмотреть свежим взглядом, чего ему не хватает. Собрал на макетке, вместо оптореле
воткнул светодиод.
Код: Выделить всё
$regfile = "attiny13a.dat"
$crystal = 4800000
$hwstack = 8
$swstack = 16
$framesize = 32
Config Pinb.1 = Input
Config Portb.2 = Output
Config Int0 = Falling
On Int0 Pr
Enable Interrupts
Enable Int0
Dim A As Long
Hrom Alias Pinb.1
Rele Alias Portb.2
A = 0 : Reset Rele
Do
If Hrom = 1 Then Incr A
If A = 1200000 Then
Reset Rele
Powerdown
End If
Loop
Pr:
A = 0 : Set Rele
Return
End
Понял, что через Int0 работать не будет. Сделал еще проще. Но светик, вместо того, чтобы
спокойно гореть, очень часто мигает. На размыкание кнопки на входе реакции тоже нет. Пока
думаю.
Код: Выделить всё
$regfile = "attiny13a.dat"
$crystal = 4800000
$hwstack = 8
$swstack = 16
$framesize = 32
Config Pinb.3 = Input
Config Portb.1 = Output
Hrom Alias Pinb.3
Rele Alias Portb.1
Dim A As Long
A = 0 : Reset Rele
Do
If Hrom = 0 Then Set Rele
If Hrom = 1 Then
Incr A
If A = 1200000 Then
Reset Rele : A = 0
End If
End If
Loop
- Gordon Shumway
- Мучитель микросхем
- Сообщения: 486
- Зарегистрирован: Пн авг 20, 2007 21:35:45
- Откуда: Мытищи, Московская область
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
[uquote="rojnov",url="/forum/viewtopic.php?p=3114941#p3114941"]светик, вместо того, чтобы
спокойно гореть, очень часто мигает. На размыкание кнопки на входе реакции тоже нет. Пока
думаю.
If A = 1200000 Then
Reset Rele : A = 0[/uquote]
Ну, логично. Здесь светик должен моргать примерно 4 раза в секунду. При такой тактовой частоте A становится равна 1200000 за 0,25 секунд.
Для решения вашей задачи проще не считать тики на такой частоте, а использовать встроенный таймер для замера времени и считать его переполнения.
2 секунды на частоте 4,8 мгц - это 37 переполнений 8-битного таймера c делителем 1024
Пока Hrom = 0 - светик горит, таймер стоит. На Hrom стал 1 - таймер затикал, переполнения считаются в подпрограмме Incr_a. Стало 37 переполнений - остановили таймер, сбросили А, cбросили Rele. Если На Hrom уже не 1, а A еще не стало 37 - остановили таймер, сбросили А, Rele не трогаем.
Проверить не на чем, но вроде компилится. Проверяйте. Обратите внимание на фузы установки частоты кристалла, так как таймер рассчитывается исходя из этой частоты.
спокойно гореть, очень часто мигает. На размыкание кнопки на входе реакции тоже нет. Пока
думаю.
If A = 1200000 Then
Reset Rele : A = 0[/uquote]
Ну, логично. Здесь светик должен моргать примерно 4 раза в секунду. При такой тактовой частоте A становится равна 1200000 за 0,25 секунд.
Для решения вашей задачи проще не считать тики на такой частоте, а использовать встроенный таймер для замера времени и считать его переполнения.
2 секунды на частоте 4,8 мгц - это 37 переполнений 8-битного таймера c делителем 1024
Код: Выделить всё
$regfile = "attiny13a.dat"
$crystal = 4800000
$hwstack = 8
$swstack = 16
$framesize = 32
Config Pinb.3 = Input
Config Portb.1 = Output
Hrom Alias Pinb.3
Rele Alias Portb.1
Dim A As byte
A = 0 : Reset Rele
Config Timer0 = Timer , Prescale = 1024
Enable Timer0
Enable interrupts
On Timer0 Incr_a
Stop Timer0
Do
If Hrom = 0 Then Set Rele
If Hrom = 1 Then
Start timer0
While Hrom = 1
If A > 37 Then
Stop Timer0
A = 0
Reset Rele
Exit While
End If
Wend
Stop Timer0
A = 0
End If
Loop
Incr_a:
incr a
return
End 'end program
Проверить не на чем, но вроде компилится. Проверяйте. Обратите внимание на фузы установки частоты кристалла, так как таймер рассчитывается исходя из этой частоты.
С уважением,
Алексей.
Алексей.
-
rojnov
- Встал на лапы
- Сообщения: 127
- Зарегистрирован: Вс мар 27, 2011 07:48:48
- Откуда: г. Екатеринбург
Re: BASCOM AVR в вопросах и ответах
Спасибо, вечером попробую. Вообще-то я начинал с использования таймера, но почему-то решил, что проще считать тики МК чем возиться с таймером. В итоге мысль пошла не в ту сторону.
-
rojnov
- Встал на лапы
- Сообщения: 127
- Зарегистрирован: Вс мар 27, 2011 07:48:48
- Откуда: г. Екатеринбург
Re: BASCOM AVR в вопросах и ответах
Добрый вечер всем! Попробовал в железе (на макетке) и ничего не могу понять. По идее, все должно работать. Попробовал на 2-х разных МК: на одном светик горит нормально, на другом- мигает очень часто. Причем на нажатие кнопки на входе оба не реагируют. Специально перепроверил фьюзы - у обоих одинаково. Попробовал в Протеусе - все работает, как надо. Может быть, с камнями что-то не так?
Наверное, буду делать на печатной плате с МК в SO-8. Они точно новые.
Наверное, буду делать на печатной плате с МК в SO-8. Они точно новые.
- Gordon Shumway
- Мучитель микросхем
- Сообщения: 486
- Зарегистрирован: Пн авг 20, 2007 21:35:45
- Откуда: Мытищи, Московская область
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
[uquote="rojnov",url="/forum/viewtopic.php?p=3115510#p3115510"]Попробовал в железе (на макетке) и ничего не могу понять. По идее, все должно работать.[/uquote]
Про сопротивление Pinb.3 на плюс 4,7к не забыли ? Протеусу все равно, а в реальных схемах нужно подтягивать. И емкость 0,1 мкф Pinb.3 на землю. Фузы проверяйте, делитель на 8 должен быть выключен.
Я не знаю что у вас за кнопка, может "звенит". Попробуйте вставить задержку:
Про сопротивление Pinb.3 на плюс 4,7к не забыли ? Протеусу все равно, а в реальных схемах нужно подтягивать. И емкость 0,1 мкф Pinb.3 на землю. Фузы проверяйте, делитель на 8 должен быть выключен.
Я не знаю что у вас за кнопка, может "звенит". Попробуйте вставить задержку:
If Hrom = 1 Then
waitms 200
Start timer0
...
С уважением,
Алексей.
Алексей.
- Tankor
- Встал на лапы
- Сообщения: 139
- Зарегистрирован: Вт май 03, 2011 10:13:12
- Откуда: Россия, Татарстан
Re: BASCOM AVR в вопросах и ответах
Может кто сталкивался с алгоритмами предсказания погоды по изменению давления и влажности? Есть алгоритм Zambretti, но реализация только на php, а я в нём ни бум-бум. Что скажете? Может кто уже делал?
Re: BASCOM AVR в вопросах и ответах
друзья, подскажите кто что может. есть программа, надо управлять режимами одной кнопкой. проблема в том, что по нажатию кнопки возврат из прерывания приходит в самую гущу длинного и долгого цикла и пока он не докрутится - переходов нет. надо каким-то макаром попадать из прерывания кнопки в начало программы. Goto не предлагать - не работает
$Regfile="attiny85.dat"
$Crystal=8000000
$hwstack=40
$swstack=16
$framesize=32
Config Portb.0 = Output 'R
config portb.1 = output 'G
config portb.4 = output 'B
Config PORTB.3 = output 'белый свет
Config PINB.2 = input 'кнопка
Config Int0 = Falling : On INT0 Button
Config Timer1 = Timer , Prescale = 1 : On Timer1 Pwm_prog : Enable Timer1 : Enable Interrupts : start timer1 : Enable Int0
Dim S As Byte , A as Byte , C(3) as byte , B as Byte
B=0
for A=0 to 63 'увеличиваем красный
C(1)=lookup(A , TAB_PWM)
waitms 20
next
Do
if B=1 then goto 1
if B=2 then goto 2
loop
2:
do
If B=2 then
тут длинный и долгий ШИМ для светодиодов
End if
Loop
1:
Do
If B=1 Then
PORTB.0 = 0 : PORTB.1 = 0 : PORTB.4 = 0 : PORTB.3 = 1 'включаем белый свет
End if
Loop
end
Pwm_prog:
Return
Button:
Incr B
waitms 10
if B>2 then B = 0
Return
5
Re: BASCOM AVR в вопросах и ответах
IDok , на мой взгляд программа неправильно написана. Вижу ДВА бесконечных цикла без выхода из них. Бесконечный цикл должен быть один. в нем и крутится основная программа.
Сделайте в нем switch - case по переменной В и будет вам счастье/
Сделайте в нем switch - case по переменной В и будет вам счастье/
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.


