Вопросы и ответы по написанию программ

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 21
Зарегистрирован: Пт ноя 27, 2009 12:09:06

Сообщение САША1987 »

Помогите написать программу в CVAVR на mega128. Программа должна принимать 32 импульса с периодом 20 мкс, и присваивать соответствующим переменным значения этих импульсов (0 или 1). пробовал через массивы не получается. за ранее СПАСИБО
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай

Сообщение Danko »

для мега128 программ никогда не писал, тем более для такой задачи ресурсов мега128 будет недостаточно. Минимум нужно Четырехядерный Пеньтиум, а про тактовую частоту и говорить боюсь.

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

unsigned char i, x[32];

for (i=0; i<32; i++) {
  x[i]=PINB.0;
  delay_us(20);
}
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

я пытался на Core 2 Duo 2.8 ГГц. не получилось..... :cry: :cry: :cry:
Ставим плюсы: )
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 21
Зарегистрирован: Пт ноя 27, 2009 12:09:06

Сообщение САША1987 »

спасибо. может я не совсем правиьлно выразился (я только начинаю с МК). но задача моя состоит в следующем:
на вход МК поступают синхроимпульсы, 32 импульса по 1-му проводу (СИ) (всегда 1 с периодом 20 мкс, 32 шт.), по 2-му просто импульсы (ИМП) (тоже только 1,), но межимпульснй интервал разный. длительность импульсов 10 мкс, импульсы синхронны(рис.ris1 ниже)
мне надо пропустить дальше в схему 15 - 28 импульсы если:
1)1,8 импульсы = 1;
2)2-7 импульсы =0;
3)30, 31 импульсы =0;
4)количество единиц поступающих по 2-му проводу не четное;
5)количество СИ должно быть строго 32 шт.
Почти месяц мучаюсь.

Была идея сделать массив, каждой переменой массива присваивать значение соответствующего импульса, а исходя из полностью заполненного массива выполнять условия 1,2,3,4,5!
Вложения
ris1.jpg
(19.97 КБ) 395 скачиваний
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Сообщение Барсик »

Курсовик? Интересно, почему выбрана такая ломовая мега для решения такой пустяковой задачки?
А в чём прблема то, в заполнении массива или в формировании выходных импульсов?
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай

Сообщение Danko »

во первых синхроимпульсы заведи на внешнее прерывание (по переднему фронту).

При возникновении прерывания читай данные из пина с информационными импульсами и загоняй их в массив.
Контактная информация:
Реклама
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 21
Зарегистрирован: Пт ноя 27, 2009 12:09:06

Сообщение САША1987 »

Только мега 128 потому-что это только % эдак 10. Спасибо! так и делал, но проблема с записью в массив, мне кажется там ошибка ( пишет ошибку),но, не могу найти!
можешь начало проги написать, для CVAVR.
Вымогатель припоя
Аватара пользователя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина

Сообщение Negor »

А может автор покажет свой листинг и текст ошибки? Ну чтоб мы не подумали что автор хочет чтоб мы всё за него(автора) сделали. Это так-мысли вслух.
Контактная информация:
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 21
Зарегистрирован: Пт ноя 27, 2009 12:09:06

Сообщение САША1987 »

Вот текст:

/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.7 beta 5 Professional
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 27.11.2009
Author : F4CG
Company : F4CG
Comments:


Chip type : ATmega128
Program type : Application
Clock frequency : 8,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 1024
*****************************************************/

#include <mega128>
#include <stdio>
// Declare your global variables here
unsigned char a2[4][8], b=PINB.4, c=PINB.3
bit a=TOV1; //4р порта B принимает СИ, 3р порта В принимает только положительные импульсы
void initialization(void)
{

// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Port E initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTE=0x00;
DDRE=0x00;

// Port F initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTF=0x00;
DDRF=0x00;

// Port G initialization
// Func4=In Func3=In Func2=In Func1=In Func0=In
// State4=T State3=T State2=T State1=T State0=T
PORTG=0x00;
DDRG=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
ASSR=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// OC1C output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x02;
TCNT1H=0xFE;
TCNT1L=0xFE;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// Timer/Counter 3 initialization
// Clock source: System Clock
// Clock value: Timer 3 Stopped
// Mode: Normal top=FFFFh
// Noise Canceler: Off
// Input Capture on Falling Edge
// OC3A output: Discon.
// OC3B output: Discon.
// OC3C output: Discon.
// Timer 3 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR3A=0x00;
TCCR3B=0x00;
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;
OCR3CH=0x00;
OCR3CL=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
// INT3: Off
// INT4: Off
// INT5: Off
// INT6: Off
// INT7: Off
EICRA=0x00;
EICRB=0x00;
EIMSK=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x20;
ETIMSK=0x20;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
}
void main (void)

{

{
if (a==1)
{a[0][0]=!(b-c);}
_delay_us(19);
if (a==1)
{a[0][1]=!(b-c);}
_delay_us(19);
if (a==1)
{a[0][2]=!(b-c);}
_delay_us(19);
if (a==1)
{a[0][3]=!(b-c);}
_delay_us(19);
if (a==1)
{a[0][4]=!(b-c);}
_delay_us(19);
if (a==1)
{a[0][5]=!(b-c);}
_delay_us(19);
if (a==1)
{a[0][6]=!(b-c);}
_delay_us(19);
if (a==1)
{a[0][7]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][0]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][1]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][2]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][3]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][4]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][5]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][6]=!(b-c);}
_delay_us(19);
if (a==1)
{a[1][7]=!(b-c);}
_delay_us(19);
if (a==1)
{a[2][0]=!(b-c);}
_delay_us(19);
if (TOV1==1)
{a[2][1]=!(b-c);}
_delay_us(19);
if (a==1)
{a[2][2]=!(b-c);}
_delay_us(19);
if (a==1)
{a[2][3]=!(b-c);}
_delay_us(19);
if (a==1)
{a[2][4]=!(b-c);}
_delay_us(19);
if (a==1)
{a[2][5]=!(b-c);}
_delay_us(19);
if (a==1)
{a[2][6]=!(b-c);}
_delay_us(19);
if (a==1)
{a[2][7]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][0]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][1]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][2]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][3]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][4]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][5]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][6]=!(b-c);}
_delay_us(19);
if (a==1)
{a[3][7]=!(b-c);}
_delay_us(19);
}
}
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 21
Зарегистрирован: Пт ноя 27, 2009 12:09:06

Сообщение САША1987 »

или еще тоже немножко по другому:


#include <mega128>
#include <stdio>
#include <math>

flash bit b, c, a, x[4][8];
void init (void)
{
DDRB=0x00;
PORTB=0x00;
TCCR1A=0x00;
TCCR1B=0x02;
TCNT1H=0xFE;
TCNT1L=0xFE;
TIMSK=0x20;
ETIMSK=0x20;
}

void main (void)
{
b=PINB.4;
c=PINB.3
a=TOV1;
if (a==1)
{x[0][0]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][1]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][2]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][3]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][4]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][5]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][6]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][7]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][0]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][1]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][2]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][3]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][4]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][5]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][6]=!(b-c);}
_delay_us(19);
if (a==1)
{x[1][7]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][0]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][1]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][2]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][3]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][4]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][5]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][6]=!(b-c);}
_delay_us(19);
if (a==1)
{x[2][7]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][0]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][1]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][2]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][3]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][4]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][5]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][6]=!(b-c);}
_delay_us(19);
if (a==1)
{x[3][7]=!(b-c);}
_delay_us(89);

}
Аlex

Сообщение Аlex »

Какой ужассс..... :cry:
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай

Сообщение Danko »

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

flash bit b, c, a, x[4][8];
если ты объявляешь flash, что ты при это имеешь ввиду?

главная функция main выполняется один раз, вот по этому в ней и организовывают "вечный" цикл

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

while (1) {}
возможно в других языках функции прописанные по тексту выше main и выполняются, но в Си это не так.

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

void init (void) {
...
}
у тебя никогда не выполнится

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

void main (void)
{
b=PINB.4;
c=PINB.3
a=TOV1;
if (a==1)
{x[0][0]=!(b-c);}
_delay_us(19);
if (a==1)
{x[0][1]=!(b-c);}
_delay_us(19);
и через 19 мкСек и через час у b и c будут одни и теже значения присвоенные в начале

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

b=PINB.4;
c=PINB.3
это не макроподстановка

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

#define b PINB.4
#define c PINB.3
при этом b и c это уже не переменные.
Контактная информация:
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 21
Зарегистрирован: Пт ноя 27, 2009 12:09:06

Сообщение САША1987 »

Спасибо! Вроде начинаю понимать.
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Сб окт 31, 2009 12:34:44

Сообщение Qwertty »

САША1987 писал(а):Только мега 128 потому-что это только % эдак 10. Спасибо! так и делал, но проблема с записью в массив, мне кажется там ошибка ( пишет ошибку),но, не могу найти!
можешь начало проги написать, для CVAVR.
Зачем массивы то? 32 бита прекрасно помещаются в unsigned long. Или в uint32_t по стандарту С99. Я уже с трудом вспоминаю разрядности стандартных типов так привык к новому стандарту языка.
Так что в тексте uint32_t - unsigned long, uint8_t unsigned char
И биты я нумерую с 0 по 31-ый :)
Итак прием:

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



#define DATA_PIN PINB
#define DATA_INPUT PB3
// дефайны от фонаря :)

volatile uint16_t RxData;		// сюда положим принятые данные. Если старший бит=1, то данные помещены в буфер



ISR(vector по фронту на тактовом входе) // это синтаксис GCC, замените на CV самостоятельно
{
static unsigned long RxBuf = 0; 	// приемный буфер
uint8_t  tmp;
	RxData <<= 1;
	if(DATA_PIN  & (1<<DATA_INPUT>> 24);		// старший байт
	if(tmp & 0x3E) return; 		// проверяем биты 1-6 на 0, если не 0 в буфере туфта 
	if((tmp & 0x81) != 0x81) return; 	// проверка 0 и 7-го бита, если не 1 - в буфере туфта
	tmp =(uint8_t)( RxBuf); 		// получим младший байт
	if(tmp & 0x03) return; 		// проверяем 30 и 31 бит, если не 0 в буфере туфта
// если дошли до сюда - в буфере валидный пакет 
	RxData = ((RxBuf >> 4) & 0x3FFF) | 0x8000; // поместим биты 14-27 в RxData, сбросив незначащие и установив старший бит
	RxBuf = 0; // необязательно, тут явно протокол с самосинхронизацией
}

int16_t main(void)
{
// настройки всякие переферии
// необходимо настроить любое прерывание по фронту тактового сигнала

	sei();
	while(1)
		{
		if(RxData |= 0)
			{
			// собственно тут чего то делаем не забыв сбросить старший бит в RxData
			// по окончании обработки RxData = 0;
			// в идеале это лучше сделать сразу, предварительно скопировав RxData в какую нибудь
			// локальную переменную запретив прерывания на время копирования
			}

		}

}
Это методика выделения из сплошного битового потока данных по шаблону. Не требует счетчика бит и позволяет восстановить синхронизацию при сбоях. В Вашем случае явно используется именно такой метод передачи - с шаблонами. В общем примерно так, если нигде не накосячил - писал "вживую" не проверяя. :)

Блин, чего то криво отображается код.
Вложу как txt
Вложения
otvet.txt
Неиспорченный форумом ответ
(2.34 КБ) 198 скачиваний
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 21
Зарегистрирован: Пт ноя 27, 2009 12:09:06

Сообщение САША1987 »

пробовал еще так все равно ошибки!

#include <mega128>
#define f PINB.5
#use_delay

// Declare your global variables here
unsigned char c, b, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, x32;
void init (void)
{
DDRB=0x00;
PORTB=0x00;
TCCR1A=0x00;
TCCR1B=0x02;
TCNT1H=0xFE;
TCNT1L=0xFE;
TIMSK=0x20;
ETIMSK=0x20;
}
void main(void)
{
while (1)
{
b=PINB.4, c=PINB.3;
if (f==1)
{x1=~(b-c);
}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x2=~(b-c);
}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x3=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x4=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x5=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x6=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x7=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x8=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x9=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x10=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x11=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x12=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x13=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x14=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x15=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x16=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x17=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x18=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x19=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x20=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x21=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x22=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x23=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x24=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x25=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x26=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x27=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x28=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x29=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x30=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x31=~(b-c);}
delay_us(19);
b=PINB.4, c=PINB.3;
if (f==1)
{x32=~(b-c);}
delay_us(89);


}
}
Друг Кота
Аватара пользователя
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Сообщение Барсик »

САША1987, прикрепляйте, пожалуйста, тексты своих программ в виде файлов. А то движок форума искажает текст программ...
Модератор
Аватара пользователя
Сообщения: 11169
Зарегистрирован: Чт окт 27, 2005 18:50:07
Откуда: из мест не столь отдалённых

Сообщение Сэр Мурр »

САША1987 Переоформите свои посты. Кнопка "правка" поможет это сделать.
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 21
Зарегистрирован: Пт ноя 27, 2009 12:09:06

Сообщение САША1987 »

Может кто-то объяснит мне, как написать программу в том виде как я предлагаю? Я просто по другому не понимаю, пока-что. Спасибо за ранее, а закончить надо уже в середине следующей недели.
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Сб окт 31, 2009 12:34:44

Сообщение Qwertty »

САША1987 писал(а):Может кто-то объяснит мне, как написать программу в том виде как я предлагаю? Я просто по другому не понимаю, пока-что. Спасибо за ранее, а закончить надо уже в середине следующей недели.
А в каком виде Вы предлагаете??? Начните не с кода, а с алгоритма. Рспишите НА БУМАГЕ что, куда, зачем и как. Переложить готовый алгоритм на С займет не более 5 минут.
Кстати - что это за протокол? Кто этот сигнал производит? Эти посылки идут без пауз?
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница

Сообщение urry »

(C) Мыши плакали, кололись, но продолжали есть кактус...
В том виде, как Вы написали, программа неработоспособная полностью.
Смотрите, импульсы могут придти в любой момент, а не тогда, когда Вы запустили программу на исполнение. Второе - задержки по 19 микросекунд - Вы считаете, что выполнение кода анализа вообще не занимает время ? Теперь, если Вы даже правильно поймали первые пару импульсов, ошибка отсчета времени будет накапливаться.
Синхронизироваться нужно по каждому импульсу, поэтому. как правильно заметил Qwertty тактовые подаем на вход внешнего прерывания, который перед этим сконфигурим по rising - по нарастающему фронту.
Без вариантов.
Контактная информация:
Закрыто

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