I2C EEPROM

Started by mpcomputer, February 01, 2013, 10:09:17 PM

Previous topic - Next topic

mpcomputer

rlist.rpl1  = (readEEPROM(disk1, 2)*10000) +(readEEPROM(disk1, 3)*1000) +(readEEPROM(disk1, 4)*100) +(readEEPROM(disk1, 5)*10) +readEEPROM(disk1, 6);

มันอ่านค่าได้เป็นHEXครับทำใหค่าที่ได้เพี้ยนไปหมดเลยครับ ผมแยกเลขเป็นหลักแล้วเขียนลงไป แต่เวลาอ่านด้วย
Serial.println(readEEPROM(disk1, x),DEC);
ค่าที่ได้ตรงตามที่เขียนลงไปครับอย่างนี้แก้ยังไงครับ

firmware.c

ผมไม่รู้นะว่า lib arduino ใช้ยังไงแต่ที่สังเกตุได้อย่างหนึ่งคือ
readEEPROM(disk1' 2)*10000
readEEPROM return ค่าออกมาเป็น byte ใช่ไหมครับลอง type case ดูแบบนี้ก็ได้
readEEPROM(disk1' 2)*10000L
IAR Embedded Workbench for ARM
AVR-Studio + AVR-GCC
CodeBlocks + MinGw
CodeBlocks + Gtk+

JMew

ภาษา C ยากจังเนาะ ไม่ manipulate variable type ให้ด้วย ถ้าเป็น Basic นะ

CONFIG SDA = (Pin อะไร)
CONFIG SCL = (Pin อะไร)

(ซึ่งปกติแล้วจะใช้ SDA กับ SCL ที่ระบุมากับ Datasheet)

CONFIG I2CSLAVE = (Address อะไร)

เสร็จแล้วปุ๊บ $lib "24lc256.lib" แล้วอยากให้ตัวแปรอะไรแบบไหนไปเก็บได้เลย ผสมกันได้ด้วยเช่น

DIM rcoin AS ERAM Interger
DIM rqp AS ERAM Integer
DIM rpl1 AS ERAM Long
DIM rpl2 AS ERAM Long
DIM rpl3 AS ERAM Long

บลา ๆ ๆ

เอาเป็นตัวหนังสือยาว ๆ ก็ได้นะ เช่น

DIM mytext AS ERAM String * 15

mytext = "electoday.com"
โครงการกะเทยท่องโลก


mpcomputer

aa = readEEPROM(disk1, 2);
  bb = readEEPROM(disk1, 3);
  cc = readEEPROM(disk1, 4);
  dd = readEEPROM(disk1, 5);
  ee = readEEPROM(disk1, 6);
  aa = aa*10000;
  bb = bb*1000;
  cc = cc*100;
  dd = dd*10;
  Serial.println(aa);
  Serial.println(bb);
  Serial.println(cc);
  Serial.println(dd);
  Serial.println(ee);
  rlist.rpl1 = aa+bb+cc+dd+ee;
  Serial.println(rlist.rpl1);


ผมแก้ไขโดยเขียนแบบนี้  ผ่านแล้วครับค่าที่ได้ตรงแล้วครับ ขอบคุณทุกๆท่านครับ ใครมีอะไรแนะนำต่อได้เลยนะครับ อยากรู้ อยากเป็น เพราะไม่ได้เรียนมาด้านนี้เลยครับ

firmware.c

อย่างที่บอกครับดูว่ามัน return ค่าออกมาเป็นแบบไหน แล้วตัวแปรที่เอาไปใช้งานต่อเป็น type ไหน
IAR Embedded Workbench for ARM
AVR-Studio + AVR-GCC
CodeBlocks + MinGw
CodeBlocks + Gtk+