Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
 
Témaindító: G-Lex, idő: Jan 9, 2006
Lapozás: OK   1314 / 1315
(#) Bakman válasza wincso hozzászólására (») Szept 18, 2022 /
 
A regiszterek beállításával már elindítottad a PWM modult. Jobban belegondolva, a "pwm1_init(1000)" valószínűleg egy normál, egy csatornás PWM-et indít, felülírjva a te beállításaid. Az előző hozzászólásomban lévő három sort töröld és úgy ellenőrizd a PWM működését.
(#) Ódenka hozzászólása Szept 29, 2022 /
 
Üdv!
PICKIT-2 mizéria...
Egy 93C...nevű epromot szerettm volna kiolvasni, de a piros LED (busy) villogása és a menü behívása csak nagyon felületesen történik meg. Az égető panelemen a kimenő feszültséget LED jelzi, ami most nem jelez. Gyanakodtam egy sot23-as diódára, de az jó...
Valaki, aki tud jótanácsot...?
(#) Bakman válasza Ódenka hozzászólására (») Szept 29, 2022 / 1
 
A hibaüzenet szerint a PK2-ben lévő kontrolleren nincs program. A Tools menüből tudod életre hívni: Download PICkit2 operating system. Ha minden igaz.
(#) Ódenka válasza Bakman hozzászólására (») Szept 29, 2022 /
 
pickit_2_v2.61.00_setup_a.zip
Letöltöttem, indítottam...semmi.
(#) pipi válasza Ódenka hozzászólására (») Szept 29, 2022 /
 
Miért történt volna bármi? Bakman leírta, és ott van a sárga mezőben mit kell csinálni... Megpróbáltad?
(#) Ódenka válasza pipi hozzászólására (») Szept 29, 2022 /
 
Most írtam az előbb, persze.
(#) pipi válasza Ódenka hozzászólására (») Szept 29, 2022 /
 
és mi történt az OS rátöltésekor?
(#) Bakman válasza Ódenka hozzászólására (») Szept 29, 2022 /
 
Elvileg neked egy HEX fájl kell, amit ide kell rakni:
C:\Program Files\Microchip\PICkit 2 v2
A másolás után elindítod a PK2 programot, majd a jelzett menüpontra kattintás után a programból ki tudod választani a HEX fájlt, amit a PK2 programja feltölt a PK2-re.

65 és 66. oldal, lásd melléklet. Egy HEX fájlt is mellékeltem, hirtelen ezt találtam.
(#) Ódenka válasza Bakman hozzászólására (») Szept 29, 2022 /
 
Köszönöm! Újra kerek a világ...
Akkora kő esett le!
(#) Lüke Aladár hozzászólása Nov 21, 2022 /
 
Sziasztok!

Évek óta mikroC-t használok, de most úgy alakult, hogy kicsit módosítanom kellene egy régebbi, működő programomat. Ezt még a PicBasic PRO és a Microcode Studio együtessel csináltam. Amiben elakadtam, hogy hol tudom a beállításokat módosítani, hogy az MCLR láb digitális bemenet legyen? Bármilyen megoldást próbáltam, a fordítás sikertelen, és szeretném megspórolni az időt, hogy átírjam C-ben az egész programomat
PicBasic PRO 2.5
Microcode Studio 4.0.0.0
PIC16F690 az áldozat típusa
Köszönöm előre is!
(#) Bakman válasza Lüke Aladár hozzászólására (») Nov 21, 2022 /
 
Lásd melléklet, 4. oldaltól kezdve.
  1. #CONFIG
  2. __CONFIG _CONFIG1, _INTRC_IO & _PWRTE_ON & _MCLR_OFF & _LVP_OFF
  3. #ENDCONFIG
A példában benne is van:

_MCLR_OFF
(#) KoblogPerGyok hozzászólása Jan 2, 2023 /
 
Üdv Mesterek!

Boldog újévet minden kedves fórumtársnak!

Szóval akadt egy kis gondom a DsPIC33fj128-al kapcsolatban. Sehogy sem sikerül SPI-n keresztül fogadnom adatokat. Írni tudok, szépen megy minden. A RAM-ba bele tudok írni, a DAC-ba is, de a RAM-ból sehogy sem kapok adatokat vissza. Az SPI sebessége beállítva, 8 bites módban van, a Proteus-ban látom is szépen a CLK-t, az instukciók is kimennek szépen, a RAM SIO lábán is megjelennek a dolgok, csak a PIC felől nem értem sehogy sem mi a baj. A RAM 23K256-I/P.

Ezzel írok aRAM-ba:
  1. void RAM_Write(unsigned int Address,unsigned char adat)
  2. {
  3.     unsigned char Hi;
  4.     unsigned char Lo;
  5.     Hi = Address >> 8; // byte1 = high byte of Address
  6.     Lo = Address; // byte1 = low byte of Address
  7.     unsigned char Instrukcio;
  8.     //WRITE 0000 0010 Write data to memory array
  9.     Instrukcio=0b00000010;
  10.     LATBbits.LATB0 = 0; //A RAM chip  pin igy kiválasztja
  11.     LATBbits.LATB4 = 1; //A DAC chip  pin nincs kiválasztja
  12.    
  13.    
  14.     LATBbits.LATB8=1; //Hold pin tart
  15.      
  16.      
  17.     Write_SPI(Instrukcio); //A RAM-nak megmondjuk,hogy irni szeretnénk
  18.    
  19.     //Adress irasa
  20.     Write_SPI(Hi);    
  21.     Write_SPI(Lo);
  22.     //És az adat...
  23.     Write_SPI(adat);
  24.     //Mindketto chip kikapcs
  25.     LATBbits.LATB0 = 1; //A RAM chip  pin nincs kiválasztva
  26.     LATBbits.LATB4 = 1; //A DAC chip  pin nincs kiválasztva
  27.    
  28.     LATBbits.LATB8=0; //Hold pin tart
  29.  
  30. }


Ezzel olvasnék ki:

  1. unsigned char RAM_Read(unsigned int Address)
  2. {  
  3.     //12.oldal A cím 16 bites, ezért kell a pontos cím
  4.     unsigned char C;
  5.     unsigned char Hi;
  6.     unsigned char Lo;
  7.     Hi = Address >> 8; // byte1 = high byte of Address
  8.     Lo = Address; // byte1 = low byte of Address
  9.     unsigned char Instrukcio;
  10.     //READ 0000 0011 Read data  memory array
  11.     Instrukcio=0b00000011;
  12.     LATBbits.LATB0 = 0; //A RAM chip  pin igy kiválasztja
  13.     LATBbits.LATB4 = 1; //A DAC chip  pin nincs kiválasztja
  14.    
  15.    
  16.     LATBbits.LATB8=1; //Hold pin tart
  17.    
  18.    
  19.     Write_SPI(Instrukcio); //A RAM-nak megmondjuk, hogy olvasni szeretnénk
  20.     //Adress írasa
  21.     Write_SPI(Hi);    //Mindegyikben van Enable SPI, majd a végén disable
  22.     Write_SPI(Lo);
  23.    
  24. //Volt egy SPI read függvényem is, ugyan ez volt benne, de ide raktam, gondoltam az SPI enable=0, majd a végén 1 elrontaná, de nem tudom.....
  25.  
  26.     SPI1STATbits.SPIEN = 1; // Enable SPI module
  27.     SPI1BUF=0x0;
  28.     SPI1STATbits.SPIRBF  =0x00;
  29.    
  30.      while (!SPI1STATbits.SPIRBF); // Wait for character
  31.      SPI1STATbits.SPIROV = 0;  // Reset overflow bit
  32.     C = SPI1BUF & 0xff;    // Get character
  33. //Esetleg nem az alsó 8 biten van az adat, hanem a felsőn? Akkor hogyan kell?
  34.     IFS0bits.SPI1IF = 0; // Clear the Interrupt Flag
  35.     SPI1STATbits.SPIEN = 0; // Enable SPI module  
  36.    
  37.     //Mindketto chip kikapcs
  38.     LATBbits.LATB0 = 1; //A RAM chip  pin nincs kiválasztva
  39.     LATBbits.LATB4 = 1; //A DAC chip  pin nincs kiválasztva
  40.     LATBbits.LATB8=0; //Hold pin elenged
  41.    
  42.  
  43.     return C;
  44.     }


A Main-ben pedig:
  1. while (1)
  2.         {
  3.            unsigned char adat_hi;
  4.            unsigned char adat_lo;
  5.  
  6.         RAM_Write(0x0001,0b00011111);//Elvileg ez jó, mert ha így adom meg közvetlenül a DAC-nak, akkor ok
  7.         RAM_Write(0x0002,0b11111111);
  8.  
  9.  
  10.         adat_hi=RAM_Read(0x0001);
  11.         adat_lo=RAM_Read(0x0002);
  12.        
  13.         DAC_Write(adat_hi, adat_lo);
  14.         }

És a csatolt képen látszik, hogy a kiolvasásnál a PIC -hez kötött input lábán a z adatot mintha 3 bájton akarná fogadni.
Nagyon fáradt vagyok már, nem is látom miket csinálok, de a csatolt képen mintha az első adat jól jönne be, de utána 3 byte széles a MISO lábon az adat! ...

Légyszi segítsetek!
Köszönöm!
A hozzászólás módosítva: Jan 2, 2023
(#) KoblogPerGyok válasza KoblogPerGyok hozzászólására (») Jan 2, 2023 / 1
 
Úgylátszik megvan a hiba.
Nagyon este van, de mintha a lábak map-elése lett volna hibás...

Ühüm....
//RB3 input MISO (AN4) RP3
//Ez már Input!!!
//Itt már annak a lábnak a száma kell binárisan, amit szeretnék, most nem Funkciót adok meg!!
//Az RB03 pedig a 3-as...
RPINR20bits.SDI1R=0b0010;

Az 10 az három ugye...
A hozzászólás módosítva: Jan 2, 2023
(#) rogers hozzászólása Jan 2, 2023 /
 
Hello.

Van egy hex file-om egy 8bites pichez de nem lehet kapni.

Azt szeretném kérdezni hogy ha egy hasonlo picet találok és az alábbi adatok eggyeznek
lábkiosztás,sram size,voltage,cpu mhz..... akkor hellyetesithetem más piccel? el indul ? elvileg a intel hex file nem tartalmazza csak a beállitásokat?
(#) majkimester válasza rogers hozzászólására (») Jan 2, 2023 /
 
Szinte biztos, hogy nem, de azonos családban nagyobb RAM-mal rendelkezőre lehet cserélni (pl: 16F882 -> 886 mehet). Milyen típusról van szó?
(#) rogers válasza majkimester hozzászólására (») Jan 2, 2023 /
 
Szia.

Pic16f916 amire van a hex és bármi más szóba jöhet amit nem fél év múlva lehet venni.

16f886-ot néztem
(#) majkimester válasza rogers hozzászólására (») Jan 3, 2023 /
 
Milyen perifériák vannak használva?
Ebben van LCD meghajtás, ha az is akkor nehezebb lesz helyette találni.
(#) rogers válasza majkimester hozzászólására (») Jan 3, 2023 /
 
Digitális pin 2 be kettő ki. timmer, más nincs
(#) majkimester válasza rogers hozzászólására (») Jan 3, 2023 /
 
A trimmerhez ADC kell, az ADC már a 916-ban is ANSEL-t használ meg a 886-ban is, de más a kettő regiszter kiosztása. Ha a forrás megvan, akkor könnyen át lehet írni, de megnéztem az include fileokat, és 0x91-es címen alig néhány kontrollernek van az ANSEL, azok is mind más lábszámú.
(#) Bakman válasza majkimester hozzászólására (») Jan 3, 2023 /
 
'timmer' = 'timer' vagy 'trimmer' ?
(#) majkimester válasza Bakman hozzászólására (») Jan 3, 2023 /
 
Jogos, ha timer akkor más a helyzet
(#) KoblogPerGyok hozzászólása Jan 22, 2023 /
 
Sziasztok!

Haladok, de kissé lassan. Sokminden megy, jók is de vannak azért kérdések.

Nagynehezen összeraktam az FFT -t a dsPic-ben. Az eredmények float-típusúak, azokat kiküldtem UART-ra, modelleztem, Excelben megjelenítettem stb. A problémám kettős. Az egyik, hogy a PIC-ben generált próba jelem 10Hz szinuszos. A hossza 1s, és éppen 256 mintát "veszek" belőle. Egyrészt érdekes, hogy a jel második felében jelennek meg az FFT eredmények de ez érthető, de jó hogy ellenőrzöm excelben. No de az eredményemben a 10. bin-nél van egy 1-es érték, ami jó is lenne, de van 17 és 60. ban is. Mivel a mintavétel éppen akkora, mint az FFT tömb, ezért a frekinek meg kellene egyeznie most a bin számával. De nem ez a gond, hanem az, hogy miért jelenik meg 3 csúcs?
jel tömb feltöltve, utána twiddle, utána fftcomplex, utána bitreverzálás, utána a jel kirak uart-ra.Természetesen mindegik fractcomplex, és használom a Fract2Float és a Float2Fract-függvényeket is.

Csatolom az excelről a képet.

Van ötletek? Köszi!
A hozzászólás módosítva: Jan 22, 2023
(#) KoblogPerGyok válasza KoblogPerGyok hozzászólására (») Jan 22, 2023 /
 
Blackman ablak esetleg?
(#) sdrlab válasza KoblogPerGyok hozzászólására (») Jan 22, 2023 /
 
Biztosan jól generálod a szinuszt?
Az ablakozás akkor segít, ha a mintavétel vége nem esik egybe a jel null átmenetével! Jelen esetben a 10Hz az pontosan a null átmenetnél ér véget(feltéve, hogy nullátmenetnél kezdted a fázist), tehát ide felesleges az ablakozás még...
(#) KoblogPerGyok válasza sdrlab hozzászólására (») Jan 22, 2023 /
 
Minden adatot kinyerek a PIC-szimulálásából virtuális terminálon kersztül Proteus-ból. Direkt ezért csináltam az UART-ot, hogy minden részadatot lássak, mert fejelsztéskor tudni kell mindent. Szóval a csatolt képen a generált szinusz látszik. A többi részadat is megvan.
Az ablakozás esetleg akkor kell majd, ha FFT-t hajtok végre nagyobb mintán, mint amekkora az FFT mérete. Már ha jól gondolom.
A hozzászólás módosítva: Jan 22, 2023
(#) sdrlab válasza KoblogPerGyok hozzászólására (») Jan 22, 2023 / 1
 
Akkor feltehetően az algoritmusban lesz a hiba...
Ezt a jelet FFT-zve határozott, elmosódás-mentes értéket kell kapj a 10Hz-hez tartozó bin-en!
(#) KoblogPerGyok válasza sdrlab hozzászólására (») Jan 23, 2023 /
 


Csak aludnom kellett kicsit hozzá.

Ha már itt járok akkor kipróbálom a Blackman ablakot is, de az még nem jó.

FFT_jo.jpg
    
(#) sdrlab válasza KoblogPerGyok hozzászólására (») Jan 23, 2023 /
 
Vedd figyelembe, minél erőteljesebb ablakozó függvényt használsz, annál jobban el fogja kenni a bin-eket! Tehát azzal már nem lesz pont csak a 10-es bin-en jeled, mint most... Cserébe tetszőlegesen vághatod el a jelet, ahová a feldolgozási méret esik...
(#) KoblogPerGyok válasza sdrlab hozzászólására (») Jan 23, 2023 /
 
Az fog kelleni majd később szerintem igen, de gond van.

Az előző kép jó, de csak véltlenül....
  1. float omega;
  2.     float ertek;
  3.     for (i=0;i<N ;i++)
  4.     {
  5.         //sima 10Hz-es szinusz
  6.         omega=2*PI*10*(i*dt);
  7.         ertek= (sin(omega)+cos(omega+PI/8)); //Szoroztam 10 el, 0.5-el is
  8.  
  9.         Jel[i].real=Float2Fract(ertek); //Frakció!!!ertek;
  10.         Jel[i].imag=Float2Fract(0);
  11.     }


Próbaképpen megcsináltam több jelre is. Nem működik a dolog. A Float2Fract-ban lehet a gond. Nézem a dsp.h-t, de mintha ott 16 bites floatra írták volna meg, nekem meg azt hiszem 32bites a float változóm. Ha az értéket szorzom 10-el, majdnem jó. Ha 0.5-el, akkor több értéket kapok, amiknek a mértani közepe lenne a jó megoldás, azaz pl 5-nél és 18-nál jelenik meg a csúcs. A kettő közepe 5+(13/2)= kb jó.

Csatoltam a dsp.h-t amit használok.

Szóval egyelőre sajnos ez sem megy.
A hozzászólás módosítva: Jan 23, 2023

dsp.h
    
(#) sdrlab válasza KoblogPerGyok hozzászólására (») Jan 23, 2023 /
 
  1. ertek= (sin(omega)+cos(omega+PI/8));

Ez mi akar lenni?
Következő: »»   1314 / 1315
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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