June 2012 | Arrogance Gizmo

An Extra UART For Your PIC

Saturday, 30 June 2012

Software UART Library


The mikroC PRO for PIC provides routines for implementing Software UART communication. These routines are hardware independent and can be used with any MCU.
The Software UART Library provides easy communication with other devices via the RS232 protocol.
Important : The Software UART library implements time-based activities, so interrupts need to be disabled when using it.

Library Routines






Soft_UART_Init
Prototype
char Soft_UART_Init(char *port, char rx_pin, char tx_pin, unsigned long baud_rate, char inverted);
Returns
  • 2 - error, requested baud rate is too low
  • 1 - error, requested baud rate is too high
  • 0 - successful initialization
Description
Configures and initializes the software UART module.
Parameters :
  • port: port to be used.
  • rx_pin: sets rx_pin to be used.
  • tx_pin: sets tx_pin to be used.
  • baud_rate: baud rate to be set. Maximum baud rate depends on the MCU’s clock and working conditions.
  • inverted: inverted output flag. When set to a non-zero value, inverted logic on output is used.
Software UART routines use Delay_Cyc routine. If requested baud rate is too low then calculated parameter for calling Delay_Cyc exceeds Delay_Cyc argument range.
If requested baud rate is too high then rounding error of Delay_Cyc argument corrupts Software UART timings.
Requires
Nothing.
Example
This will initialize software UART and establish the communication at 14400 bps:
char error;
...
error = Soft_UART_Init(&PORTC, 7, 6, 14400, 0);   // Initialize Soft UART at 14400 bps
Soft_UART_Read
Prototype
char Soft_UART_Read(char * error);
Returns
Byte received via UART.
Description
The function receives a byte via software UART.
This is a blocking function call (waits for start bit). Programmer can unblock it by calling Soft_UART_Break routine.
Parameters :
  • error: Error flag. Error code is returned through this variable.
Requires
Software UART must be initialized before using this function. See the Soft_UART_Init routine.
Example
char data_, error;
...
// wait until data is received
do
  data = Soft_UART_Read(&error);
while (error);

// Now we can work with data:
if (data_) {...}
Soft_UART_Write
Prototype
void Soft_UART_Write(char udata);
Returns
Nothing.
Description
This routine sends one byte via the Software UART bus.
Parameters :
  • udata: data to be sent.
Requires
Software UART must be initialized before using this function. See the Soft_UART_Init routine.
Be aware that during transmission, software UART is incapable of receiving data – data transfer protocol must be set in such a way to prevent loss of information.
Example
char some_byte = 0x0A;
...
// Write a byte via Soft UART
Soft_UART_Write(some_byte);
Soft_UART_Break
Prototype
void Soft_UART_Break();
Returns
Nothing.
Description
Soft_UART_Read is blocking routine and it can block the program flow. Calling this routine from the interrupt will unblock the program execution. This mechanism is similar to WDT.
  Note : Interrupts should be disabled before using Software UART routines again (see note at the top of this page).
Requires
Nothing.
Example
char data1, error, counter = 0;

void interrupt() {

  if (INTCON.T0IF) {
    if (counter >= 20) {
      Soft_UART_Break();
      counter = 0;              // reset counter
    }
    else
      counter++;                // increment counter

    INTCON.T0IF = 0;            // Clear Timer0 overflow interrupt flag

    }
}

void main() {

  OPTION_REG = 0x04;            // TMR0 prescaler set to 1:32

  ...

  if (Soft_UART_Init(&PORTC, 7, 6, 9600, 0) == 0)
    Soft_UART_Write(0x55);

  ...

  // try Soft_UART_Read with blocking prevention mechanism
  INTCON.GIE = 1;               // Global interrupt enable
  INTCON.T0IE = 1;              // Enable Timer0 overflow interrupt
  data1 = Soft_UART_Read(&error);
  INTCON.GIE = 0;               // Global interrupt disable

}



Example Program use two UART

/* This program inputs from on chip UART and output to Soft UART*/



char i, error, byte_read='1',uart_rd='1';                 // Auxiliary variables

void main(){



  TRISB = 0x00;                           // Set PORTB as output (error signalization)
  PORTB = 0; 
  UART1_Init(9600);                             // No error

  error = Soft_UART_Init(&PORTC,1 , 0, 9600, 0); // Initialize Soft UART at 14400 bps
  if (error > 0) {
    PORTB = error;                        // Signalize Init error
    while(1) ;                            // Stop program
  }
  Delay_ms(100);
    UART1_Write_Text("Enter Text Here (0 to exit)");
  do {
 
  if (UART1_Data_Ready()) {

    UART1_Write(10);
    UART1_Write(13);
    uart_rd = UART1_Read();
    Soft_UART_Write(uart_rd);
    Delay_ms(100);
  }
 }while(uart_rd!='0');
  }



 Circuit Of above Example

Soft UART





T

 Visit PIC UART Tutorial For Basic Connection

Generate Sound And Melody Using PIC Microcontroller Tutorial

Wednesday, 6 June 2012

                                                            Facebook Page


Sound is a function of frequency. This concept has been used to generate sound from the microcontroller. Different types of sounds can be produced by varying the frequency.

This article explains the concept behind generating sound from the PIC microcontroller . This concept can be used to generate sound with any MCU. It can be used to generate specific sounds or alarms. This circuit has wide applications like in cars to produce sound while reversing, in electronic piano to generate different tones, or in electronic toys to generate tones.


Sound Library


The mikroC PRO for PIC provides a Sound Library to supply users with routines necessary for sound signalization in their applications. Sound generation needs additional hardware, such as piezo-speaker (example of piezo-speaker interface is given on the schematic at the bottom of this page).
Library Routines
Sound_Init
Prototype
void Sound_Init(char *snd_port, char snd_pin);
Returns
Nothing.
Description
Configures the appropriate MCU pin for sound generation.
Parameters :
  • snd_port: sound output port address
  • snd_pin: sound output pin
Requires
Nothing.
Example
// Initialize the pin RC3 for playing sound
Sound_Init(&PORTC, 3);
Sound_Play
Prototype
void Sound_Play(unsigned freq_in_hz, unsigned duration_ms);
Returns
Nothing.
Description
Generates the square wave signal on the appropriate pin.
Parameters :
  • freq_in_hz: signal frequency in Hertz (Hz)
  • duration_ms: signal duration in miliseconds (ms)
  Note : Frequency range is limited by Delay_Cyc parameter. Maximum frequency that can be produced by this function is Freq_max = Fosc/(80*3). Minimum frequency is Freq_min = Fosc/(80*255). Generated frequency may differ from the freq_in_hz parameter due to integer arithmetics.
Requires
In order to hear the sound, you need a piezo speaker (or other hardware) on designated port. Also, you must call Sound_Init to prepare hardware for output before using this function.
Example
// Play sound of 1KHz in duration of 100ms
Sound_Play(1000, 100);


Example Program

The example is a simple demonstration of how to use the Sound Library for playing tones on a piezo speaker


/************************************************************************/
 /*************************Embedded Projects******************************/
 /********************* fb.com/EmbeddedProjects **************************/
 /********* http://microcontrollerprojects00.blogspot.in/ ****************/





 void Tone1() {
  Sound_Play(659, 250);   // Frequency = 659Hz, duration = 250ms
}

void Tone2() {
  Sound_Play(698, 250);   // Frequency = 698Hz, duration = 250ms
}

void Tone3() {
  Sound_Play(784, 250);   // Frequency = 784Hz, duration = 250ms
}

void Melody() {           // Plays the melody "Yellow house"
  Tone1(); Tone2(); Tone3(); Tone3();
  Tone1(); Tone2(); Tone3(); Tone3();
  Tone1(); Tone2(); Tone3();
  Tone1(); Tone2(); Tone3(); Tone3();
  Tone1(); Tone2(); Tone3();
  Tone3(); Tone3(); Tone2(); Tone2(); Tone1();
}

void ToneA() {
  Sound_Play( 880, 50);
}
void ToneC() {
  Sound_Play(1046, 50);
}
void ToneE() {
  Sound_Play(1318, 50);
}

void Melody2() {
  unsigned short i;
  for (i = 9; i > 0; i--) {
    ToneA(); ToneC(); ToneE();
  }
}

void main() {



  TRISB  = 0xF8;                     // Configure RB7..RB3 as input

  Sound_Init(&PORTC, 3);
  Sound_Play(880, 1000);             // Play sound at 880Hz for 1 second

  while (1) {
    if (Button(&PORTB,7,1,1))        // RB7 plays Tone1
      Tone1();
    while (RB7_bit) ;                // Wait for button to be released

    if (Button(&PORTB,6,1,1))        // RB6 plays Tone2
      Tone2();
    while (RB6_bit) ;                // Wait for button to be released

    if (Button(&PORTB,5,1,1))        // RB5 plays Tone3
      Tone3();
    while (RB5_bit) ;                // Wait for button to be released

    if (Button(&PORTB,4,1,1))        // RB4 plays Melody2
      Melody2();
    while (RB4_bit) ;                // Wait for button to be released

    if (Button(&PORTB,3,1,1))        // RB3 plays Melody
      Melody();
    while (RB3_bit) ;                // Wait for button to be released
  }
}




Circuit Diagram 


MikroC Sound Library

 

Copyright @ 2013 Arrogance Gizmo |

Follow Us On Facebook

Labels

.Net (2) 1 KM Range Wireless (1) 16x2 Character LCD (9) 2 UART (1) 4x3 Keypad (1) 4x4 keypad (1) 8051 (5) 8051 Project (2) 8051 Projects (1) 8051 Tutorial (3) 89C51 (4) 89C51 Project (2) 89S51 (1) 89S52 (1) Additional UART (1) Android (3) Android AVD (1) Android Programming Tutorial (1) Android Tutorial (2) Arduino Board (1) ARM Projects (1) Atiny (1) Atmega8 (1) AVR (5) AVR Projects (1) Build From Scratch (1) C# (1) C# Serial Port (2) C# serial Terminal (1) C# Voltmeter (1) Camera (1) Clock (1) Digital Voltmeter (2) Digital watch (1) DIY (2) EEPROM (2) Electronic code lock (1) Embedded (16) Embedded Project (9) Embedded Projects (2) Embedded Tutorial (12) Embeded (4) Extra UART (1) Flutter (1) Getting Started With Android (2) Home Security (1) Internet Based Device Control (1) Java of Things (1) Keypad (1) Keypad Tutorial (1) LCD (6) LCD Tutorial (4) Linux (1) Lock (1) LPG Sensor (1) MAX232 (3) Microcontroller (14) Microcontroller generates sound (1) Microcontroller Interrupt (1) Microcontroller Project (5) Microcontroller Tutorial (11) Microcontroller Tutorial. 8051 Tutorial (1) Mikoc 4 Bit LCD (3) MikroC (14) MikroC AVR (3) MikroC AVR Tutorial (3) MikroC EEPROM (2) MikroC for 8051 (4) MikroC Getting Started (1) MikroC PIC Tutorial (6) MikroC Tutorial (3) Motor Control (1) NETMF (1) New Embedded Boards (2) Optical Mouse (1) Optical Mouse To Camera (1) Password Lock (1) PC Based Voltmeter (1) PIC (7) PIC Based Electronic Lock (1) PIC 12F629 (1) PIC ADC (2) pic interrupt (1) PIC Music (1) pic project (1) PIC Projects (1) PIC sound melody (1) PIC Tutorial (3) PIC UART (1) PIC Voltmeter (2) Project (8) Quadcopter (1) Real Time Monitoring (1) RF (1) Robotic Projects (1) RS 232 (1) Run Android On PC (1) Security System (1) Serial Communication (3) Single Bord Computer (1) Smart home (1) Smart Home Project (1) STM32 (4) STM32F4 (3) STM32F4 Discovery (3) STM32F4 Project (1) STM32F4 Tutorials (3) STMicroelectronics (1) Temperature Sensor (2) Timer (1) Tutorial (8) UART (6) Udoo (1) USB (1) USB to RS 232 (1) USB to UART (1) VISUAL STUDIO (1) Water Level Control (1) WiFi (1)

Search This Blog

Popular Posts