Страница 2 из 2

Re: Помогите пожалуйста СРОЧНО!!!

СообщениеДобавлено: 24 июн 2010, 11:17
artemon2k
если можете то помогите написать прогу. . .

Re: Помогите пожалуйста СРОЧНО!!!

СообщениеДобавлено: 24 июн 2010, 12:50
Рустам
Вы пошли сложным путем. Вот смотрите: вам нужна таблица синуса. Это одна функция. Значит таблицу не нужно менять. Значит таблицу не нужно вообще считать. А где ее считать? На инструментальной машине. Например, в екселе. В программе в контроллере будет уже готовая таблица с заданной формой сигнала (синус, меандр). Значения этой таблицы нужно просто выводить в ЦАП. И никаких расчетов.

PS: таблица целочисленная.

Re: Помогите пожалуйста СРОЧНО!!!

СообщениеДобавлено: 24 июн 2010, 15:59
AlexNickolaenkov
artemon2k,

На этом месте лично становится интересно откуда у вас такое задание? Потому что наше понимание помощи похоже не поможет вам решить задачу )

Re: Помогите пожалуйста СРОЧНО!!!

СообщениеДобавлено: 24 июн 2010, 17:03
artemon2k
Я думаю что не буду делать через таблицу.
Вот смотрите я написал. Будет ли она работать?

#include <aduc812.h> //стандартный заголовочный файл ADuC812
#include <sio.h> // заголовочный файл последовательного канала RS232
#include <dac.h> //заголовочный файл ЦАП
#include <adc.h> //заголовочный файл АЦП
#include <stdio.h> // стандартный заголовочный файл ввода/вывода
static float v[ 2 ] = { 0.0, 0.0 };

void putchar( char c ) { wsio( c ); }
char getchar( void ) { return rsio(); }


void makeSineTable (unsignet char n_dac) // генерация синуса
{
int i;
float t;
for (i=0; i<=255; i++)
{
t = ( sin(((4294967296/256)* i * (2 * 3.1415926 / 4294967296)) - (1.47)) + 1) * 127;
n_dac = t;
n_dac++;
};
set_voltage( v[ n_dac ], n_dac ); //Подача нужного напряжения на один из каналов ЦАП
printf_fast_f( "Set DAC%d, U = %.1fV \r\n", n_dac, v[ n_dac ] );
return;
};

void makeSquareTable (char n_dac) //генерация прямоуголного напряжения
{
char i;

for (i=0; i<=127; i++)
{
n_dac = 0;
n_dac++;
};
for (i=0; i<=127; i++)
{
n_dac = 255;
n_dac++;
};
set_voltage( v[ n_dac ], n_dac ); //Подача нужного напряжения на один из каналов ЦАП
printf_fast_f( "Set DAC%d, U = %.1fV \r\n", n_dac, v[ n_dac ] );
return;
};

void makeTriangleWaveformTable (char n_dac) // генерация треугольного напряжения
{
char i;

for (i=0; i<=127; i++)
{
n_dac = 2*i;
n_dac++;
};
for (i=0; i<=127; i++)
{
n_dac = 255 - 2*i;
n_dac++;
};
set_voltage( v[ n_dac ], n_dac ); //Подача нужного напряжения на один из каналов ЦАП
printf_fast_f( "Set DAC%d, U = %.1fV \r\n", n_dac, v[ n_dac ] );
return;
};

void makeSawWaveformTable (char n_dac) // генерация пилы
{
int i;

for (i=0; i<=255; i++)
{
n_dac = i;
n_dac++;
};
set_voltage( v[ n_dac ], n_dac ); //Подача нужного напряжения на один из каналов ЦАП
printf_fast_f( "Set DAC%d, U = %.1fV \r\n", n_dac, v[ n_dac ] );
return;
};



void main( void )
{


init_sio( S9600 ); // инициализация последовательного канала RS232
init_dac( _8BIT ); // Инициализация ЦАП режим (_8BIT)



switch_dac( DAC0, ON ); // Включение/выключение канала ЦАП.
switch_dac( DAC1, ON ); // Включение/выключение канала ЦАП.


printf_fast_f( "Gener & ADC\r\n" );


type("1 - sin, DAC0\r\n");
type("2 - Square, DAC0\r\n");
type("3 - Trianglee, DAC1\r\n");
type("4 - Saw, DAC1\r\n");


while( 1 )
{
if( rsiostat() )
{
c = rsio();

switch( c )
{
case '1': makeSineTable( DAC0 ); break;
case '2': makeSquareTable( DAC0 ); break;
case '3': makeTriangleWaveformTable( DAC1 ); break;
case '4': makeSawWaveformTable ( DAC1 ); break;



default: type("\r\n"); break;
}
}
}
}

Re: Помогите пожалуйста СРОЧНО!!!

СообщениеДобавлено: 24 июн 2010, 18:42
Рустам
А почему вы не будете делать через таблицу? Ваш способ вам кажется правильнее/проще/быстрее/надежнее/интереснее/круче/что-то другое? А поповоду вашей программы - что тут думать? Скомпилируйте да запустите. Тут вы и увидите, будет она работать или нет.

Re: Помогите пожалуйста СРОЧНО!!!

СообщениеДобавлено: 24 июн 2010, 19:52
artemon2k
Что на счет таблице. я вам так отвечу. Я просто не знаю как подовать с таблицы в ЦАП. Да и у меня нет не одной проги написаной на ассемблере. хотябы для примера. А делать ассемблеровскую вставку в Си я думаю нет смысла. вот и все. я знаю что через таблицы можно подовать любые сигналы. А у меня только определенные. ну мне этого хватит. Главное чтобы прога которую я сделал правильно работала.

Re: Помогите пожалуйста СРОЧНО!!!

СообщениеДобавлено: 24 июн 2010, 22:43
User239
artemon2k писал(а):Что на счет таблице. я вам так отвечу. Я просто не знаю как подовать с таблицы в ЦАП. Да и у меня нет не одной проги написаной на ассемблере. хотябы для примера. А делать ассемблеровскую вставку в Си я думаю нет смысла. вот и все.

Что ж вы так зациклились на ассемблере? Для чего он здесь нужен?
Что мешает реализовать ту же самую таблицу на C?

Re: Помогите пожалуйста СРОЧНО!!!

СообщениеДобавлено: 24 июн 2010, 23:57
Рустам
При чем тут ассемблер? Вы не понимаете, что такое таблица, табличное задание функции? :evil:

Re: Помогите пожалуйста СРОЧНО!!!

СообщениеДобавлено: 25 июн 2010, 07:10
AlexNickolaenkov
Рустам писал(а):При чем тут ассемблер? Вы не понимаете, что такое таблица, табличное задание функции? :evil:

Поэтому мне не понятно кто дал такое задание :-) Это все равно что мучать котенка.

И еще надо код форматировать хотя бы соотв. тэгами. А то так вообще читать сложно.

Re: Помогите пожалуйста СРОЧНО!!!

СообщениеДобавлено: 25 июн 2010, 09:33
Рустам
artemon2k писал(а):если делать через таблицу то там надо писать на ассемблеровском коде. а я не одну прогу не видел готовую на ассемблеровском коде для цап.
сами таблицы я нашел. а что и как с ней делать я не знаю.
; А эта та самая таблица
Sinus: .DB 64,65,67,68,70,72,73,75
.DB 76,78,79,81,82,84,85,87
[покусано]

Что мешает определить эту таблицу как массив в языке С?