ADSense1

Mostrando postagens com marcador Comunicação Serial. Mostrar todas as postagens
Mostrando postagens com marcador Comunicação Serial. Mostrar todas as postagens

terça-feira, 24 de julho de 2012

Curso Online - Arduino - Vídeo Aulas 10 e 11 (Acionamento de relés pela serial e Motores)


Curso Online dividido em 12 Video Aulas. Iniciativa da Rede Social do Laboratório de Garagem

Clique nos links para assistir:
<Acionamento de Relé pela porta serial - 10ª Vídeo Aula>>  <Motores - 11ª Vídeo Aula>







Links das Iniciativas do Laboratório de Garagem:
<REDE SOCIAL>
<INCUBADORA>
<LOJA VIRTUAL>

terça-feira, 10 de julho de 2012

Curso Online - Arduino - Vídeo Aulas 7, 8 e 9 (LCD, Eletrônica Analógica e PWM)


Curso Online dividido em 12 Video Aulas. Iniciativa da Rede Social do Laboratório de Garagem

Clique nos links para assistir:
<LCD e Biblioteca LiquidCrystal - 7ª Vídeo Aula>  <Introdução à Eletrônica Analógica - 8ª Vídeo Aula>  <PWM - 9ª Vídeo Aula>







Links das Iniciativas do Laboratório de Garagem:
<REDE SOCIAL>
<INCUBADORA>
<LOJA VIRTUAL>

sábado, 7 de julho de 2012

Curso Online - Arduino - Vídeo Aula 6 - Conceitos de Eletrônica Digital


Curso Online dividido em 12 Video Aulas. Iniciativa da Rede Social do Laboratório de Garagem




Links das Iniciativas do Laboratório de Garagem:
<REDE SOCIAL>
<INCUBADORA>
<LOJA VIRTUAL>

terça-feira, 3 de julho de 2012

Curso Online - Arduino - Vídeo Aulas 4 e 5


Curso Online dividido em 12 Video Aulas. Iniciativa da Rede Social do Laboratório de Garagem

Clique nos links para assistir:
<Linguagem de Programação - 4ª Vídeo Aula>  <Serial - 5ª Vídeo Aula>





Links das Iniciativas do Laboratório de Garagem:
<REDE SOCIAL>
<INCUBADORA>
<LOJA VIRTUAL>

quinta-feira, 17 de maio de 2012

Vídeo Programação em CCS C para PIC: Comunicação RS-232


Vídeos Tutoriais sobre programação embutida em C para microcontroladores PIC, abordando comunicação RS-232, utilizando o simulador de circuitos Proteus VSM e o compilador C para PIC CCS C.

Clique nos links para assistir:
<Tutorial 16 - RS232 Parte 1>  <Tutorial 17 - RS232 Parte 2>  <Tutorial 18 - RS232 Parte 3>  <Tutorial 19 - RS232 Parte 4>

terça-feira, 18 de outubro de 2011

Sistema de Comunicação USB com PIC


Este trabalho apresenta uma aplicação com o PIC18F4550 para comunicação de dados via USB entre um PC e um Sistema de Detecção Óptica de Descargas Parciais em Cadeias de Isoladores de Linhas de Transmissão de Alta Tensão. Aborda os conceitos básicos sobre comunicação USB, microcontroladores, o PIC18F4550. Fazendo uso do compilador C da CCS, mostra a forma correta de configurar o oscilador para uso da interface USB. 



Sumário

Introdução................................................................................................8 
Microcontroladores ..................................................................................10 
2.1  Principais Componentes ..................................................................11 
2.1.1  Memória.......................................................................................11 
2.1.2  ALU..............................................................................................11 
2.1.3  Temporizadores e contadores .....................................................11 
2.1.4  Interfaces de entrada e saída ......................................................11 
2.1.5  Interrupções.................................................................................12 
Universal Serial Bus (USB).....................................................................13 
3.1  Conectores......................................................................................14 
3.2  Identificação do Dispositivo..............................................................15 
3.3  Tipos de Fluxo de Dados .................................................................16 
3.3.1  Transferência de Controle ...........................................................16 
3.3.2  Transferência de Massa ..............................................................16 
3.3.3  Transferência de Interrupção .......................................................17 
3.3.4  Transferência Isossíncrona..........................................................17 
3.4  Descritores ....................................................................................18 
3.5 Classes de dispositivos ...................................................................19 
3.5.1  Human Interface Device (HID) ...................................................19 
3.5.2  Mass Storage Device (MSC) .....................................................20 
3.5.3  Communications Device Class (CDC) .........................................20 
3.5.4 Outros.........................................................................................20 
Sistema de Comunicação USB com Microcontrolador ..........................22 
4.1  Ferramentas usadas ........................................................................22 
4.1.1  Linguagem C para microcontroladores ........................................22 
4.1.2  Ferramenta Computacional de Simulação...................................24 
4.1.3  Envio e Recepção de Dados no Computador..............................25 
4.2  Microcontrolador PIC 18F4550 ....................................................25 
4.3  Biblioteca de funções .......................................................................26 
4.4  Comunicação USB...........................................................................28 
4.4.1  Descritores USB ..........................................................................28 
4.4.2  Bits de configuração ....................................................................32 
4.4.3  Configuração de clock .................................................................35 
4.4.4  Alimentação do Circuito ...............................................................38 
4.4.5  Circuito de Gravação ...................................................................39 
4.4.6  Programa Principal ......................................................................40 
4.4.7  Simulação ....................................................................................45 
4.4.8  Circuito Elétrico............................................................................47 
4.4.9  Instalação e Funcionamento ........................................................49 
Conclusão e Trabalhos Futuros.............................................................53 
Bibliografia ..........................................................................................55 
Apêndices ...........................................................................................56 
Arquivo usb_serial_TCC.h ..................................................................56 
Arquivo usb_biblioteca.h .....................................................................59 
Arquivo usb_desc_TCC.h ....................................................................64

Expandindo as portas de IO do Arduino via I2C

Dica de um dos garagistas (colaborador do Laboratório de Garagem), muito interessante, mostrando como expandir as portas de IO do Arduino, através do ci PCF8574, usando a comunicação I2C. Esta dica é apresentada pelo Marcelo Rodrigues através de um vídeo de pequena duração. Logo abaixo, existe um link para a página onde existe o código apresentado neste vídeo



Código do vídeo

quarta-feira, 21 de setembro de 2011

Apostila: Microcontroladores PIC e Periféricos



Esta apostila aborda alguns conceitos básicos sobre os microcontroladores PICMicro da Microchip, a comunicação USB e seus métodos de comunicação mais comuns. Apresenta também, uma aplicação prática com a ferramenta SanUSB, utilizando a comunicação USB, emulando uma porta serial através do protocolo CDC, fazendo uso da linha PIC18Fxx5x que já possui o hardware integrado para comunicação USB. Esta apostila foi elaborada pelo Prof. Sandro César Silveira Jucá, professor da área de telemática do IFCE.

domingo, 21 de agosto de 2011

Projeto completo de conversor TTL-USB CDC (Serial Emulada sobre USB)

Projeto incluindo esquema elétrico, arquivos das placas (para o Eagle), Gerber. Utiliza o chip FTDI. Incluindo o conversor TTL-RS232 (MAX232) se obtém um conversor RS232 para USB.






segunda-feira, 25 de julho de 2011

Comunicação Serial PC-Plotter com Microcontrolador PIC16877 e controle PID

Esta bibliografia apresenta uma aplicação do Microcontrolador PIC16F877 da Microchip na comunicação serial entre um PC e um Plotter serial. Desta forma, apresenta o projeto de uma placa microcontrolada para a interface entre o PC e um plotter, com um circuito de medição das posições dos motores deste plotter, e o controle através de algoritmo PID do posicionamento da pena.



quinta-feira, 21 de julho de 2011

Comunicação entre LEGO Mindstorms NXT e Arduino via serial RS-485

O artigo propõe a comunicação serial pelo protocolo RS-485 entre o LEGO Mindstorms NXT e o Arduino, utilizando o CI MAX 485.



Hardware:


Ambiente de programação:


– NXT firmware 1.28
– NXC nbc-1.2.1.r1
– Arduino 0018
– Mac OS X 10.6.3


Obsevações:

  • Foi usado um Arduino Nano V3, mas outros modelos também podem usados;
  • Inspirado pelo post  Early stage RS 485 with MAX485 no fórum sobre arduino e pelo post RS485 to RS232 Adapter no fórum nxtasy.org;
  • As funções seriais foram baseadas na biblioteca antiga de software serial do Arduino;
  • Testados para velocidades entre 9600 and 57600; velocidades maiores, não trabalha
baudrate.h:
#define RS485_BAUD 57600

NCX Program: (Screenshot)
#include "baudrate.h"
#define TOWAIT 2000
#define MSG "Hello Arduino  "

// -------------------------------------------------------------
void printMsg(byte inbuffer[], int cnt) {
  TextOut(0, LCD_LINE3, "       Baud");
  NumOut(0, LCD_LINE3, RS485_BAUD);
  TextOut(0, LCD_LINE5, "l=    cnt=     ");
  NumOut(12, LCD_LINE5, ArrayLen(inbuffer));
  NumOut(60, LCD_LINE5, cnt);
  //                        "Hi NXT,got  "
  TextOut(0, LCD_LINE6, "rcv:             ");
  TextOut(24, LCD_LINE6, ByteArrayToStr(inbuffer));
}

// -------------------------------------------------------------
task main() {
  int i = 0;
  int cnt = 0;
  byte outbuffer[];
  byte inbuffer[];
  char result;

  SetSensorType(IN_4, SENSOR_TYPE_HIGHSPEED);
  Wait(100);

  // we use odd parity on the Arduino side
  // see: http://forums.nxtasy.org/index.php?showtopic=3871
  RS485Uart(HS_BAUD_##RS485_BAUD, HS_MODE_8_DATA|HS_MODE_O_PARITY|HS_MODE_10_STOP);
  Wait(100);
  StrToByteArray(MSG, outbuffer);
  TextOut(0, LCD_LINE1, "RS485 <> Arduino");

  while (true) {
    outbuffer[14] = '0' + i;
    i++; if (i==10) i = 0;

    result = RS485Write(outbuffer);
    while (!RS485DataAvailable()) {}
    result = RS485Read(inbuffer);

    printMsg(inbuffer, cnt);
    cnt++; if (cnt==1000) cnt = 0;
    Wait(TOWAIT);
  }
}                                                             

Arduino sketch: (Screenshot)
#include "baudrate.h"

// Pins and wires
//         Arduino                Wire       MAX485
const byte RS485_OUT_PIN = 10; // yellow --> DI
const byte RS485_IN_PIN  = 11; // green  --> RO
const byte RS485_CTL_PIN = 12; // grey   --> RE+DE
//         VCC                           --> VCC
//         ------------------------------------------
//         NXT Sensor Port 4      Wire       MAX485
//         DIGIAI1                blue   --> B
//         DIGIAI0                yellow --> A
//         GND                    black  --> GND

const byte RECV_RS485_BIT =  B00001000;
const byte SEND_RS485_BIT =  B00000100;
#define readRS485inPin (PINB & RECV_RS485_BIT)

const unsigned int BUFLEN = 128;
const unsigned int outnbuf = 12;
byte outBuf[BUFLEN];
byte inBuf [BUFLEN];
unsigned int innbuf;
const char msg[] = "Hi NXT,got  ";

const byte SER_TIMEOUT = 7;
unsigned int RS485_LEN;
unsigned int bitDelay;
unsigned int halfBitDelay;

const byte CYCLES = 45;
// ------------------------------------------------------------------
void serSetup(unsigned long baud) {
  pinMode(RS485_OUT_PIN, OUTPUT);
  digitalWrite(RS485_OUT_PIN, LOW);
  pinMode(RS485_IN_PIN, INPUT);
  digitalWrite(RS485_IN_PIN, LOW);
  pinMode(RS485_CTL_PIN, OUTPUT);
  digitalWrite(RS485_CTL_PIN, LOW);

  RS485_LEN = 1000000 / baud;
  bitDelay = RS485_LEN - clockCyclesToMicroseconds(CYCLES);
  halfBitDelay = RS485_LEN/2 - clockCyclesToMicroseconds(CYCLES);
  Serial.print("\nRS-485 configured, ");
  Serial.print(baud, DEC);
  Serial.print(" Baud, Bit length ");
  Serial.print(RS485_LEN, DEC);
  Serial.println(" uSec");
}

// Startbit of 1st byte of incoming message encountered
// ------------------------------------------------------------------
byte serAvail() {
  return readRS485inPin;
}

// Read a byte
// ------------------------------------------------------------------
unsigned int serRead() {
  byte i;
  int val = 0;
  byte parity = 0, stopbit = 0;

  long start = millis();
  while (true) {
    if (millis()-start>SER_TIMEOUT) return -1;
    if (readRS485inPin) break;     // startbit hit
  }

  delayMicroseconds(halfBitDelay); // jump to middle of startbit
  for (i=0; i<8; i++) {
    delayMicroseconds(bitDelay);
    val |= !readRS485inPin << i;   // data bits
  }
  delayMicroseconds(bitDelay);
  parity = !readRS485inPin;        //
  delayMicroseconds(bitDelay);
  stopbit = !readRS485inPin;       //
  return val;
}                                                             

// Write one bit
// -----------------------------------------------------------------
void serBit(byte mark) {
  if (mark) PORTB &= ~ SEND_RS485_BIT;
  else      PORTB |=   SEND_RS485_BIT;
//  delayMicroseconds(RS485_LEN);
  delayMicroseconds(bitDelay);
}

// Write a byte
// ------------------------------------------------------------------
void serWrite(byte data) {
  byte mask = 1;
  byte bitcount = 0;

  serBit(LOW);               // startbit
  for (byte i=0; i<8; i++) { // data from LSB to MSB
    if (data & mask) {
      serBit(HIGH);
      bitcount++;
    } else {
      serBit(LOW);
    }
    mask <<= 1;
  }
  serBit((bitcount%2)==0);   // odd parity bit
  serBit(HIGH);              // stop bit
}

// ------------------------------------------------------------------
void printMsg(const char *s, byte buf[], int nbuf) {
  Serial.print(s);
  Serial.print(": \"");
  for (int i=0; i<nbuf; i++)
    Serial.print(buf[i], BYTE);
  Serial.println("\"");
}

// ------------------------------------------------------------------
void serSendMsg(byte buf[], int nbuf) {
  int i;

  digitalWrite(RS485_CTL_PIN, HIGH);
  for (i=0; i<nbuf; i++)
    serWrite(buf[i]);
  digitalWrite(RS485_CTL_PIN, LOW);
}

// ------------------------------------------------------------------
int serRecvMsg(byte buf[]) {
  int c;
  int nbuf = 0;

  while ((c = serRead())!=-1)
    buf[nbuf++] = c;
  return nbuf;
}

// ------------------------------------------------------------------
void measureComms(byte stage) {
  static unsigned long old = 0;
  unsigned long now; 

  if (!stage) {
    old = millis();
  } else {
    now = millis();
    Serial.print("comms took ");
    Serial.print(now-old, DEC);
    Serial.println(" mSec");
  }
}

// ------------------------------------------------------------------
void setup() {
  Serial.begin(9600);
  for (int i=0; i<outnbuf; i++)
    outBuf[i] = msg[i];
  outBuf[12] = 0;
  serSetup(RS485_BAUD);
}

// ------------------------------------------------------------------
void loop() {
//  measureComms(0);
  if (serAvail()) {
    innbuf = serRecvMsg(inBuf);
    outBuf[11] = inBuf[innbuf-1];
    serSendMsg(outBuf, outnbuf);

//    measureComms(1);
    printMsg("Recv", inBuf, innbuf);
    printMsg("Sent", outBuf, outnbuf);
  }
}

Fontes:



LinkWithin

Related Posts Plugin for WordPress, Blogger...