Ir ao conteúdo
  • Cadastre-se

programação do potenciômetro no kit mcmaster


Posts recomendados

Boa noite pessoal! Estou com muitas dúvidas nessa prática de laboratório e gostaria que alguém me orientasse, esse kit tem o microcontrolador PIC16F877A.

- > Elabore um programa que comunique com o módulo McMaster através da porta serial. O programa deve ler o valor enviado pelo módulo (tensão ajustada no potenciômetro) e se o valor for < 2000, o programa deve enviar os caracteres “1” (liga a lâmpada) e “4” (desliga o ventilador). Caso o valor for >= 3000, o programa deve enviar os caracteres “2” (desliga a lâmpada) e “3” (liga o ventilador).

 

Desde já agradeço.

Link para o comentário
Compartilhar em outros sites

@Isabella Lima ,

 

 Bem-vinda ao Fórum.

 

Não basta apenas saber que o seu kit usa o Pic 16F877A...

 

Sobre o McMaster... tem de saber qual o protocolo de comunicação, com o formato dos dados que são enviados, se são dois bytes apenas ou mais bytes, sinalizando Início ou Final de Frame, se tem checksum ....

 

E qual a linguagem ? 

 

Bola de cristal está em falta no mercado kkkkk !

 

Só com essas informações alguém pode te ajudar, ok ? (Eu não entendo mais nada de Pic, mas tem outros aqui que ainda usam ! )

 

Paulo

Link para o comentário
Compartilhar em outros sites

Desculpa kkkkkkkkk
Linguagem C

 

9 horas atrás, aphawk disse:

@Isabella Lima ,

 

 Bem-vinda ao Fórum.

 

Não basta apenas saber que o seu kit usa o Pic 16F877A...

 

Sobre o McMaster... tem de saber qual o protocolo de comunicação, com o formato dos dados que são enviados, se são dois bytes apenas ou mais bytes, sinalizando Início ou Final de Frame, se tem checksum ....

 

E qual a linguagem ? 

 

Bola de cristal está em falta no mercado kkkkk !

 

Só com essas informações alguém pode te ajudar, ok ? (Eu não entendo mais nada de Pic, mas tem outros aqui que ainda usam ! )

 

Paulo

 

adicionado 1 minuto depois
29 minutos atrás, ViniciusKruz disse:

Quais linguagens serão usadas tanto no programa quanto no PIC?

 

Linguagem C

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

qual/como é o protocolo deste tal macmaster? a propósito, wtf? conversor ad? como os dados estão distribuídos no frame? etc... Baseando nisso você pode tentar usar alguma função mastigada (e gulosa) como getc() ou getchar() ou scanf(), converter pra numero decimal inteiro e fazer as comparações

 

E puts! ia me esquecendo da a pergunta que não quer calar: com mc, você já fez um pisca led? Se sim, que cor ele era? (isto sim é importante!)

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Isabella Lima  Pelo que deu a entender, você está ainda começando na programação e ainda não tem nada "palpável", a ideia da @Isadora Ferraz  é boa, começa fazendo um led piscar, a partir daí, vai pesquisando e incrementando o que for necessário e se não estiver conseguindo, estamos aqui.

 

Pra começar, me diga qual compilador/IDE que vai usar no PC e também no PIC, depois disso ficará mais fácil te passar as dicas.

 

Abraço.

Link para o comentário
Compartilhar em outros sites

@Isabella Lima  

 

Bacana esse kit!!!

 

Tem certeza que o CodeBlocks compila para PIC, se não me engano ele é para AVR. De qualquer maneira, pelo fato dessa IDE ser relativamente nova, vai ser um pouco complicado encontrar ajuda, pra sua sorte a linguagem C é muito difundida, creio que a dificuldade maior mesmo será com relação a IDE.

 

Infelizmente, nessa IDE, não vou conseguir te ajudar muito, mas vai postando suas dúvidas na medida em que elas forem aparecendo pra podermos ver o que poderemos fazer pra ajudar ok.

 

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Vamos tentar uma ou duas gotas...

 

Este treco (caro!) conversa com o mplab. Escolha um compilador que se "pluga" no mplab. Tem vários, destaque para o hitech-c. O codeblock conecta com ele? Legal.

 

Pelo que entendi você quer algo assim...

Em 20/03/2017 às 21:51, Isabella Lima disse:

ler o valor enviado pelo módulo (tensão ajustada no potenciômetro)

a=adcread(0);

Em 20/03/2017 às 21:51, Isabella Lima disse:

se o valor for < 2000

if (a<2000) {putc(1);putc("4");}

e o outro if.. ... ...já sabe

 

Detalhe: só funciona se o conversor ad do seu mc for de mais de 10 bits

 

Penso que você deve ser + específica na dúvida, pois como disse o amigo paulão

Em 21/03/2017 às 00:52, aphawk disse:

Bola de cristal está em falta no mercado kkkkk !

kk

 

Permita-me mencionar de novo que não deve queimar a etapa pisca led, ok?

 

To junto com o amigo @ViniciusKruz no tocante ao codeblock. Certa feita cogitei instalá-lo mas o cheiro de talco tava me incomodando. kk

abç

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Desconheço a licença do CodeBlock mas geralmente nas faculdades eles direcionam sempre para as melhores opções FREE, só que às vezes o barato sai caro a longo prazo. Acredito que a versão de estudante do Mplab para esse kit seja uma das melhores opções porque o que não vai faltar é ajuda na internet e se a coisa se tornar profissional, seria só comprar uma licença básica. 

 

Aconselho, se possível partir pro Mplab(eu particularmente continuaria sem poder ajudar muito mas isso não seria um problema), verifica com seu professor se tem possibilidade, caso contrário, não desfazendo deste fórum e nem da boa vontade do pessoal daqui, mas você conseguiria mais ajuda em um fórum(imagino que exista) específico do codeblock.  

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Eu e uns colegas chegamos próximos do que queremos, fizemos a programação em C++ achamos mais eficaz, ainda falta alguns ajustes, pois na hora que compila o oscilador ainda não está 100% certo, mas segue o código até o momento:

 

#include <iostream>

#include <windows.h>

#include <conio.h>

#include <cctype>

using namespace std;

int main(void)

{

// Variáveis

    char opc;

    int valor;

    char szBuff[4];

    char szBuff3[25];

    char szBuff2[6];//='Caracter ';

 

    strcpy(szBuff2, "Chave ");

    strcpy(szBuff3, " press...#### ECOM 7 #####");

    HANDLE hSerial;

    DCB dcbSerialParams = {0};

    DWORD dwBytesRead = 0;

    DWORD dwBytesWrite = 0;

    cout << endl;

    cout << "___ Interface Serial ___" << endl;

    cout << endl;

// Abre a porta serial COM1

    hSerial = CreateFile("COM1",GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

 

    if(hSerial==INVALID_HANDLE_VALUE)

    {

        if(GetLastError()==ERROR_FILE_NOT_FOUND)

        {

            cout << "Erro! Porta não encontrada." << endl;

        }

        cout << "Erro! A porta não pode ser aberta." << endl;

    }

// Configura os parâmetros da porta

 

    dcbSerialParams.DCBlength=sizeof(dcbSerialParams);

    if (!GetCommState(hSerial, &dcbSerialParams))

    {

        cout << "Erro! Parâmentros da porta não encontrados." << endl;

    }

    dcbSerialParams.BaudRate=CBR_9600;

    dcbSerialParams.ByteSize=8;

    dcbSerialParams.StopBits=ONESTOPBIT;

    dcbSerialParams.Parity=NOPARITY;

    if(!SetCommState(hSerial, &dcbSerialParams))

    {

        cout << "Erro! Os parâmentros da porta não puderam ser setados." << endl;

    }

 

    opc = '0';

    while (opc != '3')

    {

        cout << endl;

        cout << "2) Ler e escrever na porta COM1" << endl;

        cout << "3) Sair" << endl;

        cout << "Opcao = ";

        cin >> opc;

 

            if (opc == '2')

            {

 

                cout << "Tecle algo para encerrar a leitura..." << endl;

                while (!kbhit())

                {

                    strcpy(szBuff,"");

 

 

                    if(!ReadFile(hSerial, szBuff, 4, &dwBytesRead, NULL))

                    {

                        cout << "Erro! Leitura da porta." << endl;

                    }

                    ///cout << endl;

 

                    cout << "Caracter  = " << szBuff<< endl;

 

                    char var1[4];

                    int aux;

 

                    cout<< "szBuff = " << szBuff << endl;

                    for(int i = 0 ; i < 5 ; i++)

                        if(!isdigit(szBuff))

                            szBuff='0';

 

 

                    valor = atoi(szBuff);

 

                    if(szBuff!=0)

                    {

                        if(valor < 2000)

                        {

 

                            WriteFile(hSerial, "1", 1, &dwBytesRead, NULL);

                            WriteFile(hSerial, "4", 1, &dwBytesRead, NULL);

                        }

                        if(valor >=3000)

                        {

                            WriteFile(hSerial, "2", 1, &dwBytesRead, NULL);

                            WriteFile(hSerial, "3", 1, &dwBytesRead, NULL);

                        }

                    }

                    //  szBuff = strcpy("0000");

                }

            }

    }

// Fecha a porta serial COM1

    CloseHandle(hSerial);

    system("pause");

    return 0;

}

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...