Вы ошибаетесь уважаемый. У меня код другой. Попроще.unalex писал(а):проект взят отсюда
CodeVision AVR в вопросах и ответах
Re: CodeVision AVR в вопросах и ответах
- Реклама
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: CodeVision AVR в вопросах и ответах
а я разве об этом не писал?Aid1992 писал(а):sprintf(lcd_buffer,"t%u=%.2f\xdfC",++i,temp);
unalex писал(а):как все нормальные люди выводят
Код:
float temp;
printf ("temp= %4.2f", temp, " градусов\n");
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Re: CodeVision AVR в вопросах и ответах
Ну понимаете, я въехал не сразуunalex писал(а):а я разве об этом не писал?
Re: CodeVision AVR в вопросах и ответах
Суть в чем, внешнее прерывание по спаду запускает таймер потом настраиваю прерывание по фронту, при срабатывании прерывания по фронту считываю значение счетного регистра таймера но что то делаю не правильно в протеусе смотрю вот код обработчика,почему не работает вот это?
Код: Выделить всё
//MCUCR&=0b11111100;
//MCUCR|=0b00000010;//прерывание INT0 по спадуКод: Выделить всё
// Place your code here
if (flag==front)//если прерывание по фроту
{
T=TCNT1-3;//считать значение периода обращения
if(uoz>T)
{TCNT1=0;//обнулить таймер
OCR1A=uoz-T;
OCR1B=OCR1A+n;
}
send=1;//флаг отправки периода
if(uoz<T)
{
TCCR1B=stop;//остаовить таймер
TCNT1=0;//обнулить таймер
spark=0;//сброс искры
}
flag=spad;
MCUCR=MCUCR-1;//этот код работает ниже которйы закомментирован нет
//MCUCR&=0b11111100;
//MCUCR|=0b00000010;//прерывание INT0 по спаду
red_led=0; //красный светодиод погасить индикация того что ВМТ
}
else //если прерывание по спаду
{
TCCR1B=start;//запустить таймер
flag=front;
MCUCR=MCUCR+1;//этот код работает ниже которйы закомментирован нет
//MCUCR&=0b11111100;
//MCUCR|=0b00000011;//прерывание INT0 по фронту
OCR1A=uoz;
OCR1B=uoz+n;
red_led=1; //красный светодиод зажечь индикация того что до ВМТ осталось 30 градусов
} Re: CodeVision AVR в вопросах и ответах
А Вы останавливаете таймер перед считыванием? Вообще-то, можно использовать для таких целей Input Capture.
Этот пост оказался полезен? Не поленись, нажми
слева!

Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
слева!Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
- Реклама
- Сериг
- Это не хвост, это антенна
- Сообщения: 1451
- Зарегистрирован: Пт фев 19, 2010 19:39:28
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
Всем мяу!
подскажите,работаю с оператором switch(решил попробовать,удобная штука),написал простую программу,но светодиоды отказываются моргать...В чем может быть дело?
Спасибо за помощь!
подскажите,работаю с оператором switch(решил попробовать,удобная штука),написал простую программу,но светодиоды отказываются моргать...В чем может быть дело?
Спойлер
Код: Выделить всё
#include <mega8.h>
#include <delay.h>
unsigned char ABC;
void main(void)
{
switch (ABC){
case 1:
PORTD = 0b10000000;
break;
case 2:
PORTD = 0b11000000;
break;
case 3:
PORTD = 0b11100000;
break;
case 4:
PORTD = 0b11110000;
break;
case 5:
PORTD = 0b11111000;
break;
case 6:
PORTD = 0b11111100;
break;
case 7:
PORTD = 0b11111110;
break;
case 8:
PORTD = 0b11111111;
break;
}
PORTD=0x00;
DDRD=0xFF;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
while (1)
{
for (ABC = 0; ABC < 8; ABC++){
delay_ms(1000);
};
};
}
Последний раз редактировалось Gudd-Head Чт апр 11, 2013 10:02:31, всего редактировалось 1 раз.
Причина: Нарушение п.2.5 Правил Форума
Причина: Нарушение п.2.5 Правил Форума
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
свич засунуть под вайл. А-то он однократно выполняется. И даже до настройки портов.
Docendo discimus
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: CodeVision AVR в вопросах и ответах
В том что switch выполняется до того как ABC меняется и к тому же выполняется только один раз. Это нужно делать в "вечном" цикле.
«И всё-таки она вертится!»
- Сериг
- Это не хвост, это антенна
- Сообщения: 1451
- Зарегистрирован: Пт фев 19, 2010 19:39:28
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
спасибо,пошел пробовать!
А еще такой вопрос,как организовать выполнение куска программы определенное кол-во раз?
с помощью цикла "for"?Или имеются другие варианты?
А еще такой вопрос,как организовать выполнение куска программы определенное кол-во раз?
с помощью цикла "for"?Или имеются другие варианты?
Последний раз редактировалось Gudd-Head Чт апр 11, 2013 10:04:15, всего редактировалось 1 раз.
Причина: Нарушение п.2.2 Правил Форума
Причина: Нарушение п.2.2 Правил Форума
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: CodeVision AVR в вопросах и ответах
если значения ABC идут подряд - проще использовать табличную выборкуСериг писал(а):работаю с оператором switch(решил попробовать,удобная штука)
Код: Выделить всё
flash char table[8]={0x80,0xC0....};
......
PORTD = table[ABC-1];
while, for, if-gotoкак организовать выполнение куска программы определенное кол-во раз?
Re: CodeVision AVR в вопросах и ответах
нет таймер не останавливаю дело не в том в протеусе все работает нормальо это по таймеру а вот перенастройка прерывания не хочет выполятся так как хотелось бы я про*Trigger* писал(а):А Вы останавливаете таймер перед считыванием? Вообще-то, можно использовать для таких целей Input Capture.
Код: Выделить всё
MCUCR=MCUCR-1;//это работает
//MCUCR&=0b11111100;//это нет
//MCUCR|=0b00000010;//прерывание INT0 по спаду
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
dimka86 , а не пробовали смотреть что происходит с регистрами в это время и подумать как нужно правильно сделать?
Вообще я не заметил в коде где у вас включается само прерывание int0, может в этом дело?
Ps, лучше сразу выкладывать весь код, чтобы другие коты могли посмотреть и попробовать что у вас там не работает.
Вообще я не заметил в коде где у вас включается само прерывание int0, может в этом дело?
Ps, лучше сразу выкладывать весь код, чтобы другие коты могли посмотреть и попробовать что у вас там не работает.
Re: CodeVision AVR в вопросах и ответах
код обработчика прерывания выше я вот с каким вопросам
или я не прав ошибка именно в этом я увере на 100%
подскажите еще один момен имнется строка char str1[7] перемеая чтоб ее сделать пустой подойдет такой метод то есть записать символ коца строки или надо кака то в цикле?
Код: Выделить всё
MCUCR&=0b11111100;//устанавливает в ноль 0,1 разряды остальные не изменяются
MCUCR|=0b00000011;//устаавливает в 1 разряды 0,1 остальные не меняет
или я не прав ошибка именно в этом я увере на 100%
подскажите еще один момен имнется строка char str1[7] перемеая чтоб ее сделать пустой подойдет такой метод
Код: Выделить всё
str1[0]='\0';
Последний раз редактировалось dimka86 Чт апр 11, 2013 13:07:55, всего редактировалось 2 раза.
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
верноdimka86 писал(а):устанавливает в ноль 0,1 разряды остальные не изменяются
верно, не ошибсяdimka86 писал(а):устаавливает в 1 разряды 0,1 остальные не меняет
подойдет.dimka86 писал(а):перемеая чтоб ее сделать пустой подойдет такой метод
Ставим плюсы: )
Re: CodeVision AVR в вопросах и ответах
ibiza11спасибо буду пробовать
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
dimka86, повторяю для невнимательных - выложи полный код, потом можно будет обсуждать его.
Я не про обработку прерывания, а про разрешение самого прерывания. Флаг прерывания может и устанавливается, но прерывание не происходит вот я о чем.
Я не про обработку прерывания, а про разрешение самого прерывания. Флаг прерывания может и устанавливается, но прерывание не происходит вот я о чем.
Re: CodeVision AVR в вопросах и ответах
vitalik_1984 спасибо за участие я разобрался все в протэусе заработало
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Ну и что же там было? Просто разрывает любопытство, а язык немой оказался. 
Re: CodeVision AVR в вопросах и ответах
vitalik_1984 изачально прерывание настроено так
просто устанавливаю или сбрасываю нолевой разряд MCUCR если вам нужна моя бредятена не доведенная до ума напишите в личку, я както выложил длинный листинг получил предупреждение
Код: Выделить всё
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: On
// INT1 Mode: Rising Edge
GICR|=0xC0;
MCUCR=0x0E;
GIFR=0xC0;
а так я меняю настройку
MCUCR&=0b11111110;//по спаду
а так
MCUCR|=0b00000001;//прерывание INT0 по фронту
Re: CodeVision AVR в вопросах и ответах
Подскажите как можно реализовать функцию: не могу придумать как произвести арифметические действия с массивом такого типа: 1234.5678 обработать нужно так: 12+(34.5678/60) подталкните в какую сторону капать?


