реклама на сайте
подробности

 
 
> использование АЦП на AT91SAM7S256, функция "блинкера" от положения переменного резистора
alexan300
сообщение Nov 19 2009, 19:39
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 128
Регистрация: 17-03-08
Пользователь №: 35 988



Здравствуйте уажаемые господа!
наверно многие читали мои "крик души" в теме " как прошить AT91SAM7S256". Данное дело получило логическое развитие, а именно сеичас интерес мои к даннои плате все возрастает и вопросов соответвенно все больше. Усиленно изучаю книгу "Карнигана и Ричи", но как то тяжело перенести Си команды на использование их в МК. Но ладго, это лирическое отсупление.
имею следующий код, компилирумый без ошибок, но с 3 предупреждениями.
Код
#include "AT91SAM7S64.h"
#include "stdio.h"
#include "usart.h"
#include "adc.h"
#include "system.h"
#include "string.h"
#define BLINK_BIT   (1UL << 8)
void Delay (unsigned long a)
{ while (--a!=0); }
//MAIN POINTER
AT91PS_PIO    m_pPio   = AT91C_BASE_PIOA;
AT91PS_ADC    m_pADC   = AT91C_BASE_ADC;
AT91PS_RSTC   m_pRSTC  = AT91C_BASE_RSTC;
//AT91PS_PIO    p_pPio   = AT91C_BASE_PIOA;
AT91PS_PMC    p_pPMC   = AT91C_BASE_PMC;
//it's a simple delay
//void Delay (unsigned long a) { while (--a!=0); }

unsigned char* CalcVolt(unsigned int volt);

unsigned char res[12];//переменная без знака 1 ьаит.

int main()
{
  /**** System init ****/
  InitFrec();
  InitADC();

  /**** UART ****/
  //InitUSART0();
// InitUSART1();

  //Initialization
  InitPeriphery();

  while(1)//оператор уикла??
  {
//check button 2 pressed
    if(!((m_pPio->PIO_PDSR) & BIT20)) {
       //ClearTerminal();
       CalcVolt(GetValue_chanel4());
      // write_str_USART1(res);
       Delay(900000);
    }
  }
}
unsigned char* CalcVolt(unsigned int volt) {
  float V;
  V = (float)volt * 3.3/1024;
  sprintf((char *)res,"Volt %0.2f V",V);

   volatile int i;

  for(;;)
  {
    *AT91C_PIOA_SODR = BLINK_BIT;
    for(i = 0; i < 1000000; i++);
    Delay(V);
    *AT91C_PIOA_CODR = BLINK_BIT;
    for(i = 0; i < 100000; i++);
    Delay(V);
  }
  return 0;
}

Прошу помощи знатоков, что тут лишнее, чепго не хватает, может както можно упрастить сию задачу?
Данный код был изобретен сращением двух примеров. Задача, создать зависимость между частотои моргания 8 ноги, от поожния переменного резистора, подключенного к 20 ноге.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alexan300
сообщение Nov 20 2009, 21:15
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 128
Регистрация: 17-03-08
Пользователь №: 35 988



Код
unsigned char* CalcVolt(unsigned int volt) {
  float V;
  V = (float)volt * 3.3/1024;
  sprintf((char *)res,"Volt %0.2f V",V);

заменил на
Код
void CalcVolt( unsigned char * buf,  unsigned int Volt)
{
  float V = (float)volt * 3.3/1024;
  sprintf( buf ,"Volt %0.2f V",V);
}

компилятор ругается на "unsignet char"
Большое спасибо за обьяснения, но как Вы видите, форум посвещается начинающим))
Отдельные фразы я понимаю, но вот смысл всего вобщем от меня пока еще ускальзает)
Правильно ли я выбрал способ изменять частоту моргания?
Код
*AT91C_PIOA_SODR = BLINK_BIT;
    for(i = 0; i < 1000000; i++);
    Delay(V);
    *AT91C_PIOA_CODR = BLINK_BIT;
    for(i = 0; i < 100000; i++);
    Delay(V);

изменяя время задержки.
Go to the top of the page
 
+Quote Post
defunct
сообщение Nov 20 2009, 23:18
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(alexan300 @ Nov 20 2009, 23:15) *
компилятор ругается на "unsignet char"

ругается, потому что опечатка - должно быть unsigned char.

и у меня опечатка (C чуствительный к регистру). должно быть
void CalcVolt( unsigned char * buf, unsigned int Volt)
{
float V = (float)Volt * 3.3/1024;
sprintf( buf ,"Volt %0.2f V",V);
}


Цитата(alexan300 @ Nov 20 2009, 23:15) *
Правильно ли я выбрал способ изменять частоту моргания?

Ну а почему нет? Если Вы на выходе добились требуемого результата, значит - правильно.
Бесспорно, есть и другие, тоже правильные, способы решения этой задачи.

Поэтому программист всегда задается двумя вопросами:
1. Почему так?
2. Как сделать иначе?
находя на них ответы - постепенно получает очки экпириенса, а затем и лэвэл-ап smile.gif

Цитата
Отдельные фразы я понимаю, но вот смысл всего вобщем от меня пока еще ускальзает)

попробуйте формулировать вопросы в более узкой форме. тогде не будет расплывчатых ответов.

Цитата
for(i = 0; i < 100000; i++);

холостые циклы можно заменить функцией Delay
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 07:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01357 секунд с 7
ELECTRONIX ©2004-2016