embeded/arduino(genuino)2016. 4. 6. 22:59

헐.. 설정이 문제가 아니었나 -ㅁ-?!?!


시리얼 포트를 통해서는 이런 메시지가(115k)

 NON GENUINE DEVICE FOUND! NON GENUINE DEVICE FOUND! 


구을려고 하면 아래와 같은 메시지가 나온다.

avrdude: Version 6.0.1, compiled on Apr 15 2015 at 19:59:58

         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/

         Copyright (c) 2007-2009 Joerg Wunsch


         System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"


         Using Port                    : COM6

         Using Programmer              : arduino

         Overriding Baud Rate          : 57600

avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x43

avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x45

avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x20

avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x46

avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x4f

avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x55

avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x4e

avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x44

avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x21

avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x20 


얘는 내가 쓰던 usbisp 인데.. 이렇게 나오고..


안구워지는 녀석은.. 이렇게


구워지는 놈은 이렇게... 어?


윈도우 드라이버가 의심되서 봐도 머.. 둘다 상관없네




[링크 : http://www.instructables.com/id/A-solution-to-avrdude-stk500getsync-not-in-syn/]

[링크 : https://learn.sparkfun.com/tutorials/installing-an-arduino-bootloader]

[링크 : http://electropit.com/index.php/2015/09/06/arduino-nano-v3-0-clones/]

[링크 : http://internetofhomethings.com/homethings/?tag=not-genuine-device-found]

[링크 : http://www.ftdichip.com/Support/Utilities.htm#FT_PROG]



일단.. 위에 내용을 덮어 쓰고 하니까.

새로운 포트로 잡히고 나서 구워진다.. 머지?


16진수 값으로도 가장 마지막 비트가 먼가 이상한게 씌어져 있을때는 안되었고(무슨값인진..)

0000 으로 되어 있으니 되는걸 봐서는..

의심가는 건.. hardware specific 하위의 RS232와 IO 컨트롤 관련 셋팅..



Posted by 구차니
embeded/raspberry pi2016. 4. 6. 20:06

안된다는 말이 있어서 따라가보니...

핀 자체가 실장이 안되어 있다고... (GPIO19)



bcm2835 has support for I2C slave. Refer to section 11 of http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf


Unfortunately, GPIO pin 19 (BSC slave CLK) was dropped. http://elinux.org/RPi_BCM2835_GPIOs


So, the built-in I2C slave cannot be used.

[링크 : http://raspberrypi.stackexchange.com/questions/5584/i2c-raspberri-pi-as-a-slave]





[링크 : http://elinux.org/RPi_BCM2835_GPIOs]

Posted by 구차니
embeded/arduino(genuino)2016. 4. 6. 20:01

라즈베리는 3.3v 일테고

아두이노는 5v 일텐데.. 그냥 연결해도 되려나?

라즈베리 날려먹긴 싫은데.. 레벨 시프터 사야하나 ㅠㅠ


[링크 : https://www.eleparts.co.kr/EPX8MXNR] 6천원... ㅠㅠ


일단은...

아래는 3.3V 짜리를 5V인 아두이노에서 쓰는거지만...

[링크 : http://playground.arduino.cc/Main/I2CBi-directionalLevelShifter]

2016/04/01 - [embeded/arduino(genuino)] - 아두이노 level shift / MPU-6050


The Raspberry Pi is running at 3.3 Volts while the Arduino is running at 5 Volts. There are tutorials suggest using a level converter for the I2C communication. This is NOT needed if the Raspberry Pi is running as “master” and the Arduino is running as “slave”.


The reason it works is because the Arduino does not have any pull-ups resistors installed, but the P1 header on the Raspberry Pi has 1k8 ohms resistors to the 3.3 volts power rail. Data is transmitted by pulling the lines to 0v, for a “high” logic signal. For “low” logic signal, it’s pulled up to the supply rail voltage level. Because there is no pull-up resistors in the Arduino and because 3.3 volts is within the “low” logic level range for the Arduino everything works as it should.

[링크 : http://blog.oscarliang.net/raspberry-pi-arduino-connected-i2c/]

    [링크 : http://dsscircuits.com/articles/effects-of-varying-i2c-pull-up-resistors]

[링크 : http://blog.retep.org/2014/02/15/connecting-an-arduino-to-a-raspberry-pi-using-i2c/]




걍.. 과감하게(?) atmega 녀석들이 대부분 2.8V~5.5V 니까 3.3V로 주면 안되려나?


Operating Voltage:

1.8 - 5.5V


TWI(I2C)쪽 입력 전압은 Vcc + 0.5 니까.. 3.3V 주면은.. 어떻게 안되려나?

그나저나.. 0.3V~0.7V 로 무지 좁네..



[링크 : http://www.atmel.com/...atmega48a-48pa-88a-88pa-168a-168pa-328-328p_datasheet_complete.pdf]

Posted by 구차니
embeded/raspberry pi2016. 4. 5. 16:00

음.. FREX 핀은있으나.. 웬지 라즈베리용 카메라에는 FREX를 빼놓지 않았을 기분?



43p



[링크 : http://www.seeedstudio.com/wiki/images/3/3c/Ov5647_full.pdf]

[링크 : http://www.ovt.com/uploads/parts/OV5647.pdf]


어? 120p가 안돼?

Frame rate up to 120 fps

max 90fps. Limitations on frame size for the higher frame rates (VGA only for above 47fps)


그리고.. external / internal sync. 미지원

Support for internal and external frame synchronisation for frame exposure mode

No

[링크 : https://www.raspberrypi.org/documentation/hardware/camera.md]

Posted by 구차니
embeded/raspberry pi2016. 4. 5. 15:25

한마디로 4채널까진 해상도 좀 낮춰서 1Gbps 보다 낮게 설정하면(동시 4채널까진 가능하단건가?)



[링크 : https://github.com/ivmech/ivport/wiki/Capture-Sequence]

[링크 : https://github.com/ivmech/ivport]


[링크 : http://www.arducam.com/multi-camera-adapter-module-raspberry-pi/]

[링크 : http://www.ivmech.com/.../ivport-raspberry-pi-camera-module-multiplexer-p-90]

[링크 :http://www.ivmech.com/.../ivport-dual-raspberry-pi-camera-module-multiplexer-p-104 ]




+

OV5647 can be synched with another sensor using the FREX pin input/output (works also in rolling shutter mode). Needs support in driver though. Guess the FREX pin is not even used in Raspberry Pi Camera design, at least Omnivision reference desing tells not to populate the zero ohm resistor which connect this pin to connector.

[링크 : https://www.raspberrypi.org/forums/viewtopic.php?p=483936]



The Raspberry Pi has a Mobile Industry Processor Interface (MIPI) Camera Serial Interface Type 2 (CSI-2)

MIPI CSI-2 version 1.01 supports up to four data lanes, where each lane has a maximum of 1 Gbps bandwidth, to provide a total bandwidth of 4 Gbps.

[링크 : http://www.petervis.com/Raspberry_PI/Raspberry_Pi_CSI/Raspberry_Pi_CSI_Camera_Interface.html]



음? 카메라 모듈이 기본 2개니까.. 2채널은 동시?


MIPI interface (two lanes) Yes

[링크 : https://www.raspberrypi.org/documentation/hardware/camera.md]



compute module에는 카메라가 두개 꽂히나 보네?

[링크 : https://www.raspberrypi.org/blog/real-time-depth-perception-with-the-compute-module/]

[링크 : http://www.argondesign.com/case-studies/2014/oct/21/stereo-depth-perception-raspberry-pi/]




[링크 : https://www.raspberrypi.org/.../computemodule/RPI-CMIO-V1_2-SCHEMATIC.pdf]


[링크 : https://www.raspberrypi.org/.../raspberrypi/schematics/RPI-3B-V1_2-SCHEMATIC-REDUCED.pdf]

Posted by 구차니
embeded/arduino(genuino)2016. 4. 1. 16:40

음.. 우리나라가 미친듯 비싸게 파는걸려나..


The MPU-6050 is not expensive, especially given the fact that it combines both an accelerometer and a gyro.

[링크 : http://playground.arduino.cc/Main/MPU-6050]



어라.. 3.3V 짜리인 i2c 장비를 레벨 쉬프트 하지 않고 쓸수가 있나보네?


[링크 : http://playground.arduino.cc/Main/I2CBi-directionalLevelShifter]

Posted by 구차니
embeded/arduino(genuino)2016. 3. 31. 20:25

temperature = (ADCW - 324.31) / 1.22


[링크 : http://playground.arduino.cc/Main/InternalTemperatureSensor]





[링크 : http://www.atmel.com/images/...328p_datasheet_complete.pdf]

Posted by 구차니
embeded/arduino(genuino)2016. 3. 31. 19:03

엥? winavr에서도 안되었던가??

급 멘붕 ㄷㄷ


char *dtostrf(double val, signed char width, unsigned char prec, char *s)


Use this method to convert it to a C-Style string and then use sprintf, eg:


char str_temp[6];


/* 4 is mininum width, 2 is precision; float value is copied onto str_temp*/

dtostrf(temp, 4, 2, str_temp);

sprintf(temperature,"%s F", str_temp);

[링크 : http://stackoverflow.com/questions/27651012/arduino-sprintf-float-not-formatting]

[링크 : http://forum.arduino.cc/index.php?topic=175478.0]


[링크 : http://whiteat.com/bPDS_AVR/28406]

Posted by 구차니
embeded/arduino(genuino)2016. 3. 31. 10:30

필터는 나중에 적용하고..

걍.. atan()만 쓰면 끝나나?



double x_angle = -atan((double)ay/(double)az)*180.0 / 3.1416;

[링크 : http://hs36.tistory.com/19]


[링크 : http://pinkwink.kr/73]

[링크 : http://mechaworld.tistory.com/11]



+


2016/04/06 - [이론 관련] - 가속도계로 각도계산하기


Posted by 구차니
embeded/arduino(genuino)2016. 3. 31. 09:51

음.. 이제 좀 마음에 들게 되긴했는데..

각도를 어떻게 받고. 어떤 각도를 계산해야 하려나..


#include <avr/io.h>
#include <Wire.h>

#define I2C_ID  0x53 // ADXL-345

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Wire.begin();

  // adxl345 initialize
  // power setting
  Wire.beginTransmission(I2C_ID);
    Wire.write(byte(0x2d));
    Wire.write(byte(0x18));
  Wire.endTransmission();

  // range setting
  Wire.beginTransmission(I2C_ID);
    Wire.write(byte(0x31));
    Wire.write(byte(0x09));
  Wire.endTransmission();
}

void loop() {
  // put your main code here, to run repeatedly:
  char str[30];
  char data[6];
  unsigned char idx = 0;
  short acc_x;
  short acc_y;
  short acc_z;

  // data request
  Wire.beginTransmission(I2C_ID);
    Wire.write(byte(0x32));
  Wire.endTransmission();
  Wire.requestFrom(0x53, 6);

  idx = 0;
  while (Wire.available())
    data[idx++] = Wire.read();

  acc_x = (data[1] << 8) | data[0];
  acc_y = (data[3] << 8) | data[2];
  acc_z = (data[5] << 8) | data[4];

  sprintf(str,"x:%6d y:%6d z:%6d",acc_x, acc_y, acc_z);
  Serial.println(str);

  delay(100);
}



FULL_RES 끄고(10bit output / 0~1023) +-16g로 출력

#include <avr/io.h>
#include <math.h>
#include <Wire.h>

#define I2C_ID  0x53 // ADXL-345

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Wire.begin();

  // adxl345 initialize
  // power setting
  Wire.beginTransmission(I2C_ID);
    Wire.write(byte(0x2d));
    Wire.write(byte(0x18));
  Wire.endTransmission();

  // range setting
  Wire.beginTransmission(I2C_ID);
    Wire.write(byte(0x31));
    Wire.write(byte(0x03));
  Wire.endTransmission();
}

void loop() {
  // put your main code here, to run repeatedly:
  char str[30];
  char data[6];
  unsigned char idx = 0;
  short acc_x;
  short acc_y;
  short acc_z;
  double deg_x;
  double deg_y;

  // data request
  Wire.beginTransmission(I2C_ID);
    Wire.write(byte(0x32));
  Wire.endTransmission();
  Wire.requestFrom(0x53, 6);

  idx = 0;
  while (Wire.available())
    data[idx++] = Wire.read();

  acc_x = (data[1] << 8) | data[0];
  acc_y = (data[3] << 8) | data[2];
  acc_z = (data[5] << 8) | data[4];

  if(acc_z == 0)
  {
    deg_x = 0.0;
    deg_y = 0.0;
  }
  else
  {
    deg_x = atan((double)acc_x / (double)acc_z) * 57.2957;
    deg_y = atan((double)acc_y / (double)acc_z) * 57.2957;
  }
  
  sprintf(str,"x:%6d y:%6d z:%6d",acc_x, acc_y, acc_z);
  Serial.println(str);
  
  sprintf(str,"x:%d y:%d",(short)deg_x, (short)deg_y);
  Serial.println(str);

  delay(100);
}



#include <avr/io.h>
#include <math.h>
#include <Wire.h>

#define I2C_ID  0x53 // ADXL-345

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Wire.begin();

  // adxl345 initialize
  // power setting
  Wire.beginTransmission(I2C_ID);
    Wire.write(byte(0x2d));
    Wire.write(byte(0x18));
  Wire.endTransmission();

  // range setting
  Wire.beginTransmission(I2C_ID);
    Wire.write(byte(0x31));
    Wire.write(byte(0x02));
  Wire.endTransmission();
}

void loop() {
  // put your main code here, to run repeatedly:
  char str[30];
  char str_x[15];
  char str_y[15];
  char data[6];
  unsigned char idx = 0;
  short acc_x;
  short acc_y;
  short acc_z;
  double deg_x;
  double deg_y;

  // data request
  Wire.beginTransmission(I2C_ID);
    Wire.write(byte(0x32));
  Wire.endTransmission();
  Wire.requestFrom(0x53, 6);

  idx = 0;
  while (Wire.available())
    data[idx++] = Wire.read();

  acc_x = (data[1] << 8) | data[0];
  acc_y = (data[3] << 8) | data[2];
  acc_z = (data[5] << 8) | data[4];

  if(acc_z == 0)
  {
    deg_x = 0.0;
    deg_y = 0.0;
  }
  else
  {
    deg_x = atan((double)acc_x / (double)acc_z) * 57.2957;
    deg_y = atan((double)acc_y / (double)acc_z) * 57.2957;
  }
  
  sprintf(str,"x:%6d y:%6d z:%6d",acc_x, acc_y, acc_z);
  Serial.println(str);

  dtostrf(deg_x, 4,2, str_x);
  dtostrf(deg_y, 4,2, str_y);
  sprintf(str,"x:%s y:%s",str_x, str_y);
  Serial.println(str);

  delay(100);
}


Posted by 구차니