Operácie

Zbernica i2c: PCF8574

Zo stránky SensorWiki

Záverečný projekt predmetu MIPS / LS2025 - Kamil Hanišák


Zadanie

Cieľom zadania bolo vytvoriť jednoduchý mikroprocesorový obvod, ktorý umožňuje ovládať viacero LED diód pomocou i2c expanzného obvodu PCF8574, a naprogramovať jednoduchú svetelnú animáciu.

Vývojová doska ACROB.

Literatúra:


Analýza a opis riešenia

Na riešenie zadania sme použili zbernicu i2c PCF8574, ktorá nám umožnila ovládať viacero LED diód pomocou len dvoch vodičov – SDA a SCL. Tento čip komunikuje po i2c zbernici s mikrokontrolérom Arduino Acrob s ATmega328P, pričom každý jej výstupný pin možno samostatne nastavovať na logickú 0 alebo 1. Použité komponenty:

  • PCF8574P – i2c expander s 8 výstupmi
  • 4x LED dióda
  • 4x rezistor 220 Ω – ochranné rezistory pred LED diódami
  • 2x rezistor 4.7 kΩ – pull-up rezistory na i2c vodiče (SDA a SCL)
  • Prepojovacie vodiče a nepájivé pole (breadboard)
Konfigurácia pinov PCF8574P.

Naše konkrétne pripojenie pinov čipu PCF8574 k Arduinu a LED diódam:

Pin PCF8574 Pripojenie
A0 Adresovací pin – pripojený na GND
A1 Adresovací pin – pripojený na GND
A2 Adresovací pin – pripojený na GND
P0 Výstup pre LED 1
P1 Výstup pre LED 2
P2 Výstup pre LED 3
P3 Výstup pre LED 4
VSS GND
P4–P7 Nepoužité
INT Nepripojené (nepoužili sme prerušenie)
SCL (pin 14) Pripojené na Arduino A5 + pull-up rezistor na VCC
SDA (pin 15) Pripojené na Arduino A4 + pull-up rezistor na VCC
VDD Napájanie +5V


Nezabudnite doplniť schému zapojenia! V texte by ste mali opísať základné veci zo zapojenia, samotná schéma nie je dostačujúci opis.

Schéma zapojenia.


Algoritmus a program

Základom programu je cyklické zapínanie a vypínanie jednotlivých výstupov čipu PCF8574 tak, aby vytvorili jednoduchú svetelnú animáciu – postupné rozsvietenie, zhasínanie, bežiace svetlo a spoločné blikanie. Pri písaní kódu sme využili knižnice i2cmaster.h a i2cmaster.c z cvičení.

Použité funkcie:

  • i2c_init() - Inicializuje i2c zbernicu. Táto funkcia je súčasťou knižnice i2cmaster.h.
  • pcf_write(uint8_t data) - Pomocná funkcia, ktorá zabezpečuje zápis jedného bajtu do PCF8574.
  • i2c_start(addr)/i2c_write(data)/i2c_stop() - Funkcie z i2cmaster.h pre riadenie zbernice i2c – začatie komunikácie, odoslanie dát, ukončenie prenosu.
  • _delay_ms(x) - Časové oneskorenie na vytvorenie vizuálne vnímateľnej animácie LED.

Priebeh algoritmu:

  • Postupné rozsvietenie LED 1 → LED 4
  • Postupné zhasínanie LED 4 → LED 1
  • Bežiace svetlo tam a späť
  • Tri spoločné záblesky všetkých LED naraz


#include <avr/io.h>
#include <util/delay.h>
#include "i2cmaster.h"
#define PCF8574_ADDR 0x40

void pcf_write(uint8_t data) {
    i2c_start(PCF8574_ADDR + I2C_WRITE);
    i2c_write(data);
    i2c_stop();
}

int main(void) {
    i2c_init();
    uint8_t stav = 0xFF;  // Výstupné bity (všetky LED zhasnuté – log. 1)

    while (1) {
        // 1. Postupné rozsvietenie LED
        for (uint8_t i = 0; i < 4; i++) {
            stav &= ~(1 << i);  // nastav bit i na 0, zapni LED
            pcf_write(stav);
            _delay_ms(200);
        }

        // 2. Postupné zhasínanie LED
        for (int8_t i = 3; i >= 0; i--) {
            stav |= (1 << i);  // nastav bit i na 1, zhasni LED
            pcf_write(stav);
            _delay_ms(200);
        }

        // 3. Bežiace svetlo tam a späť
        for (uint8_t i = 0; i < 4; i++) {
            pcf_write(~(1 << i));  // iba jeden bit je 0
            _delay_ms(150);
        }
        for (int8_t i = 2; i >= 1; i--) {
            pcf_write(~(1 << i));
            _delay_ms(150);
        }

        // 4. Všetky LED bliknú naraz 3x
        for (uint8_t i = 0; i < 3; i++) {
            pcf_write(0b11110000);  //všetky zapnuté
            _delay_ms(150);
            pcf_write(0xFF);        //všetky vypnuté
            _delay_ms(150);
        }

        _delay_ms(500);  // pauza medzi cyklami
    }
}
#include <avr/io.h>

void adc_init(void);                                   // A/D converter initialization

unsigned int adc_read(char a_pin);

Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x zdrojaky.zip:

Zdrojový kód: zdrojaky.zip

Overenie

Ako ste overili funkciu, napríklad... Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia. Na konci uvádzame fotku hotového zariadenia.

Aplikácia.

Video:



Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.