Fórum témák

» Több friss téma
Fórum » PIC programozás mikroC fejlesztőkörnyezetben
Lapozás: OK   9 / 10
(#) kriszrap válasza Bakman hozzászólására (») Szept 30, 2021 /
 
Sajnos már nem férne rá a nyakra .
Enélkül is sikerülhet?
(#) Bakman válasza kriszrap hozzászólására (») Okt 1, 2021 /
 
Igen, sikerülhet ha elárulod, milyen módszerrel vannak a LED-ek a kontrollerhez kötve. Mátrix meghajtás kell?
(#) kriszrap hozzászólása Okt 1, 2021 /
 
Okés
5x8 led RGB vel
5 szint 8 oszlop.

3 db Shiftregiszeter 74hc595

1. shift piros szint lehet beállítani ledenként .
2 shift sárga szint lehet beállítani ledenként .
3. shift kék szint lehet beállítani ledenként .

pic18f46k22 (16MHZ) rákötöttem

pwm(5khz)
PWM 1 lábat 1. Shift regiszter Blank lábát.
PWM 2 lábát 2. shiftregiszter BLANK lábára.
PWM 3 lábát 3. shiftregiszter BLANK lábára.

sorokat 5db pedig tranzisztorral oldottam meg.
Ennyi a felépitése.
(#) Bakman válasza kriszrap hozzászólására (») Okt 1, 2021 /
 
Az egyszerűség kedvéért nézzünk csak egy színt. Adott egy 5 x 8-as kép. Öt oszlop, nyolc sor.

Az első oszlophoz tartozó LED-eket (már amelyiket kell) bekapcsolod, majd bekapcsolod az oszlopmeghajtást. Vársz egy kicsit, kikapcsolod az oszlopmeghajtást. Bekapcsolod a második oszlophoz tartozó LED-eket, bekapcoslod az oszlopot, vársz egy kicsit, majd kikapcsolod az oszlopot, lépsz a harmadik oszlop-ra stb.

Az utolsó oszlop után lépsz az elsőre. Mindezt folyamatosan és gyorsan, hogy ne villogjon a kép. Célszerű ezt periódikus megszakításból intézni, pl. egy Timer felhasználásával. Ha egy szín már megy, lehet háromszorozni a rendszert a három színhez.

Annyi trükk van nálad, már ha jól értem az egészet, hogy az adatot át kell fordítani SPI-n keresztül 74HC595-re.
PWM-mel a fényerőt tudod majd szabályozni, az egyelőre nem érdekes, első lépésként próbáld megérteni, hogyan működik a mátrix meghajtás mert ha jól sejtem, az alapok hiányoznak az egészhez.
(#) kriszrap válasza Bakman hozzászólására (») Okt 1, 2021 /
 
Idézet:
„Az első oszlophoz tartozó LED-eket (már amelyiket kell) bekapcsolod, majd bekapcsolod az oszlopmeghajtást. Vársz egy kicsit, kikapcsolod az oszlopmeghajtást. Bekapcsolod a második oszlophoz tartozó LED-eket, bekapcoslod az oszlopot, vársz egy kicsit, majd kikapcsolod az oszlopot, lépsz a harmadik oszlop-ra stb.

Az utolsó oszlop után lépsz az elsőre. Mindezt folyamatosan és gyorsan, hogy ne villogjon a kép. Célszerű ezt periódikus megszakításból intézni, pl. egy Timer felhasználásával. Ha egy szín már megy, lehet háromszorozni a rendszert a három színhez.

Ez a fenti kóddal működik is eddig rendben.

Annyi nem hogy Timer el hogyan lehetne ezt megoldani?
Timer2 használom pergésmentesítés mentesítésre.
Timer2 elég lehet hozzá?

74hc595 nem SPI vel kezelem ha nem ha nem pic lábára kötöttem clock lacht data lábakat és azokat billegtettem.
A hozzászólás módosítva: Okt 1, 2021
(#) Bakman válasza kriszrap hozzászólására (») Okt 1, 2021 /
 
Ha jól emlékszem, abban a kontrollerben (PIC18F46K22) összesen hét Timer van: Timer0, Timer1, 3, 5 és Timer2, 4, 6.

Kösd át SPI-re a meghajtó IC-ket, sokat spórólhatsz az erőforrásokkal.
(#) kriszrap válasza Bakman hozzászólására (») Okt 1, 2021 /
 
Rendben SPI soha se használtam úgy hogy utánna járok mi az
(#) kriszrap válasza kriszrap hozzászólására (») Okt 2, 2021 /
 
Ha jól értem ezt a dolgot ezzel egyidőben tudom kezelni a 3 db shiftregisztert. Csak kell plusz 3 láb a picktol?
(#) kriszrap hozzászólása Okt 2, 2021 /
 
Annyit akarok kérdezni SPI minden kép kell amúgy mert a 3 shiftem sorba van kötve.
(#) Bakman válasza kriszrap hozzászólására (») Okt 2, 2021 /
 
Nem, nem feltétlen kell a beépített SPI-t használnod de sokkal jobban jársz vele.

Indíts az alapokkal, különben soha nem fogsz végezni.

Kezdésnek vegyél egy-kettő-öt MAX7219-es modult, kösd össze a kontrollerrel SPI hazsnálatával. Addig bűvészkedj, amíg azok a LED-ek nem világítanak a kjelzőn, amelyiket akarod. Ha működik, köss sorba három modult és úgy tedd próbára a tudományod.

Vagy.

Másolj le egy komplett kapcsolást és tölts le hozzá egy komplett programot. Az építés öröme megmarad a tudás viszont kevésbé fog gyarapodni.
(#) kriszrap válasza Bakman hozzászólására (») Okt 2, 2021 /
 
Rendben picit vissza térnék a kérdésemre.
Ha meg van a multiplex kijelzés amit pár hsz el beszéltünk.

Ha meg van egy színre a multiplex után mondtad hogy azt 3x am dolgot RGB miatt.
Ha ez is meg van hogy tudom külön a ledek fényerejét ez által színt is tudnék keverni.
Elmélet érdekel leginkább hogy hogy szokták ezt megoldani?.
Arra gondoltam ledenkent shiftelek és pwnt állítok .
Nem hinném van egyszerűbb módja
(#) Bakman válasza kriszrap hozzászólására (») Okt 2, 2021 /
 
Megfordítod a vezérlés menetét. Bekapcsolod az oszlopmeghajtót majd a LED-eknek változó ideig adsz áramot, így ha elég gyorsan csinálod, a szem számára eltérő fényerővel fognak világítani.
(#) kriszrap válasza Bakman hozzászólására (») Okt 3, 2021 /
 
Okés de ezt ha jól gondolom az összes LED nek a fényerejét egyformán változik a fenti elmélet szerint.

Azt szeretném minden egyes lednek a külön tudjam a piros sárga kék fényerejét változtatni. Utánna saját színeket tudok keverni stb.
(#) foxi63 válasza kriszrap hozzászólására (») Okt 3, 2021 /
 
Szia!
3x2 db 595-el megoldható a dolog . Mivel 5*8*3 a szervezés , ezért egy ledre jutó idő 25msec.
ennyi időnként kell léptetni a ledeket. 1 led kiválasztásához kell 2db shift regiszter (5 sor 8 oszlop mátrix ) ebből kell 3 db ( rgb)
Megcímzel egy ledet és a pic ccp1 ccp2 ccp3 modulja szolgáltatja a 3db pwm jelet a három OE kivezetésnek. A másik 3 OE ki és bekapcsolható .
Így 7 vezetékkel megoldható a dolog.
Bár nem tudom, hogy ha a led 1/40 ideig működik, mekkora lesz az effekív fényerő?
(#) kriszrap hozzászólása Nov 7, 2021 /
 
Sziasztok.
Olyan kérdésem lenne hogy szeretném használni CCP2,CCP3,CCP4

CCP2,CCP3 2 lábon is meg van és MikroC mindegyik lábon pwm aktiválja.
Hogy lehet tiltani? Hogy csak CCP 2 RB3, CCP 3 RB5 legyen pwm ?

  1. void alap()
  2. {
  3.     unsigned short k,i;
  4.     OSCCON.IRCF0=1;///Internal Oscillator Frequency Select bits, 16MHz
  5.     OSCCON.IRCF1=1;
  6.     OSCCON.IRCF2=1;
  7.     OSCTUNE.PLLEN=1; // 4x PLL
  8.  
  9.     InitTimer2();
  10.     ANSELA = 0;
  11.     ANSELB = 0;
  12.     ANSELC = 0;
  13.     ANSELD = 0;
  14.     ANSELE = 0;
  15.  
  16.     C1ON_bit = 0;                       // Disable comparators
  17.     C2ON_bit = 0;
  18.    
  19.     //ki menet vagy bemenet
  20.     TRISA = 0;
  21.     TRISB = 0;
  22.     TRISC = 0;
  23.     TRISD = 0;
  24.     TRISE = 0;
  25.    
  26.     //jelszint
  27.     LATA = 0;
  28.     LATB = 0;
  29.     LATC = 0;
  30.     LATD = 0;
  31.     LATE = 0;
  32.  
  33.     //pwm
  34.     PWM2_Init(1000); //CCP 2  G  RB3
  35.     PWM3_Init(1000); //CCP 3  B  RB5
  36.     PWM4_Init(1000); //CCP 4  R  RD1
  37.    
  38.     PWM2_Start();
  39.     PWM3_Start();
  40.     PWM4_Start();
  41.    
  42.     PWM2_Set_Duty(0);
  43.     PWM3_Set_Duty(0);
  44.     PWM4_Set_Duty(0);
  45.  
  46.     //bemenet
  47.     TRISA.RA5=1;//poti kék   an4
  48.     TRISE.RE0=1;//poti zöld  an5
  49.     TRISE.RE1=1;//poti piros an6
  50.    
  51.     //ADC engedélyezése
  52.     ANSELA.ANSA5=1;
  53.     ANSELE.ANSE0=1;
  54.     ANSELE.ANSE1=1;
  55.    
  56.     //Gomb bemenet nek álltítjuk
  57.     TRISA.RA2=1;//gomb
  58.     TRISA.RA3=1;//gomb
  59.     TRISA.RA4=1;//gomb bal
  60.    
  61. }
(#) Bakman válasza kriszrap hozzászólására (») Nov 7, 2021 /
 
A PIC konfigurációjában lehet kiválasztani, melyik láb legyen PWM kimenet ha bekapcsolod a megfelelő CCP modult.
(#) kriszrap válasza Bakman hozzászólására (») Nov 7, 2021 /
 
Köszönöm sikerült
(#) glaci hozzászólása Jún 11, 2023 /
 
Sziasztok!
Segítsetek megérteni az alábbi kódrészletet, minden apró részletre kitérve, ha lehet:


  1. sprinti(temp_a, "-%02u.%01u%cC", abs(temperature)/10, abs(temperature) % 10, 223);



Köszönöm!
(#) pipi válasza glaci hozzászólására (») Jún 11, 2023 /
 
Pontosan mi a kérdés?
ugyanaz mint a printf...
pl: https://en.wikipedia.org/wiki/Printf
Balra igazítva 2 számjegyre kiírja a hőmérséklet egész rész(bevezető 0-val ha kell), egy számjegyre a tizedes részt, a 223 gondolom a kijelző kódkészletében a fok jele meg a C betű
A hőmérséklet tízsszeresét tárolja a temperature egész változóban.
(#) pipi válasza pipi hozzászólására (») Jún 11, 2023 /
 
Ami kimaradt, a kiírás a temp_a karaktertömbbe történik
(#) glaci válasza pipi hozzászólására (») Jún 11, 2023 /
 
Köszönöm szépen!
(#) glaci válasza glaci hozzászólására (») Jún 11, 2023 /
 
Akkor tehát, a temp_a karakter tömbbe a következő íródik: az első karakter egy "-" jel, a kövekező
2db szám, ami a temperature abszolút értékének 10-zel való osztásának egész részéből adódik, a következő karakter "." pont, majd a temperature abszolút értékének 10-zel való osztásának maradékértéke, egy számjegyre kerekítve, majd a 223-nak a karater megfelelője ami a "°" és végül a "C".
És ezt egy LCD-re ki tudom íratni.
A hozzászólás módosítva: Jún 11, 2023
(#) glaci hozzászólása Júl 20, 2023 /
 
Sziasztok!

Kérdés: valaki tudott már ezzel az eszközzel mérni?
Nekem nem sikerült. A kód amivel szeretném mérésre bírni

  1. #define DHT22_PIN         RC5_bit
  2. #define DHT22_PIN_DIR     TRISC5_bit
  3. #include <stdint.h>
  4.  
  5.         // read one byte from sensor
  6. uint8_t dht22_read_byte()
  7. {
  8.   uint8_t i = 8, dht22_byte = 0;
  9.  
  10.   while(i--)
  11.   {
  12.     while( !DHT22_PIN );
  13.  
  14.     delay_us(40);
  15.  
  16.     if( DHT22_PIN )
  17.     {
  18.       dht22_byte |= (1 << i);   // set bit i
  19.       while( DHT22_PIN );
  20.     }
  21.   }
  22.   return(dht22_byte);
  23. }
  24. ////////////////////////////////
  25. // read humidity (in hundredths rH%) and temperature (in hundredths °Celsius) from sensor
  26. // read humidity (in hundredths rH%) and temperature (in hundredths  Celsius) from sensor
  27. void dht22_read(uint16_t *dht22_humi, int16_t *dht22_temp)
  28. {
  29.   // send start signal
  30.   DHT22_PIN     = 0;   // connection pin output low
  31.   DHT22_PIN_DIR = 0;   // configure connection pin as output
  32.   delay_ms(25);        // wait 25 ms
  33.   DHT22_PIN     = 1;   // connection pin output high
  34.   delay_us(30);        // wait 30 us
  35.   DHT22_PIN_DIR = 1;   // configure connection pin as input
  36.  
  37.   // check sensor response
  38.   while( DHT22_PIN );
  39.   while(!DHT22_PIN );
  40.   while( DHT22_PIN );
  41.  
  42.   // read data
  43.   *dht22_humi = dht22_read_byte();  // read humidity byte 1
  44.   *dht22_humi = (*dht22_humi << 8) | dht22_read_byte();  // read humidity byte 2
  45.   *dht22_temp = dht22_read_byte();  // read temperature byte 1
  46.   *dht22_temp = (*dht22_temp << 8) | dht22_read_byte();  // read temperature byte 2
  47.   dht22_read_byte();               // read checksum (skipped)
  48.  
  49.   if(*dht22_temp & 0x8000) {      // if temperature is negative
  50.     *dht22_temp &= 0x7FFF;
  51.     *dht22_temp *= -1;
  52.   }
  53.  
  54. }
  55. void main ()
  56. {
  57.  ............................
  58. while(1)
  59. {
  60.    dht22_read(&humidity, &temperature);    
  61. ................................    
  62. }
  63. }


A program leáll
A hozzászólás módosítva: Júl 20, 2023
(#) superuser válasza glaci hozzászólására (») Júl 20, 2023 /
 
Igen. Viszonylag egyszerű a működése.
5V táp kell neki, meg egy felhúzó ellenállás.
3V3 nem támogatott.
(#) glaci válasza superuser hozzászólására (») Júl 20, 2023 /
 
A felhúzó ellenállás rajta van vett panelen, nem?
(#) superuser válasza glaci hozzászólására (») Júl 20, 2023 /
 
Szerintem nincsen. Ohm mérővel tudod ellenőrizni.
(#) glaci válasza superuser hozzászólására (») Júl 20, 2023 /
 
Az adat és a Vcc között van egy 10K ellenállás. Ohm mérővel 5Kohm mérhető.

dht22.png
    
(#) superuser válasza glaci hozzászólására (») Júl 21, 2023 /
 
Akkor ok. Nekem csak szenzor van, nyák nélkül.
Kódot érdemes átnézni, meg szkóppal a működést.
Ha lesz egy kis időm, átnézem a kódodat én is.
(#) glaci válasza superuser hozzászólására (») Júl 21, 2023 /
 
Addig eljutottam, hogy a program belép a "dht22_read" függvénybe, ki is megy a szenzor felé vétel készség jele. de a szenzor nem ad választ.
(#) kaqkk válasza glaci hozzászólására (») Júl 22, 2023 /
 
Ha az adatláb nincs felhúzva akkor ne is várj választ , folyamatos gnd-t fogsz látni
Következő: »»   9 / 10
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem