|
Usuários online |
|
Nenhum usuário online |
|
Nós temos 73 visitantes online |
|
Usuários Registrados |
| 4282 registrados | | 0 hoje | | 15 esta semana | | 77 no mês | | Último: |
junio12 | |
|
 |
|
|
|
Iniciando com RTOS MQX (1 visualizando) (1) Visitante
Favorito por: 0
|
|
|
TÓPICO: Iniciando com RTOS MQX
|
dfranca (Usuário)
Fresh Boarder
Mensagens: 6
|
|
Re:Iniciando com RTOS MQX 5 Mês, 1 Semana atrás
|
Popularidade: 0
|
|
Ricardo,
Você já deve ter verificado isso, mas confirme se no seu projeto as constantes abaixo estão setadas:
BSPCFG_ENABLE_IO_SUBSYSTEM
BSPCFG_ENABLE_GPIODEV
Elas são encontradas no arquivo user_config.h
Douglas
|
|
|
|
Logado
|
|
|
O administrador desabilitou acesso publico para escrita.
|
dfranca (Usuário)
Fresh Boarder
Mensagens: 6
|
|
Re:Iniciando com RTOS MQX 5 Mês, 1 Semana atrás
|
Popularidade: 0
|
|
Legal Ricardo, obrigado pela explicação. Eu nunca compartilhei um pino dessa maneira, mas pelo que vc explicou é uma opção interessante.
Somente por curiosidade: compartilhando o pino dessa forma vc queria economizar pinos ou facilitou o seu hardware de alguma forma ?
Dá uma olhada no forum do MQX no site da Freescale. Tem uma mensagem bem recente lá onde um desenvolvedor pergunta se é possível ele controlar diretamente alguns pinos do microcontrolador ao invés de deixar o MQX fazer isso. A resposta do pessoal foi "sim, é possível"...Então acredito qeu vc consiga fazer isso sim no MQX.
|
|
|
|
Logado
|
|
|
O administrador desabilitou acesso publico para escrita.
|
|
|
|
Re:Iniciando com RTOS MQX 5 Mês, 1 Semana atrás
|
Popularidade: 0
|
|
Ola Senhores.
Douglas na verdade o objetivo principal era economizar pinos, como eu disse antes, eu programo dispositivos pequenos de 8 bits, e trabalho com projetos muito "low cost" assim preciso dosar muito bem as escolhas... e geralmente acabo subdimensionando o uC.
Claro que depois é um "pega-para-capar" ... hehe.
Vou dar uma olhada no forum da freescale sobre este assunto. Na segunda-feira ja irei testar suas sugestões referente ao problema acima.
Mais uma vez muito obrigado.
Ricardo Franco
|
|
|
|
Logado
|
|
|
O administrador desabilitou acesso publico para escrita.
|
|
|
|
Re:Iniciando com RTOS MQX 5 Mês, 1 Semana atrás
|
Popularidade: 0
|
|
Ola Senhores.
Caro Douglas, que belo tiro certeiro eim ... Agora tudo funfa ...
Se não for pedir muito gostaria de saber porque a configuração anterior não funcionava. Pois deveria né !!!
Att.
Ricardo Franco
|
|
|
|
Logado
|
|
|
O administrador desabilitou acesso publico para escrita.
|
|
|
|
Re:Iniciando com RTOS MQX 4 Mês, 4 Semanas atrás
|
Popularidade: 0
|
Ola Senhores.
o proximo passo é a implementação de um canal AD. Este eu consegui fazer sem qualquer tipo de ajuda externa. apenas lendo os User guides e exemplos da Freescale.
Realmente o jeitão dele se repete.
Isso não garante que as rotinas estejam perfeitas e otimizadas. Mas ja é a ponta do Iceberg.
Arquivo IO.C
| Código: |
// -- Variaveis Globais
static FILE_PTR adc = NULL;
static FILE_PTR adc_channel = NULL;
// -- definições Globais
const ADC_INIT_STRUCT adc_init =
{
ADC_RESOLUTION_8BIT, /* resolution */
};
/* Logical channel #1 init struct */
const ADC_INIT_CHANNEL_STRUCT adc_channel_parameters =
{
POT_1, /* physical ADC channel */
ADC_CHANNEL_MEASURE_LOOP | ADC_CHANNEL_START_NOW,
10, /* number of samples in one run sequence */
0, /* time offset from trigger point in us */
50000, /* period in us (= 0.6 sec) */
0x10000, /* scale range of result (not used now) */
1, /* circular buffer size (sample count) */
ADC_TRIGGER_1, /* logical trigger ID that starts this ADC channel */
};
// -- Função para inicializar ADC
boolean InicializaIO(void)
{
// -- Configuração do ADC
ADC_INIT_CHANNEL_STRUCT adc_chl = adc_channel_parameters;
adc = fopen("adc:", (const char*)&adc_init);
if (NULL == adc) {
printf("ADC device open failedn");
_task_block();
}
adc_channel = fopen("adc:3",(const char*)&adc_chl);
if (NULL == adc_channel) {
printf("adc:POT channel open failedn");
_task_block();
}
}
// -- Função para retornar Valor do ADC
/*
* Read in ADC value on the channel given
*/
int_32 ReadADC(void) {
ADC_RESULT_STRUCT data;
int_32 val;
read(adc_channel, &data, sizeof(data) ) ;
val = data.result;
return val;
}
|
Arquivo TASK.C
| Código: |
void Adc_task(uint_32 initial_data)
{
int_32 ValorADC = 0;
printf("n Adc task n");
while (TRUE)
{
ValorADC = ReadADC();
if(ValorADC > 240)
{
SetOutput(3,1);
}
else
{
SetOutput(3,0);
}
_time_delay(100);
}
}
|
Tudo funciona Direitinho.
Att.
Ricardo Franco
|
|
|
|
Logado
|
|
|
O administrador desabilitou acesso publico para escrita.
|
|
|
|
Re:Iniciando com RTOS MQX 4 Mês, 4 Semanas atrás
|
Popularidade: 0
|
|
Senhores.
Estou com uma pequena dificuldade em relação a comunicação serial.
ja vi que posso escrever na serial usando "printf" e provavelmente possa ler da serial usando "scanf".Mas onde eu configuro os parametros de hardware da serial. Baud Rate, quantidade de bits, etc?
Não achei isso em lugar algum. No entanto sei que sem fazer nada eu consigo transmitir pela serial a 115.200 bps.
Alguém te alguma idéia?
Ricardo Franco
|
|
|
|
Logado
|
|
|
O administrador desabilitou acesso publico para escrita.
|
|
|
|
Re:Iniciando com RTOS MQX 4 Mês, 3 Semanas atrás
|
Popularidade: 0
|
Ola Senhores.
Bom problema da Serial resolvido gostaria de colocar a solução e transcrever trechos de uma conversa com o "Douglas França", que tem me fornecido um exelente suporte.
Primeiro a solução para comunicação serial:
No arquivo DRIVER_IO.C
| Código: |
static FILE_PTR serial = NULL;
// -- Função para inicializar IO
boolean InicializaIO(void)
{
uint_32 Dummy=0;
serial = fopen(BSP_DEFAULT_IO_CHANNEL, 0);
Dummy = 9600;
ioctl(serial, IO_IOCTL_SERIAL_SET_BAUD, &Dummy);
Dummy = 0;
ioctl(serial, IO_IOCTL_SERIAL_SET_FLAGS, &Dummy);
}
// -- Leiutura da UART.
char ReadUART(void)
{
char Char = 0;
if (fstatus( serial )) {
Char = fgetc( serial );
}
return Char;
}
|
Arquivo TKS_Tasks
| Código: |
void Serial_task(uint_32 initial_data)
{
unsigned char Char = 0;
printf("n Serial task n");
while(TRUE)
{
Char = ReadUART();
if(Char)
{
//printf("n Dentro Recebe Char n"); // Apenas DEBUG
printf("%c",Char);
}
_time_delay(100);
}
}
|
Bom agora um pequeno trecho da conversa com o Douglas.
Ricardo Franco: Senhores.
Estou com uma pequena dificuldade em relação a comunicação serial.
ja vi que posso escrever na serial usando "printf" e provavelmente possa ler da serial usando "scanf".Mas onde eu configuro os parametros de hardware da serial. Baud Rate, quantidade de bits, etc?
Não achei isso em lugar algum. No entanto sei que sem fazer nada eu consigo transmitir pela serial a 115.200 bps.
Alguém te alguma idéia?
Ricardo Franco
Resposta: Douglas França
Você altera todo a configuração da serial (após você ter aberto a porta, e obtido o file descriptor) através dos comandos de IOCTL.
Naquele mesmo .pdf (MQXIOUG.pdf), vá na página 27.
Lá vc encontra todos os códigos de IOCTL para controlar tudo na sua serial.
abraços,
Douglas
Pergunta: Ricardo Franco
Mas uma duvida ... depois que eu abri a serial e modifiquei os parametros das mesma ... como eu uso a serial ? pelo "printf" mesmo? E no caso de ter mais de uma serial ? como eu iria direcionar as mensagens ?
Ricardo Franco
Resposta: Douglas França
A palavra mágica é "file-descriptor".
Se você abriu N seriais, você terá recebido N file-descriptors, certo ?
A facilidade de você escrever na serial usando o printf é algo que o MQX faz com a serial que ele chama de "default".
E aliás, você pode alterar isso, fazendo por exemplo o printf escrever na serial2, ou serial3, ou serialN, ao invés da serial1 (serial default).
O método genérico de escrita e leitura em qualquer serial são os comandos:
read();
write();
Veja na API deste comandos, que um dos parâmetros que eles recebem é justamente o file-descriptor, para saberem "onde" atuar.
Os outros parâmetros são os buffers, e o tamanho de caracteres à enviar e receber.
Boa sorte !
Dougals
Apenas completando a resposta do Douglas, eu também usei o exemplo Telnet<->Serial para nortear minha aplicação, disponivel em:
C:Arquivos de programasFreescaleFreescale MQX 3.5demotelnet_to_serial
Att.
Ricardo Franco
|
|
|
|
Logado
|
|
|
O administrador desabilitou acesso publico para escrita.
|
|
|
|
|
|
|
|
 |
|