 |
|
|
|
| Автор |
Сообщение |
AVL Знатный посетитель (>20)


Зарегистрирован: 20.09.2006 Сообщения: 52 Откуда: Коломыя UA
|
Добавлено: 20 Дек 2006, 11:54 Заголовок сообщения: Прерывание таймера."мгновенное" срабатывание (AVR) |
|
|
"Отрезано с темы Микроконтроллеры начинающим"
Здравствуйте!
У меня свежая непонятка.
Вот моя програмка. В Протерусе работает без проблем.
А в жизни НЕТ.
А именно. Суть задачи. Выставить автоматически после старта на пару секунд на РВ3,4 ноль, а на РВ1,2 единицу, а затем реверс навсегда.
Так вот, в жизни у меня этих пару секунд нет. Практически сразу устанавливается реверс и всё.
И это ещё не все проблемы.
Я использую Kanda Systems STK200+/300 программатор.
Так вот если я програмирую RSTDISBL=1, то программер это уже чип не видит. Тогда я переписываю чип ОМЕГОЙ и всё опять нормально видится Kanda Systems STK200+/300.
Так и должно с этим программером?
| Код: |
/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.8d Professional
Automatic Program Generator
© Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project : SRS imitator
Version :
Date : 30.11.2006
Author :AVL
Company :AVL
Comments:èìèòèðóåò èñïðàâíóþ ðàáîòó ëàìï÷êè àèðáåãà.
Ïèíû 2,3 è 6,7 ðàáîòàþò â ïðîòèâîôàçå.
Chip type : Tiny15
Clock frequency : 1,600000 MHz
Memory model : Tiny
External SRAM size : 0
Data Stack size : 32
*****************************************************/
#include <Tiny15.h>
unsigned char sc;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0x55;
if (sc > 0xaa)
PORTB=0b011001;
else
sc=sc+1;
}
void main(void)
{
PORTB=0b000111;
DDRB=0b011111;
TCCR0=0x04;
TCNT0=0x22;
GIMSK=0x00;
MCUCR=0x00;
TIMSK=0x02;
ACSR=0x80;
#asm("sei")
while (1);
}
|
|
|
| Вернуться к началу |
|
 |
AndryG Модератор
Зарегистрирован: 24.07.2006 Сообщения: 411 Откуда: Helios-3
|
Добавлено: 20 Дек 2006, 12:14 Заголовок сообщения: |
|
|
"практически нет" значит есть, но мало. Скорее всего намудрили с фьюзами установки частоты внутреннего генератора.
1.6 МГц ... Я не знаю этого чипа .. Вы используете внешний кварц?
Попробуйте задержку поставить, не две. а 8-16 секунд и поситайте - так заметнее будет время переключения и посчитайте на какой частоте у вас завелся контроллер... а вообще просмотрите фьюзы и доку по ним в даташите.
_________________ AndryG |
|
| Вернуться к началу |
|
 |
AVL Знатный посетитель (>20)


Зарегистрирован: 20.09.2006 Сообщения: 52 Откуда: Коломыя UA
|
Добавлено: 20 Дек 2006, 15:09 Заголовок сообщения: |
|
|
Да, задержка есть, Но если она в Протерусе порядка 2-3 секунд, то в жизни она еле уловима глазом.
И это при том, что я на максимум ставил эти параметры:
TCNT0=0x01;
if (sc > 0xFA);
В Протерусе я вообще не дождался срабатывания при ТАКИХ параметрах.
Так-что дело думаю не в тактовом генераторе. Ну пускай там 10 секунд, а там одна, если я ошибся с тактовой. Это максимальная ошибка, но задержки в жизни почти нет. На глаз, 0.2 сек задержка. Может это и не задержка вовсе.... а время релаксации после сброса?
|
|
| Вернуться к началу |
|
 |
AndryG Модератор
Зарегистрирован: 24.07.2006 Сообщения: 411 Откуда: Helios-3
|
Добавлено: 20 Дек 2006, 15:58 Заголовок сообщения: |
|
|
Измените немного код
| Код: |
if (sc > 0xaa)
PORTB=0b011001;
НА
if (sc > 0xaa)
PORTB ^= 0b00000110;
|
Выводы будут переключаться и вы увидите как часто у вас срабатывает этот кусок кода.
CVAVR, если не ошибаюсь, не поддерживает ATTiny15...
Время в Протеусе отслеживаете по ЕГО часам ... так ведь, а не по текущему времени.
Приведите расчеты, как Вы расчитывали время? делитель, число перегрузки и т.д. ... может и ошибка всплывет?
_________________ AndryG |
|
| Вернуться к началу |
|
 |
AVL Знатный посетитель (>20)


Зарегистрирован: 20.09.2006 Сообщения: 52 Откуда: Коломыя UA
|
Добавлено: 20 Дек 2006, 16:56 Заголовок сообщения: |
|
|
"CVAVR, если не ошибаюсь, не поддерживает ATTiny15... "
Программатор поддерживает, а вот компилятор нет. Но кое-как работало у меня раньше, правда, и на более сложных задачах, правда. там я таймер не использовал. Но ведь Протерус нормально же работает.... Или я чего недопонимаю... А в чём тогда писать программу для Атини15? На Си, конэчно.
"Время в Протеусе отслеживаете по ЕГО часам ... так ведь, а не по текущему времени. "
Да, согласен, но хоть бы на пол секунды задержало, что б видно глазомы было, при МАКСИМАЛЬНЫХ задержках.
"Приведите расчеты, как Вы расчитывали время? делитель, число перегрузки и т.д. ... может и ошибка всплывет?"
Расчётов, увы нет никаких. На гляз. Написал, зашил, проверил, изменил, С этого девайса "стрелять" не буду. Задержка не критичеа, плюс/минус пол секунды.
Какой софт поддерживает написание программ для Аттини15 на Си?.
|
|
| Вернуться к началу |
|
 |
AVL Знатный посетитель (>20)


Зарегистрирован: 20.09.2006 Сообщения: 52 Откуда: Коломыя UA
|
Добавлено: 28 Дек 2006, 20:15 Заголовок сообщения: |
|
|
У меня непонятка.
пишу так:
________________________________________________________
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0xfa;
PORTB=PORTB+1;
____________________________________________________________
и всё отлично работает. Идёт инкремент порта В с частотой зависящей от этого параметра "TCNT0=0xfa;"
Когда я пишу это:
_________________________________________________
unsigned char sc=0;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0xfa;
if (sc > 0xFF)
PORTB=0b011001;
else
sc=sc+1;
______________________________________________
То порт В сразу стаёт в PORTB=0b011001; в не зависимости от того if (sc > 0xFF) или if (sc < 0xFF) и в независимости от установок TCNT0=0xfa;.
Почему? Есть подозрение у меня, что ЭТО от того, что я использую КОДЕВИДИН АВР в котором нет Атини15, а пробую ввё это на именно этом процессоре.... Чем для Атини 15 можно работать?
|
|
| Вернуться к началу |
|
 |
AndryG Модератор
Зарегистрирован: 24.07.2006 Сообщения: 411 Откуда: Helios-3
|
Добавлено: 29 Дек 2006, 12:11 Заголовок сообщения: |
|
|
AVL
В втором куске обратите внимание на две строки:
| Код: |
unsigned char sc=0;
&
if (sc > 0xFF)
|
В Сети есть много безобидных кусочков ппрограмм, которые сводят с ума компилятор CodeVision. Так-как Вы не выложили Asm-файл, то можно предполагать, почему у Вас не работает.
Измените разрядность sc или сравнивайте с меньшим числом.
А еще лучше - прицепите к своему сообщению проект CV или асм-файл.
_________________ AndryG |
|
| Вернуться к началу |
|
 |
AVL Знатный посетитель (>20)


Зарегистрирован: 20.09.2006 Сообщения: 52 Откуда: Коломыя UA
|
Добавлено: 29 Дек 2006, 20:49 Заголовок сообщения: |
|
|
/*********************************************
This program was produced by the
CodeWizardAVR V1.23.6a Standard
Date : 28.12.2006
Author : AVL
Chip type : ATtiny15
*********************************************/
#include <Tiny15.h>
unsigned char sc=5;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0x10;
if (sc > 0xF0)
PORTB=PORTB+1;
else
sc=sc+1;
}
void main(void)
{
PORTB=0x3f;
DDRB=0x3f;
TCCR0=0x05;
TCNT0=0xfa;
GIMSK=0x00;
MCUCR=0x00;
TIMSK=0x02;
// Watchdog Timer initialization
// Watchdog Timer Prescaler: OSC/16
//WDTCR=0x08;
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
};
}
Выкладываю полный текст программы, ибо аттач не атТачится почему-то. Цепляю rar архив и не цепляется
В этом примере, в жизни, идёт инкремент порта СРАЗУ после ресета. Период красиво реагирует на изменение этого параметра: TCNT0=0x10;
А вот на строку if (sc > 0xF0) нет никакой реакции, что там "больше" что " меньше" ставлю - без разницы - моментальный инкремент порта сразу после ресета, повторюсь.
| Описание: |
|
 Файлообменник |
| Название файла: |
1.rar |
| Размер файла: |
243.4 KB |
| Скачено: |
162 раз(а) |
| Описание: |
|
 Файлообменник |
| Название файла: |
1.rar |
| Размер файла: |
243.4 KB |
| Скачено: |
109 раз(а) |
| Описание: |
|
 Файлообменник |
| Название файла: |
1.rar |
| Размер файла: |
243.4 KB |
| Скачено: |
112 раз(а) |
|
|
| Вернуться к началу |
|
 |
AVL Знатный посетитель (>20)


Зарегистрирован: 20.09.2006 Сообщения: 52 Откуда: Коломыя UA
|
Добавлено: 29 Дек 2006, 20:54 Заголовок сообщения: |
|
|
Прицепилось, одначе ))
Получилось, блин
Ещё момент, на самом "быстром" пине PORTB.0 период виден даже глазом (где-то четверть секунды). Это я к тому, что если б прога работала нормально, то колебания должны были б начинаться хотяю секунд через 15-20, а тут сразу мигать порт начинает, и что это не непонятка с установкой частоты тактирования процессора. а что-то другое, мне, так-сказать, неведомое.
|
|
| Вернуться к началу |
|
 |
AVL Знатный посетитель (>20)


Зарегистрирован: 20.09.2006 Сообщения: 52 Откуда: Коломыя UA
|
Добавлено: 29 Дек 2006, 21:09 Заголовок сообщения: |
|
|
СТОП!!!
Разобрался сам.
Тут была собака зарыта.
У меня была написано
unsigned char sc=5;
а надобыло:
unsigned char sc=0x05;
Отсюда вопрос к специалистам.
Если написать так unsigned char sc=5;, то какое значение принимает переменная в ХЕКС или БИН? 5 это что получается, что с ним компилятор не хотел работать?
Спасибо за поддержку!
|
|
| Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете добавлять вложения в этом форуме Вы можете просматривать вложения в этом форуме
|
|