Utilizarea portului serial

📝Notite --- 📠 Functii si Clase --- 🍮 Rezolvari

Elemente initiale
  1. Device-uri utilizate in cadrul laboratorului


    Arduino UNO


         - Conectarea se face la USB
         - Daca nu se identifica la ce port s-a conectat folosind Device Manager, trebuie incarcat un driver CH340:
    Modulul aplicatii Multiio
    - Modulul aplicatii Multiio realizat cu Arduino




        Schema de conexiuni



       Aplicatia pentru testarea Modulul aplicatii Multiio : Osciloscop

    Sistemul de achizitie Multiio
    - Sistemul de achizitie Multiio - realizat cu Arduino UNO



         - Sistemul de achizitie "Multiio" -conexiuni


       Aplicatia WEB pentru testarea Sistemului de achizitie Multiio : Serial - Multiio
       Aplicatia C# pentru testarea Sistemului de achizitie Multiio : Multiio

    Comenzile "Sistemului de achizitie Multiio" si ale "Modulul aplicatii Multiio"
    1. SG,val_pwm -- Start generatoare Sinus - P6 si Dinfi de fierastrau - P5 cu frecventa proportionala cu val_pwm, Aprindere p7
    2. PWM,val_pwm -- Generare PWM - P6 cu valoarea val_pwm. Se raspunde cu "AA,val_A0,...,val_A4,DI,val_B"
    3. AX4,val -- Afisare pe 4 digiti 7 segmente a valorii val. Se raspunde cu "A0,val_A0"
    4. C0,val ... C3,val -- Activare coloana din matrice de leduri
    5. M1,val_b -- Citire intrari analogice si comanda led-uri cu val_b (se trimite si suma de control)
    6. AA -- Citire valori analogice si DI
    7. A0 ... A4 -- Citire valoare analogica A0 ... A4
    8. O,val -- Invalidare generator sinus si df, Activare led-uri cu valoarea val. Se raspunde cu "AO,val_A0"
    9. DI -- Citire intrari digitale si transmitere val=B0+2*B1+4*B2+8*B3
    10. AI0,val_pwm -- Citire pachet de date A0,A1, Generare pwm pe p6 cu valoarea val_pwm, Generare frecventa pe p10 cu factorul de umplere val_pwm, Aprindere p7, Invalidare sin
    11. AI1,val_pwm -- Citire pachet de date A0,A1 (200 valori A0, 200 valori A1)
    12. AI2,val_pwm -- Citire pachet de date A0,A2 (200 valori A0, 200 valori A2)
    13. AI3,val_pwm -- Citire pachet de date A0,A3 (200 valori A0, 200 valori A3)
    14. AI4,val_pwm -- Citire pachet de date A0,A4 (200 valori A0, 200 valori A4)
    15. D1I,val_pwm -- Citire pachet de date B0,B1,B2,B3 (400 de valori zecimale=B0+2*B1+4*B2+8*B3)

  2. Testarea comenzilor sistemului de achizitie Multiio

       Aplicatia Web pentru testarea comenzilor sistemul de achizitie Multiio Serial - Comenzi
       Aplicatia C# pentru testarea comenzilor sistemul de achizitie Multiio : RS_232_v01
         - Conectam sistemul de achizitie Multiio la USB si verificam functionarea aplicatiei


  3. Realizarea aplicatiilor

       Aplicatia de pornire pentru realizarea aplicatiilor care utilizeaza portul serial : RS_232_v00
       Aplicatia de pornire pentru realizarea aplicatiilor care utilizeaza portul serial Versiunea 2022 : RS_232_v00_2022
      
    Vezi aplicatia "RS_232_v00"
       - Aplicatia "RS_232_v00" va fi utilizata in continuare ca punct de plecare pentru rezolvarea temelor de laborator.
       - In cadrul acestei aplicatii, e nevoie de o interfata care sa permita selectarea portului serial, deschiderea si inchiderea acestuia.
       - Deschidem un nou proiect C# Windows Forms Application intitulat "RS_232_v00" .
       - Plasam obiectele:
    • 2 obiecte de tip button 2 pentru conectarea si deconectarea la portul serial(cu numele "but_con" respectiv "but_dec"),
    • un obiect de tip ListBox cu numele "Porturi_s" pentru alegerea portului serial
    • 2 obiecte de tip label pentru afisarea raspunsului de la portul serial respectiv a unui contor
    • un obiect de tip timer
    • un obiect de tip serialPort setat conform imaginii de jos




        Obiectul de tip "ListBox" este folosit pentru selectarea unui port serial. La un moment dat pot fi deschise mai multe porturi seriale, deci trebuie sa dispunem de o metoda prin care sa selectam portul serial dorit.
        Obiectul de tip "ListBox" este cel mai potrivit pentru a selecta unul din porturile seriale cu conditia ca in momentul lansarii aplicatiei sa fie inscrise elementele listei cu numele porturilor deschise in acel moment.
        Codul sursa:
    namespace RS_232_v00
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            string txt, cda;
            int k;
            static String[] Nume_porturi = new String[11];
            private void Form1_Load(object sender, EventArgs e)
            {
                int i;
                // Listez porturile seriale
                Nume_porturi = System.IO.Ports.SerialPort.GetPortNames();
                this.Porturi_s.Items.Clear();
    
                //Adaug porturile exixtente
    
                for (i = 0; i < Nume_porturi.Length; i++)
                {
                    this.Porturi_s.Items.Add(Nume_porturi[i]);
                }
    
                //Pozitionarea listei pe primul element
    
                this.Porturi_s.SelectedIndex = 0;
                this.label1.Text = "Conectati-va la portul serial!";
            }
    
            private void but_con_Click(object sender, EventArgs e)
            {
                if (!this.serialPort1.IsOpen)
                {
                    this.serialPort1.PortName = System.Convert.ToString(this.Porturi_s.Items[this.Porturi_s.SelectedIndex]);
                    this.serialPort1.Open();
                    this.label1.Text = "Portul a fost deschis";
                }
                else
                {
                    this.label1.Text = "Portul este deja deschis deschis";
                }
                this.serialPort1.Write("A0");
            }
    
            private void but_dec_Click(object sender, EventArgs e)
            {
                this.serialPort1.Close();
                this.label1.Text = "Portul este deconectat!";
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                k++;
                if (k > 1000)
                    k = 0;
                this.label2.Text = k.ToString();
                cda = "A0";
                if (this.serialPort1.IsOpen)
                {
                    this.serialPort1.Write(cda);
                    txt = "";
                    txt = this.serialPort1.ReadExisting();
                    if (txt.Length > 0)
                    {
                        this.label1.Text = txt;
                    }
                    else
                    {
                        this.label1.Text = "Nu vin date!";
                    }
                }
            }
        }
    }
    

         - Conectam sistemul de achizitie Multiio la USB si verificam functionarea aplicatiei


         - Modificam intrarea A0 si observam valoarea afisata de aplicatie.
Aplicatii propuse
    - Multiio : Iesiri digitale

  1. Comanda LED-uri
    - utilizati "Sistemul de achizitie Multiio"
    - folositi comanda O (comanda O=Out, raspunde cu "A0, val_A0") si functia afis_bin_w pentru a afisa atat pe ecran cat si pe led-urile sistemului de achizitie Multiio diverse combinatii:


    - Multiio : Intrari digitale

  2. Afisare stare comutatoare
    - utilizati "Sistemul de achizitie Multiio"
    - folositi comanda DI (Input) si functia afis_bin_w pentru a afisa pe ecran starea comutatoarelor sistemului de achizitie Multiio.

    Utilizare Afis_7seg

         - Se utilizeaza modulul de aplicatii + Afis_7seg



         - Schema de conexiuni


  3. Afisarea unui digit pe 7 segmente
    - utilizati "Modulul aplicatii Multiio" realizat cu Arduino si un afisor pe 7 segmente:"Afis_7seg"
    - folositi comanda O (Out) si functia afis_7seg pentru a afisa atat pe ecran cat si pe modulul Afisor 7 segmente un digit (o valoare intre 0-9)

    Utilizare Afis_7x5



         - Schema de conexiuni


  4. Afisarea cifrei 0 pe o matrice 7x5:
    - utilizati "Modulul aplicatii Multiio" realizat cu Arduino si un afisor matrice 7x5:"Afis_7x5"
    - utilizati comenzile C0,C1,C2,C3,C4 pentru a afisa o cifra 0

    - utilizati comenzile C0,C1,C2,C3,C4, apelati functia afis_bin_vw pentru fiecare coloana afisata pentru a afisa o cifrele de la 0 9 atat pe ecran sub forma de puncte intr-o matrice binara 7x5 cat si pe afisorul 5x7 puncte.



    Utilizare Afis_4x7seg

         - Se utilizeaza "Modulul aplicatii Multiio" + Divizor zecimal



           - Schema de conexiuni:

  5. Afisarea unui numar pe 4 digiti folosind afisorul cu 4 digiti 7 segmente
    - utilizati "Modulul aplicatii Multiio" realizat cu Arduino si afisorul 4 digiti 7 segmente : "Afis_4x7seg",
    - utilizati comanda AX4,val (Afisare 4 digiti) si functia afis_7seg pentru a afisa un numar intre 0 si 9999.

  6. Citirea intrarii analogice A0 si afisarea valorii pe 4 digiti folosind afisorul cu 4 digiti 7 segmente.
    - utilizati "Modulul aplicatii Multiio" realizat cu Arduino si afisorul 4 digiti 7 segmente : "Afis_4x7seg" + potentiometru pe intrarea A0.
    - utilizati comanda AX4,val (Afisare 4 digiti), care raspunde cu A0,val_A0 si functia afis_7seg pentru a afisa valoarea citita intre 0 si 1023.

    - Multiio : Intrarea analogica A0

  7. Barometru
    - utilizati "Sistemul de achizitie Multiio"
    - folositi comanda A0 (Citire intrare analogica 0) pentru citirea unei valori in domeniul [0-1024]
    - folositi clasa barom pentru a realiza o aplicatie care afiseaza valoarea citita A0 pe un barometru avand domeniul 0-6.75 Bari.

  8. Osciloscop cu un canal
    - utilizati "Sistemul de achizitie Multiio"
    - folositi comanda A0 (Analogic A0) pentru citirea unei valori in domeniul [0-1024]
    - folositi clasa osciloscop pentru a realiza o aplicatie care afiseaza pe un osciloscop valoarea citita.


    - Multiio : Intrarile analogice A0-A4

  9. Osciloscop 5 canale
    - utilizati "Sistemul de achizitie Multiio"
    - folositi comanda AA (Analogic all) pentru citirea a 5 valori in domeniul [0-1024]
    - folositi clasa osciloscop pentru a realiza o aplicatie care afiseaza pe un osciloscop cele 5 valori analogice citite.

  10. Histograma
    - utilizati "Sistemul de achizitie Multiio"
    - folositi comanda AA (Analogic all) pentru citirea a 5 valori in domeniul [0-1024]
    - folositi clasa histo pentru a realiza o aplicatie care afiseaza evolutia in timp a intrarii A0 pe o histograma precum si cele 5 valori analogice citite pe o alta histograma

    Utilizare modul divizor

         - Se utilizeaza "Modulul aplicatii Multiio" + Divizor zecimal



           - Schema de conexiuni:



  11. Divizor
    - utilizati "Modulul aplicatii Multiio" realizat cu Arduino si un modul divizor
    - folositi comanda D1I,val_pwm -- Citire pachet de date B0,B1,B2,B3 (400 de valori zecimale=B0+2*B1+4*B2+8*B3)
    - folositi clasa osciloscop pentru a realiza o aplicatie care afiseaza pe un osciloscop cele 4 valori digitale citite.

    Utilizare Vumetru

         - Se utilizeaza "Modulul aplicatii Multiio" + Vumetru



         - Vumetrul dispune de un oscilator a carui iesiri sunt conectate la intrarile analogice.
         - Frecventa este variabila in domeniul: 37 Hz-375 Hz
         - Schema de conexiuni Vumetru



  12. Utilizarea comenzii PWM:
    - se utilizeaza "Modulul aplicatii Multiio" realizat cu Arduino si un modul vumetru.
    - se foloseste comanda PWM,val_pwm -- Generare PWM - P6 cu valoarea val_pwm.

  13. Afisarea unui pachet de date:
    - se utilizeaza "Modulul aplicatii Multiio" realizat cu Arduino si un modul vumetru.
    - se foloseste comanda AI1,val_pwm -- Citire pachet de date A0,A1 (200 valori A0, 200 valori A1)