Drk_alien Postat Martie 4, 2013 Autor Partajează Postat Martie 4, 2013 Eu am conectat pinii asa cum arata exemplul asta. E posibil sa configurezi pinii in functie de preferinta? Ai dreptate, e posibil sa nu fi conectat eu bine pinii ... De preferat ar fi sa ii pot eu configura, dar cum?...e posibil? Am gasit configuratia asta.Cred ca asta e ceea ce am eu nevoie. . Cand ajung acasa asta e primul lucru pe care il fac. Mersi...... revin cu detalii. Link spre comentariu
Liviu M Postat Martie 4, 2013 Partajează Postat Martie 4, 2013 Functiile pe care le-ai folosit tu sunt pentru portul SPI hard. In descrierea lor, scrie clar: You need PIC MCU with hardware integrated SPI.Daca vrei sa folosesti port SPI soft, trebuie sa folosesti functii din biblioteca softSpi,caz in care poti sa-ti alegi singur pinii la care sa legi slave-ul. Eu unul as folosi varianta hard, ca la o adica poti folosi intreruperile pentru optimizarea procesului. Link spre comentariu
Drk_alien Postat Martie 5, 2013 Autor Partajează Postat Martie 5, 2013 Am incercat aseara noile conexiuni dar nu am reusit nimik.Am conectat asa: Cs->RB2 ( am incercat si cu RC0 cum arata in exemplul cu pic18f4520 - just in case ) Sck->RB1 Mosi(Data in)-> RB0 Miso(Datat out)->RC7Pentru a vedea pana unde ajunge codul si daca s-a initializat cardul am folosit un display de nokia 3310 pt a afisa mesaje. Atunci cand aveam conexiunea facuta si in cod afisam doar un mesaj de test pt display pic-ul porneste, cand am adugat codul care initializeaza Spi-ul, pic-ul a murit, nici macar nu a mai afisat mesajul de test de dinainte de a ajunge la linia de cod care initializeaza SPI-ul. Nu inteleg de ce se intampla asta. Nu am nici cea mai vaga idee.Cand am scos liniile de cod care initizeaza spi-ul, pic-ul merge ca uns. :cry: .Nu prea stiu ce sa mai fac. Acesta e punctul culminant al proiectului pt ca doar partea cu cardul mai trebuie sa functioneze si apoi ma incep sa scriu intregul cod.ps: vreau sa fac un editor de text ( folosesc: display nokia 3310, tastatura ps2, si cardul pentru a salva fisierul text ) Link spre comentariu
Liviu M Postat Martie 5, 2013 Partajează Postat Martie 5, 2013 Salut, Semnalele de comunicatie SPI sunt denumite cam ciudat: - MISO inseamna Master Input Slave Output. Asta inseamna ca pinul MISO al cardului trebuie legat la SDI, care in cazul PIC18F4550 e RB0; - MOSI inseamna Master Output Slave Input. Legatura se face intre MOSI card si SDO PIC18F4550, aduca pinul RC7. - CLK e clar, e clockul, se leaga la RB1 - Avand un singur slave, poti lega CS-ul cardului direct la masa. Daca nu, poti folosi pinul SS al picului - RA5. Dupa parerea mea, ai legat cardul gresit. Pentru discutii asupra eventualelor probleme din cod e nevoie de... cod. Asa ca daca nu-i prea secret, posteaza si bucata de cod buclucasa. Succes, Livu PS Desi am folosit des comunicatia SPI si ma impac binisor cu ea, n-a fost niciodata folosind PIC-uri, asa ca sunt sanse sa fi spus si prostii. Sper insa ca nu. Link spre comentariu
Drk_alien Postat Martie 5, 2013 Autor Partajează Postat Martie 5, 2013 Diseara o sa pun codul, acum sunt la munca.Nu e nimik secret...doar ca e ceva cod si nu cred ca o sa il citeasca cineva...dar o sa scot tot ce nu e necesar.Daca o sa imi reuseasca, ,am sa postez tot proiectul pe forum.Nici nu stii cat ma bucur ca ai rabdare cu mine ....mersi. Link spre comentariu
Drk_alien Postat Martie 5, 2013 Autor Partajează Postat Martie 5, 2013 Asta este codul sbit Mmc_Chip_Select at LATC0_bit; // for writing to output pin always use latch (PIC18 family)sbit Mmc_Chip_Select_Direction at TRISC0_bit;const LINE_LEN = 43;char err_txt[20] = "FAT16 not found";char file_contents[LINE_LEN] = "XX MMC/SD FAT16 library by Anton Rieckertn";char filename[14] = "MIKRO00x.TXT"; // File namesunsigned short loop, loop2;unsigned long i, size;char Buffer[512]; // Creates new file and writes some data to itvoid M_Create_New_File() { filename[7] = 'A'; Mmc_Fat_Set_File_Date(2010, 4, 19, 9, 0, 0); // Set file date & time info putstr("2|"); Mmc_Fat_Assign(&filename, 0xA0); // Find existing file or create a new one Mmc_Fat_Rewrite(); // To clear file and start with new data for(loop = 1; loop <= 99; loop++) { UART1_Write('.'); file_contents[0] = loop / 10 + 48; file_contents[1] = loop % 10 + 48; Mmc_Fat_Write(file_contents, LINE_LEN-1); // write data to the assigned file }}void main() { ADCON1 |= 0x0F; // Configure AN pins as digital CMCON |= 7; TRISB = 0; TRISD = 0; UART1_Init(19200); // Initialize UART module at 19200 delay_ms(100); LCD_innit(); LCD_set_XY(0,0); putstr("1|"); SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV64, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH); //daca comentez tot codul de aici in jos putstr("2|"); // use fat16 quick format instead of init routine if a formatting is needed if (Mmc_Fat_Init() == 0) { // reinitialize spi at higher speed SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV4, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH); //--- Test start putstr("Test Start."); //--- Test routines. Uncomment them one-by-one to test certain features M_Create_New_File(); } else { putstr("eroare"); }} Pe scurt functia putscr("text") afiseaza pe ecranul de 3310 un "text". Functiile sunt declarate mai sus dar nu cred ca au vreun rost pt a fi listate deoarece pt a conecta pic-ul cu display-ul folosesc pinii RB7-RB3. Problema apare atunci cand se apeleaza o functie din libraria mmc, in acest caz cand se ajunge la "if (Mmc_Fat_Init() == 0)" ...dar daca linia in care apare if-ul nu e comentata nu se ajunge nici la " putstr("1|");" ....practic nici nu se initializeaza displayul, pt ca pixelii ar trebuii sa isi schimbe culoarea chiar daca nu se afiseaza ceva. E foarte ciudat pt ca in cazul asta nici nu pot debuga programul. Am legat firele asa cum mi-ai zis , am pus cs-ul si pe masa si pe ra5...tot degeaba.. ...pe scurt pic-ul moare daca in cod apelez undeva o functie de genul "Mmc_Fat_Init()"...care e din libraria mmc. Link spre comentariu
Liviu M Postat Martie 6, 2013 Partajează Postat Martie 6, 2013 Hm, in conditiile in care si display-ul comunica tot prin spi, poate n-ar fi rau sa postezi si partea de configurare (hard) a lui. Link spre comentariu
Drk_alien Postat Martie 6, 2013 Autor Partajează Postat Martie 6, 2013 Asta e restul de cod care vine deasupra celui de dinainte. // LCD module connectionssbit sce at LATB7_bit;sbit res at LATB6_bit;sbit dc1 at LATB5_bit;sbit sdin at LATB4_bit;sbit sclk at LATB3_bit;sbit sce_Direction at TRISB7_bit;sbit res_Direction at TRISB6_bit;sbit dc1_Direction at TRISB5_bit;sbit sdin_Direction at TRISB4_bit;sbit sclk_Direction at TRISB3_bit; void LCD_write_byte(unsigned char dt, unsigned char command){ unsigned char i; sce=0; dc1=command; for(i=0;i<8;i++) { if(dt&0x80) sdin=1; else sdin=0; dt=dt<<1; sclk=0; sclk=1; } dc1=1; sce=1; sdin=1;}const char table[480] = { 0x00,0x00,0x00,0x00,0x00, // 20 space ASCII table for NOKIA LCD: 96 rows * 5 bytes= 480 bytes 0x00,0x00,0x5f,0x00,0x00, // 21 ! Note that this is the same set of codes for character you 0x00,0x07,0x00,0x07,0x00, // 22 " would find on a HD44780 based character LCD. 0x14,0x7f,0x14,0x7f,0x14, // 23 # Also, given the size of the LCD (84 pixels by 48 pixels), 0x24,0x2a,0x7f,0x2a,0x12, // 24 $ the maximum number of characters per row is only 14. 0x23,0x13,0x08,0x64,0x62, // 25 % 0x36,0x49,0x55,0x22,0x50, // 26 & 0x00,0x05,0x03,0x00,0x00, // 27 ' 0x00,0x1c,0x22,0x41,0x00, // 28 ( 0x00,0x41,0x22,0x1c,0x00, // 29 ) 0x14,0x08,0x3e,0x08,0x14, // 2a * 0x08,0x08,0x3e,0x08,0x08, // 2b + 0x00,0x50,0x30,0x00,0x00, // 2c , 0x08,0x08,0x08,0x08,0x08, // 2d - 0x00,0x60,0x60,0x00,0x00, // 2e . 0x20,0x10,0x08,0x04,0x02, // 2f / 0x3e,0x51,0x49,0x45,0x3e, // 30 0 0x00,0x42,0x7f,0x40,0x00, // 31 1 0x42,0x61,0x51,0x49,0x46, // 32 2 0x21,0x41,0x45,0x4b,0x31, // 33 3 0x18,0x14,0x12,0x7f,0x10, // 34 4 0x27,0x45,0x45,0x45,0x39, // 35 5 0x3c,0x4a,0x49,0x49,0x30, // 36 6 0x01,0x71,0x09,0x05,0x03, // 37 7 0x36,0x49,0x49,0x49,0x36, // 38 8 0x06,0x49,0x49,0x29,0x1e, // 39 9 0x00,0x36,0x36,0x00,0x00, // 3a : 0x00,0x56,0x36,0x00,0x00, // 3b ; 0x08,0x14,0x22,0x41,0x00, // 3c < 0x14,0x14,0x14,0x14,0x14, // 3d = 0x00,0x41,0x22,0x14,0x08, // 3e > 0x02,0x01,0x51,0x09,0x06, // 3f ? 0x32,0x49,0x79,0x41,0x3e, // 40 @ 0x7e,0x11,0x11,0x11,0x7e, // 41 A 0x7f,0x49,0x49,0x49,0x36, // 42 B 0x3e,0x41,0x41,0x41,0x22, // 43 C 0x7f,0x41,0x41,0x22,0x1c, // 44 D 0x7f,0x49,0x49,0x49,0x41, // 45 E 0x7f,0x09,0x09,0x09,0x01, // 46 F 0x3e,0x41,0x49,0x49,0x7a, // 47 G 0x7f,0x08,0x08,0x08,0x7f, // 48 H 0x00,0x41,0x7f,0x41,0x00, // 49 I 0x20,0x40,0x41,0x3f,0x01, // 4a J 0x7f,0x08,0x14,0x22,0x41, // 4b K 0x7f,0x40,0x40,0x40,0x40, // 4c L 0x7f,0x02,0x0c,0x02,0x7f, // 4d M 0x7f,0x04,0x08,0x10,0x7f, // 4e N 0x3e,0x41,0x41,0x41,0x3e, // 4f O 0x7f,0x09,0x09,0x09,0x06, // 50 P 0x3e,0x41,0x51,0x21,0x5e, // 51 Q 0x7f,0x09,0x19,0x29,0x46, // 52 R 0x46,0x49,0x49,0x49,0x31, // 53 S 0x01,0x01,0x7f,0x01,0x01, // 54 T 0x3f,0x40,0x40,0x40,0x3f, // 55 U 0x1f,0x20,0x40,0x20,0x1f, // 56 V 0x3f,0x40,0x38,0x40,0x3f, // 57 W 0x63,0x14,0x08,0x14,0x63, // 58 X 0x07,0x08,0x70,0x08,0x07, // 59 Y 0x61,0x51,0x49,0x45,0x43, // 5a Z 0x00,0x7f,0x41,0x41,0x00, // 5b [ 0x02,0x04,0x08,0x10,0x20, // 5c Yen Currency Sign 0x00,0x41,0x41,0x7f,0x00, // 5d ] 0x04,0x02,0x01,0x02,0x04, // 5e ^ 0x40,0x40,0x40,0x40,0x40, // 5f _ 0x00,0x01,0x02,0x04,0x00, // 60 ` 0x20,0x54,0x54,0x54,0x78, // 61 a 0x7f,0x48,0x44,0x44,0x38, // 62 b 0x38,0x44,0x44,0x44,0x20, // 63 c 0x38,0x44,0x44,0x48,0x7f, // 64 d 0x38,0x54,0x54,0x54,0x18, // 65 e 0x08,0x7e,0x09,0x01,0x02, // 66 f 0x0c,0x52,0x52,0x52,0x3e, // 67 g 0x7f,0x08,0x04,0x04,0x78, // 68 h 0x00,0x44,0x7d,0x40,0x00, // 69 i 0x20,0x40,0x44,0x3d,0x00, // 6a j 0x7f,0x10,0x28,0x44,0x00, // 6b k 0x00,0x41,0x7f,0x40,0x00, // 6c l 0x7c,0x04,0x18,0x04,0x78, // 6d m 0x7c,0x08,0x04,0x04,0x78, // 6e n 0x38,0x44,0x44,0x44,0x38, // 6f o 0x7c,0x14,0x14,0x14,0x08, // 70 p 0x08,0x14,0x14,0x18,0x7c, // 71 q 0x7c,0x08,0x04,0x04,0x08, // 72 r 0x48,0x54,0x54,0x54,0x20, // 73 s 0x04,0x3f,0x44,0x40,0x20, // 74 t 0x3c,0x40,0x40,0x20,0x7c, // 75 u 0x1c,0x20,0x40,0x20,0x1c, // 76 v 0x3c,0x40,0x30,0x40,0x3c, // 77 w 0x44,0x28,0x10,0x28,0x44, // 78 x 0x0c,0x50,0x50,0x50,0x3c, // 79 y 0x44,0x64,0x54,0x4c,0x44, // 7a z 0x00,0x08,0x36,0x41,0x00, // 7b < 0x00,0x00,0x7f,0x00,0x00, // 7c | 0x00,0x41,0x36,0x08,0x00, // 7d > 0x10,0x08,0x08,0x10,0x08, // 7e Right Arrow -> 0x78,0x46,0x41,0x46,0x78};void clockdata(char bits_in){ int bitcnt; for (bitcnt=8; bitcnt>0; bitcnt--) { sclk = 0; //Set Clock Idle level LOW. if ((bits_in&0x80)==0x80) {sdin=1;} // PCD8544 clocks in theMSb first. else {sdin=0;} sclk = 1; //Data is clocked on the rising edge of SCK. bits_in=bits_in<<1; // Logicalshift data by 1 bit left. }} void writecom(char command_in){ dc1 = 0; // Select Command register. sce = 0; // Select Chip. clockdata(command_in); // Clock in command bits. sce = 1; // Deselect Chip.} void LCD_set_XY(unsigned char X, unsigned char Y){ writecom(0x40|(Y&0x07)); // Y axis writecom(0x80|(X&0x7f)); // X axis}void writedata(unsigned char data_in){ dc1 = 1; // Select Data register. sce = 0; // Select Chip. clockdata(data_in); // Clock in data bits. sce = 1; // Deselect Chip.}void putchar(char character){ int tablept, count, char_column; if ((character<0x20)||(character>0x7f)) {return;} // Exit function if character is not found. tablept = ((5*character) - 160); // Point to the columns of the character in the table. for (count=5;count>0;count--) // Draw the columns to print the character. { char_column = table[tablept]; writedata(char_column); tablept++; } writedata(0x00); // 1 pixel spacing per character.} void putstr( char *s){ while(*s) {putchar(*s++);} // Points to one ASCII to be written one at a time.} void clearram(void){ int ddram; LCD_set_XY(0,0); // Cursor Home. for (ddram=504;ddram>0;ddram--) {writedata(0x00);} // 6*84 = 504 DDRAMaddresses.}void LCD_innit(){ res = 1; // Set _RES HIGH. sce = 1; // Disable Chip. res = 0; // Reset the LCD. Delay_ms(100); // Wait 100ms. res = 1; // Awake LCD from RESET state. writecom(0x21); // Activate Chip and H=1. writecom(0xC2); // Set LCD Voltage to about 7V. writecom(0x13); // Adjust voltage bias. writecom(0x20); // Horizontal addressing and H=0. writecom(0x09); // Activate all segments. clearram(); // Erase all pixel on the DDRAM. writecom(0x08); // Blank the Display. writecom(0x0C); // Display Normal. LCD_set_XY(0,0); // Cursor Home.} Link spre comentariu
Liviu M Postat Martie 6, 2013 Partajează Postat Martie 6, 2013 Salut,imi pare rau, nu vad nimic in neregula.Pentru ca zici ca totul "ingheata" cand "activezi" functiile MMC dar inainte sa le folosesti si pentru ca ultima comanda executata pare a fi putstr(), singura idee pe care o mai am ar fi sa schimbi numele functiilor putchar() si putstr() (in nokia_putchar si nokia_putstr, de exemplu), ca sa fii sigur ca mikroc n-are alte functii similare "interne" pe care sa le apeleze in locul celor pe care le vrei tu.Daca nici asta nu e, nu mai stiu ce sa zic (in afara de sa-ti scrii singur functiile de comunicatie cu cardul).Succes,LiviuLE Am gasit la mikre bibliotecile cu functii si cele 2 mentionate de mine mai sus nu par a fi implementate in niciuna, asa ca probabil ideea de mai sus n-o sa imbunatateasca nimic, da' nu te costa prea mult sa incerci. Link spre comentariu
Drk_alien Postat Martie 6, 2013 Autor Partajează Postat Martie 6, 2013 Inainte de asta am incercat sa fac debug punand in poarta A 5v. Tot ingheata si asa (adica nu pune ). Asta fara sa folosesc displayul sau functiile lui. Deci sigur nu are legatura cu asta. :cry: ...nu stiu ce sa mai fac.Ar trebuii sa fie usor sa folosesc un stik de memorie si sa scriu prin usb in loc de card?( si comunicarea cu cardul ar trebuii sa fi fost desutl de usoara) Ma gandesc la asta ca o varianta secundara pt proiectul meu. Link spre comentariu
Liviu M Postat Martie 6, 2013 Partajează Postat Martie 6, 2013 Nu cred ca poti folosi USB-ul din PIC pentru comunicatia cu un stick.Pentru a comunica cu un stick ai nevoie de un USB-host si eu nu stiu sa poti face un usb-host folosind PIC-ul asta. Da' eu nu le stiu chiar pe toate, e adevarat.M-am mai uitat putin si in data-sheet, si in codul tau si:- modului MSSP (spi) si EUSART (rs232) au un pin comun - RB1. Ori incerci cu softSpi, ori renunti (temporar) la rs232, sa vezi daca merge.Pe de alta parte, cititind eu inca putinprin helpul de la biblioteca MMC la mikroe, am gasit Library uses SPI module for communication. The user must initialize the appropriate SPI module before using the MMC Library.Am senzatia ca tu nu faci chiar toate initializarile porturilor. Sau?De exemplu, pinii trebuie configurati cu ajutorul registrilor TRIS ca intrari/iesiri (vezi pagina 197 din data-sheet-ul picului):- SDI e configurat automat cand activezi modului MSSP (sper ca spiInit asta face).- SDO - must have TRISC7 cleared - asta nu faci (sau n-am vazut eu unde)- SCK (master mode) must have TRISB1 cleared - asta faci.- Cu SS m-am grabit, e musai sa fie RA5 numai in slave mode, nu e cazul. Aici poti folosi orice pin (configurat ca iesire si definit ca in codul tau sbit Mmc_Chip_Select at LATxy_bit; // for writing to output pin always use latch Link spre comentariu
Drk_alien Postat Martie 6, 2013 Autor Partajează Postat Martie 6, 2013 Cred ca o noua varianta pe care as putea sa o incerc ar fi, sa folosesc softSPI si sa initializez toti pinii, pinii soft sa fie exact cei hardware.Eu nu folosesc rs232, placa mea e simpla. Are doar condensatorii, oscilatorul , o rezistenta de 10K la alimentarea picului de la programator...si atat Alimentez modulul cu voltajul pe care il primeste microcontrollerul la pinul +5v de la modulul SD. Link spre comentariu
Liviu M Postat Martie 6, 2013 Partajează Postat Martie 6, 2013 Daca nu folosesti rs232 de ce initializezi portul? Asta este codul // Creates new file and writes some data to itvoid M_Create_New_File() ... UART1_Write('.'); ... UART1_Init(19200); // Initialize UART module at 19200 ... Esti sigur ca nu folosesti portul USART? Link spre comentariu
Drk_alien Postat Martie 6, 2013 Autor Partajează Postat Martie 6, 2013 Era o linie de cod data in exemplul aratat in libraria mmc.Eu am copiat codul de acolo si am scos ce nu e esential dar se pare ca am uitat unele lucruri. Eu am incercat acelasi lucru cu display-ul de nokia 3310, sa afisez text ca sa vad pana unde ajunge programul. Poate influenta initializarea portului?....hmmm...Nu prea stiu in detaliu ce fac aici , ceea ce nu mi se intampla des. Asa arata "constructia". http://thumbp14-bf1.mail.yahoo.com/tn?sid=1224466339&mid=AFzTi2IAAYHTUTeatwQPeyl1w%2Bs&midoffset=2_0_0_1_90276&partid=2&f=1617&fid=Inbox&w=768&h=559 Link spre comentariu
Liviu M Postat Martie 6, 2013 Partajează Postat Martie 6, 2013 Pai sterge-o si vezi daca se schimba ceva.Si nu uita de - SDO - must have TRISC7 cleared - asta nu faci (sau n-am vazut eu unde)Succes! Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum