Вторник, 23.04.2024, 22:44
Микроконтроллерная техника AVR
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Микроконтроллеры » Вопросы по МК » Не работает инкремент
Не работает инкремент
AlexonusДата: Воскресенье, 26.09.2010, 20:12 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 4
Репутация: 0
Статус: Offline
Вот код:
Code

/*****************************************************  
This program was produced by the  
CodeWizardAVR V2.03.9 Evaluation  
Automatic Program Generator  
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.  
http://www.hpinfotech.com  
   
Project :   
Version :   
Date    : 31.08.2009  
Author  : Freeware, for evaluation and non-commercial use only  
Company :   
Comments:   
   
   
Chip type               : ATmega8  
Program type            : Application  
AVR Core Clock frequency: 8,000000 MHz  
Memory model            : Small  
External RAM size       : 0  
Data Stack size         : 256  
*****************************************************/  
   
#include <mega8.h>   
#include <delay.h>   
#define FIRST_ADC_INPUT 0   
#define LAST_ADC_INPUT 0   
#define SET_B(x) |= (1<<x)   
#define CLR_B(x) &=~(1<<x)   
unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];   
#define ADC_VREF_TYPE 0x20   
unsigned int count,count1,count2,m,i;  
interrupt [ADC_INT] void adc_isr(void) //стандартное прерывание по ADC от CVAVR   
{   
static unsigned char input_index=0;   
// Read the 8 most significant bits   
// of the AD conversion result   
adc_data[input_index]=ADCH;   
// Select next ADC input   
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))   
input_index=0;   
ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index;   
// Delay needed for the stabilization of the ADC input voltage   
delay_us(10);   
// Start the AD conversion   
ADCSRA|=0x40;   
}   
void main(void)   
{   
count=0;  
count1=0;  
count2=0;  
m=0;  
   
PORTB=0x00;   
DDRB=0xFF;   
   
PORTD=0x00;  
DDRD=0xFC;  
PORTB = 0b11111111;  
   
ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff);   
ADCSRA=0xCC;   
#asm("sei")   
delay_ms(200);  
while (1)   
{   
   
if (PIND.0==0) {count2=count2+1;while(PIND.0==0){};}  
if (count2==2) {  
   
   
   
PORTD SET_B(7);  
count=count+1;  
delay_ms(50);  
   
if (count==1) {while (PIND.1==1) {PORTB = 0b00000000;}}   
   
if (count==2) {while (PIND.1==1) {PORTB = 0b00000001;}}  
   
if (count==3) {count=0;}  
   
count1=count1+1;  
   
count2=0;  
PORTB = 0b11111111;  
PORTD CLR_B(7);  
};  
   
   
};   
}  

Не включается условие count==2 Работает только при count==1

Тестил в (Шпроте) там все нормально

Может что то с Ватчдогом , надо юзать?

Пробывал reset (1)

АЦП может как то влиять ?

 
HiSERДата: Понедельник, 27.09.2010, 00:35 | Сообщение # 2
Продвинутый автор!
Группа: Проверенные
Сообщений: 254
Репутация: 11
Статус: Offline
во первых что должен делать этот код?
во вторых почему ты уверен что он не работает?
в третьих причем тут WTD...
в четвертых ADC тут не мешает.
в пятых почему тип данных count, count1, count2 int?
 
AlexonusДата: Понедельник, 27.09.2010, 08:55 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 4
Репутация: 0
Статус: Offline
Quote (HiSER)
во первых что должен делать этот код?
во вторых почему ты уверен что он не работает?
в третьих причем тут WTD...
в четвертых ADC тут не мешает.
в пятых почему тип данных count, count1, count2 int?

1.Ацп реализована для дальнейших нужд. Программа работать должна следующим образом:
На пинд.0 идут импульсы(нажатия кнопки). После двух импульсов и ИНКРЕМЕНТА выполняется сравнивание и выполнение по включению светодиода
2.Я уже пробывал и на кейсах , тоже самое. В Шпроте работает а в реале не совсем правильно. Включается только при коунт==1
в коунт==2 ваще не заходит.
3. Согласен. Он не включен при компиляции. Но в (Шпроте) в настройках микрухи он включен (0) по умолчанию.
4.Скорее всего ДА
5. Так захотелось. Или это ошибка?

 
HiSERДата: Понедельник, 27.09.2010, 21:30 | Сообщение # 4
Продвинутый автор!
Группа: Проверенные
Сообщений: 254
Репутация: 11
Статус: Offline
1. Нужны все ноги ADC? Покажи схему и напиши не как ты реализовал, а как должно быть...
2. Проблема может быть и не только в коде...
3. Если WTD будет включен то без сброса таймера у МК будет постоянно срабатывать RESET.
4.
5. unsigned char 8bit (0-255), unsigned int 16bit (0-65535), за чем занимать 2 байта в памяти если 1 за глаза?
 
AlexonusДата: Вторник, 05.10.2010, 17:57 | Сообщение # 5
Рядовой
Группа: Пользователи
Сообщений: 4
Репутация: 0
Статус: Offline
вот схема http://www.fayloobmennik.net/146986 пароль12345
 
HiSERДата: Среда, 06.10.2010, 12:25 | Сообщение # 6
Продвинутый автор!
Группа: Проверенные
Сообщений: 254
Репутация: 11
Статус: Offline
На вопрос как должно работать это устройство, ты так и не ответил.
 
AlexonusДата: Среда, 06.10.2010, 21:20 | Сообщение # 7
Рядовой
Группа: Пользователи
Сообщений: 4
Репутация: 0
Статус: Offline
Там все очень просто. Нажимаем на кнопку Старт два раза ,срабатывает условие 1 далее другой кнопкой сбрасываем бесконечный цикл. и когда еще разок нажимаем на Старт два раза. ТО должно уже включится второе условие. но оно не включается. Я не трогаю Ватчдог. Но похоже что МК в этих вставках с бесконечным циклом сбрасывает мне мои перименные счетчики.
 
Форум » Микроконтроллеры » Вопросы по МК » Не работает инкремент
  • Страница 1 из 1
  • 1
Поиск:

Хостинг от uCoz