MikroElektronika white logo
  • Products
    • Click Boards
      • Wireless Connectivity
        • GPS/GNSS
        • GSM/LTE
        • LTE IoT
        • BT/BLE
        • WiFi
        • RFID/NFC
        • GSM+GPS
        • 6LoWPAN
        • ZigBee
        • UWB
        • SigFox
        • Sub-1 GHz Transceievers
        • 2.4 GHz Trancevers
        • LoRa
        • WiFi+BLE
      • Sensors
        • Biometrics
        • Gas
        • Magnetic
        • Motion
        • Optical
        • Pressure
        • Proximity
        • Temperature & humidity
        • Current sensor
        • Miscellaneous
        • Environmental
        • Force
        • Inductance
        • RF meter
        • Click Shields
        • Click Bundles
      • Interface
        • Adapter
        • CAN
        • Port expander
        • RS485
        • USB
        • 1-Wire
        • RS232
        • Ethernet
        • LIN
        • PWM
        • Current
        • DALI
        • I2C
        • Fiber optics
        • SPI
        • DMX
        • CXPI
        • Click Shields
        • Click Bundles
      • Display & LED
        • LED Drivers
        • LED Matrix
        • LED Segment
        • OLED
        • LCD
        • TFT
        • Click Shields
        • Click Bundles
      • Miscellaneous
        • Relay
        • Optocoupler
        • ID
        • Proto
        • Encryption
        • Click Shields
        • Click Bundles
      • Mixed Signal
        • ADC
        • Measurements
        • DAC
        • Digital potentiometer
        • ADC-DAC
        • Click Shields
        • Click Bundles
      • Storage
        • EEPROM
        • FLASH
        • FRAM
        • microSD
        • MRAM
        • SRAM
        • EERAM
        • ReRAM
        • DRAM
        • Click Shields
        • Click Bundles
      • Motor Control
        • Brushed
        • Brushless
        • Servo
        • Stepper
        • Click Shields
        • Click Bundles
      • Audio & Voice
        • Amplifier
        • Microphone
        • Speakers
        • Signal Processing
        • Speech recognition
        • FM
        • MP3
        • Click Shields
        • Click Bundles
      • HMI
        • Capacitive
        • Pushbutton/Switches
        • Potentiometers
        • Rotary encoder
        • Haptic
        • Fingerprint
        • Click Shields
        • Click Bundles
      • Clock & Timing
        • RTC
        • Clock generator
        • Click Shields
        • Click Bundles
      • Power Management
        • Battery charger
        • Boost
        • Buck
        • Linear
        • Buck-Boost
        • Wireless Charging
        • Power Switch
        • USB-C PD
        • Click Shields
        • Click Bundles
      • Click Bundles
      • Click Shields
    • NECTO
      • NECTO Studio
    • Compilers
      • PIC
        • C
          • NECTO Studio
          • mikroC PRO for PIC
        • Basic
          • mikroBasic PRO for PIC
        • Pascal
          • mikroPascal PRO for PIC
        • Additional Software
          • CODEGRIP WiFi license
          • CODEGRIP SSL license
          • Visual TFT
          • Visual TFT AI
          • Visual GLCD
          • Package Manager
          • mikroBootloader
          • CAN calculator
          • GLCD Font Creator
          • Timer Calculator
          • MikroPlot
      • dsPIC/PIC24
        • C
          • NECTO Studio
          • mikroC PRO for dsPIC
        • Basic
          • mikroBasic PRO for dsPIC
        • Pascal
          • mikroPascal PRO for dsPIC
        • Additional Software
          • CODEGRIP WiFi license
          • CODEGRIP SSL license
          • Visual TFT
          • Visual GLCD
          • Package Manager
          • mikroBootloader
          • CAN calculator
          • GLCD Font Creator
          • Timer Calculator
          • MikroPlot
      • PIC32
        • C
          • NECTO Studio
          • mikroC PRO for PIC32
        • Basic
          • mikroBasic PRO for PIC32
        • Pascal
          • mikroPascal PRO for PIC32
        • Additional Software
          • CODEGRIP WiFi license
          • CODEGRIP SSL license
          • Visual TFT
          • Visual GLCD
          • Package Manager
          • mikroBootloader
          • CAN calculator
          • GLCD Font Creator
          • Timer Calculator
          • MikroPlot
      • ARM
        • C
          • NECTO Studio
          • mikroC PRO for ARM
        • Basic
          • mikroBasic PRO for ARM
        • Pascal
          • mikroPascal PRO for ARM
        • Additional Software
          • CODEGRIP WiFi license
          • CODEGRIP SSL license
          • Visual TFT
          • Visual TFT AI
          • Visual GLCD
          • Package Manager
          • mikroBootloader
          • CAN calculator
          • GLCD Font Creator
          • Timer Calculator
          • MikroPlot
      • AVR
        • C
          • NECTO Studio
          • mikroC PRO for AVR
        • Basic
          • mikroBasic PRO for AVR
        • Pascal
          • mikroPascal PRO for AVR
        • Additional Software
          • CODEGRIP WiFi license
          • CODEGRIP SSL license
          • Visual TFT
          • Visual GLCD
          • Package Manager
          • mikroBootloader
          • CAN calculator
          • GLCD Font Creator
          • Timer Calculator
          • MikroPlot
      • FT90x
        • C
          • mikroC PRO for FT90x
        • Basic
          • mikroBasic PRO for FT90x
        • Pascal
          • mikroPascal PRO for FT90x
        • Additional Software
          • CODEGRIP WiFi license
          • CODEGRIP SSL license
          • Visual TFT
          • Visual GLCD
          • Package Manager
          • mikroBootloader
          • CAN calculator
          • GLCD Font Creator
          • Timer Calculator
          • MikroPlot
      • 8051
        • C
          • mikroC PRO for 8051
        • Basic
          • mikroBasic PRO for 8051
        • Pascal
          • mikroPascal PRO for 8051
        • Additional Software
          • CODEGRIP WiFi license
          • CODEGRIP SSL license
          • Visual TFT
          • Visual GLCD
          • Package Manager
          • mikroBootloader
          • CAN calculator
          • GLCD Font Creator
          • Timer Calculator
          • MikroPlot
    • Dev Boards
      • PIC (8-bit)
        • 8th Generation
          • Fusion for PIC v8
          • EasyPIC PRO v8
          • EasyPIC PRO v8 over USB-C
          • EasyPIC v8
          • EasyPIC v8 over USB-C
          • UNI-DS v8
          • UNI-DS v8 over USB-C
        • 7th Generation
          • EasyPIC PRO v7a
          • PICPLC16 v7a
          • EasyPIC v7a
          • EasyPIC PRO v7
          • EasyPIC v7
        • 6th Generation
          • PICPLC16 v6
      • dsPIC/PIC24 (16-bit)
        • 8th Generation
          • EasyPIC v8 PIC24/dsPIC33
          • EasyPIC v8 for dsPIC30
          • EasyPIC v8 for dsPIC30 over USB-C
          • Fusion for PIC v8
          • UNI-DS v8
          • UNI-DS v8 over USB-C
        • 7th Generation
          • EasyPIC Fusion v7
          • EasyPIC v7 for dsPIC30
        • 6th Generation
          • Easy24-33 v6
      • PIC32 (32-bit)
        • 8th Generation
          • Fusion for PIC32
          • Fusion for PIC32 over USB-C
          • Fusion for PIC v8
          • UNI-DS v8
          • UNI-DS v8 over USB-C
        • 7th Generation
          • EasyPIC Fusion v7
      • ARM (32-bit)
        • 8th Generation
          • Fusion for ARM v8
          • Fusion for ARM v8 over USB-C
          • Fusion for STM32 v8
          • Fusion for STM32 over USB-C
          • Fusion for KINETIS v8
          • Fusion for Kinetis v8 over USB-C
          • Fusion for TIVA v8
          • Fusion for TIVA v8 over USB-C
          • UNI-DS v8
          • UNI-DS v8 over USB-C
        • 7th Generation
          • EasyMx PRO v7a STM32
          • EasyMx PRO v7 STM32
          • EasyMx PRO v7 Tiva
      • AVR (8-bit)
        • 8th Generation
          • EasyAVR v8
          • EasyAVR PRO v8
          • EasyAVR PRO v8 over USB-C
          • UNI-DS v8
          • UNI-DS v8 over USB-C
        • 7th Generation
          • EasyAVR v7
        • 6th Generation
          • AVRPLC16 v6
      • 8051 (8-bit)
        • 7th generation
          • BIG8051
        • 6th Generation
          • Easy8051 v6
      • PSoC (8-bit)
        • 6th Generation
          • UNI-DS6 Development System
      • RISC-V (32bit)
        • 8th Generation
          • UNI-DS v8
          • UNI-DS v8 over USB-C
      • Universal Boards
        • 8th Generation
          • UNI-DS v8
          • UNI-DS v8 over USB-C
          • Fusion for PIC v8
          • Fusion for ARM v8
        • 7th Generation
          • EasyPIC Fusion v7
        • 6th Generation
          • UNI-DS6
          • mikroBoard for PIC 80-pin
          • mikroBoard for AVR
          • mikroBoard for dsPIC
          • mikroBoard for PSoC
          • mikroBoard for 8051
          • mikroBoard for PIC 40-pin
          • mikroBoard for ARM
          • mikroBoard for ARM 144-pin
      • IoT - Wearable
        • Hexiwear
          • Hexiwear
          • Hexiwear Power User Pack
          • Hexiwear Docking Station
          • Hexiwear Battery Pack
          • Hexiwear Color Pack
          • Hexiwear Workstation
      • Analog Boards
        • 7th Generation
          • Analog System Lab Kit PRO
    • Starter Boards
      • PIC (8-bit)
        • Clicker
          • PIC clicker
        • Clicker 2
          • Clicker 2 for PIC18FJ
          • Clicker 2 for PIC18FK
        • Clicker 4
          • Clicker 4 for PIC18F
          • UNI Clicker
        • Ready
          • Ready for PIC Board
          • Ready for PIC (DIP28)
          • PIC-Ready2 Board
          • MMC Ready Board
        • StartUSB
          • StartUSB for PIC
      • dsPIC/PIC24 (16-bit)
        • Clicker 2
          • Clicker 2 for PIC24
          • Clicker 2 for dsPIC33
        • Clicker 4
          • UNI Clicker
        • Ready
          • dsPIC-Ready1 Board
          • dsPIC-Ready2 Board
          • DsPIC-Ready3 Board
          • dsPIC-Ready4 Board
      • PIC32 (32-bit)
        • Clicker
          • PIC32MX clicker
          • 6LoWPAN Clicker
          • PIC32MZ clicker
        • Clicker 2
          • Clicker 2 for PIC32MX
          • Clicker 2 for PIC32MZ
        • Clicker 4
          • UNI Clicker
        • MINI
          • MINI-32 Board
          • MINI-32 for PIC32MZ
        • Flip&Click
          • Flip&Click PIC32MZ
      • ARM (32-bit)
        • Clicker
          • RA4M1 Clicker
          • Kinetis Clicker
          • MSP432 Clicker
          • CEC1702 clicker
          • CEC1302 Clicker
          • STM32 M4 clicker
        • Clicker 2
          • Clicker 2 for STM32
          • Clicker 2 for Kinetis
          • Clicker 2 for CEC1702
          • Clicker 2 for MSP432
          • Clicker 2 for CEC1302
          • Clicker 2 for PSoC 6
        • Clicker 4
          • Clicker 4 for STM32F745VG
          • Clicker 4 for STM32F4
          • Clicker 4 for TMPM3H
          • Clicker 4 for TMPM4K
          • Clicker 4 for STM32
          • UNI Clicker
        • MINI
          • MINI-M4 for STM32
          • MINI-M4 For Kinetis
          • MINI-M4 for Tiva
          • MINI-M4 for Stellaris
          • MINI-M4 for MSP432
          • MINI-M0 for STM32
        • Flip&Click
          • Flip&Click SAM3X
      • AVR (8-bit)
        • Clicker 4
          • UNI Clicker
        • MINI
          • MINI-AT Board - 3.3V
          • MINI-AT Board - 5V
        • Ready
          • Ready for AVR Board
          • Ready For XMEGA
          • mikroXMEGA Board
          • AVR-Ready2 Board
        • StartUSB
          • StartUSB for AVR
      • 8051 (8-bit)
        • Ready
          • 8051-Ready Board
      • FT90x (32-bit)
        • Clicker 2
          • Clicker 2 for FT90x
      • Miscellaneous
        • USB
          • USB Wizard
          • Quail
          • FlowPaw Kit
      • Universal Boards
        • Clicker 4
          • UNI Clicker
    • Prog-Debug
      • PIC (8-bit)
        • CODEGRIP
          • UNI CODEGRIP
          • UNI CODEGRIP - USB-C
          • CODEGRIP for PIC
          • CODEGRIP for PIC USB-C
        • mikroProg
          • mikroProg for PIC
      • dsPIC/PIC24 (16-bit)
        • CODEGRIP
          • UNI CODEGRIP
          • UNI CODEGRIP - USB-C
          • CODEGRIP for PIC
        • mikroProg
          • mikroProg for dsPIC
      • PIC32 (32-bit)
        • CODEGRIP
          • UNI CODEGRIP
          • UNI CODEGRIP - USB-C
          • CODEGRIP for PIC
          • CODEGRIP for PIC USB-C
        • mikroProg
          • mikroProg for PIC32
      • ARM (32-bit)
        • CODEGRIP
          • UNI CODEGRIP
          • UNI CODEGRIP USB-C
          • CODEGRIP for ARM
          • CODEGRIP for ARM USB-C
          • CODEGRIP for STM32
          • CODEGRIP for KINETIS
          • CODEGRIP for Tiva
          • CODEGRIP for Tiva USB-C
        • mikroProg
          • mikroProg for STM32
          • mikroProg for Tiva
          • mikroProg for Kinetis
          • mikroProg for CEC
          • mikroProg for MSP432
          • mikroProg for PSoC 5LP
      • AVR (8-bit)
        • CODEGRIP
          • CODEGRIP for AVR
          • CODEGRIP for AVR - USB-C
          • UNI CODEGRIP
          • UNI CODEGRIP - USB-C
        • mikroProg
          • mikroProg for AVR
      • 8051 (8-bit)
        • mikroProg
          • mikroProg for 8051
      • FT90x (32-bit)
        • mikroProg
          • mikroProg for FT90x
    • Smart Displays
      • 2.8"
        • ARM (32-bit)
        • AVR (8-bit)
        • dsPIC/PIC24 (16-bit)
        • PIC (8-bit)
        • PIC32 (32-bit)
      • 3.5"
        • ARM (32-bit)
        • FT90x (32-bit)
        • PIC (8-bit)
        • PIC32 (32-bit)
      • 4.3"
        • ARM (32-bit)
        • FT90x (32-bit)
        • PIC (8-bit)
        • PIC32 (32-bit)
      • 5"
        • ARM (32-bit)
        • FT90x (32-bit)
        • PIC32 (32-bit)
      • 7"
        • ARM (32-bit)
        • FT90x (32-bit)
    • MCU Cards
      • PIC (8-bit)
        • 8th Generation
        • 7th Generation
        • 6th Generation
      • dsPIC/PIC24 (16-bit)
        • 8th Generation
        • 7th Generation
        • 6th Generation
      • PIC32 (32-bit)
        • 8th Generation
        • 7th Generation
      • ARM (32-bit)
        • 8th Generation
        • 7th Generation
      • AVR (8-bit)
        • 8th Generation
      • RISC-V (32bit)
        • 8th Generation
    • Accessories
      • TFT Displays
      • LCD Displays
      • LED Displays
      • E-Paper Displays
      • Sensors
      • Headers and Connectors
      • Wire Jumpers and Cables
      • Antennas
      • Batteries
      • RFID/NFC
      • Proto
      • Motors
      • Storage
      • Power
      • Adapters
      • Interface
      • Input/Output
      • Miscellaneous
      • FANware
      • MCUs
      • Books
    • Kits
      • PIC Kits
      • dsPIC/PIC24 Kits
      • PIC32 Kits
      • ARM Kits
      • AVR Kits
      • FT90x Kits
      • 8051 Kits
  • Shop
  • EmbeddedWiki
  • Support
    • Helpdesk
    • Contact us
    • Forum
    • LibStock
    • Learn
    • Let's make
    • Books
  • Services
    • Planet Debug
    • Design Service
    • Product Customization
    • Contract Manufacturing
    • Premium Technical Support
  • News
  • My profile
  • Privacy settings
  • Activity
  • Sign out

Your shoppingcart is empty.
Continue shopping.

MikroElektronika white logo
  • Products
    • click boards icon Click Boards
      • Wireless Connectivity
        • GPS/GNSS
        • GSM/LTE
        • LTE IoT
        • BT/BLE
        • WiFi
        • RFID/NFC
        • GSM+GPS
        • 6LoWPAN
        • ZigBee
        • UWB
        • SigFox
        • Sub-1 GHz Transceievers
        • 2.4 GHz Trancevers
        • LoRa
        • WiFi+BLE
      • Sensors
        • Biometrics
        • Gas
        • Magnetic
        • Motion
        • Optical
        • Pressure
        • Proximity
        • Temperature & humidity
        • Current sensor
        • Miscellaneous
        • Environmental
        • Force
        • Inductance
        • RF meter
        • Click Shields
        • Click Bundles
      • Interface
        • Adapter
        • CAN
        • Port expander
        • RS485
        • USB
        • 1-Wire
        • RS232
        • Ethernet
        • LIN
        • PWM
        • Current
        • DALI
        • I2C
        • Fiber optics
        • SPI
        • DMX
        • CXPI
        • Click Shields
        • Click Bundles
      • Display & LED
        • LED Drivers
        • LED Matrix
        • LED Segment
        • OLED
        • LCD
        • TFT
        • Click Shields
        • Click Bundles
      • Miscellaneous
        • Relay
        • Optocoupler
        • ID
        • Proto
        • Encryption
        • Click Shields
        • Click Bundles
      • Mixed Signal
        • ADC
        • Measurements
        • DAC
        • Digital potentiometer
        • ADC-DAC
        • Click Shields
        • Click Bundles
      • Storage
        • EEPROM
        • FLASH
        • FRAM
        • microSD
        • MRAM
        • SRAM
        • EERAM
        • ReRAM
        • DRAM
        • Click Shields
        • Click Bundles
      • Motor Control
        • Brushed
        • Brushless
        • Servo
        • Stepper
        • Click Shields
        • Click Bundles
      • Audio & Voice
        • Amplifier
        • Microphone
        • Speakers
        • Signal Processing
        • Speech recognition
        • FM
        • MP3
        • Click Shields
        • Click Bundles
      • HMI
        • Capacitive
        • Pushbutton/Switches
        • Potentiometers
        • Rotary encoder
        • Haptic
        • Fingerprint
        • Click Shields
        • Click Bundles
      • Clock & Timing
        • RTC
        • Clock generator
        • Click Shields
        • Click Bundles
      • Power Management
        • Battery charger
        • Boost
        • Buck
        • Linear
        • Buck-Boost
        • Wireless Charging
        • Power Switch
        • USB-C PD
        • Click Shields
        • Click Bundles
      • Click Bundles
      • Click Shields
    • necto icon NECTO
      • NECTO Studio
    • compilers icon Compilers
      • PIC
        • C
          • NECTO Studio
          • mikroC PRO for PIC
        • Basic
          • mikroBasic PRO for PIC
        • Pascal
          • mikroPascal PRO for PIC
        • Additional Software
          • CODEGRIP WiFi license
          • CODEGRIP SSL license
          • Visual TFT
          • Visual TFT AI
          • Visual GLCD
          • Package Manager
          • mikroBootloader
          • CAN calculator
          • GLCD Font Creator
          • Timer Calculator
          • MikroPlot
      • dsPIC/PIC24
        • C
          • NECTO Studio
          • mikroC PRO for dsPIC
        • Basic
          • mikroBasic PRO for dsPIC
        • Pascal
          • mikroPascal PRO for dsPIC
        • Additional Software
          • CODEGRIP WiFi license
          • CODEGRIP SSL license
          • Visual TFT
          • Visual GLCD
          • Package Manager
          • mikroBootloader
          • CAN calculator
          • GLCD Font Creator
          • Timer Calculator
          • MikroPlot
      • PIC32
        • C
          • NECTO Studio
          • mikroC PRO for PIC32
        • Basic
          • mikroBasic PRO for PIC32
        • Pascal
          • mikroPascal PRO for PIC32
        • Additional Software
          • CODEGRIP WiFi license
          • CODEGRIP SSL license
          • Visual TFT
          • Visual GLCD
          • Package Manager
          • mikroBootloader
          • CAN calculator
          • GLCD Font Creator
          • Timer Calculator
          • MikroPlot
      • ARM
        • C
          • NECTO Studio
          • mikroC PRO for ARM
        • Basic
          • mikroBasic PRO for ARM
        • Pascal
          • mikroPascal PRO for ARM
        • Additional Software
          • CODEGRIP WiFi license
          • CODEGRIP SSL license
          • Visual TFT
          • Visual TFT AI
          • Visual GLCD
          • Package Manager
          • mikroBootloader
          • CAN calculator
          • GLCD Font Creator
          • Timer Calculator
          • MikroPlot
      • AVR
        • C
          • NECTO Studio
          • mikroC PRO for AVR
        • Basic
          • mikroBasic PRO for AVR
        • Pascal
          • mikroPascal PRO for AVR
        • Additional Software
          • CODEGRIP WiFi license
          • CODEGRIP SSL license
          • Visual TFT
          • Visual GLCD
          • Package Manager
          • mikroBootloader
          • CAN calculator
          • GLCD Font Creator
          • Timer Calculator
          • MikroPlot
      • FT90x
        • C
          • mikroC PRO for FT90x
        • Basic
          • mikroBasic PRO for FT90x
        • Pascal
          • mikroPascal PRO for FT90x
        • Additional Software
          • CODEGRIP WiFi license
          • CODEGRIP SSL license
          • Visual TFT
          • Visual GLCD
          • Package Manager
          • mikroBootloader
          • CAN calculator
          • GLCD Font Creator
          • Timer Calculator
          • MikroPlot
      • 8051
        • C
          • mikroC PRO for 8051
        • Basic
          • mikroBasic PRO for 8051
        • Pascal
          • mikroPascal PRO for 8051
        • Additional Software
          • CODEGRIP WiFi license
          • CODEGRIP SSL license
          • Visual TFT
          • Visual GLCD
          • Package Manager
          • mikroBootloader
          • CAN calculator
          • GLCD Font Creator
          • Timer Calculator
          • MikroPlot
    • dev boards icon Dev Boards
      • PIC (8-bit)
        • 8th Generation
          • Fusion for PIC v8
          • EasyPIC PRO v8
          • EasyPIC PRO v8 over USB-C
          • EasyPIC v8
          • EasyPIC v8 over USB-C
          • UNI-DS v8
          • UNI-DS v8 over USB-C
        • 7th Generation
          • EasyPIC PRO v7a
          • PICPLC16 v7a
          • EasyPIC v7a
          • EasyPIC PRO v7
          • EasyPIC v7
        • 6th Generation
          • PICPLC16 v6
      • dsPIC/PIC24 (16-bit)
        • 8th Generation
          • EasyPIC v8 PIC24/dsPIC33
          • EasyPIC v8 for dsPIC30
          • EasyPIC v8 for dsPIC30 over USB-C
          • Fusion for PIC v8
          • UNI-DS v8
          • UNI-DS v8 over USB-C
        • 7th Generation
          • EasyPIC Fusion v7
          • EasyPIC v7 for dsPIC30
        • 6th Generation
          • Easy24-33 v6
      • PIC32 (32-bit)
        • 8th Generation
          • Fusion for PIC32
          • Fusion for PIC32 over USB-C
          • Fusion for PIC v8
          • UNI-DS v8
          • UNI-DS v8 over USB-C
        • 7th Generation
          • EasyPIC Fusion v7
      • ARM (32-bit)
        • 8th Generation
          • Fusion for ARM v8
          • Fusion for ARM v8 over USB-C
          • Fusion for STM32 v8
          • Fusion for STM32 over USB-C
          • Fusion for KINETIS v8
          • Fusion for Kinetis v8 over USB-C
          • Fusion for TIVA v8
          • Fusion for TIVA v8 over USB-C
          • UNI-DS v8
          • UNI-DS v8 over USB-C
        • 7th Generation
          • EasyMx PRO v7a STM32
          • EasyMx PRO v7 STM32
          • EasyMx PRO v7 Tiva
      • AVR (8-bit)
        • 8th Generation
          • EasyAVR v8
          • EasyAVR PRO v8
          • EasyAVR PRO v8 over USB-C
          • UNI-DS v8
          • UNI-DS v8 over USB-C
        • 7th Generation
          • EasyAVR v7
        • 6th Generation
          • AVRPLC16 v6
      • 8051 (8-bit)
        • 7th generation
          • BIG8051
        • 6th Generation
          • Easy8051 v6
      • PSoC (8-bit)
        • 6th Generation
          • UNI-DS6 Development System
      • RISC-V (32bit)
        • 8th Generation
          • UNI-DS v8
          • UNI-DS v8 over USB-C
      • Universal Boards
        • 8th Generation
          • UNI-DS v8
          • UNI-DS v8 over USB-C
          • Fusion for PIC v8
          • Fusion for ARM v8
        • 7th Generation
          • EasyPIC Fusion v7
        • 6th Generation
          • UNI-DS6
          • mikroBoard for PIC 80-pin
          • mikroBoard for AVR
          • mikroBoard for dsPIC
          • mikroBoard for PSoC
          • mikroBoard for 8051
          • mikroBoard for PIC 40-pin
          • mikroBoard for ARM
          • mikroBoard for ARM 144-pin
      • IoT - Wearable
        • Hexiwear
          • Hexiwear
          • Hexiwear Power User Pack
          • Hexiwear Docking Station
          • Hexiwear Battery Pack
          • Hexiwear Color Pack
          • Hexiwear Workstation
      • Analog Boards
        • 7th Generation
          • Analog System Lab Kit PRO
    • starter boards icon Starter Boards
      • PIC (8-bit)
        • Clicker
          • PIC clicker
        • Clicker 2
          • Clicker 2 for PIC18FJ
          • Clicker 2 for PIC18FK
        • Clicker 4
          • Clicker 4 for PIC18F
          • UNI Clicker
        • Ready
          • Ready for PIC Board
          • Ready for PIC (DIP28)
          • PIC-Ready2 Board
          • MMC Ready Board
        • StartUSB
          • StartUSB for PIC
      • dsPIC/PIC24 (16-bit)
        • Clicker 2
          • Clicker 2 for PIC24
          • Clicker 2 for dsPIC33
        • Clicker 4
          • UNI Clicker
        • Ready
          • dsPIC-Ready1 Board
          • dsPIC-Ready2 Board
          • DsPIC-Ready3 Board
          • dsPIC-Ready4 Board
      • PIC32 (32-bit)
        • Clicker
          • PIC32MX clicker
          • 6LoWPAN Clicker
          • PIC32MZ clicker
        • Clicker 2
          • Clicker 2 for PIC32MX
          • Clicker 2 for PIC32MZ
        • Clicker 4
          • UNI Clicker
        • MINI
          • MINI-32 Board
          • MINI-32 for PIC32MZ
        • Flip&Click
          • Flip&Click PIC32MZ
      • ARM (32-bit)
        • Clicker
          • RA4M1 Clicker
          • Kinetis Clicker
          • MSP432 Clicker
          • CEC1702 clicker
          • CEC1302 Clicker
          • STM32 M4 clicker
        • Clicker 2
          • Clicker 2 for STM32
          • Clicker 2 for Kinetis
          • Clicker 2 for CEC1702
          • Clicker 2 for MSP432
          • Clicker 2 for CEC1302
          • Clicker 2 for PSoC 6
        • Clicker 4
          • Clicker 4 for STM32F745VG
          • Clicker 4 for STM32F4
          • Clicker 4 for TMPM3H
          • Clicker 4 for TMPM4K
          • Clicker 4 for STM32
          • UNI Clicker
        • MINI
          • MINI-M4 for STM32
          • MINI-M4 For Kinetis
          • MINI-M4 for Tiva
          • MINI-M4 for Stellaris
          • MINI-M4 for MSP432
          • MINI-M0 for STM32
        • Flip&Click
          • Flip&Click SAM3X
      • AVR (8-bit)
        • Clicker 4
          • UNI Clicker
        • MINI
          • MINI-AT Board - 3.3V
          • MINI-AT Board - 5V
        • Ready
          • Ready for AVR Board
          • Ready For XMEGA
          • mikroXMEGA Board
          • AVR-Ready2 Board
        • StartUSB
          • StartUSB for AVR
      • 8051 (8-bit)
        • Ready
          • 8051-Ready Board
      • FT90x (32-bit)
        • Clicker 2
          • Clicker 2 for FT90x
      • Miscellaneous
        • USB
          • USB Wizard
          • Quail
          • FlowPaw Kit
      • Universal Boards
        • Clicker 4
          • UNI Clicker
    • prog-debug icon Prog-Debug
      • PIC (8-bit)
        • CODEGRIP
          • UNI CODEGRIP
          • UNI CODEGRIP - USB-C
          • CODEGRIP for PIC
          • CODEGRIP for PIC USB-C
        • mikroProg
          • mikroProg for PIC
      • dsPIC/PIC24 (16-bit)
        • CODEGRIP
          • UNI CODEGRIP
          • UNI CODEGRIP - USB-C
          • CODEGRIP for PIC
        • mikroProg
          • mikroProg for dsPIC
      • PIC32 (32-bit)
        • CODEGRIP
          • UNI CODEGRIP
          • UNI CODEGRIP - USB-C
          • CODEGRIP for PIC
          • CODEGRIP for PIC USB-C
        • mikroProg
          • mikroProg for PIC32
      • ARM (32-bit)
        • CODEGRIP
          • UNI CODEGRIP
          • UNI CODEGRIP USB-C
          • CODEGRIP for ARM
          • CODEGRIP for ARM USB-C
          • CODEGRIP for STM32
          • CODEGRIP for KINETIS
          • CODEGRIP for Tiva
          • CODEGRIP for Tiva USB-C
        • mikroProg
          • mikroProg for STM32
          • mikroProg for Tiva
          • mikroProg for Kinetis
          • mikroProg for CEC
          • mikroProg for MSP432
          • mikroProg for PSoC 5LP
      • AVR (8-bit)
        • CODEGRIP
          • CODEGRIP for AVR
          • CODEGRIP for AVR - USB-C
          • UNI CODEGRIP
          • UNI CODEGRIP - USB-C
        • mikroProg
          • mikroProg for AVR
      • 8051 (8-bit)
        • mikroProg
          • mikroProg for 8051
      • FT90x (32-bit)
        • mikroProg
          • mikroProg for FT90x
    • smart displays icon Smart Displays
      • 2.8"
        • ARM (32-bit)
        • AVR (8-bit)
        • dsPIC/PIC24 (16-bit)
        • PIC (8-bit)
        • PIC32 (32-bit)
      • 3.5"
        • ARM (32-bit)
        • FT90x (32-bit)
        • PIC (8-bit)
        • PIC32 (32-bit)
      • 4.3"
        • ARM (32-bit)
        • FT90x (32-bit)
        • PIC (8-bit)
        • PIC32 (32-bit)
      • 5"
        • ARM (32-bit)
        • FT90x (32-bit)
        • PIC32 (32-bit)
      • 7"
        • ARM (32-bit)
        • FT90x (32-bit)
    • mcu cards icon MCU Cards
      • PIC (8-bit)
        • 8th Generation
        • 7th Generation
        • 6th Generation
      • dsPIC/PIC24 (16-bit)
        • 8th Generation
        • 7th Generation
        • 6th Generation
      • PIC32 (32-bit)
        • 8th Generation
        • 7th Generation
      • ARM (32-bit)
        • 8th Generation
        • 7th Generation
      • AVR (8-bit)
        • 8th Generation
      • RISC-V (32bit)
        • 8th Generation
    • accessories icon Accessories
      • TFT Displays
      • LCD Displays
      • LED Displays
      • E-Paper Displays
      • Sensors
      • Headers and Connectors
      • Wire Jumpers and Cables
      • Antennas
      • Batteries
      • RFID/NFC
      • Proto
      • Motors
      • Storage
      • Power
      • Adapters
      • Interface
      • Input/Output
      • Miscellaneous
      • FANware
      • MCUs
      • Books
    • kits icon Kits
      • PIC Kits
      • dsPIC/PIC24 Kits
      • PIC32 Kits
      • ARM Kits
      • AVR Kits
      • FT90x Kits
      • 8051 Kits
  • Shop
  • EmbeddedWiki
  • Support
    • Helpdesk
    • Contact us
    • Forum
    • LibStock
    • Learn
    • Let's make
    • Books
  • Services
    • Planet Debug
    • Design Service
    • Product Customization
    • Contract Manufacturing
    • Premium Technical Support
  • News
  • Price :

    More info
Reset filter
  • 0
Authentication
Account

Create account

Forgot your password?

Your cart is empty !
View cart ( )
  1. Home
  2. ebooks
  3. Microcontroladores PIC – Programación en BASIC
  4. 3-8-modulos-de-comunicacion-serie
MikroElektronika books

3.8 Módulos De Comunicación Serie

 7
El microcontrolador PIC 16F887 dispone de varios módulos de comunicación serie independientes, además cada uno se puede configurar a funcionar en modos diferentes. Eso es lo que los hace insustituibles en muchos casos. Acuérdese de lo que hemos dicho sobre los módulos CCP ya que lo mismo se aplica aquí. No se preocupe de los detalles del funcionamiento de todos los módulos, solo seleccione uno y utilice lo que realmente necesita. El USART es uno de los primeros sistemas de comunicación serie. Las versiones nuevas de este sistema están actualizadas y se les denomina un poco diferente - EUSART.

EUSART

al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-87
El módulo Transmisor/Receptor Universal Síncrono/Asíncrono mejorado (Enhanced Universal Synchronous Asynchronous Receiver Transmitter - EUSART) es un periférico de comunicación serie de entrada/salida. Asimismo es conocido como Interfaz de comunicación serie (Serial Communications Interface - SCI). Contiene todos los generadores de señales de reloj, registros de desplazamiento y búfers de datos necesarios para realizar transmisión de datos serie de entrada/salida, independientemente de la ejecución de programa del dispositivo. Como indica su nombre, aparte de utilizar el reloj para la sincronización, este módulo puede establecer la conexión asíncrona, lo que lo hace único para algunas aplicaciones. Por ejemplo, en caso de que sea difícil o imposible proporcionar canales especiales para transmisión y recepción de datos y señales de reloj (por ejemplo, mando a distancia de radio o infrarrojas), el módulo EUSART es definitivamente la mejor opción posible.
El EUSART integrado en el PIC16F887 posee las siguientes características:
  • Transmisión y recepción asíncrona en modo Full-duplex;
  • Caracteres de anchura de 8 – 9 bits programables;
  • Detección de dirección en modo de 9 bits;
  • Detección de errores por saturación del búfer de entrada; y
  • Comunicación Half Duplex en modo síncrono.

EUSART EN MODO ASÍNCRONO

El EUSART transmite y recibe los datos utilizando la codificación de no retorno a cero - NRZ (non-return-to-zero). Como se muestra en la siguiente figura, no se utiliza una señal de reloj y los datos se transmiten de forma muy simple:
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-88
Cada dato se transmite de la siguiente forma:
  • En estado inactivo la línea de datos permanece en estado alto (1);
  • Cada transmisión de datos comienza con un bit de arranque (START), el cual, siempre es cero (0);
  • Cada dato tiene un ancho de 8 o 9 bits (primero se transmite el bit menos significativo- LSB); y
  • Cada transmisión de datos termina con un bit de parada (STOP), el cual, siempre es uno (1).
La siguiente figura muestra cómo conectar de manera habitual un microcontrolador PIC que utiliza el módulo EUSART. El circuito RS-232 se utiliza como un convertidor de nivel de voltaje.
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-89

EUSART EN MODO DE TRANSMISOR ASÍNCRONO

al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-90
Para habilitar la transmisión de datos por medio del módulo EUSART, es necesario configurarlo para que funcione como un transmisor. En otras palabras, es necesario definir el estado de los siguientes bits:
  • TXEN = 1 - El transmisor EUSART se habilita al poner a uno el bit TXEN del registro TXSTA
  • SYNC = 0 - El EUSART se configura a funcionar en modo asíncrono al poner a cero el bit SYNC del registro TXSTA.
  • SPEN = 1 - Al poner a uno el bit SPEN del registro RCSTA, el EUSART está habilitado y el pin TX/CK se configura automáticamente como salida. Si el bit se utiliza simultáneamente para alguna función analógica, se debe deshabilitar al poner a cero el bit correspondiente del registro ANSEL.
La parte central del transmisor EUSART ocupa el registro de desplazamiento TSR que no está directamente disponible al usuario. Para iniciar la transmisión de datos, el módulo debe estar habilitado al poner a uno el bit TXEN del registro TXSTA. Los datos a enviar se deben escribir en el registro TXREG, lo que resultará en la siguiente secuencia de eventos:
  • Byte será transmitido inmediatamente al registro de desplazamiento TSR;
  • El registro TXREG permanece vacío, lo que indica la bandera de bit TXIF del registro PIR1. Si se pone a uno el bit TXIE del registro PIE1, se generará una interrupción. De todos modos, la bandera se pone a uno sin reparar en si una interrupción está habilitada o no y no se puede poner a cero por software, sino al escribir un dato nuevo en el registro TXREG.
  • Dispositivos electrónicos de control “empujan” el dato hacia el pin TX en sincronización con señal de reloj interna: bit de arranque (START) (1).....datos....bit de parada (STOP) (1).
  • Cuando el último bit abandona el registro TSR, el bit TRMT en el registro TXSTA se pone a uno automáticamente.
  • Si mientras tanto se escribe un dato nuevo en el registro TXREG, todo el procedimiento se repite inmediatamente después de la transmisión del bit de parada del dato anterior.
Para transmitir un dato de 9 bits es necesario poner a uno el bit TX9 del registro TXSTA. El bit TX9D del registro TXSRTA es el noveno bit y el más significativo. Al transmitir un dato de 9 bits, el bit de datos TX9D deberá estar escrito antes de que de se escriban los 8 bits menos significativos en el registro TXREG. Todos los nueve bits de datos se transmiten al registro de desplazamiento TSR inmediatamente después de que se acabe la escritura en el registro TXREG.

EUSART EN MODO RECEPTOR ASÍNCRONO

al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-91
Similar al poner en marcha el transmisor del EUSART, para habilitar el receptor es necesario configurar los siguientes bits:
  • CREN = 1 - El receptor EUSART se habilita al poner a uno el bit CREN del registro RCSTA;
  • SYNC = 0 - El EUSART se configura a funcionar en modo asíncrono al poner a cero el bit SYNC del registro TXSTA; y
  • SPEN = 1 - Al poner a uno el bit SPEN del registro RCSTA, el EUSART está habilitado y el pin RX/DT se configura automáticamente como salida. Si el bit se utiliza simultáneamente para alguna función analógica, se debe deshabilitar al poner a cero el bit correspondiente del registro ANSEL.
Después de que se haya terminado el primer paso necesario y se haya detectado el bit de arranque (START), el dato se transmite al registro de desplazamiento RSR por el pin RX. Al haber recibido el bit de parada (STOP), ocurre lo siguiente:
  • El dato se transmite automáticamente al registro RCREG (si está vacío);
  • El bit de bandera RCIF se pone a uno y ocurre una interrupción si está habilitada por el bit RCIE en el registro PIE1. Similar al transmisor, el bit de bandera se pone a cero sólo por software, o sea, al leer el registro RCREG. Tenga en cuenta que esto es un doble registro de tipo FIFO (primero en entrar, primero en salir - first-in, first-out), lo que permite almacenamiento de dos caracteres simultáneamente);
  • Si el registro RCREG está ocupado (contiene dos bytes) y el registro de desplazamiento detecta el nuevo bit de parada (STOP), el bit de sobrescritura OERR se pondrá a uno. En tal caso se pierde un dato nuevo que viene, y el bit OERR debe ponerse a cero por software al poner a cero y luego al poner a uno el bit CREN; Nota: No es posible recibir un dato nuevo sino hasta que el bit OERR esté a uno.
  • Si el bit de parada (STOP) está a cero (0), el bit FERR del registro RCSTA estará a uno, lo que indica un error en recepción; y
  • Para habilitar la recepción de un dato de 9 bits, es necesario poner a uno el bit RX9 del registro RCSTA.

DETECCIÓN DE ERRORES EN RECEPCIÓN

El microcontrolador puede detectar automáticamente dos tipos de errores. El primero es denominado error de encuadre (Framing error). Ocurre cuando el receptor no detecta el bit de parada en un intervalo predeterminado de tiempo. Este error se indica mediante el bit FERR del registro RCSTA. Si el bit está a uno, el último dato recibido puede ser incorrecto. Cabe destacar lo siguiente:
  • El error de encuadre no genera por si mismo una interrupción;
  • Si el bit FERR está a uno, el último dato recibido contiene un error;
  • El error de encuadre (bit está a uno) no impide la recepción de un dato nuevo;
  • El bit FERR se pone a cero al leer el dato recibido, lo que significa que se debe hacer una verificación antes de leer el dato; y
  • El bit FERR no se puede poner a cero por software. Si es necesario, se puede borrar al poner a cero al bit SPEN del registro RCSTA, lo cual, simultáneamente causa una reinicialización del sistema EUSART.
Otro tipo de error es denominado error de sobrescritura (Overrun Error). Como hemos mencionado anteriormente, el registro de tipo FIFO puede almacenar sólo dos caracteres. Un error de sobrescritura ocurre cuando el registro recibe el tercer carácter. Simplemente no hay espacio para almacenar un byte más, por lo que un error es inevitable. Cuando ocurre este error, el bit OERR del registro RCSTA se pone a uno. Las consecuencias son las siguientes:
  • Los datos almacenados en los registros FIFO (2 bytes) se pueden leer normalmente;
  • No se recibirán más datos hasta que el bit OERR esté puesto a cero; y
  • A este bit no se le puede acceder directamente. Para borrarlo, es necesario poner a cero el bit CREN del registro RCSTA o reiniciar el sistema EUSART al poner a cero al bit SPEN del registro RCSTA.

RECEPCIÓN DE DATOS DE 9 BITS

Aparte de recibir los datos de forma estándar de 8 bits, el sistema EUSART soporta la recepción de datos de 9 bits. En el lado del transmisor, el noveno bit “se adjunta” al byte ori-ginal directamente antes del bit de parada. En el lado del receptor, al poner a uno el bit RX9 del registro RCSTA, el noveno bit de datos será automáticamente escrito en el bit RX9D del mismo registro. Después de almacenar este byte, es necesario tener cuidado en como leer estos bits - primero se debe leer el bit RX9D y luego los ocho (8) bits menos significativos del registro RCREG. De otra forma, el noveno bit será puesto a cero antes de ser leído.
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-92

DETECCIÓN DE DIRECCIÓN

Cuando el bit ADDEN del registro RCSTA está a uno, el modulo EUSART es capaz de recibir sólo los datos de 9 bits, mientras que se ignoran todos los datos de 8 bits. Aunque parece una restricción, este modo habilita la comunicación serial entre varios microcontroladores. El principio de funcionamiento es muy simple. El dispositivo maestro envía un dato de 9 bits que representa la dirección de un microcontrolador esclavo. No obstante, todos deben tener el bit ADDEN puesto a uno, ya que de esta manera se habilita la detección de dirección. Todos los microcontroladores esclavos que comparten la misma línea de transmisión, reciben este dato (dirección) y verifican automáticamente si coincide con su propia dirección. El software, en el que ocurre la coincidencia de dirección, debe deshabilitar la detección de dirección, poniendo a cero el bit ADDEN.
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-93
El dispositivo maestro sigue enviando los datos de 8 bits al microcontrolador. Todos los datos que pasan por la línea de transmisión serán recibidos sólo por el módulo EUSART direccionado. Una vez recibido el último byte, el microcontrolador esclavo debe poner a uno el bit ADDEN para habilitar de nuevo la detección de dirección.
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-94

Registro TXSTA

al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-95
CSRC - Clock Source Select bit - (bit de selección de la fuente de reloj) determina la fuente del reloj. Se utiliza sólo en modo sincrónico.
  • 1 - Modo Maestro. Reloj generado internamente por el generador de tasa de baudios.
  • 0 - Modo Esclavo. Reloj proveniente de una fuente externa.
TX9 - 9-bit Transmit Enable bit (bit de habilitación del modo de 9 bits en transmisión)
  • 1 - Se habilita el modo de 9 bits en transmisión por el sistema EUSART.
  • 0 - Se habilita el modo de 8 bits en transmisión por el sistema EUSART.
TXEN - Transmit Enable bit (Bit de habilitación de transmisión)
  • 1 - Transmisión habilitada.
  • 0 - Transmisión deshabilitada.
SYNC - EUSART Mode Select bit (Bit de selección del modo EUSART)
  • 1 - El EUSART funciona en modo síncrono
  • 0 - El EUSART funciona en modo asíncrono.
SENDB - Send Break Character bit (Bit de envío de carácter Break en modo asíncrono) se utiliza sólo en modo asíncrono y cuando se requiere obedecer el estándar de bus LIN.
  • 1 - Se enviará un carácter Break en la próxima transmisión (se pone a 0 por hardware cuando finaliza el envío)
  • 0 - Envío del carácter de transmisión Break completado.
BRGH - High Baud Rate Select bit (bit de selección de modo de alta velocidad en modo asíncrono). Determina la velocidad de transmisión en modo síncrono. No afecta al EUSART en modo síncrono.
  • 1 - EUSART funciona a alta velocidad.
  • 0 - EUSART funciona a baja velocidad.
TRMT - Transmit Shift Register Status bit (bit de estado de registro de desplazamiento de transmisión)
  • 1 - Registro TSR está vacío.
  • 0 - Registro TSR está lleno.
TX9D - Ninth bit of Transmit Data (Valor del noveno bit en transmisión) Puede ser utilizado como dirección o bit de paridad o para distinguir entre dirección o dato en los buses maestro-esclavo).
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-96

Registro RCSTA

al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-97
SPEN - Serial Port Enable bit (bit de habilitación del puerto serie)
  • 1 - Puerto serie habilitado. Los pines RX/DT y TX/CK se configuran automáticamente como entrada y salida, respectivamente.
  • 0 - Puerto serie deshabilitado.
RX9 - 9-bit Receive Enable bit (bit de habilitación del modo de 9 bits en recepción):
  • 1 - Se habilita la recepción de datos de 9 bits por medio del sistema EUSART.
  • 0 - Se habilita la recepción de datos de 8 bits por medio del sistema EUSART.
SREN - Single ReceiveEnable bit (bit de habilitación de la recepción simple). Es utilizado msólo en modo sincrónico y en funcionamiento como Maestro.
  • 1 - Recepción simple habilitada.
  • 0 - Recepción simple deshabilitada.
CREN - Continuous Receive Enable bit (bit de habilitación de la recepción continua) actúa dependiendo del modo EUSART Modo asíncrono:
  • 1 - Recepción habilitada.
  • 0 - Recepción deshabilitada.
Modo síncrono:
  • 1 - Se habilita la recepción continua hasta que el bit CREN esté a cero.
  • 0 - No se habilita la recepción en forma continua.
ADDEN - Address Detect Enable bit (bit de habilitación de la detección de dirección) se utiliza sólo en modo de detectar la dirección.
  • 1 - Habilita la detección de dirección (sólo se procesa un byte recibido en el registro de desplazamiento de recepción si el noveno bit está a uno)
  • 0 - Detección de dirección deshabilitada (todos los bytes recibidos en el registro de desplazamiento de recepción son procesados independientemente del valor del noveno bit recibido). El noveno bit se utiliza como bit de paridad.
FERR - Framing Error bit (bit de error de encuadre)
  • 1 - Se ha producido un error de encuadre en recepción.
  • 0 - No se ha producido un error de encuadre.
OERR - Overrun Error bit (bit de error de sobrescritura).
  • 1 - Se ha producido un error de sobrescritura en recepción.
  • 0 - No se ha producido un error de sobrescritura.
RX9D - Ninth bit of Received Data (valor del noveno bit recibido) puede ser utilizado como bit de dirección o de paridad. El siguiente diagrama muestra tres palabras que aparecen en la entrada RX. El búfer de recepción de datos será leído después de la tercera palabra, lo que causa poner a uno el bit OEER (bit de error de sobrescritura).
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-98

GENEREADOR DE BAUDIOS DEL EUSART (BRG)

Si mira atentamente al diagrama del receptor o transmisor EUSART asíncrono, verá que los ambos utilizan señal de reloj del temporizador local BRG para la sincronización. La misma fuente de reloj se utiliza también en modo síncrono. El temporizador BRG consiste en dos registros de 8 bits haciendo un registro de 16 bits.
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-99
El valor de un número escrito en estos dos registros determinará la velocidad de transmisión en baudios. Adicionalmente, el bit BRGH del registro TXSTA y el bit BRGH16 del registro BAUDCTL, afectan la frecuencia de reloj utilizada para el cálculo de los baudios. Las tablas en las siguientes páginas contienen los valores que deben estar escritos en el registro de 16 bits SPBRG y asignados a los bits SYNC, BRGH y BRGH16 para obtener algunos valores de la velocidad de transmisión en baudios estándar. La fórmula para hacer el cálculo de la velocidad de transmisión en baudios:
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-100

Ejemplo

Para un dispositivo en modo asíncrono con una frecuencia de reloj de 16MHz y velocidad de transimisión de datos en baudios de 9600, el Generados de baudios (BRG) se calcula de la siguiente manera:al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-100a al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-101 al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-102 al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-103 al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-104 al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-105 al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-106 al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-107 al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-108

Registro BAUDCTL

al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-109
ABDOVF - Auto-Baud Detect Overflow bit (bit de desbordamiento de auto-detección de la velocidad de transmisión) se utiliza sólo en modo asíncrono durante la detección de la velocidad de transmisión.
  • 1 -Se ha producido desbordamiento durante la auto-detección.
  • 0 -No se ha producido desbordamiento durante la auto-detección.
RCIDL - Receive Idle Flag bit (bit de estado de la operación de recepción) se utiliza sólo en modo asíncrono.
  • 1 - Receptor en estado inactivo. No hay operación de recepción en marcha.
  • 0 - Se ha recibido el bit de arranque (START) y hay una operación de recepción en marcha.
SCKP - Synchronous Clock Polarity Select bit (bit de selección de polaridad de la señal de reloj en modo síncrono). El estado lógico de este bit difiere dependiendo de cuál modo de EUSART está activo Modo asíncrono:
  • 1 - El dato invertido se transmite al pin RC6/TX/CK.
  • 0 - El dato no invertido se transmite al pin RC6/TX/CK.
Modo síncrono:
  • 1 - Sincronización en el flanco ascendente de la señal de reloj.
  • 0 - Sincronización en el flanco descendente de la señal de reloj.
BRG16 16-bit Baud Rate Generator bit - (bit de habilitación del generador de velocidad de transmisión de 16 bits) determina si el registro SPBRGH se utilizará, o sea si el temporizador BGRG tendrá 8 o 16 bits.
  • 1 - Se utiliza el generador de velocidad de transmisión de 16 bits.
  • 0 - Se utiliza el generador de velocidad de transmisión de 8 bits.
WUE Wake-up Enable bit (bit de habilitación del modo de auto-activación en modo asíncrono):
  • 1 - Modo de auto-activación habilitado. El receptor espera a que el flanco descendente aparezca en el pin RC7/RX/DT para que el microcontrolador se despierte del modo de reposo
  • 0 - Modo de auto-activación habilitado. El receptor funciona normalmente.
ABDEN - Auto-Baud Detect Enable bit (bit de habilitación de auto-detección de velocidad de transmisión) se utiliza sólo en modo asíncrono.
  • 1 - Modo de auto-detección habilitado. Al detectar la velocidad de transmisión, el bit se pone a uno automáticamente.
  • 0 - Modo de auto-detección deshabilitado.
Vamos a hacerlo en mikroBasic...
'En este ejemplo, el módulo EUSART interno se inicializa y se ajusta para enviar el
'mensaje inmediatamente después de recibirlo. La velocidad de transmisión en baudios 
'se ajusta a 9600 bps. El programa utiliza las siguientes rutinas de librería UART:  
'UART1_init(), UART1_Write_Text(), UART1_Data_Ready(), UART1_Write() y UART1_Read().

dim uart_rd as byte
main:
ANSEL,ANSELH = 0              ' Todos los pines AN se configuran como digitales
CM1CON0.C1ON = 0              ' Deshabilitar los comparadores
CM2CON0.C2ON = 0
UART1_Init(9600)              ' Inicializar el módulo UART a 9600 bps
Delay_ms(100)                 ' Esperar a que señal de reloj del módulo UART se ponga estable
UART1_Write_Text("Start")
while 1                       ' Bucle infinito 
if (UART1_Data_Ready()        ' Si el dato se ha recibido,
uart_rd = UART1_Read()        ' léalo,
end if
UART1_Write(uart_rd)          ' y envíelo atrás por el UART
wend
...

En breve

Transmisión serial asíncrona a través de los registros del módulo EUSART

  1. La velocidad de transmisión deseada deberá estar ajustada a través de los bits BRGH (del registro TXSTA) y BRG16 (del registro BAUDCTL) y de los registros SPBRGH y SPBRG.
  2. El bit SYNC (del registro TXSTA) deberá estar puesto a cero y el bit SPEN (del registro RCSTA) deberá estar puesto a uno (1) a fin de habilitar el puerto serie.
  3. Para una transmisión de datos de 9 bits, el bit TX9 (del registro TXSTA) deberá estar puesto a uno (1)
  4. La transmisión de datos es habilitada poniendo a uno el bit TXEN del registro TXSTA. El bit TXIF del registro PIR1 está automáticamente puesto a uno.
  5. Para que el bit TXEN cause una interrupción, tanto el bit TXIE del registro PIE1 como los bits GIE, PEIE del registro INTCON deberán estar puestos a uno.
  6. En una transmisión de datos de 9 bits, el valor del noveno bit deberá estar escrito en el bit TX9D del registro TXSTA.
  7. La transmisión comienza cuando se escribe el dato de 8 bits sobre el registro de recepción TXREG.

Recepción serial asíncrona a través de los registros del módulo EUSART:

  1. La velocidad de transmisión deseada deberá estar ajustada a través de los bits BRGH (del registro TXSTA) y BRG16 (del registro BAUDCTL) y de los registros SPBRGH y SPBRG.
  2. El bit SYNC (del registro TXSTA) deberá estar puesto a cero y el bit SPEN (del registro RCSTA) deberá estar puesto a uno a fin de habilitar el puerto serie.
  3. Tanto el bit RCIE del registro PIE1 como los bits GIE y PEIE del registro INTCON deberán estar puestos a uno si se necesita habilitar que la recepción de dato cause una interrupción.
  4. Para una recepción de datos de 9 bits, el bit RX9 (del registro RCSTA) deberá estar puesto a uno.
  5. La recepción de datos es habilitada poniendo a uno el bit CREN del registro RCSTA.
  6. El registro RCSTA deberá leerse para obtener información acerca de la ocurrencia de errores durante la recepción. Para una recepción de datos de 9 bits, El valor del noveno bit será almacenado en este registro.
  7. El dato de 8 bits recibido será almacenado en el registro RCREG y deberá leerse para obtener dicho dato.

Ajustar el modo de detección de dirección:

  1. La velocidad de transmisión deseada deberá estar ajustada a través de los bits BRGH (del registro TXSTA) y BRG16 (del registro BAUDCTL) y de los registros SPBRGH y SPBRG.
  2. El bit SYNC (del registro TXSTA) deberá estar puesto a cero y el bit SPEN (del registro RCSTA) deberá estar puesto a uno (1) a fin de habilitar el puerto serie.
  3. Tanto el bit RCIE del registro PIE1 como los bits GIE y PEIE del registro INTCON deberán estar puestos a uno si se necesita habilitar que la recepción de dato cause una interrupción.
  4. El bit RX9 del registro RCSTA debe estar a uno.
  5. El bit ADDEN del registro RCSTA debe estar a uno, lo que habilita que un dato sea reconocido como dirección.
  6. La recepción de datos es habilitada poniendo a uno el bit CREN del registro RCSTA.
  7. Tan pronto como se reciba un dato de 9 bits, el bit RCIF del registro PIR1 estará automáticamente puesto a uno. Si está habilitada se produce una interrupción.
  8. El registro RCSTA deberá leerse para obtener información acerca de la ocurrencia de errores durante la transmisión. El noveno bit RX9D siempre estará a uno.
  9. El dato de 8 bits recibido será almacenado en el registro RCREG y deberá leerse. Se deberá comprobar si la combinación de estos bits coincide con la dirección predefinida. Si coincide, es necesario poner a cero el bit ADDEN del registro RCSTA, lo que habilita la recepción de datos de 8 bits.

MÓDULO PUERTO SERIE SÍNCRONO MAESTRO (MSSP)

El MSSP (Puerto serie síncrono maestro - Master Synchronous Serial Port) es un módulo muy útil, y a la vez uno de los circuitos más complejos dentro del microcontrolador. Este módulo permite la comunicación de alta velocidad entre un microcontrolador y otros pe-riféricos u otros microcontroladores al utilizar varias líneas de E/S (como máximo dos o tres líneas). Por eso, se utiliza con frecuencia para conectar el microcontrolador a los visualizadores LCD, los convertidores A/D, las memorias EEPROM seriales, los registros de desplazamiento etc. La característica principal de este tipo de comunicación es que es síncrona y adecuada para ser utilizada en sistemas con un sólo maestro y uno o más esclavos. Un dispositivo maestro contiene un circuito para generación de baudios y además, suministra señales de reloj a todos los dispositivos del sistema. Los dispositivos esclavos no disponen de un circuito interno para generación de señales de reloj. El módulo MSSP puede funcionar en uno de dos modos:
  • modo SPI (Interfaz periférica serial - Serial Peripheral Interface); y
  • modo I2C (Circuito inter-integrado - Inter-Integrated Circuit).
Como se muestra en la siguiente figura, un módulo MSSP representa sólo una mitad de un hardware necesario para establecer una comunicación serial, mientras que la otra mitad se almacena en el dispositivo con el que intercambia los datos. Aunque los módulos en ambas puntas de línea son los mismos, sus modos de funcionamiento difieren esencialmente dependiendo de si el módulo funciona como Maestro o como Esclavo: Si el microcontrolador a ser programado controla otro dispositivo o circuito (periféricos), deberá funcionar como un dispositivo maestro. Este módulo generará señal de reloj cuando sea necesario, o sea sólo cuando se requiera recibir y transmitir los datos por software. Por consiguiente, el establecimiento de conexión depende únicamente del dispositivo maestro.
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-110
De lo contrario, si el microcontrolador a ser programado está integrado en un dispositivo más complejo (por ejemplo en una PC), deberá funcionar como un dispositivo esclavo. Como tal, un esclavo siempre tiene que esperar a que un dispositivo maestro envíe la solicitud de transmisión de datos.

MODO SPI

El modo SPI permite la transmisión y recepción simultánea de datos de 8 bits al utilizar tres líneas de entrada/salida:
  • SDO - Serial Data Out (salida de datos serie )- línea de transmisión;
  • SDI - Serial Data In (entrada de datos serie) - línea de recepción; y
  • SCK - Serial Clock (reloj de comunicación) - línea de sincronización.
Adicionalmente, hay una cuarta línea (SS) que se puede utilizar si el microcontrolador intercambia los datos con varios dispositivos periféricos. Refiérase a la siguiente figura. SS - Slave Select (Selección de esclavo) - Es una línea adicional utilizada para la selección de un dispositivo específico. Esta línea está activa sólo si el microcontrolador funciona como esclavo, o sea cuando el dispositivo externo - maestro requiere intercambiar los datos. Al funcionar en modo SPI, el módulo MSSP utiliza 4 registros en total:
  • SSPSTAT - registro de estado
  • SSPCON - registro de control
  • SSPBUF - búfer serie de transmisión/recepción
  • SSPSR - registro de desplazamiento (no es accesible directamente)
Los primeros tres registros son de lectura/escritura y se pueden modificar en cualquier momento, mientras que el cuarto, como no es accesible, se utiliza para convertir datos en formato serial.
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-111
Como se muestra en la siguiente figura, la parte central del módulo SPI consiste de dos re-gistros conectados a los pines para recepción, transmisión y sincronización.
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-112
El registro de desplazamiento (SSPRS) está directamente conectado a los pines del microcontrolador y es utilizado para transmisión de datos en formato serie. El registro SSPRS dispone de la entrada y salida para desplazar los datos hacia dentro y hacia fuera del dispositivo. En otras palabras, cada bit que aparece en la entrada (línea de recepción) desplaza simultáneamente otro bit hacia la salida (línea de transmisión). El registro SSPBUF (Búfer) es una parte de memoria utilizada para almacenar temporalmente los datos antes de que se envíen, o sea inmediatamente después de que se reciban. Después de que todos los 8 bits hayan sido recibidos, el byte se mueve del registro SSPRS al registro SSPBUF. Este proceso de crear un doble búfer para recibir los datos permite iniciar la recepción del próximo byte antes de leer los datos que se acaban de recibir. Durante la transmisión/recepción de datos se ignora un intento de escribir un dato en el registro SSBUF. Desde el punto de vista de un programador, este registro se considera el más importante por haber sido accedido con más frecuencia. Concretamente, si dejamos aparte el ajuste del modo de funcionamiento, la transmisión de datos por el módulo SPI no es nada más que escritura y lectura de datos de este registro, mientras que las demás “acrobacias” como mover los registros, se llevan a cabo automáticamente por el hardware. Vamos a hacerlo en mikroBasic...
' En este ejemplo, el microcontrolador PIC (maestro) envía un byte de datos a un chip periférico 
' (esclavo) por el módulo SPI. El programa utiliza las funciones de librería SPI SPI1_init() y 
' SPI1_Write.
dim Chip_Select as sbit at PORTC.RC0   ' Línea periférica chip_select está conectada al pin RC0
dim Chip_Select_Direction as sbit at TRISC.0 ' Bit TRISC0 define el pin RC0 como entrada o salida
dim value as unsigned int                    ' Dato a ser enviado es de tipo unsigned int
main:
ANSEL, ANSELH = 0         ' Todos los pines de E/S son digitales
TRISB.0 = 1
TRISB.1 = 1               ' Configurar los pines RB0 y RB1 como entradas
Chip_Select = 0           ' Seleccionar el chip periférico 
Chip_Select_Direction = 0 ' Configurar el pin CS# como salida
SPI1_Init()               ' Inicializar el módulo SPI 
SPI1_Write(value)         ' Envíar el valor al chip periférico 
...

En breve

Comunicación serial síncrona SPI

Antes de inicializar el módulo SPI, es necesario especificar varias opciones:
  • Modo maestro TRISC.3=0 (pin SCK es salida de señal de reloj);
  • Modo de esclavo TRISC.3=1 (pin SCK es entrada de señal de reloj);
  • Fase de datos de entrada - la mitad o el final del tiempo de salida (bit SMP del registro SSPSTAT);
  • Flanco de reloj (bit CKE del registro SSPSTAT);
  • Velocidad de transmisión en baudios, los bits SSPM3-SSPM0 del registro SSPCON (sólo en modo Maestro);
  • Selección de modo esclavo, bits SSPM3-SSPM0 del registro SSPCON (sólo en modoEsclavo).
El módulo se pone en marcha al poner a uno el bit SSPEN: al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-113
Paso 1 Los datos a ser transmitidos deberán ser escritos en el registro del búfer SSPBUF. Si el módulo SPI funciona en modo maestro, el microcontrolador ejecutará automáticamente la secuencia de los siguientes pasos 2,3 y 4. Si el módulo SPI funciona en modo esclavo, el microcontrolador no ejecutará la secuencia de los si-guientes pasos hasta que el pin SCK detecte señal de reloj.
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-114
Paso 2 El dato se mueve al registro SSPSR y el contenido del registro SSPBUF no se borra.
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-115
Paso 3El dato se desplaza hacia el pin de salida (primero se desplaza el bit más significativo - MSB), mientras que a la vez el registro se carga con los bits por el pin de entrada. En modo maestro el microcontrolador en si mismo genera señal de reloj, mientras que el modo esclavo utiliza señal de reloj externa (pin SCK).
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-116
Paso 4 El registro SSPSR está lleno después de que hayan sido recibidos 8 bits de datos, lo que se indica al poner a uno el bit BF del registro SSPSTAT y el bit SSPIF del registro PIR1. Los datos recibidos (un byte) son automáticamente movidos del registro SSPSR al registro SSPBUF. Como la transmisión de datos serial se realiza automáticamente, el resto de programa se ejecuta normalmente mientras que la transmisión de datos está en progreso. En este caso, la función del bit SSPIF es de generar una interrupción al acabar la transmisión de un byte.
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-117
Paso 5 Por último, el dato almacenado en el registro SSPBUF está listo para su uso y debe moverse al registro deseado.

MODO I2C

El modo I2C (Bus de circuito inter-integrado) es adecuado para ser utilizado cuando el microcontrolador debe intercambiar los datos con un circuito integrado dentro de un mismo dispositivo. Éstos son con frecuencia otros microcontroladores, o los circuitos integrados especializados y baratos que pertenecen a la nueva generación de así llamados “periféricos inteligentes” (memorias, sensores de temperatura, relojes de tiempo real etc.) Similar a la comunicación serie en modo SPI, la transmisión de datos en modo I2C es síncrona y bidireccional. Esta vez sólo dos pines se utilizan para transmisión de datos. Éstos son los pines de SDA (Datos seriales) y SCL (Reloj serial). El usuario debe configurar estos pines como entradas o salidas por los bits TRISC. Al observar las reglas particulares (protocolos), este modo habilita conectar simultáneamente de una manera simple hasta 112 diferentes componentes al utilizar sólo dos valiosos pines de E/S. Vamos a ver cómo funciona el sistema: El reloj, necesario para sincronizar el funcionamiento de ambos dispositivos, siempre es generado por un dispositivo maestro (un microcontrolador) y su frecuencia directamente afecta a la velocidad de transmisión de datos. Aunque hay un protocolo que permite como máximo una frecuencia de reloj de 3,4 MHz (así llamado bus I2C de alta velocidad), este libro cubre sólo el protocolo utilizado con más frecuencia, con una frecuencia de reloj limitada a 100 KHz. La frecuencia mínima no está limitada. Cuando los componentes maestro y esclavo están sincronizados por el reloj, el maestro siempre inicia cada intercambio de datos. Una vez que el módulo MSSP se ha habilitado, espera que ocurra una condición de arranque (Start condition). El dispositivo maestro primero envía el bit de arranque (está a cero) por el pin SDA, luego la dirección de 7 bits del dispositivo esclavo seleccionado, y por último, el bit que requiere al dispositivo escribir (0) o leer (1) el dato enviado. En otras palabras, los ocho bits se desplazan al registro SSPSR después de ocurrir una condición de arranque. Todos los dispositivos esclavos que comparten la misma línea de transmisión recibirán simultáneamente el primer byte, pero sólo el que contiene la dirección coincidente recibirá el dato entero.
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-118
Una vez que el primer byte se ha enviado (sólo se transmiten datos de 8 bits), el maestro se pone en modo de recepción y espera el reconocimiento del dispositivo receptor acerca de la dirección coincidente. Si el dispositivo esclavo envía un bit de reconocimiento (1) la transmisión de datos continuará hasta que el dispositivo maestro (microcontrolador) envíe el bit de parada (Stop).
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-119
Esto es una explicación simple de cómo se comunican dos componentes. Este microcontrolador es capaz de controlar las situaciones más complicadas cuando están conectados 1024 diferentes componentes (dirección de 10 bits), compartidos por varios dispositivos maestros diferentes. Por supuesto, estos dispositivos se utilizan pocas veces en la práctica por lo que no es necesario hablar de ellos detalladamente. La siguiente figura muestra el diagrama de bloques del módulo MSSP en modo I2C.
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-120
En una operación I2C con el módulo MSSP intervienen seis registros. Algunos de ellos se muestran en la Figura anterior.
  • SSPCON
  • SSPCON2
  • SSPSTAT
  • SSPBUF
  • SSPSR
  • SSPADD

Registro SSPSTAT

al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-121
SMP Sample bit (Bit de muestra) Modo maestro SPI -Este bit determina fase de datos de entrada.
  • 1 - Estado lógico se lee al final del tiempo de salida.
  • 0 - Estado lógico se lee en la mitad del tiempo de salida.
Modo esclavo SPI - Este bit debe ser borrado cuando SPI se emplea en modo esclavo. Modo I²C (maestro o esclavo)
  • 1 - Deshabilita control de variaciones para velocidad estándar (100kHz).
  • 0 - Habilita control de variaciones para velocidad alta (400k Hz).
CKE - Clock Edge Select bit (bit de selección del flanco de reloj) selecciona el modo de sincronización. CKP = 0:
  • 1 - Dato transmitido en flanco ascendente de pulso de reloj (0 - 1).
  • 0 - Dato transmitido en flanco descendente de pulso de reloj (1 - 0).
CKP = 1:
  • 1 - Dato transmitido en flanco descendente de pulso de reloj (1 - 0).
  • 0 - Dato transmitido en flanco ascendente de pulso de reloj (0 - 1).
D/A - Data/Address bit (bit de direcciones/datos) se utiliza sólo en modo I2C
  • 1 - Indica que el último byte recibido o transmitido es un dato.
  • 0 - Indica que el último byte recibido o transmitido es una dirección.
P - Stop bit (bit de parada) se utiliza sólo en modo I²C.
  • 1 - Bit de parada (STOP) se ha detectado.
  • 0 - Bit de parada (STOP) no se ha detectado.
S - Start bit se utiliza sólo en modo I²C.
  • 1 - Bit de arranque (START) se ha detectado.
  • 0 - Bit de arranque (START) no se ha detectado.
R/W - Read Write bit (bit de información Lectura/Escritura) se utiliza sólo en modo I2C. Este bit contiene la información del bit de L/E después de la última dirección coincidente. Este bit es válido sólo desde la dirección coincidente hasta el siguiente bit de arranque, bit de parada o bit no ACK. Modo I2C en modo esclavo
  • 1 - Lectura de dato.
  • 0 - Escritura de dato.
Modo I²C en modo maestro
  • 1 - Transmisión en progreso.
  • 0 - Transmisión no está en progreso.
UA - Update Address bit (bit de activación de dirección) se utiliza sólo en modo I2C de 10 bits.
  • 1 - Indica que es necesario actualizar la dirección en el registro SSPADD.
  • 0 - Indica que la dirección es correcta y que no se necesita actualizarla.
BF Buffer Full Status bit (bit de estado de búfer lleno) Durante la recepción de dato (en modos SPI e I2C)
  • 1 - Recepción completa. El registro SSPBUF está lleno.
  • 0 - Recepción no completa. El registro SSPBUF está vacío.
Durante la transmisión de dato (sólo en modo I2C)
  • 1 - Transmisión de dato en progreso (no incluye el bit ACK y bits de parada).
  • 0 - Transmisión de dato completa (no incluye el bit ACK y bits de parada).

Registro SSPCON

al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-122
WCOL Write Collision Detect bit (bit detector de colisión)
  • 1 - Colisión detectada. En el registro SSPBUF se ha escrito cuando no se han cumplido las condiciones para iniciar una transmisión
  • 0 - No hay colisión.
SSPOV Receive Overflow Indicator bit (bit detector de desbordamiento en recepción)
  • 1 - Se recibe un nuevo byte antes de leer el dato anteriormente recibido. Como no hay espacio para recibir datos nuevos, uno de estos dos bytes debe ser borrado. En este caso, los datos almacenados en el registro SSPSR se pierden irremediablemente.
  • 0 - Dato serial es recibido correctamente.
SSPEN - Synchronous Serial Port Enable bit (bit de habilitación del módulo SSP - puerto serie síncrono) determina la función de los pines del microcontrolador e inicializa el módulo MSSP: En modo SPI
  • 1 - Enables MSSP module and configures pins SCK, SDO, SDI and SS as serial port pins.
  • 0 - Disables MSSP module and configures these pins as I/O port pins.
En modo I²C
  • 1 - Habilita el módulo MSSP y configura los pines SDA y SCL como una fuente de pines del puerto serie.
  • 0 - Deshabilita el módulo MSSP y configura estos pines como pines del puerto de E/S.
CKP - Clock Polarity Select bit (bit de selección de polaridad de reloj) no se utiliza en modo I2C maestro. En modo SPI
  • 1 - Para una señal de reloj, el estado inactivo es un nivel alto.
  • 0 - Para una señal de reloj, el estado inactivo es un nivel bajo.
En modo I2C esclavo
  • 1 - Señal de reloj habilitada.
  • 0 - Mantiene la salida de señal de reloj en estado bajo. Se utiliza para proporcionar más tiempo para estabilización de datos.
SSPM3-SSPM0 - Synchronous Serial Port Mode Select bits.(bit de selección del modo del SSP (puerto serie síncrono). El modo SSP se determina al combinar los siguientes bits:
SSPM3 SSPM2 SSPM1 SSPM0 MODO
0 0 0 0 Modo maestro del SPI, reloj = Fosc/4
0 0 0 1 Modo maestro del SPI, reloj = Fosc/16
0 0 1 0 Modo maestro del SPI, reloj = Fosc/64
0 0 1 1 Modo maestro del SPI, reloj = (output TMR)/2
0 1 0 0 Modo esclavo del SPI, habilitado el pin de control SS
0 1 0 1 Modo esclavo del SPI, deshabilitado el pin de control SS, SS se puede utilizar como pin de E/S
0 1 1 0 Modo esclavo I²C, dirección de 7 bits utilizada
0 1 1 1 Modo esclavo I²C, dirección de 10 bits utilizada
1 0 0 0 Modo mastro I²C, reloj = Fosc / [4(SSPAD+1)]
1 0 0 1 Máscara utilizada en modo esclavo I²C
0 1 0 No utilizado
1 0 1 1 Modo maestro I²C controlado
1 1 0 0 No utilizado
1 1 0 1 No utilizado
1 1 1 0 Modo esclavo I²C, dirección de 7 bits utilizada, los bits de arranque (START) y de parada (STOP) habilitan interrupción
1 1 1 1 Modo esclavo I²C, dirección de 10 bits utilizada, los bits de arranque (START) y de parada (STOP) habilitan interrupción

Registro SSPCON2

al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-123
GCEN - General Call Enable bit (bit de habilitación general) Sólo en modo esclavo I2C
  • 1 - Habilita interrupción cuando una dirección de llamada general es recibida en el SSPST (0000h).
  • 0 - Deshabilita dirección de llamada general.
ACKSTAT - Acknowledge Status bit (bit de estado de reconocimiento) Sólo en modo de transmisión maestro I2C
  • 1 - Reconocimiento del esclavo no recibido.
  • 0 - Reconocimiento del esclavo recibido.
ACKDT - Acknowledge data bit (bit de recepción) Sólo en modo de recepción maestro I²C
  • 1 - No reconocimiento
  • 0 - Reconocimiento
ACKEN - Acknowledge Sequence Enable bit (bit de habilitación de secuencia de reconocimiento) En modo de recepción maestro I²C
  • 1 - Indica una secuencia de reconocimiento en los pines SDA y SCL y transmite el bit ACKDT. Automáticamente borrado por hardware.
  • 0 - Secuencia de reconocimiento en reposo.
RCEN - Receive Enable bit (bit de habilitación de recepción) Sólo en modo maestro I²C
  • 1 - Habilita recepción en modo I2C.
  • 0 - Recepción deshabilitada.
PEN - STOP condition Enable bit (bit de habilitación de condición de Parada) Sólo en modo maestro I²C
  • 1 - Indica una condición de Parada en los pines SDA y SCL. Luego, este bit es automáticamente borrado por hardware.
  • 0 - Condición de Parada en reposo.
RSEN - Repeated START Condition Enabled bit (bit de habilitación de repetir condición de Arranque) Sólo en modo maestro I²C
  • 1 - Indica repetición de condición de Arranque en los pines SDA y SCL. Luego, este bit es automáticamente borrado por hardware
  • 0 - Condición de repetición de Arranque en reposo.
SEN - START Condition Enabled/Stretch Enabled bit (bit de habilitación de condición de Arranque) Sólo en modo maestro I²C
  • 1 - Indica condición de Arranque en los pines SDA y SCL. Luego, este bit es automáticamente borrado por hardware.
  • 0 - Condición de Arranque en reposo.

I2C En Modo Maestro

El caso más común es que un microcontrolador funciona como maestro y un periférico como esclavo. Es la razón por la que este libro sólo trata este modo. Se da por entendido que la dirección consiste en 7 bits y el dispositivo contiene un solo microcontrolador (dispositivo con maestro único). Para habilitar el módulo MSSP en este modo, siga las siguientes instrucciones:
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-124
Ajuste la velocidad de transmisión (registro SSPADD), desactive el control de velocidad de rotación (al poner a uno el bit SMP del registro SSPSTAT) y seleccione el modo maestro (registro SSPCON). Después de finalizar todos los ajustes y habilitar el módulo (registro SSPCON: bit SSPEN), es necesario esperar a que los circuitos de control internos indiquen con una señal que todo esté preparado para transmisión de datos: o sea, que el bit SSPIF del registro PIR1 se haya puesto a uno. Después de poner este bit a cero por software, el microcontrolador está listo para intercambiar los datos con los periféricos.

TRANSMISIÓN DE DATOS EN MODO MAESTRO I2C

La transmisión de datos en el pin SDA se inicia con un cero lógico (0) que aparece al poner a uno el bit SPEN del registro SSPCON2. Sin embargo, aunque está habilitado, el microcontrolador tiene que esperar cierto tiempo antes de iniciar la comunicación. Se le denomina “Condición de Inicio” durante la que se realizan las preparaciones y verificaciones internas. Si se cumplen con todas la condiciones, el bit SSPIF del registro PIR1 se pone a uno y la transmisión de datos se inicia en cuanto se cargue el registro SSPBUF.
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-125
Como máximo 112 circuitos integrados (dispositivos esclavos) pueden compartir simultáneamente la misma línea de transmisión. El primer byte de datos enviado por el dispositivo maestro contiene la dirección que coincide con una sola dirección del dispositivo esclavo. Todas las direcciones se enumeran en las hojas de datos respectivas. El octavo bit del primer byte de datos especifica la dirección de transmisión de datos, o sea si el microcontrolador va a enviar o recibir los datos. En este caso, como se trata de transmisión de datos, el octavo bit se pone a cero (0).
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-126
Cuando ocurre la coincidencia de dire-cciones, el microcontrolador tiene que esperar a que el dispositivo esclavo envíe el bit de reconocimiento, o sea que se ponga a cero el bit ASKSTAT del registro SSPCON2. Una vez que la coincidencia de dire-cciones ha ocurrido apropiadamente, todos los bytes de datos se transmiten de la misma manera. La transmisión de datos termina al poner a uno el bit SEN del registro SSPCON2. Ocurre la condición de parada (STOP), lo que habilita que el pin SDA reciba una secuencia de pulsos: Inicio - Dirección - Reconocimiento - Dato - Reconocimiento .... Dato - Reconocimiento - Parada!

Recepción de datos en modo maestro I2C

Las preparaciones para recibir los datos son similares a las de transmitir los datos, con excepción de que el último bit del primer byte enviado (el que contiene la dirección) se ponga a uno lógico (1). Eso especifica que el dispositivo maestro espera recibir los datos del dispositivo esclavo direccionado. Con respecto al microcontrolador, ocurre lo siguiente: Después de hacer las pruebas internas y poner a uno el bit de arranque (START), el dispositivo esclavo envía byte por byte. Estos bytes se almacenan en el registro serial SSPSR. Después de recibir el último - octavo bit, cada dato se carga en el registro SSPBUF del que se puede leer. Al leer este registro, se envía automáticamente el bit de reconocimiento, lo que significa que el dispositivo maestro está listo para recibir los nuevos datos. Al igual que en el caso de la transmisión, la recepción de datos termina al poner a uno el bit de parada (STOP):
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-127
Inicio - Dirección - Reconocimiento - Dato - Reconocimiento .... Dato - Reconocimiento - ¡Parada! En esta secuencia de pulsos, el bit de reconocimiento se envía al dispositivo esclavo.

GENERADOR DE BAUDIOS

Para sincronizar la transmisión de datos, todos los eventos que ocurren en el pin SDA deben estar sincronizados con la señal de reloj generada en el dispositivo maestro. Esta señal de reloj se genera por un simple oscilador cuya frecuencia depende de la frecuencia del oscilador principal del microcontrolador, del valor que se introduce al registro SSPADD y así como del modo SPI actual. La frecuencia de señal de reloj del modo descrito en este libro depende del cristal de cuarzo seleccionado y del registro SPADD. La fórmula utilizada para hacer el cálculo de frecuencia de reloj es:
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-128
Vamos a hacerlo en mikroBasic...
' En este ejemplo, el microcontrolador PIC está conectado a la memoria EEPROM 24C02 por los 
' pines SCL y SDA. El programa envía un byte de dato a la dirección 2 de la EEPROM. Entonces, 
' el programa lee este dato por el modo I2C de la EEPROM y lo envía al puerto PORTB para 
' comprobar si el dato se ha escrito con éxito. El byte para direccionar la EEPROM está 
' compuesto por 7 bits de la dirección (1010001) y el bit que determina lectura o escritura del 
' dato (LSB - bit menos significativo).

main:
ANSEL = ANSELH = PORTB = TRISB = 0 ' Todos los pines son digitales. Los pines del
                      ' puerto PORTB son salidas.
I2C1_Init(100000)     ' Inicializar I2C con reloj deseado
I2C1_Start()          ' Señal de inicio de I2C 
I2C1_Wr(0xA2)         ' Enviar byte por I2C (dirección de dispositivo + W)
I2C1_Wr(2)            ' Enviar byte (dirección de la localidad EEPROM)
I2C1_Wr(0xF0)         ' Enviar los datos a escribir
I2C1_Stop()           ' Señal de parada de I2C
Delay_100ms()
I2C1_Start()          ' Señal de inicio de I2C
I2C1_Wr(0xA2)         ' Enviar byte por I2C (dirección de dispositivo + W)
I2C1_Wr(2)            ' Enviar byte (dirección de dato)
I2C1_Repeated_Start() ' Se vuelve a generar el inicio de señal I2C
I2C1_Wr(0xA3)         ' Enviar byte (dirección de dispositivo + R)
PORTB = I2C1_Rd(0u)   ' Leer el dato (reconocimiento NO)
I2C1_Stop()           ' Señal de parada de I2C

NOTAS ÚTILES ...

Cuando el microcontrolador se comunica con un periférico, puede ocurrir un fallo en la transmisión de datos por alguna razón. En este caso, es recomendable comprobar el estado de algunos bits que pueden aclarar el problema. En la práctica, el estado de estos bits se comprueba al ejecutar una pequeña subrutina después de transmisión y recepción de cada byte (por si acaso). WCOL (SPCON,7) - Si intenta escribir un dato nuevo al registro SSPBUF mientras que otra transmisión/recepción de datos está en progreso, el bit WCOL se pone a uno y el contenido del registro SSBUF se queda sin cambios. No hay escritura. Luego, el bit WCOL debe ser borrado por el software. BF (SSPSTAT,0) -Al transmitir los datos, este bit se pone a uno durante la escritura en el registro SSPBUF y se queda puesto a uno hasta que el byte en formato serial se desplace del registro SSPRS. En modo de recepción, este bit se pone a uno al cargar un dato o una dirección al registro SSPBUF. Se pone a cero después de leer el registro SSPBUF.
Pines SDA y SCL - Cuando el módulo SSP está habilitado, estos pines se vuelven a las salidas de Drenaje Abierto. Esto significa que deben estar conectados a resistencias conectados a la otra punta al polo positivo de la fuente de alimen- tación. SSPOV (SSPCON,6) - En modo de recepción, este bit se pone a uno al recibir un nuevo byte en el registro SSPSR por medio de la comunicación serial, todavía sin haber leído el dato anteriormente recibido del registro SSPBUF.
al-mundo-de-los-microcontroladores-basic-chapter-03-fig3-129

En breve

Recibir/Transmitir los datos en el modo I2C

Para establecer la comunicación serial en modo I2C, se debe realizar lo siguiente: Ajustar el módulo y enviar la dirección:
  • Introducir en el registro SSPADD el valor para definir la velocidad de transmisión en baudios.
  • Poner a uno el bit SMP del registro SSPSTAT para desactivar el control de la velocidad de rotación.
  • Introducir el valor binario 1000 a los bits SSPM3-SSPM0 del registro SSPCON1 para seleccionar el modo Maestro.
  • Poner a uno el bit SEN del registro SSPCON2 (secuencia de Inicio - START).
  • El bit SSPIF se pone a uno automáticamente en final de la secuencia de Inicio cuando el módulo está listo para funcionar. Se deberá poner a cero.
  • Introducir la dirección de esclavo al registro SSPBUF.
  • Cuando se envía un byte, el bit SSPIF (interrupción) se pone a uno automáticamente después de haber recibido el bit de reconocimiento del dispositivo esclavo.
Transmitir los datos:
  • Introducir en el registro SSPBUF los datos a enviar.
  • Cuando se envía un byte, el bit SSPIF (interrupción) se pone a uno automáticamente después de haber recibido el bit de reconocimiento del dispositivo esclavo.
  • La condición de Parada (STOP) se debe iniciar al poner a uno el bit PEN del registro SSPCON para informar al dispositivo Esclavo que la transmisión de datos se acabó.
Recibir los datos:
  • Poner a uno el bit RSEN del registro SSPCON2 para habilitar la recepción.
  • El bit SSPIF indica con su estado lógico la recepción de datos. Después de leer los datos del registro SSPBUF, el bit ACKEN del registro SSPCON2 debe ponerse a uno para habilitar el envío del bit de reconocimiento.
  • La condición de Parada (STOP) se debe iniciar al poner a uno el bit PEN del registro SSPCON para informar al dispositivo Esclavo que la transmisión se acabó.

MIKROE

MIKROE is a development tools company dedicated to standardization and time-saving in the embedded industry.

  • About us
  • Success story
  • Contact
  • PressKit
  • Timeline
  • Partners
  • Legal
  • Distributors
  • Legacy Products

SOLUTIONS

  • Click boards™
  • Development boards
  • Mikromedia
  • CODEGRIP
  • NECTO Studio
  • Planet Debug
  • ClickID
  • Click Snap
  • EmbeddedWiki

SUPPORT

  • Helpdesk
  • Forum
  • Libstock
  • Learn
  • Let's Make
  • eBooks
  • Premium TS
  • Design service
  • Product Customization
  • Contract Manufacturing

STANDARD

  • mikroBUS™
  • mikroSDK
  • SiBRAIN
  • DISCON

Prodavnica za inostrano tržište

Nalazite se na prodavnici za inostrano tržište. Da li želite da Vas odvedemo na prodavnicu koja je namenjena za Srbiju?

Prodavnica za inostrano tržište

Nalazite se na prodavnici za inostrano tržište. Da li želite da Vas odvedemo na prodavnicu koja je namenjena za Srbiju?

Daily product releases, special offers, and more

  • FOLLOW US:

  • instagram
  • linkedin
  • facebook
  • github
  • newsletter
  • youtube
  • twitter twitter

Join us

Pridruži nam se

Careers
Internship
Posao
Napravi Click
Praksa
Copyright© 2025 MikroElektronika d.o.o.

Privacy