Помогите переделать исходник в CVAVR. не пойму половины..

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Artos
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка
Контактная информация:

Помогите переделать исходник в CVAVR. не пойму половины..

Сообщение Artos »

Здравствуйте уважаемые Коты :)
Помогите мне пожалуйста либо переделать код в CVAVR либо помочь с разьяснением...
Половины не пойму.. Я только начинающий программист и работаю пока только в одном компиляторе.

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



#include <iotiny2313.h>
#include <inavr.h>

#define bit(n)     (1<<n)
#define Set(m,n)   (m|=bit(n))
#define Clr(m,n)   (m&=~bit(n))
#define b_CDATA    4  // PB4
#define b_CCLK     7  // PB7
#define b_LATCH    5  // PB5
#define SetCDATA   Set(PORTB,b_CDATA)
#define ClrCDATA   Clr(PORTB,b_CDATA)
#define SetLATCH   Set(PORTB,b_LATCH)
#define ClrLATCH   Clr(PORTB,b_LATCH)
#define SetCCLK    Set(PORTB,b_CCLK)
#define ClrCCLK    Clr(PORTB,b_CCLK)
#define CCLK       {SetCCLK;ClrCCLK;}
#define b_Mute     0  // PA0
#define b_Reset    1  // PA1
#define SetMute    Set(PORTA,b_Mute)
#define ClrMute    Clr(PORTA,b_Mute)
#define SetReset   Clr(PORTA,b_Reset)
#define ClrReset   Set(PORTA,b_Reset)

#define Mask1      0x7f
#define Mask2      0x0f

unsigned int Old=0;

void SPI(unsigned int Data)
{ unsigned int mask=0x8000;
  char i;
  for (i=0;i<16;i++)
  {
    if (Data & mask) SetCDATA;
    else ClrCDATA;
    CCLK;
    mask>>=1;
  }
  ClrCDATA;
}

void out(unsigned int Data)
{unsigned int t=0;
  if (Data & bit(8))  Set(t,12); // Data Format PCM / External DF
  if (Data & bit(9))  Set(t,10); // Output Format 0
  if (Data & bit(10)) Set(t,11); // Output Format 1
  if (Data & bit(11)) Set(t,8); // PCM Sample Rate 0
  if (Data & bit(12)) Set(t,9); // PCM Sample Rate 1
  if (Data & bit(13)) Set(t,4); // PCM/EF Serial Data Format 0
  if (Data & bit(14)) Set(t,5); // PCM/EF Serial Data Format 1
  if (Data & bit(2))  Set(t,2); // PCM/EF Serial Data Width 0
  if (Data & bit(3))  Set(t,3); // PCM/EF Serial Data Width 1
  ClrLATCH;
  SPI(t);
  SetLATCH;
  t=1;
  if (Data & bit(0)) Set(t,9); // MCLK Mode 0
  if (Data & bit(1)) Set(t,10); // MCLK Mode 1
  ClrLATCH;
  SPI(t);
  SetLATCH;
}

void main( void )
{ unsigned int t;
  unsigned char x,y;
  PORTD=0xff;
  PORTB=0x7c;
  PORTA=3;
  DDRB=0xb0;
  DDRD=0;
  DDRA=3;
  SetReset;
  for(t=0;t<10000;t++);
  ClrReset;
  for(t=0;t<10000;t++);
//  for(;;)
//  {
   SetMute;
   x=PIND;
   y=PINB;
   t=((Mask1 & x)<<8) + (Mask2 & y);
   out(t);
   ClrMute;
//   for(x=0;x<20;x++);
//  }
  MCUCR|=bit(SM0);
  __sleep();
}

svd71
Открыл глаза
Сообщения: 41
Зарегистрирован: Вс фев 06, 2011 16:18:39

Re: Помогите переделать исходник в CVAVR. не пойму половины.

Сообщение svd71 »

1. стоило 20 топиков создавать?
2. Переделать подо что? под микропаскаль?
3. что конкретно не понятно?
4. Если ты решил и дальше в кодевижен колупаться, то Гугль рулит.
[url=http:///]:-)[/url]
Artos
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка
Контактная информация:

Re: Помогите переделать исходник в CVAVR. не пойму половины.

Сообщение Artos »

Здравствуйте, вчера при создании темы. Глекнул толи форум толи компьютер... по этому куча тем.. Удалите пожалуйста те лишние.

Мне надо код этот адаптировать под Code Vision.
Так как Win AVR и AVR studio я не понимаю...=( У них синтаксис отличается...
Либо помогите прокомментировать этот исходник, что да как делает..
Книга по Code Vision уже есть, спасибо за ссылки=)
Мне в этом исходнике много чего не понятно, например где условие обработки джамперов переключения режимов?
В Code Vision все просто.

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

if (PINB.0==0){
PORTB.1=1;
} else {
PORTB.1=0;
}

// или так :

#define RESET_ACT PINB.0

if (RESET_ACT==0){
PORTB.1=1;
} else{
PORTB.1=0;
}
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Помогите переделать исходник в CVAVR. не пойму половины.

Сообщение pyzhman »

2Artos: в программном деле проще новую программу написать, нежели старую перелопачивать. Вы бы написали, что вам надо, вам бы, может быть, и помогли. Или написали вам. Походу вам курсовой писать со связью по SPI... Если так, то вы не первый.
Docendo discimus
Artos
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка
Контактная информация:

Re: Помогите переделать исходник в CVAVR. не пойму половины.

Сообщение Artos »

> Походу вам курсовой писать со связью по SPI... Если так, то вы не первый.

Нет , Вы ошибаетесь..
Я хочу написать программу для конфигуратора ЦАП ( Более усовершенствованную в плане управления. Добавить Авто сканирование цифрового входа у меня есть уже алгоритм для этой реализации ), но я никогда не работал с SPI, и I2C... Работал с LCD именно вывод значений при каком нибудь событии и т.д., с периферией I/O , но более сложные кода я плохо понимаю... Я только несколько месяцев как начал изучать программирование МК AVR.
Только учусь программированию, а пример кода есть только вот такой. Этот код, это конфигуратор ЦАП AD1955 У меня ЦАПа собрана на этой микросхеме, уже второй год слушаю, но хочу переделать МК управление, добавить функционал..
Я думаю не сложно перевести команды под другой компилятор, всетаки язык Си.
Если бы я лучше понимал язык Си то с легкостью переделал бы код :) Или даже написал бы в этом компиляторе.
Artos
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка
Контактная информация:

Re: Помогите переделать исходник в CVAVR. не пойму половины.

Сообщение Artos »

> в программном деле проще новую программу написать

Я это знаю, но это справедливо при условии хорошего понимания алгоритма для выполнения нужной задачи.
Artos
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка
Контактная информация:

Re: Помогите переделать исходник в CVAVR. не пойму половины.

Сообщение Artos »

Вот например сваять какой нибудь код, для автоматического управления и коммутации, например: промышленные автоматические насосы, всяки импульсные счетчики с применением Индикаторов LED , где нет этих протоколов I2C, SPI, 1WIRE и т.д. могу сделать, но вот эти протоколы меня путают.....
И книгу уже читал, и вроди понимаю как работает, но как это программно реализовать х.з.=(
svd71
Открыл глаза
Сообщения: 41
Зарегистрирован: Вс фев 06, 2011 16:18:39

Re: Помогите переделать исходник в CVAVR. не пойму половины.

Сообщение svd71 »

а эту кто писал? раз SPI работает на B, значит джамперы повешены на D. чтение регистра здесь x=PIND. Примечательно другое: выполнив один цикл в main(), контроллер засыпает и просыпается только по ресету. Например в WinAvr и AVRStudio после выполнения main() автоматически добавляется бесконичный цикл, едакая защита он дурака. как в CV, не знаю, но наверное тоже что то преусмотрели.
[url=http:///]:-)[/url]
Аватара пользователя
adrenocrome
Потрогал лапой паяльник
Сообщения: 365
Зарегистрирован: Вт окт 21, 2008 15:03:06
Откуда: moscow
Контактная информация:

Re: Помогите переделать исходник в CVAVR. не пойму половины.

Сообщение adrenocrome »

А в каких местах кодвижн ругается?
Чую, что вот всю эту кучку дефайнов в начале он не переваривает.
А код по сути то примитивен.
Самое простое - это заменить в теле программы все конструкции из дефайнов

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

#define bit(n)     (1<<n)
#define Set(m,n)   (m|=bit(n))
#define SetCDATA   Set(PORTB,b_CDATA)

на что-то типа

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

PORTB|=1<<b_CDATA


Ну я бы так сделал для начала. А потом уже и красоту можно наводить.
День прошёл, а ты всё жив
Artos
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка
Контактная информация:

Re: Помогите переделать исходник в CVAVR. не пойму половины.

Сообщение Artos »

Здравствуйте!
Закинул код в компилятор.
Выскочило 19 ошибок
и 3 ворнинга

Сейчас попробую подмарафетить :)

ошибка №1

unsigned int Old=0;

2) void SPI(unsigned int Data)

3) if (Data & mask) SetCDATA;

4) void out(unsigned int Data)

потом тут куча ошибок :)

if (Data & bit(8)) Set(t,12); // Data Format PCM / External DF
if (Data & bit(9)) Set(t,10); // Output Format 0
if (Data & bit(10)) Set(t,11); // Output Format 1
if (Data & bit(11)) Set(t,8); // PCM Sample Rate 0
if (Data & bit(12)) Set(t,9); // PCM Sample Rate 1
if (Data & bit(13)) Set(t,4); // PCM/EF Serial Data Format 0
if (Data & bit(14)) Set(t,5); // PCM/EF Serial Data Format 1
if (Data & bit(2)) Set(t,2); // PCM/EF Serial Data Width 0
if (Data & bit(3)) Set(t,3); // PCM/EF Serial Data Width 1

и последняя __sleep();

Вы более, опытные в программировании , помогите мне.
Я конечно сейчас что смогу подправлю...
Artos
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка
Контактная информация:

Re: Помогите переделать исходник в CVAVR. не пойму половины.

Сообщение Artos »

#define bit(n) (1<<n)
#define Set(m,n) (m|=bit(n))
#define Clr(m,n) (m&=~bit(n))
#define b_CDATA 4 // PB4
#define b_CCLK 7 // PB7
#define b_LATCH 5 // PB5
#define SetCDATA Set(PORTB,b_CDATA)
#define ClrCDATA Clr(PORTB,b_CDATA)
#define SetLATCH Set(PORTB,b_LATCH)
#define ClrLATCH Clr(PORTB,b_LATCH)
#define SetCCLK Set(PORTB,b_CCLK)
#define ClrCCLK Clr(PORTB,b_CCLK)
#define CCLK {SetCCLK;ClrCCLK;}
#define b_Mute 0 // PA0
#define b_Reset 1 // PA1
#define SetMute Set(PORTA,b_Mute)
#define ClrMute Clr(PORTA,b_Mute)
#define SetReset Clr(PORTA,b_Reset)
#define ClrReset Set(PORTA,b_Reset)



На эти дефайны вроди не ругается но кажется мне что не так в CVAVR должно быть...
Artos
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка
Контактная информация:

Re: Помогите переделать исходник в CVAVR. не пойму половины.

Сообщение Artos »

> а эту кто писал? раз SPI работает на B

Писал очень хороший человек с вегалаба, Алексей зовут.
Там он и выкладывал исходник.
Но это не такой код как у меня в ЦАПе в контроллере зашитый, я просто хочу понять как инициализировать SPI как отправить данные при включении устройства, чтоб ЦАП сконфигурировался, ну а меню я потом создам какое захочу, у меня сама трудность в SPI ...
это для этой ЦАПы, вот ссылка: http://www.analog.com/static/imported-f ... AD1955.pdf

PS Звучит я Вам скажу очень хорошо.Я такого звука еще не слышал ни от одной внешней звуковой карты!
Artos
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка
Контактная информация:

Re: Помогите переделать исходник в CVAVR. не пойму половины.

Сообщение Artos »

> едакая защита он дурака.

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

0b01010101;
0b11110010;

Как разобраться в полярности SPI? какие данные сначало выплевывать от LSB к MSB? или на оборот? я не нашел в даташите на AD1955 этой информации...
Может плохо смотрю... а по графикам я не понимаю... =((
Artos
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка
Контактная информация:

Re: Помогите переделать исходник в CVAVR. не пойму половины.

Сообщение Artos »

> раз SPI работает на B, значит джамперы повешены на D.

Разжуйте мне дураку комментами где что выполняется... Вам же чего это стоит? 5 минут времени..
Я знаю от туда, что сейчас не сложный код создаю за 5-15 минут. Чего раньше не сделал бы и за час...
мне главное знать.

например:

если на пине таком то "0" {

выполнить такое действие (я так понимаю здесь должен SPI отправлять код в ЦАП)
}


Вот я сегодня написал кусок чуваку в мопед, иммитация ментовской сирены :)

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

to_hell:
   delay_ms(150);

while (1)
      {
      // Place your code here
       //1.2.3.4
   if (PINB.3==0){
   PORTB.1=0;
   PORTB.2=0;

   if(PINB.3==0){
   flags++;
   delay_ms(300);
   if (flags==2){flags=0;}
   while (PINB.3==0);
   }}
   if(flags==1){
   for (x=0;x<2;x++){
   if(flags==0){
   goto to_hell;
   }
   PORTB.1=1;
   delay_ms(500);
   if (PINB.3==0){
   PORTB.1=0;
   PORTB.2=0;

   if(PINB.3==0){
   flags=0;
   while (PINB.3==0);
   }}

   PORTB.1=0;
   delay_ms(500);
   if (PINB.3==0){
   PORTB.1=0;
   PORTB.2=0;

   if(PINB.3==0){
   flags=0;
   while (PINB.3==0);
   }}
   if(flags==0){
   goto to_hell;
   }
   }
    for (y=0;y<2;y++){
   PORTB.2=1;
   delay_ms(500);
   if(flags==0){
   goto to_hell;
   }


   if (PINB.3==0){
   PORTB.1=0;
   PORTB.2=0;

   if(PINB.3==0){
   flags=0;
   while (PINB.3==0);
   }}
   if(flags==0){
   goto to_hell;
   }

   PORTB.2=0;
   delay_ms(500);


   if (PINB.3==0){
   PORTB.1=0;
   PORTB.2=0;

   if(PINB.3==0){
   flags=0;
   while (PINB.3==0);
   }}
   if(flags==0){
   goto to_hell;
   }
   }}



      };
}
Artos
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка
Контактная информация:

Re: Помогите переделать исходник в CVAVR. не пойму половины.

Сообщение Artos »

Я понимаю что тут происходит отправка данных в зависимости как сконфигурированы джамперы, но не более того....
Я плохо знаю Си (несколько месяцев работаю в CVAVR . Раньше не имел представления как работает программа, и с цифрой не дружил вовсе..), и когда мне встречаются не знакомые слова и команды я сразу путаюсь....



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

void out(unsigned int Data)
{unsigned int t=0;
  if (Data & bit(8))  Set(t,12); // Data Format PCM / External DF
  if (Data & bit(9))  Set(t,10); // Output Format 0
  if (Data & bit(10)) Set(t,11); // Output Format 1
  if (Data & bit(11)) Set(t,8); // PCM Sample Rate 0
  if (Data & bit(12)) Set(t,9); // PCM Sample Rate 1
  if (Data & bit(13)) Set(t,4); // PCM/EF Serial Data Format 0
  if (Data & bit(14)) Set(t,5); // PCM/EF Serial Data Format 1
  if (Data & bit(2))  Set(t,2); // PCM/EF Serial Data Width 0
  if (Data & bit(3))  Set(t,3); // PCM/EF Serial Data Width 1
  ClrLATCH;
  SPI(t);
  SetLATCH;
  t=1;
  if (Data & bit(0)) Set(t,9); // MCLK Mode 0
  if (Data & bit(1)) Set(t,10); // MCLK Mode 1
  ClrLATCH;
  SPI(t);
  SetLATCH;
}
Аватара пользователя
adrenocrome
Потрогал лапой паяльник
Сообщения: 365
Зарегистрирован: Вт окт 21, 2008 15:03:06
Откуда: moscow
Контактная информация:

Re: Помогите переделать исходник в CVAVR. не пойму половины.

Сообщение adrenocrome »

Заменил как я советовал?
Слова там вовсе даже не незнакомые. Стандартных нет таких команд, это макросы, которые в дефайнах определены.

Вот в этой строчке например проверяется равенство еденице 8-го бита в переменной data. Если это так, то в переменной t устанавливаем единицу в бит 12

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

if (Data & bit(8))  Set(t,12); // Data Format PCM / External DF

Потому как в начале определены макросы

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

#define bit(n)     (1<<n)
#define Set(m,n)   (m|=bit(n))

Соответственно можно написать как-то так. По крайней мере не ругается кодвижн.

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

if (Data & (1<<8))  t|=1<<12; // Data Format PCM / External DF

И ошибки лучше картинкой выкладывай.
День прошёл, а ты всё жив
Artos
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка
Контактная информация:

Re: Помогите переделать исходник в CVAVR. не пойму половины.

Сообщение Artos »

Здравствуйте! Спасибо Вам огромное за помощь :) Я сегодня попробую переделать код потом отпишусь.

> Заменил как я советовал?

Заголовочные файлы заменил, остальное нет..
Artos
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка
Контактная информация:

Re: Помогите переделать исходник в CVAVR. не пойму половины.

Сообщение Artos »

Доброй ночи уважаемые!
Вот выкладываю фото ошибок. Не получается переделать так как Вы советовали, выдает ошибку...
Вложения
ошибки.png
(58.78 КБ) 485 скачиваний
Artos
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт мар 04, 2011 13:06:42
Откуда: Украина, Ахтырка
Контактная информация:

Re: Помогите переделать исходник в CVAVR. не пойму половины.

Сообщение Artos »

Ругается на Data..
где его обьявить?

после главной функции?
как int ?

или глобально обьявить?
Аватара пользователя
adrenocrome
Потрогал лапой паяльник
Сообщения: 365
Зарегистрирован: Вт окт 21, 2008 15:03:06
Откуда: moscow
Контактная информация:

Re: Помогите переделать исходник в CVAVR. не пойму половины.

Сообщение adrenocrome »

Вот, лови в прицепе.
Вроде бы все макросы кодвижн проглотил.
Но что делать с командой "sleep" я в душе не знаю -)
Вложения
configurator.c
(2.31 КБ) 198 скачиваний
День прошёл, а ты всё жив
Закрыто

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