Mig-mag kaynak makinesi modifikasyonu.

Motoru böyle sürüyorum, fren de var, orjinal devrede de vardı.
1728723368179.png


Akım trafosunu aşağıdaki gibi okuyorum.
1728723431569.png


Voltajı böyle okuyorum.
1728723722036.png


LCD'yi böyle sürüyorum. Bunun için non-blocking 8bit moda çalışan i2c-karakter lcd kütüphanesi hazırladım. PCF8574 kütüphaneleri ekrana bir şey yazdırırken milisaniyeler boyunca işlemciyi blokluyordu ve bazen ekran resetlendikten sonra düzgün başlatılamıyordu.
1728724140656.png


1728723778307.png


proje dosyası da ekte.
 

Ekler

  • BLUEPILL_MIG_LCD_2PWM.pdsprj
    112.5 KB · Görüntüleme: 10
Hic bir yerde bir flagin set/reset olmasini beklemeyecek sekilde low level LCD kodlari da sen yazarsan sorun olmaz.
Bunun icin LCD'ye ayri bir task olusturmakta fayda var.
 
Hic bir yerde bir flagin set/reset olmasini beklemeyecek sekilde low level LCD kodlari da sen yazarsan sorun olmaz.
Bunun icin LCD'ye ayri bir task olusturmakta fayda var.
Tamamen interruptlarla çalışıyor. "buffer[2][16]" bir ekran verisini sürekli tarayarak çalışıyor. Yazdığım print komutları bu bufferi güncelliyor sadece. "12345.6789" float yazdırmam basamakları hesaplatıp bufferi güncellemekle beraber sadece 22us kadar meşgul ediyor işlemciyi. Bunun dışında da sadece interrupt gecikmesi kadar bir tarama gecikmesi oluyor. Burada bir de kabaca zamanlama için değişkenlerim var.

i2c callback:
void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c)
{
    if (hi2c->Instance == I2C1)
    {
    // I2C1 veri gönderimi tamamlandı

    }
    else if (hi2c->Instance == I2C2)
    {
    // I2C2 veri gönderimi tamamlandı
        i2c_lcd_tarama();
        sayac0++;
        sayac1++;
        sayac2++;

    }
}

lcd tarama:
void i2c_lcd_tarama (void)
{
    if(lcd_en)
    {
        if (i2c_s==0)
        {
            lcd_send_cmd(0x80);
            if(i2c_pas==0)i2c_s++;
        }
        else if(i2c_s<17&&i2c_s>0)
        {
            lcd_send_data(satir[0][i2c_s-1]);
            if(i2c_pas==0)i2c_s++;
        }
        else if(i2c_s==17)
        {

            lcd_send_cmd(0xC0);
            if(i2c_pas==0)i2c_s++;        }
        else if(i2c_s>17&&i2c_s<34)
        {
            lcd_send_data(satir[1][i2c_s-18]);
            if(i2c_pas==0)i2c_s++;
            if(i2c_s==34) i2c_s=0;
        }
    }
}
}

send data:
void lcd_send_data (char data)
{
    if(i2c_pas==0)
    {
        data_t[0] = 0x02;         // pca9535 için output register seçimi          data_u| 0b1100;  //en=1, rs=0 -> bxxxx1100
        data_t[1] = data;         // gönderilecek komut                        data_u| 0b1000;  //en=0, rs=0 -> bxxxx1000
        data_t[2] = portP|RS|E|b_Light;            //en=1, rs=1
        HAL_I2C_Master_Transmit_IT(&hi2c2, ADRES_LCD, (uint8_t*) data_t,3);
        i2c_pas=1;
    }
    else
    {
        data_t[2]&= ~E;                                                        // enable pinine isabet eden biti 0 yapmak
        HAL_I2C_Master_Transmit_IT(&hi2c2, ADRES_LCD, (uint8_t*) data_t,3);    // sadece lcd "E" biti değiştirilmiş datayı gönder
        i2c_pas=0;

    }
}

I2C2nin bir sadece LCD'ye bağlı i2c'nin hazır-müsait olup olmadığı için bile beklemiyor kod, zaten interrupt'ta çalıştığı için i2c müsait demek oluyor. Bunu az daha toparlayıp yayınlayacağım. 7 segment sürmekten daha az meşgul oluyor işlemci.
 

Çevrimiçi personel

Forum istatistikleri

Konular
6,735
Mesajlar
114,861
Üyeler
2,756
Son üye
Sagankam

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Back
Top