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

Учебный лабораторный комплекс SDK-1.1 на базе микроконтроллера ADuC812 с ядром MCS51 # RS-232C, I2C

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

Сообщение artemon2k » 24 июн 2010, 11:17

если можете то помогите написать прогу. . .
artemon2k
 
Сообщения: 15
Зарегистрирован: 21 июн 2010, 05:28

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

Сообщение Рустам » 24 июн 2010, 12:50

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

PS: таблица целочисленная.
Аватара пользователя
Рустам
 
Сообщения: 164
Зарегистрирован: 27 май 2008, 01:24

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

Сообщение AlexNickolaenkov » 24 июн 2010, 15:59

artemon2k,

На этом месте лично становится интересно откуда у вас такое задание? Потому что наше понимание помощи похоже не поможет вам решить задачу )
Аватара пользователя
AlexNickolaenkov
 
Сообщения: 435
Зарегистрирован: 02 май 2008, 21:40
Откуда: Санкт-Петербург

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

Сообщение artemon2k » 24 июн 2010, 17:03

Я думаю что не буду делать через таблицу.
Вот смотрите я написал. Будет ли она работать?

#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;
}
}
}
}
artemon2k
 
Сообщения: 15
Зарегистрирован: 21 июн 2010, 05:28

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

Сообщение Рустам » 24 июн 2010, 18:42

А почему вы не будете делать через таблицу? Ваш способ вам кажется правильнее/проще/быстрее/надежнее/интереснее/круче/что-то другое? А поповоду вашей программы - что тут думать? Скомпилируйте да запустите. Тут вы и увидите, будет она работать или нет.
Аватара пользователя
Рустам
 
Сообщения: 164
Зарегистрирован: 27 май 2008, 01:24

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

Сообщение artemon2k » 24 июн 2010, 19:52

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

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

Сообщение User239 » 24 июн 2010, 22:43

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

Что ж вы так зациклились на ассемблере? Для чего он здесь нужен?
Что мешает реализовать ту же самую таблицу на C?
User239
 
Сообщения: 45
Зарегистрирован: 23 май 2008, 23:53

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

Сообщение Рустам » 24 июн 2010, 23:57

При чем тут ассемблер? Вы не понимаете, что такое таблица, табличное задание функции? :evil:
Аватара пользователя
Рустам
 
Сообщения: 164
Зарегистрирован: 27 май 2008, 01:24

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

Сообщение AlexNickolaenkov » 25 июн 2010, 07:10

Рустам писал(а):При чем тут ассемблер? Вы не понимаете, что такое таблица, табличное задание функции? :evil:

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

И еще надо код форматировать хотя бы соотв. тэгами. А то так вообще читать сложно.
Аватара пользователя
AlexNickolaenkov
 
Сообщения: 435
Зарегистрирован: 02 май 2008, 21:40
Откуда: Санкт-Петербург

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
[покусано]

Что мешает определить эту таблицу как массив в языке С?
Аватара пользователя
Рустам
 
Сообщения: 164
Зарегистрирован: 27 май 2008, 01:24

Пред.

Вернуться в SDK 1.1

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1