Atmega8.Помогите отследить сигнал и переключить релюшки

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Ahoiet6
Родился
Сообщения: 4
Зарегистрирован: Чт сен 01, 2011 20:22:33

Atmega8.Помогите отследить сигнал и переключить релюшки

Сообщение Ahoiet6 »

На выводы PD0-PD4 подаются сигналы низкого уровня с МС AN6884

#define IN0 PIND.0 // Сигнал -15dB
#define IN1 PIND.1 // Сигнал -9dB
#define IN2 PIND.2 // Сигнал -3dB
#define IN3 PIND.3 // Сигнал 0dB
#define IN4 PIND.4 // Сигнал +3dB


К выводам PC0-PC4 подключена мс ULN2003 (для коммутации реле).Чтобы ею управлять,необходим высокий уровень на выходе.

#define U0 PORTC.0 // 160В
#define U1 PORTC.1 // 175В
#define U2 PORTC.2 // 190В
#define U3 PORTC.3 // 205В
#define U4 PORTC.4 // 220В

На вход AN6884 подается аудиосигнал

Необходимо сделать так,чтобы при отсутствии сигналов на входах PD0-PD4 на выходах PC0-PC4 были низкие уровни
При 0 на входе PD0 на выводах PC0-PC4 были высокие уровни
При 0 на входе PD1 на выходах PC1-PC4 были высокие уровни
При 0 на входе PD2 на выходах PC2-PC4 были высокие уровни
При 0 на входе PD3 на выходах PC3-PC4 были высокие уровни
При 0 на входе PD4 на выходе PC4 был высокий уровень



Код: Выделить всё

/*****************************************************

Project :

Chip type           : ATmega8


*****************************************************/

#include <mega8.h>

#include <delay.h>

 

void Init(void)

// Функция инициализации контроллера

{

  PORTB=0x00;DDRB=0x00;    PORTC=0x00;DDRC=0x1F;    PORTD=0x1F;DDRD=0x00;

 
  // Timer/Counter 0

  TCCR0=0x00; TCNT0=0x00;

  // Timer/Counter 1

  TCCR1A=0x00;TCCR1B=0x00;TCNT1H=0x00;TCNT1L=0x00;ICR1H=0x00;ICR1L=0x00;OCR1AH=0x00;OCR1AL=0x00;OCR1BH=0x00;OCR1BL=0x00;

  // Timer/Counter 2

  ASSR=0x00;TCCR2=0x00;TCNT2=0x00;OCR2=0x00;
 
  // External Interrupt(s)

  // INT0: Off

  // INT1: Off

  MCUCR=0x00;
 
  // Timer(s)/Counter(s) Interrupt(s)

  TIMSK=0x00;
   
  // Analog Comparator

  ACSR=0x80;SFIOR=0x00;

}

 

#define IN0  PIND.0   // Сигнал -15dB
#define IN1  PIND.1   // Сигнал -9dB
#define IN2  PIND.2   // Сигнал -3dB
#define IN3  PIND.3   // Сигнал 0dB
#define IN4  PIND.4   // Сигнал +3dB

// Выходы (индикация)

#define U0 PORTC.0    // 160В
#define U1 PORTC.1    // 175В
#define U2 PORTC.2    // 190В
#define U3 PORTC.3    // 205В     
#define U4 PORTC.4    // 220В

 

//----------


void main(void)

{


  Init(); // Инициализация контроллера

  // Основной цикл

 start: while (!(IN0))

  {     
        U0=0;
        U1=1;
        U2=1;
        U3=1;
        U4=1;
  }
 
 
  while ((!IN1))

  {
        U0=0;
        U1=0;
        U2=1;
        U3=1;
        U4=1;
 
  }
  while ((!IN2))

  {     
        U0=0;
        U1=0;
        U2=0;
        U3=1;
        U4=1;
  }
  while ((!IN3))

  {
        U0=0;
        U1=0;
        U2=0;
        U3=0;
        U4=1;
  }           
  while ((!IN4))

  {     U1=0;
        U2=0;
        U3=0;
        U4=0;
  }
  goto start;
 
}

 
Ahoiet6
Родился
Сообщения: 4
Зарегистрирован: Чт сен 01, 2011 20:22:33

Re: Atmega8.Помогите отследить сигнал и переключить релюшки

Сообщение Ahoiet6 »

При подачи питания,на выводах PC0-PC4 низкие уровни,как и хотелось бы.
А при подачи сигнала,единица появляется на PC2-PC4,как бы минуя 0-й и 1-ый пин

Код: Выделить всё

void main(void)

{


  Init(); // Инициализация контроллера

  // Основной цикл


 while (IN0)

  {     
        U0=1;
        U1=1;
        U2=1;
        U3=1;
        U4=1;
        delay_ms(100);
  }
 
 
  while (IN1)

  {
        U0=0;
        U1=0;
        U2=1;
        U3=1;
        U4=1;
        delay_ms(100);
 
  }

  while (IN2)

  {     
        U0=0;
        U1=0;
        U2=0;
        U3=1;
        U4=1;
        delay_ms(100);
  }
   
  while (IN3)

  {
        U0=0;
        U1=0;
        U2=0;
        U3=0;
        U4=1;
        delay_ms(100);
  }           

  while (IN4)

  {     U1=0;
        U2=0;
        U3=0;
        U4=0;
        delay_ms(100);
  }
 
}


При достижении максимального уровня сигнала(низкого уровня на PD4) на выходе низкие уровни.Что необходимо написать,чтобы отслеживать постоянное изменение входного сигнала
Ahoiet6
Родился
Сообщения: 4
Зарегистрирован: Чт сен 01, 2011 20:22:33

Re: Atmega8.Помогите отследить сигнал и переключить релюшки

Сообщение Ahoiet6 »

Голова не варит уже
Вот так вроде бы нормально,отслеживает входные сигналы,доходит до последнего и останавливается.
Как возобновить проверку и сделать постоянные изменения выходных сигналов,отнносительно входных

Код: Выделить всё

void main(void)

{


  Init(); // Инициализация контроллера

  // Основной цикл


 while (IN0)

  {     
        U0=1;
        U1=1;
        U2=1;
        U3=1;
        U4=1;
        delay_ms(100);
        PORTC=0xFF;
  }
 
 
  while (IN1)

  {
        U0=0;
        U1=1;
        U2=1;
        U3=1;
        U4=1;
        delay_ms(100);
       

  }

  while (IN2)

  {     
        U0=0;
        U1=0;
        U2=1;
        U3=1;
        U4=1;
        delay_ms(100);
       
  }
   
  while (IN3)

  {
        U0=0;
        U1=0;
        U2=0;
        U3=1;
        U4=1;
        delay_ms(100);
       
  }           

  while (IN4)

  {     U1=0;
        U2=0;
        U3=0;
        U4=1;
        delay_ms(100);

  }
 
}
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: Atmega8.Помогите отследить сигнал и переключить релюшки

Сообщение Satyr »

Накой тут МК ?
на 1-2 корпусах примитивной дискретной логики делается.
Ahoiet6
Родился
Сообщения: 4
Зарегистрирован: Чт сен 01, 2011 20:22:33

Re: Atmega8.Помогите отследить сигнал и переключить релюшки

Сообщение Ahoiet6 »

Прошу извинить,несмотря на стоимость меги они у меня есть на руках,а с логикой сложнее...
Мне не пренципиально на чем оно будет работать,главное чтобы РАБОТАЛО
Я о логике вспомнил,когда уже плату вытравил.
Зато на меге со временем будет возможность добавить новые функции.Я это планировал,но пока достаточно будет и этого.
Объясните пожалуйста,что тут еще прикрутить нужно к программе
spkostenko7
Родился
Сообщения: 8
Зарегистрирован: Вс июл 17, 2011 21:37:48

Re: Atmega8.Помогите отследить сигнал и переключить релюшки

Сообщение spkostenko7 »

Почему Вы не поставити в начале вашего цикла команду
While (1)
{
// здесмь ваша программа

}

и все будет зациклено, опрос и вывод будет постоянный.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»