פורסם 2012 באוגוסט 2613 שנים שלוםאני מנסה לגרום לארדואינו לעבוד עם צ'יפ זכרון 93LC66. זהו צ'יפ זכרון של 4K, די ישן ובמקרה יש לי אותו. למי שמעוניין, זה ה datasheet שלו:http://ww1.microchip.com/downloads/en/devicedoc/21712b.pdfחיפשתי ברשת ובאופן לא מפתיע, עוד לא ניסו לבצע את החיבור הנ"ל לארדואינו, אך ישנן דוגמאות לשימוש בבקרים אחרים:1. http://www.jimfranklin.info/microchipdatasheets/00560.pdf2. http://www.eetasia.com/ARTICLES/2002MAR/2002MAR01_MEM_PL_AN.PDF?SOURCES=DOWNLOADהקוד שלי טכנית זהה לקוד שלהם.עברתי על ה datasheet והוא ברור למדי. הבעיה מתחילה כאשר אני מנסה לקרוא מידע מהצ'יפ. כל החיבורים שלי נכונים, ואין לי בעיה בהגדרת הפרוטוקול (זה בעצם SPI, רק שאני לא משתמש בספריה של הארדואינו).את הרגל של D0 בצ'יפ חיברתי לפין 4 בארדואינו, הגדרתי אותו כ input, ומימשתי את הפקודה של READ (לפי התזמונים ב datasheet) אבל המידע מגיע בעייתי: אם אני לא מחבר נגד pulldown לפין 4, המידע תמיד מגיע כ HIGH.אם אני מחבר נגד קטן (100 אוהם למיטב זכרוני), המידע לא מגיע עקבי (קריאה מאותה כתובת בזכרון לא מחזירה אותו מידע).אם אני מחבר נגד גדול יותר, המידע עדיין לא עקבי. ניסיתי לעבוד גם עם תזמוני CLK של 2ms (הצ'יפ מאפשר לעבוד עם תזמונים של עשרות nano sec), ללא הועיל.אשמח מאוד אם מישהו יוכל לעזור לי.נ.ב. צירפתי קוד דוגמת מימוש פרימיטיבי של פקודת READ #define RR 1byte CS = 12; // chip selectbyte CLK = 11; // clockbyte D1 = 5; // data input to chipbyte D0 = 4; // data output from chipvoid setup() { Serial.begin(9600); // setup pins pinMode(CS, OUTPUT); pinMode(CLK, OUTPUT); pinMode(D0, INPUT); pinMode(D1, OUTPUT); digitalWrite(CS, LOW); digitalWrite(CLK, LOW); digitalWrite(D1, LOW); delay(3000); // used for initial delay to open the serial terminal}int is, js;byte bs;int addy = -1;void loop() { addy++; // READ - opcode is B10 digitalWrite(CS, HIGH); // enable chip clock(); digitalWrite(D1, HIGH); // write SB clock(); digitalWrite(D1, HIGH); // read opcode bit 1 clock(); digitalWrite(D1, LOW); // read opcode bit 2 clock(); // write 9 bits from current 'addy' value for (is=0;is< 9;is++) { digitalWrite(D1, addy >> is & B1? HIGH: LOW ); clock(); } bs = 0; // set input to zero for (is=0;is< 8;is++) { // read 8 bits from D1 digitalWrite(CLK, HIGH); delay(RR); if (digitalRead(D0) == HIGH) bs |= B1; digitalWrite(CLK, LOW); delay(RR); if (is < 7) bs = bs << 1; // left shift 7 times } digitalWrite(CS, LOW); // disable chip clock(); Serial.print(bs); Serial.print(","); if (addy == 20) { Serial.print("EOL"); Serial.println(); addy = -1; delay(3000); } else { if (addy % 10 == 0 && addy > 0) { Serial.println(); } }}void clock() { digitalWrite(CLK, HIGH); delay(RR); digitalWrite(CLK, LOW); delay(RR);}
פורסם 2012 באוגוסט 2613 שנים למה נגד pulldown לפין 4 ?במעבר חפיף בדפי הנתונים אני רואה שברגע שקוראים בייט או מילה מגיע קודם 0 קבוע לפני הנתונים.לפי הקוד שלך אני רואה שאתה קורא 8 סיביות, אתה אמור לקרוא 9 סיביות כאשר הסיבית הראשונה תמיד תהיה 0.ופין ORG מחובר לאדמה נכון ?
פורסם 2012 באוגוסט 2613 שנים מחבר חיברתי נגד כיוון שאני תמיד מקבל קלט של HIGH, פין 4 כנראה צף גבוה כל הזמן בלי הנגד.האפס שנשלח בקו הקלט נשלח במחזור השעון של הביט האחרון של הכתובת, אין לו משמעות והוא לא מגיע לקלט שלי.תסתכל על FIGURE 2-1: READ TIMING בדף 7, זה מוסבר שם, ופין org מחובר לאדמה (הצ'יפ מקונפג ל 8 ביט, לא 16).נ.ב.באופן כללי אני מנסה לכתוב ספריה שלמה שתדבר עם הצ'יפ (ותממש בצורה נכונה את כל ה opcodes), אבל תקוע עם הבעיה הנוכחית.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.