From: Hanguang <han...@ho...> - 2008-03-26 20:43:30
|
I posted a message about how to mount sensor on Gumstix before. Thank zyagon and Steve Sakoman who replied my question. Unfortunately, we are still sticking on this issue. Here is the problem, our advisor didn’t want us to buy a USB sensor that Steve suggested since it is too easy and it is relative costly. Instead, she gave us a HIH-4000 humidity sensor and wanted us to connect it to the I2C interface. Datasheet for HIH-4000 can be found at: http:// http://www.alliedelec.com/Images/Products/Datasheets/BM/HONEYWELL_MICROSWITCH/Honeywell--Microswitch_Industrial-Control_6420448.pdf http://content.honeywell.com/sensing/prodinfo/humiditymoisture/009017_2_EN_w.pdf http://content.honeywell.com/sensing/prodinfo/humiditymoisture/009017_2_EN_w.pdf Based on my limited knowledge about I2C and sensor, I knew we need to build a circuit to make the 3 pins sensor to be compatible with 4 pins I2C interface, but how to make such a circuit? Maybe we are wrong at the beginning. I mean we should not use HIH-4000 and waste time to build a circuit, instead, we should use other sensor that compatible with I2C interface. However, I googled but didn’t find such a humidity sensor. Any suggestion? Any related suggestion and experience such as using SPI interface or using thermal sensor will be appreciate. Thanks! -- View this message in context: http://www.nabble.com/Humidity-sensor-to-I2C-interface-tp16315755p16315755.html Sent from the Gumstix mailing list archive at Nabble.com. |
From: Dave H. <dhy...@gm...> - 2008-03-26 21:45:18
|
Hi Hanguang, > I posted a message about how to mount sensor on Gumstix before. Thank zyagon > and Steve Sakoman who replied my question. Unfortunately, we are still > sticking on this issue. > Here is the problem, our advisor didn't want us to buy a USB sensor that > Steve suggested since it is too easy and it is relative costly. Instead, she > gave us a HIH-4000 humidity sensor and wanted us to connect it to the I2C > interface. So the sensor generates an analog voltage, so you'd need to use an i2c based A/D converter. The robostix has a bunch, and the robostix can be connected to the gumstiux via i2c. There are quite a few standalone i2c A/D chips as well. i2c is actually a 3 wire interface, Ground, SCL, and SDA. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Hanguang <han...@ho...> - 2008-03-26 22:28:04
|
Thank you, Dave. >So the sensor generates an analog voltage, so you'd need to use an i2c >based A/D converter. Do you mean all I need is a A/D converter or I may need something else? >...the robostix can be connected to the gumstiux via i2c... I don't know what do you mean here. Why do I need to connect robostix to gumstix via I2C, aren't they phisically conencted already? >There are quite a few standalone i2c A/D chips as well. Can you give me a model name? What do you mean by "standalone i2c"? Do you mean the converter is specifically designed for I2C interface? >i2c is actually a 3 wire interface, Ground, SCL, and SDA. I agree, but what is the +5V pin on the robostix board for anyway? Is it the "Vin" for the sensor? Thank you! -- View this message in context: http://www.nabble.com/Humidity-sensor-to-I2C-interface-tp16315755p16317947.html Sent from the Gumstix mailing list archive at Nabble.com. |
From: Dave H. <dhy...@gm...> - 2008-03-26 22:38:39
|
Hi Hanguang, > >So the sensor generates an analog voltage, so you'd need to use an i2c > >based A/D converter. > > Do you mean all I need is a A/D converter or I may need something else? That will depend on the chip you choose. The datasheet normally shows any additional circuitry required. > >...the robostix can be connected to the gumstiux via i2c... > > I don't know what do you mean here. Why do I need to connect robostix to > gumstix via I2C, aren't they phisically conencted already? Well if you have a robostix and plug a gumstix into it, then yes they're connected together. > >There are quite a few standalone i2c A/D chips as well. > > Can you give me a model name? What do you mean by "standalone i2c"? Do you > mean the converter is specifically designed for I2C interface? <http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3270> > >i2c is actually a 3 wire interface, Ground, SCL, and SDA. > > I agree, but what is the +5V pin on the robostix board for anyway? Is it the > "Vin" for the sensor? No. It's a 5v output that you could use to power your I2C chip. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Hanguang <han...@ho...> - 2008-03-26 22:42:52
|
Dave, More questions. 1. You said I need a A/D converter for the sensor, I guess I need a clock alone with the converter? 2. For the I2C bus, do I need another clock for "SCL" or the clock is build-in on the robostix? 3. I followed the "I2C on Gumstix" on Wiki and setup the I2C module. When I enter "modprobe i2c-dev" and "modprobe i2c-pxa", the result shows nothing. I know the later command will report the device in I2C bus, so it should show nothing if I didn't connect any device, but what is the first command for? Is it normal to show nothing if I didn't connect any I2C device? Thank you! -- View this message in context: http://www.nabble.com/Humidity-sensor-to-I2C-interface-tp16315755p16318220.html Sent from the Gumstix mailing list archive at Nabble.com. |
From: Dave H. <dhy...@gm...> - 2008-03-26 23:02:45
|
Hi Hanguang, > 1. You said I need a A/D converter for the sensor, I guess I need a clock > alone with the converter? Huh? Not sure where the clock comes from. A/D converters convert an analog voltage into a digital number. The i2c interface has a clock, but there isn't any clock required for doing the analog conversion. > 2. For the I2C bus, do I need another clock for "SCL" or the clock is > build-in on the robostix? The SCL signal is the clock. > 3. I followed the "I2C on Gumstix" on Wiki and setup the I2C module. When I > enter "modprobe i2c-dev" and "modprobe i2c-pxa", the result shows nothing. That's normal. > I know the later command will report the device in I2C bus, so it should show > nothing if I didn't connect any device, but what is the first command for? The i2c-pxa module is the module that talks to the i2c bus. Normally, you would need to write a device driver which talks between user space and your device on the i2c bus. The i2c-dev module is a generic device driver which allows user mode apps to talk to pretty much any i2c device on the bus. > Is it normal to show nothing if I didn't connect any I2C device? It normally doesn't show anything at all. I think really old versions used to scan the bus, but they stopped doing that since the simple act of scanning the bus would put some devices into a non usable state. You need to know the 7-bit address of your i2c device in order to issue commands to it. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Harry J M. <hj...@ec...> - 2008-03-26 22:44:45
|
On Wed, 26 Mar 2008, Dave Hylands wrote: > Hi Hanguang, > >> Here is the problem, our advisor didn't want us to buy a USB sensor that >> Steve suggested since it is too easy and it is relative costly. Instead, >> she gave us a HIH-4000 humidity sensor and wanted us to connect it to the >> I2C interface. > > So the sensor generates an analog voltage, so you'd need to use an i2c > based A/D converter. I'm using the SMT71 from Sensirion, which is digital but not i2c so you would need GPIO but not an ADC. It has a simple bit banging protocol and comes with sample code which is easy to port to the Gumstix. -- | Harry Mason | .------------. | .___, |"Whatever you do will be | | University of | | hjm200 @ | | ___('v')___ | insignificant. However, | | Southampton | | zepler.net | | `"-\._./-"' | it is vitally important | | England | '------------' | hjm ^ ^ | that you do it." Gandhi | |
From: Hanguang <han...@ho...> - 2008-03-26 22:57:53
|
Thank you, Harry, >I'm using the SMT71 from Sensirion, which is digital but not i2c so you would >need GPIO but not an ADC. It has a simple bit banging protocol and comes with >sample code which is easy to port to the Gumstix. I also found someone else on internet talked about SMT71. Do you have any good tutorial or article shows more detail? Or just simiply tell me the procedure you did with you stuff. -- View this message in context: http://www.nabble.com/Humidity-sensor-to-I2C-interface-tp16315755p16318417.html Sent from the Gumstix mailing list archive at Nabble.com. |
From: Harry J M. <hj...@ec...> - 2008-03-27 09:44:40
|
On Wed, 26 Mar 2008, Hanguang wrote: > Harry Mason wrote: >> I'm using the SMT71 from Sensirion, which is digital but not i2c so you >> would need GPIO but not an ADC. It has a simple bit banging protocol and >> comes with sample code which is easy to port to the Gumstix. > > I also found someone else on internet talked about SMT71. Do you have any > good tutorial or article shows more detail? Or just simiply tell me the > procedure you did with you stuff. The data sheet and technical notes are good, and available at http://www.sensirion.com/en/01_humidity_sensors/05_humidity_sensor_sht71.htm It does not use i2c but the connections are similar. You need two GPIO pins for communication, and I'm also using GPIO for power as it makes the wiring convenient. The data line needs a pullup resistor (around 10k) or it doesn't work. To drive it from Linux I combined their sample code and a user space GPIO library I found somewhere in the Gumstix documentation. Halfway down the code there are constants (SHT_CLK etc.) defining which GPIO pins provide power, data, and clock; change these to match your setup. I'm using the SHT7x which has pin connectors; these are intensely frustrating to solder. Be quick and careful or you'll affect the accuracy. Also note that the pinouts of the SHT1x and SHT7x are different - make sure you're reading the right one in the data sheet. Harry -- 8< -- code follows -- 8< -- #include <stdio.h> #include <time.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <sys/mman.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <ctype.h> #define MAP_SIZE 4096 #define MAP_MASK ( MAP_SIZE - 1 ) #define GPLR0 0x40E00000 #define GPLR1 0x40E00004 #define GPLR2 0x40E00008 #define GPDR0 0x40E0000C #define GPDR1 0x40E00010 #define GPDR2 0x40E00014 #define GPSR0 0x40E00018 #define GPSR1 0x40E0001C #define GPSR2 0x40E00020 #define GPCR0 0x40E00024 #define GPCR1 0x40E00028 #define GPCR2 0x40E0002C #define GAFR0_L 0x40E00054 #define GAFR0_U 0x40E00058 #define GAFR1_L 0x40E0005C #define GAFR1_U 0x40E00060 #define GAFR2_L 0x40E00064 #define GAFR2_U 0x40E00068 #define IN 250 #define OUT 251 #define GPIO 0 #define AF0 0 #define AF1 1 #define AF2 2 #define AF3 3 #define SET 252 #define CLEAR 253 typedef unsigned int u32; void *map, *regaddr; static void putmem(u32 addr, u32 val) { regaddr = map + (addr & MAP_MASK); *(u32*) regaddr = val; } static int getmem(u32 addr) { u32 val; regaddr = map + (addr & MAP_MASK); val = *(u32*) regaddr; return val; } void gpio_set(u32 gpio) { u32 pos; u32 bit = 1; pos = gpio / 32; bit <<= gpio % 32; putmem(GPSR0 + (pos * 4), bit); } void gpio_clear(u32 gpio) { u32 pos; u32 bit = 1; pos = gpio / 32; bit <<= gpio % 32; putmem(GPCR0 + (pos * 4), bit); } u32 gpio_status(u32 gpio) { u32 pos; u32 bit = 1; u32 data; pos = gpio / 32; bit <<= gpio % 32; data = getmem(GPLR0 + (pos * 4)); data &= bit; if (data == 0) return(0); else return(1); } void gpio_direction(u32 gpio, u32 dir) { u32 pos; u32 bit = 1; u32 data; pos = gpio / 32; bit <<= gpio % 32; data = getmem(GPDR0 + (pos * 4)); data &= ~bit; if (dir == OUT) data |= bit; putmem(GPDR0 + (pos * 4), data); } void gpio_function(u32 gpio, u32 fun) { u32 pos; u32 bit = 3; u32 data; pos = gpio / 16; bit <<= (gpio % 16) * 2; fun <<= (gpio % 16) * 2; data = getmem(GAFR0_L + (pos * 4)); data &= ~bit; data |= fun; putmem(GAFR0_L + (pos * 4), data); } u32 gpio(u32 dir, u32 set, u32 reg) { if ((dir != IN) & (dir != OUT)){ printf("ERROR: must specify a valid direction\n"); return(1); } if ((set != SET) & (set != CLEAR)){ printf("ERROR: must specify a valid level\n"); return(1); } if (reg > 84){ printf("ERROR: not a valid register -->%d\n", reg); return(1); } gpio_function(reg, GPIO); gpio_direction(reg, dir); if (dir == OUT){ if (set == SET) gpio_set(reg); else gpio_clear(reg); } return(0); } inline void delay ( long d ) { struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = d * 1000; nanosleep(&ts, NULL); } /* * pin func GPIO * 1 CLK 82 * 2 VDD 81 * 3 GND 59 * 4 DTA 60 */ #define SHT_CLK 65 #define SHT_VDD 66 #define SHT_GND 67 #define SHT_DTA 68 #define noACK 0 #define ACK 1 #define CMD_REG_W 0x06 #define CMD_REG_R 0x07 #define CMD_TEMP 0x03 #define CMD_HUMI 0x05 #define CMD_RESET 0x1e void write_bit(unsigned char bit) { if (bit) { /* We should only drive low; pullup should handle driving high. * Therefore writing 1 is the same as reading. */ gpio_direction(SHT_DTA, IN); gpio_set(SHT_DTA); } else { gpio_clear(SHT_DTA); gpio_direction(SHT_DTA, OUT); } } unsigned char read_bit(void) { gpio_direction(SHT_DTA, IN); return gpio_status(SHT_DTA); } inline void clock_high(void) { gpio_set(SHT_CLK); } inline void clock_low(void) { gpio_clear(SHT_CLK); } unsigned char write_byte(unsigned char value) { unsigned char i, error = 0; for (i = 0x80; i > 0; i /= 2) { write_bit(i & value); clock_high(); delay(5); clock_low(); } write_bit(1); clock_high(); error = read_bit(); clock_low(); return error; } char read_byte(unsigned char ack) { unsigned char i, val = 0; write_bit(1); for (i=0x80; i > 0; i /= 2) { clock_high(); if (read_bit()) { val = (val | i); } clock_low(); } write_bit(!ack); clock_high(); delay(5); clock_low(); write_bit(1); return val; } void transstart(void) { write_bit(1); clock_low(); delay(1); clock_high(); delay(1); write_bit(0); delay(1); clock_low(); delay(5); clock_high(); delay(1); write_bit(1); delay(1); clock_low(); } void connectionreset(void) { unsigned char i; write_bit(1); clock_low(); for (i = 0; i < 9; ++i) { clock_high(); delay(1); clock_low(); delay(1); } transstart(); } char softreset(void) { unsigned char error = 0; connectionreset(); error += write_byte(CMD_RESET); return error; } char read_statusreg(unsigned char *p_value, unsigned char *p_checksum) { unsigned char error = 0; transstart(); error = write_byte(CMD_REG_R); *p_value = read_byte(ACK); *p_checksum = read_byte(noACK); return error; } char write_statusreg(unsigned char *p_value) { unsigned char error = 0; transstart(); error += write_byte(CMD_REG_W); error += write_byte(*p_value); return error; } char measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode) { unsigned char error = 0; unsigned int i; transstart(); switch(mode) { case CMD_TEMP: error += write_byte(CMD_TEMP); break; case CMD_HUMI: error += write_byte(CMD_HUMI); break; default : break; } for (i = 0; i < 100; ++i) { if (read_bit() == 0) break; delay(10); } if (read_bit()) { error += 1; } // endian? *(p_value+1) = read_byte(ACK); *(p_value) = read_byte(ACK); *p_checksum = read_byte(noACK); return error; } //---------------------------------------------------------------------------------------- void calc_sth11(float *p_humidity ,float *p_temperature) //---------------------------------------------------------------------------------------- // calculates temperature [ C] and humidity [%RH] // input : humi [Ticks] (12 bit) // temp [Ticks] (14 bit) // output: humi [%RH] // temp [ C] { const float C1=-4.0; // for 12 Bit const float C2= 0.0405; // for 12 Bit const float C3=-0.0000028; // for 12 Bit const float T1=0.01; // for 14 Bit @ 5V const float T2=0.00008; // for 14 Bit @ 5V float rh=*p_humidity; // rh: Humidity [Ticks] 12 Bit float t=*p_temperature; // t: Temperature [Ticks] 14 Bit float rh_lin; // rh_lin: Humidity linear float rh_true; // rh_true: Temperature compensated humidity float t_C; // t_C : Temperature [ C] t_C=t*0.01 - 40; //calc. Temperature from ticks to [ C] rh_lin=C3*rh*rh + C2*rh + C1; //calc. Humidity from ticks to [%RH] rh_true=(t_C-25)*(T1+T2*rh)+rh_lin; //calc. Temperature compensated humidity [%RH] if(rh_true>100)rh_true=100; //cut if the value is outside of if(rh_true<0.1)rh_true=0.1; //the physical possible range *p_temperature=t_C; //return temperature [ C] *p_humidity=rh_true; //return humidity[%RH] } int main( int argc, char **argv ) { int temp_i = 0, humi_i = 0; float temp_f = 0, humi_f = 0; unsigned char error, checksum; int fd; fd = open("/dev/mem", O_RDWR | O_SYNC); if (fd<0) { perror("open(\"/dev/mem\")"); exit(1); } map = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0x40E00000 & ~MAP_MASK ); if (map == (void*)-1 ) { perror("mmap()"); exit(1); } gpio_function(SHT_GND, GPIO); gpio_function(SHT_DTA, GPIO); gpio_function(SHT_CLK, GPIO); gpio_function(SHT_VDD, GPIO); /* Then set the direction */ gpio_direction(SHT_GND, OUT); gpio_direction(SHT_DTA, OUT); gpio_direction(SHT_CLK, OUT); gpio_direction(SHT_VDD, OUT); gpio_clear(SHT_GND); gpio_set(SHT_VDD); gpio_set(SHT_DTA); gpio_set(SHT_CLK); delay(10); connectionreset(); delay(10); while (1) { error = 0; error += measure((unsigned char *)&temp_i, &checksum, CMD_TEMP); error += measure((unsigned char *)&humi_i, &checksum, CMD_HUMI); printf("temp: %d humi: %d\n", temp_i, humi_i); if (error != 0) { connectionreset(); fprintf(stderr, "Got error %d\n", error); } else { humi_f = humi_i; temp_f = temp_i; calc_sth11(&humi_f, &temp_f); printf("temp: %5.1fC humi: %5.1f%%\n", temp_f, humi_f); } delay(1000); } munmap(0,MAP_SIZE); return 0; } |
From: Hanguang <han...@ho...> - 2008-03-27 18:50:15
|
Hi, Harry, Appreciate your code. I'm sure I need them in the future, but right now I need some other information before I deal with code. >It does not use i2c but the connections are similar. You need two GPIO pins >for communication, and I'm also using GPIO for power as it makes the wiring >convenient. Can you explain this part with more detail? I Googled "GPIO" but still have no idea how does it work and how does it relate to I2C. How did you connect the GPIO pins exactly? >The data line needs a pullup resistor (around 10k) or it doesn't work. I guess both SDA and SCL lines have build-in pull-up resistors on Robostix. Do I still need extra resistor? -- View this message in context: http://www.nabble.com/Humidity-sensor-to-I2C-interface-tp16315755p16331148.html Sent from the Gumstix mailing list archive at Nabble.com. |
From: Harry J M. <hj...@ec...> - 2008-03-28 10:01:53
|
On Thu, 27 Mar 2008, Hanguang wrote: > Appreciate your code. I'm sure I need them in the future, but right now I > need some other information before I deal with code. > >> It does not use i2c but the connections are similar. You need two GPIO pins >> for communication, and I'm also using GPIO for power as it makes the wiring >> convenient. > > Can you explain this part with more detail? I Googled "GPIO" but still have > no idea how does it work and how does it relate to I2C. How did you connect > the GPIO pins exactly? GPIO is "general purpose input/output". The code I sent last time uses four ordinary digital I/O pins on the audiostix2; I think I used some of the LCD control lines. Most pins with special functions can be reconfigured for GPIO. The sensor does not use the i2c protocol, so you can't connect it to an i2c bus. If you wanted you could reconfigure the i2c pins to be GPIO, but you couldn't talk to other i2c devices. The sensor needs dedicated pins for data and clock. I don't know anything about the Robostix. There is some more sample code on Sensirion's website about talking to the sensor from a microcontroller, which may be more use to you than the code I adapted to run on the Gumstix. >> The data line needs a pullup resistor (around 10k) or it doesn't work. > > I guess both SDA and SCL lines have build-in pull-up resistors on Robostix. > Do I still need extra resistor? I would recommend using different pins to avoid confusion, as you're not using the i2c protocol. I don't know if the Robostix has integrated pullup on its GPIO pins, but it can't hurt to provide your own. -- | Harry Mason | .------------. | .___, |"Whatever you do will be | | University of | | hjm200 @ | | ___('v')___ | insignificant. However, | | Southampton | | zepler.net | | `"-\._./-"' | it is vitally important | | England | '------------' | hjm ^ ^ | that you do it." Gandhi | |
From: Linus C. <li...@li...> - 2008-12-08 17:27:27
|
Hi Harry I connected a sht15 to the gumstix on the gumstix port in the robostix. http://docwiki.gumstix.org/index.php/Robostix_I/O_pins#Gumstix.28aka_console_or_FFUART.29 GPIO 39 and 34. So I change: #define SHT_CLK 39//65 #define SHT_VDD 66 #define SHT_GND 67 #define SHT_DTA 34//68 And I commented the GND VDD part in the main function: // gpio_function(SHT_GND, GPIO); gpio_function(SHT_DTA, GPIO); gpio_function(SHT_CLK, GPIO); // gpio_function(SHT_VDD, GPIO); /* Then set the direction */ // gpio_direction(SHT_GND, OUT); gpio_direction(SHT_DTA, OUT); gpio_direction(SHT_CLK, OUT); // gpio_direction(SHT_VDD, OUT); // gpio_clear(SHT_GND); // gpio_set(SHT_VDD); gpio_set(SHT_DTA); gpio_set(SHT_CLK); The I compiled and run and I got error 4: root@gumstix-custom-verdex:~$ rayabot-sht15 temp: 65280 humi: 65280 Got error 4 temp: 65280 humi: 65280 Got error 4 temp: 65280 humi: 65280 Got error 4 temp: 65280 humi: 65280 Got error 4 If I disconect the sensor and run again the program it returns the same error. So I am guesing that the read and write of the GPIO are not working... I put in the main function: while(1) { if(read_bit()) printf("1\n"); else printf("0\n"); delay(1000); } And connected the data pin(34) to gnd and and then to vdd manualy. But I get 1 on the screen all the time. :/ Do I have to change something else to read and write on the 39 and 34 GPIO? How can I check I am not using the FFUART(GPIO 39 and 34) with something else on the gumstix? Thanks for the code. It is very usefull. On Thu, Mar 27, 2008 at 6:44 AM, Harry J Mason <hj...@ec...> wrote: > On Wed, 26 Mar 2008, Hanguang wrote: > >> Harry Mason wrote: >>> I'm using the SMT71 from Sensirion, which is digital but not i2c so you >>> would need GPIO but not an ADC. It has a simple bit banging protocol and >>> comes with sample code which is easy to port to the Gumstix. >> >> I also found someone else on internet talked about SMT71. Do you have any >> good tutorial or article shows more detail? Or just simiply tell me the >> procedure you did with you stuff. > > The data sheet and technical notes are good, and available at > http://www.sensirion.com/en/01_humidity_sensors/05_humidity_sensor_sht71.htm > > It does not use i2c but the connections are similar. You need two GPIO pins > for communication, and I'm also using GPIO for power as it makes the wiring > convenient. The data line needs a pullup resistor (around 10k) or it doesn't > work. > > To drive it from Linux I combined their sample code and a user space GPIO > library I found somewhere in the Gumstix documentation. Halfway down the > code there are constants (SHT_CLK etc.) defining which GPIO pins provide power, > data, and clock; change these to match your setup. > > I'm using the SHT7x which has pin connectors; these are intensely frustrating > to solder. Be quick and careful or you'll affect the accuracy. Also note that > the pinouts of the SHT1x and SHT7x are different - make sure you're reading the > right one in the data sheet. > > Harry > > -- 8< -- code follows -- 8< -- > #include <stdio.h> > #include <time.h> > #include <stdio.h> > #include <unistd.h> > #include <stdlib.h> > #include <string.h> > #include <sys/mman.h> > #include <sys/types.h> > #include <sys/stat.h> > #include <fcntl.h> > #include <ctype.h> > #define MAP_SIZE 4096 > #define MAP_MASK ( MAP_SIZE - 1 ) > #define GPLR0 0x40E00000 > #define GPLR1 0x40E00004 > #define GPLR2 0x40E00008 > #define GPDR0 0x40E0000C > #define GPDR1 0x40E00010 > #define GPDR2 0x40E00014 > #define GPSR0 0x40E00018 > #define GPSR1 0x40E0001C > #define GPSR2 0x40E00020 > #define GPCR0 0x40E00024 > #define GPCR1 0x40E00028 > #define GPCR2 0x40E0002C > #define GAFR0_L 0x40E00054 > #define GAFR0_U 0x40E00058 > #define GAFR1_L 0x40E0005C > #define GAFR1_U 0x40E00060 > #define GAFR2_L 0x40E00064 > #define GAFR2_U 0x40E00068 > > #define IN 250 > #define OUT 251 > #define GPIO 0 > #define AF0 0 > #define AF1 1 > #define AF2 2 > #define AF3 3 > #define SET 252 > #define CLEAR 253 > > typedef unsigned int u32; > > void *map, *regaddr; > static void putmem(u32 addr, u32 val) > { > regaddr = map + (addr & MAP_MASK); > *(u32*) regaddr = val; > } > static int getmem(u32 addr) > { > u32 val; > > regaddr = map + (addr & MAP_MASK); > val = *(u32*) regaddr; > return val; > } > void gpio_set(u32 gpio) > { > u32 pos; > u32 bit = 1; > > pos = gpio / 32; > bit <<= gpio % 32; > putmem(GPSR0 + (pos * 4), bit); > } > void gpio_clear(u32 gpio) > { > u32 pos; > u32 bit = 1; > > pos = gpio / 32; > bit <<= gpio % 32; > putmem(GPCR0 + (pos * 4), bit); > } > u32 gpio_status(u32 gpio) > { > u32 pos; > u32 bit = 1; > u32 data; > > pos = gpio / 32; > bit <<= gpio % 32; > data = getmem(GPLR0 + (pos * 4)); > data &= bit; > if (data == 0) > return(0); > else > return(1); > } > void gpio_direction(u32 gpio, u32 dir) > { > u32 pos; > u32 bit = 1; > u32 data; > > pos = gpio / 32; > bit <<= gpio % 32; > data = getmem(GPDR0 + (pos * 4)); > data &= ~bit; > if (dir == OUT) > data |= bit; > putmem(GPDR0 + (pos * 4), data); > } > void gpio_function(u32 gpio, u32 fun) > { > u32 pos; > u32 bit = 3; > u32 data; > > pos = gpio / 16; > bit <<= (gpio % 16) * 2; > fun <<= (gpio % 16) * 2; > data = getmem(GAFR0_L + (pos * 4)); > data &= ~bit; > data |= fun; > putmem(GAFR0_L + (pos * 4), data); > } > u32 gpio(u32 dir, u32 set, u32 reg) > { > if ((dir != IN) & (dir != OUT)){ > printf("ERROR: must specify a valid direction\n"); > return(1); > } > if ((set != SET) & (set != CLEAR)){ > printf("ERROR: must specify a valid level\n"); > return(1); > } > if (reg > 84){ > printf("ERROR: not a valid register -->%d\n", reg); > return(1); > } > gpio_function(reg, GPIO); > gpio_direction(reg, dir); > if (dir == OUT){ > if (set == SET) > gpio_set(reg); > else > gpio_clear(reg); > } > return(0); > } > > inline void delay ( long d ) { > struct timespec ts; > ts.tv_sec = 0; > ts.tv_nsec = d * 1000; > nanosleep(&ts, NULL); > } > > /* > * pin func GPIO > * 1 CLK 82 > * 2 VDD 81 > * 3 GND 59 > * 4 DTA 60 > */ > > #define SHT_CLK 65 > #define SHT_VDD 66 > #define SHT_GND 67 > #define SHT_DTA 68 > > #define noACK 0 > #define ACK 1 > #define CMD_REG_W 0x06 > #define CMD_REG_R 0x07 > #define CMD_TEMP 0x03 > #define CMD_HUMI 0x05 > #define CMD_RESET 0x1e > > > void write_bit(unsigned char bit) { > if (bit) { > /* We should only drive low; pullup should handle driving high. > * Therefore writing 1 is the same as reading. */ > gpio_direction(SHT_DTA, IN); > gpio_set(SHT_DTA); > } else { > gpio_clear(SHT_DTA); > gpio_direction(SHT_DTA, OUT); > } > } > unsigned char read_bit(void) { > gpio_direction(SHT_DTA, IN); > return gpio_status(SHT_DTA); > } > inline void clock_high(void) { > gpio_set(SHT_CLK); > } > inline void clock_low(void) { > gpio_clear(SHT_CLK); > } > > unsigned char write_byte(unsigned char value) { > unsigned char i, error = 0; > for (i = 0x80; i > 0; i /= 2) { > write_bit(i & value); > clock_high(); > delay(5); > clock_low(); > } > write_bit(1); > clock_high(); > error = read_bit(); > clock_low(); > return error; > } > > char read_byte(unsigned char ack) { > unsigned char i, val = 0; > write_bit(1); > for (i=0x80; i > 0; i /= 2) { > clock_high(); > if (read_bit()) { val = (val | i); } > clock_low(); > } > write_bit(!ack); > clock_high(); > delay(5); > clock_low(); > write_bit(1); > return val; > } > > void transstart(void) { > write_bit(1); > clock_low(); > delay(1); > clock_high(); > delay(1); > write_bit(0); > delay(1); > clock_low(); > delay(5); > clock_high(); > delay(1); > write_bit(1); > delay(1); > clock_low(); > } > > void connectionreset(void) { > unsigned char i; > write_bit(1); > clock_low(); > for (i = 0; i < 9; ++i) { > clock_high(); > delay(1); > clock_low(); > delay(1); > } > transstart(); > } > > char softreset(void) { > unsigned char error = 0; > connectionreset(); > error += write_byte(CMD_RESET); > return error; > } > > char read_statusreg(unsigned char *p_value, unsigned char *p_checksum) { > unsigned char error = 0; > transstart(); > error = write_byte(CMD_REG_R); > *p_value = read_byte(ACK); > *p_checksum = read_byte(noACK); > return error; > } > > char write_statusreg(unsigned char *p_value) { > unsigned char error = 0; > transstart(); > error += write_byte(CMD_REG_W); > error += write_byte(*p_value); > return error; > } > > char measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode) { > > unsigned char error = 0; > unsigned int i; > > > transstart(); > switch(mode) { > case CMD_TEMP: error += write_byte(CMD_TEMP); break; > case CMD_HUMI: error += write_byte(CMD_HUMI); break; > default : break; > } > for (i = 0; i < 100; ++i) { > if (read_bit() == 0) break; > delay(10); > } > if (read_bit()) { > error += 1; > } > > // endian? > *(p_value+1) = read_byte(ACK); > *(p_value) = read_byte(ACK); > *p_checksum = read_byte(noACK); > return error; > } > > //---------------------------------------------------------------------------------------- > void calc_sth11(float *p_humidity ,float *p_temperature) > //---------------------------------------------------------------------------------------- > // calculates temperature [ C] and humidity [%RH] > // input : humi [Ticks] (12 bit) > // temp [Ticks] (14 bit) > // output: humi [%RH] > // temp [ C] > { const float C1=-4.0; // for 12 Bit > const float C2= 0.0405; // for 12 Bit > const float C3=-0.0000028; // for 12 Bit > const float T1=0.01; // for 14 Bit @ 5V > const float T2=0.00008; // for 14 Bit @ 5V > float rh=*p_humidity; // rh: Humidity [Ticks] 12 Bit > float t=*p_temperature; // t: Temperature [Ticks] 14 Bit > float rh_lin; // rh_lin: Humidity linear > float rh_true; // rh_true: Temperature compensated humidity > float t_C; // t_C : Temperature [ C] > t_C=t*0.01 - 40; //calc. Temperature from ticks to [ C] > rh_lin=C3*rh*rh + C2*rh + C1; //calc. Humidity from ticks to [%RH] > rh_true=(t_C-25)*(T1+T2*rh)+rh_lin; //calc. Temperature compensated humidity [%RH] > if(rh_true>100)rh_true=100; //cut if the value is outside of > if(rh_true<0.1)rh_true=0.1; //the physical possible range > *p_temperature=t_C; //return temperature [ C] > *p_humidity=rh_true; //return humidity[%RH] > } > > > > > > > > > int main( int argc, char **argv ) > { > > int temp_i = 0, humi_i = 0; > float temp_f = 0, humi_f = 0; > unsigned char error, checksum; > > > int fd; > fd = open("/dev/mem", O_RDWR | O_SYNC); > if (fd<0) { > perror("open(\"/dev/mem\")"); > exit(1); > } > map = mmap(0, > MAP_SIZE, > PROT_READ | PROT_WRITE, > MAP_SHARED, > fd, > 0x40E00000 & ~MAP_MASK > ); > if (map == (void*)-1 ) { > perror("mmap()"); > exit(1); > } > > gpio_function(SHT_GND, GPIO); > gpio_function(SHT_DTA, GPIO); > gpio_function(SHT_CLK, GPIO); > gpio_function(SHT_VDD, GPIO); > > /* Then set the direction */ > gpio_direction(SHT_GND, OUT); > gpio_direction(SHT_DTA, OUT); > gpio_direction(SHT_CLK, OUT); > gpio_direction(SHT_VDD, OUT); > > gpio_clear(SHT_GND); > gpio_set(SHT_VDD); > gpio_set(SHT_DTA); > gpio_set(SHT_CLK); > > delay(10); > > connectionreset(); > delay(10); > > while (1) { > error = 0; > error += measure((unsigned char *)&temp_i, &checksum, CMD_TEMP); > error += measure((unsigned char *)&humi_i, &checksum, CMD_HUMI); > printf("temp: %d humi: %d\n", temp_i, humi_i); > if (error != 0) { > connectionreset(); > fprintf(stderr, "Got error %d\n", error); > } else { > humi_f = humi_i; > temp_f = temp_i; > calc_sth11(&humi_f, &temp_f); > > printf("temp: %5.1fC humi: %5.1f%%\n", temp_f, humi_f); > } > > delay(1000); > } > > munmap(0,MAP_SIZE); > return 0; > } > > ------------------------------------------------------------------------- > Check out the new SourceForge.net Marketplace. > It's the best place to buy or sell services for > just about anything Open Source. > http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users > -- Linus Casassa Estudiante Ingeniería Civil Electrónica Fono: 56-9-97776941 |
From: Harry J M. <hj...@ec...> - 2008-12-09 10:07:02
|
On Mon, 8 Dec 2008, Linus Casassa wrote: > I connected a sht15 to the gumstix on the gumstix port in the robostix. > GPIO 39 and 34. The SHT15 has a different pinout to the SHT75 I used; check the datasheet carefully. > And I commented the GND VDD part in the main function: Are you providing 3.3v power some other way? No idea if it will work if the power is 5v and the data 3.3v. > The I compiled and run and I got error 4: > > root@gumstix-custom-verdex:~$ rayabot-sht15 > temp: 65280 humi: 65280 > Got error 4 > temp: 65280 humi: 65280 > Got error 4 > temp: 65280 humi: 65280 > Got error 4 > temp: 65280 humi: 65280 > Got error 4 > > If I disconect the sensor and run again the program it returns the same error. > > So I am guesing that the read and write of the GPIO are not working... "Error 4" means it tried to read 4 bytes and got an error (1 bit) every time. This happens when the data pin is always high on reading. When this happened to me it was because the sensor wasn't connected properly, so the input was always 1 due to the pullup resistor. You should be able to increase all the delays everywhere in the code without affecting the logic. Stick a scope or meter on the pins and see if it makes sense. If the clock and data levels change, it's likely to be a hardware rather than software problem. -- | Harry Mason | .------------. | .___, |"Whatever you do will be | | University of | | hjm200 @ | | ___('v')___ | insignificant. However, | | Southampton | | zepler.net | | `"-\._./-"' | it is vitally important | | England | '------------' | hjm ^ ^ | that you do it." Gandhi | |
From: Linus C. <li...@li...> - 2008-12-09 19:58:36
|
I have seen the signals in the oscilloscope and the GPIO 34 doesn't work. The commands I have used: root@gumstix-custom-verdex:~$ echo \"GPIO out clear\" >/proc/gpio/GPIO39 root@gumstix-custom-verdex:~$ echo \"GPIO out set\" >/proc/gpio/GPIO39 root@gumstix-custom-verdex:~$ echo \"GPIO out clear\" >/proc/gpio/GPIO34 root@gumstix-custom-verdex:~$ echo \"GPIO out set\" >/proc/gpio/GPIO34 GPIO34 and GPIO39 are also FFUART. So how can I use GPIO 34 as an input/ouput and not a serial. How can I turn off ttyS0? ----------- The FFUART (for Full-Function UART) serves as the default Linux console on the Gumstix, and supports rates of up to 230kbaud. It is exposed on nearly all 60-pin expansion boards. The Gumstix Linux kernel maps the FFUART to /dev/ttyS0. link: http://docwiki.gumstix.org/index.php/Gumstix_UARTs#FFUART Thanks On Tue, Dec 9, 2008 at 7:06 AM, Harry J Mason <hj...@ec...> wrote: > On Mon, 8 Dec 2008, Linus Casassa wrote: > >> I connected a sht15 to the gumstix on the gumstix port in the robostix. >> GPIO 39 and 34. > > The SHT15 has a different pinout to the SHT75 I used; check the datasheet > carefully. > >> And I commented the GND VDD part in the main function: > > Are you providing 3.3v power some other way? No idea if it will work if the > power is 5v and the data 3.3v. > >> The I compiled and run and I got error 4: >> >> root@gumstix-custom-verdex:~$ rayabot-sht15 >> temp: 65280 humi: 65280 >> Got error 4 >> temp: 65280 humi: 65280 >> Got error 4 >> temp: 65280 humi: 65280 >> Got error 4 >> temp: 65280 humi: 65280 >> Got error 4 >> >> If I disconect the sensor and run again the program it returns the same >> error. >> >> So I am guesing that the read and write of the GPIO are not working... > > "Error 4" means it tried to read 4 bytes and got an error (1 bit) every > time. > This happens when the data pin is always high on reading. When this happened > to > me it was because the sensor wasn't connected properly, so the input was > always > 1 due to the pullup resistor. > > You should be able to increase all the delays everywhere in the code without > affecting the logic. Stick a scope or meter on the pins and see if it makes > sense. If the clock and data levels change, it's likely to be a hardware > rather > than software problem. > > -- > | Harry Mason | .------------. | .___, |"Whatever you do will be | > | University of | | hjm200 @ | | ___('v')___ | insignificant. However, | > | Southampton | | zepler.net | | `"-\._./-"' | it is vitally important | > | England | '------------' | hjm ^ ^ | that you do it." Gandhi | > -- Linus Casassa Estudiante Ingeniería Civil Electrónica Fono: 56-9-97776941 |
From: Chris D. <chr...@gm...> - 2008-12-09 20:13:37
|
I think you need to split up your commands. First you need to set the pin to be a GPIO instead of AF (which is FFUART serial) and then do the set/clear command. So it would be like this: echo "GPIO out" > /proc/gpio/GPIO39 echo clear > /proc/gpio/GPIO39 echo set > /proc/gpio/GPIO39 ... and so on. Chris On Tue, Dec 9, 2008 at 12:58 PM, Linus Casassa <li...@li...> wrote: > I have seen the signals in the oscilloscope and the GPIO 34 doesn't work. > > The commands I have used: > root@gumstix-custom-verdex:~$ echo \"GPIO out clear\" >/proc/gpio/GPIO39 > root@gumstix-custom-verdex:~$ echo \"GPIO out set\" >/proc/gpio/GPIO39 > root@gumstix-custom-verdex:~$ echo \"GPIO out clear\" >/proc/gpio/GPIO34 > root@gumstix-custom-verdex:~$ echo \"GPIO out set\" >/proc/gpio/GPIO34 > > GPIO34 and GPIO39 are also FFUART. > So how can I use GPIO 34 as an input/ouput and not a serial. How can I > turn off ttyS0? > > ----------- > > The FFUART (for Full-Function UART) serves as the default Linux > console on the Gumstix, and supports rates of up to 230kbaud. It is > exposed on nearly all 60-pin expansion boards. > > The Gumstix Linux kernel maps the FFUART to /dev/ttyS0. > link: http://docwiki.gumstix.org/index.php/Gumstix_UARTs#FFUART > > Thanks > > On Tue, Dec 9, 2008 at 7:06 AM, Harry J Mason <hj...@ec...> wrote: >> On Mon, 8 Dec 2008, Linus Casassa wrote: >> >>> I connected a sht15 to the gumstix on the gumstix port in the robostix. >>> GPIO 39 and 34. >> >> The SHT15 has a different pinout to the SHT75 I used; check the datasheet >> carefully. >> >>> And I commented the GND VDD part in the main function: >> >> Are you providing 3.3v power some other way? No idea if it will work if the >> power is 5v and the data 3.3v. >> >>> The I compiled and run and I got error 4: >>> >>> root@gumstix-custom-verdex:~$ rayabot-sht15 >>> temp: 65280 humi: 65280 >>> Got error 4 >>> temp: 65280 humi: 65280 >>> Got error 4 >>> temp: 65280 humi: 65280 >>> Got error 4 >>> temp: 65280 humi: 65280 >>> Got error 4 >>> >>> If I disconect the sensor and run again the program it returns the same >>> error. >>> >>> So I am guesing that the read and write of the GPIO are not working... >> >> "Error 4" means it tried to read 4 bytes and got an error (1 bit) every >> time. >> This happens when the data pin is always high on reading. When this happened >> to >> me it was because the sensor wasn't connected properly, so the input was >> always >> 1 due to the pullup resistor. >> >> You should be able to increase all the delays everywhere in the code without >> affecting the logic. Stick a scope or meter on the pins and see if it makes >> sense. If the clock and data levels change, it's likely to be a hardware >> rather >> than software problem. >> >> -- >> | Harry Mason | .------------. | .___, |"Whatever you do will be | >> | University of | | hjm200 @ | | ___('v')___ | insignificant. However, | >> | Southampton | | zepler.net | | `"-\._./-"' | it is vitally important | >> | England | '------------' | hjm ^ ^ | that you do it." Gandhi | >> > > > > -- > Linus Casassa > Estudiante Ingeniería Civil Electrónica > Fono: 56-9-97776941 > > ------------------------------------------------------------------------------ > SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las Vegas, Nevada. > The future of the web can't happen without you. Join us at MIX09 to help > pave the way to the Next Web now. Learn more and register at > http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/ > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users > |
From: Linus C. <li...@li...> - 2008-12-10 03:13:04
|
Doesn't work for GPIO 34 but it does for GPIO 39 I have notice in /etc/inittab the line: S:2345:respawn:/sbin/getty 115200 ttyS0 vt100 So I change it to: S:234:respawn:/sbin/getty 115200 ttyS0 vt100 I changes make effect when I did: init 4; init5. But still there is no control on GPIO 34... :/ On Tue, Dec 9, 2008 at 5:13 PM, Chris Dollar <chr...@gm...> wrote: > I think you need to split up your commands. First you need to set the > pin to be a GPIO instead of AF (which is FFUART serial) and then do > the set/clear command. So it would be like this: > echo "GPIO out" > /proc/gpio/GPIO39 > echo clear > /proc/gpio/GPIO39 > echo set > /proc/gpio/GPIO39 > ... and so on. > > Chris > > On Tue, Dec 9, 2008 at 12:58 PM, Linus Casassa <li...@li...> wrote: >> I have seen the signals in the oscilloscope and the GPIO 34 doesn't work. >> >> The commands I have used: >> root@gumstix-custom-verdex:~$ echo \"GPIO out clear\" >/proc/gpio/GPIO39 >> root@gumstix-custom-verdex:~$ echo \"GPIO out set\" >/proc/gpio/GPIO39 >> root@gumstix-custom-verdex:~$ echo \"GPIO out clear\" >/proc/gpio/GPIO34 >> root@gumstix-custom-verdex:~$ echo \"GPIO out set\" >/proc/gpio/GPIO34 >> >> GPIO34 and GPIO39 are also FFUART. >> So how can I use GPIO 34 as an input/ouput and not a serial. How can I >> turn off ttyS0? >> >> ----------- >> >> The FFUART (for Full-Function UART) serves as the default Linux >> console on the Gumstix, and supports rates of up to 230kbaud. It is >> exposed on nearly all 60-pin expansion boards. >> >> The Gumstix Linux kernel maps the FFUART to /dev/ttyS0. >> link: http://docwiki.gumstix.org/index.php/Gumstix_UARTs#FFUART >> >> Thanks >> >> On Tue, Dec 9, 2008 at 7:06 AM, Harry J Mason <hj...@ec...> wrote: >>> On Mon, 8 Dec 2008, Linus Casassa wrote: >>> >>>> I connected a sht15 to the gumstix on the gumstix port in the robostix. >>>> GPIO 39 and 34. >>> >>> The SHT15 has a different pinout to the SHT75 I used; check the datasheet >>> carefully. >>> >>>> And I commented the GND VDD part in the main function: >>> >>> Are you providing 3.3v power some other way? No idea if it will work if the >>> power is 5v and the data 3.3v. >>> >>>> The I compiled and run and I got error 4: >>>> >>>> root@gumstix-custom-verdex:~$ rayabot-sht15 >>>> temp: 65280 humi: 65280 >>>> Got error 4 >>>> temp: 65280 humi: 65280 >>>> Got error 4 >>>> temp: 65280 humi: 65280 >>>> Got error 4 >>>> temp: 65280 humi: 65280 >>>> Got error 4 >>>> >>>> If I disconect the sensor and run again the program it returns the same >>>> error. >>>> >>>> So I am guesing that the read and write of the GPIO are not working... >>> >>> "Error 4" means it tried to read 4 bytes and got an error (1 bit) every >>> time. >>> This happens when the data pin is always high on reading. When this happened >>> to >>> me it was because the sensor wasn't connected properly, so the input was >>> always >>> 1 due to the pullup resistor. >>> >>> You should be able to increase all the delays everywhere in the code without >>> affecting the logic. Stick a scope or meter on the pins and see if it makes >>> sense. If the clock and data levels change, it's likely to be a hardware >>> rather >>> than software problem. >>> >>> -- >>> | Harry Mason | .------------. | .___, |"Whatever you do will be | >>> | University of | | hjm200 @ | | ___('v')___ | insignificant. However, | >>> | Southampton | | zepler.net | | `"-\._./-"' | it is vitally important | >>> | England | '------------' | hjm ^ ^ | that you do it." Gandhi | >>> >> >> >> >> -- >> Linus Casassa >> Estudiante Ingeniería Civil Electrónica >> Fono: 56-9-97776941 >> >> ------------------------------------------------------------------------------ >> SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las Vegas, Nevada. >> The future of the web can't happen without you. Join us at MIX09 to help >> pave the way to the Next Web now. Learn more and register at >> http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/ >> _______________________________________________ >> gumstix-users mailing list >> gum...@li... >> https://lists.sourceforge.net/lists/listinfo/gumstix-users >> > > ------------------------------------------------------------------------------ > SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las Vegas, Nevada. > The future of the web can't happen without you. Join us at MIX09 to help > pave the way to the Next Web now. Learn more and register at > http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/ > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users > -- Linus Casassa Estudiante Ingeniería Civil Electrónica Fono: 56-9-97776941 |
From: Linus C. <li...@li...> - 2008-12-10 03:26:15
|
More information... root@gumstix-custom-verdex:~$ echo "GPIO out" > /proc/gpio/GPIO39 root@gumstix-custom-verdex:~$ cat /proc/gpio/GPIO39 39 GPIO out set root@gumstix-custom-verdex:~$ echo clear > /proc/gpio/GPIO39 root@gumstix-custom-verdex:~$ cat /proc/gpio/GPIO39 39 GPIO out clear root@gumstix-custom-verdex:~$ echo set > /proc/gpio/GPIO39 root@gumstix-custom-verdex:~$ cat /proc/gpio/GPIO39 39 GPIO out set root@gumstix-custom-verdex:~$ echo "GPIO out" > /proc/gpio/GPIO34 root@gumstix-custom-verdex:~$ echo set > /proc/gpio/GPIO34 root@gumstix-custom-verdex:~$ cat /proc/gpio/GPIO34 34 GPIO out set *root@gumstix-custom-verdex:~$ echo clear > /proc/gpio/GPIO34 root@gumstix-custom-verdex:~$ cat /proc/gpio/GPIO34 34 GPIO out set* root@gumstix-custom-verdex:~$ echo clear > /proc/gpio/GPIO34 root@gumstix-custom-verdex:~$ cat /proc/gpio/GPIO34 34 GPIO out set root@gumstix-custom-verdex:~$ Why I cant control that GPIO?! On Wed, Dec 10, 2008 at 12:12 AM, Linus Casassa <li...@li...> wrote: > Doesn't work for GPIO 34 but it does for GPIO 39 > > I have notice in /etc/inittab the line: > S:2345:respawn:/sbin/getty 115200 ttyS0 vt100 > So I change it to: > S:234:respawn:/sbin/getty 115200 ttyS0 vt100 > I changes make effect when I did: > init 4; init5. > > But still there is no control on GPIO 34... :/ > > On Tue, Dec 9, 2008 at 5:13 PM, Chris Dollar <chr...@gm...> wrote: >> I think you need to split up your commands. First you need to set the >> pin to be a GPIO instead of AF (which is FFUART serial) and then do >> the set/clear command. So it would be like this: >> echo "GPIO out" > /proc/gpio/GPIO39 >> echo clear > /proc/gpio/GPIO39 >> echo set > /proc/gpio/GPIO39 >> ... and so on. >> >> Chris >> >> On Tue, Dec 9, 2008 at 12:58 PM, Linus Casassa <li...@li...> wrote: >>> I have seen the signals in the oscilloscope and the GPIO 34 doesn't work. >>> >>> The commands I have used: >>> root@gumstix-custom-verdex:~$ echo \"GPIO out clear\" >/proc/gpio/GPIO39 >>> root@gumstix-custom-verdex:~$ echo \"GPIO out set\" >/proc/gpio/GPIO39 >>> root@gumstix-custom-verdex:~$ echo \"GPIO out clear\" >/proc/gpio/GPIO34 >>> root@gumstix-custom-verdex:~$ echo \"GPIO out set\" >/proc/gpio/GPIO34 >>> >>> GPIO34 and GPIO39 are also FFUART. >>> So how can I use GPIO 34 as an input/ouput and not a serial. How can I >>> turn off ttyS0? >>> >>> ----------- >>> >>> The FFUART (for Full-Function UART) serves as the default Linux >>> console on the Gumstix, and supports rates of up to 230kbaud. It is >>> exposed on nearly all 60-pin expansion boards. >>> >>> The Gumstix Linux kernel maps the FFUART to /dev/ttyS0. >>> link: http://docwiki.gumstix.org/index.php/Gumstix_UARTs#FFUART >>> >>> Thanks >>> >>> On Tue, Dec 9, 2008 at 7:06 AM, Harry J Mason <hj...@ec...> wrote: >>>> On Mon, 8 Dec 2008, Linus Casassa wrote: >>>> >>>>> I connected a sht15 to the gumstix on the gumstix port in the robostix. >>>>> GPIO 39 and 34. >>>> >>>> The SHT15 has a different pinout to the SHT75 I used; check the datasheet >>>> carefully. >>>> >>>>> And I commented the GND VDD part in the main function: >>>> >>>> Are you providing 3.3v power some other way? No idea if it will work if the >>>> power is 5v and the data 3.3v. >>>> >>>>> The I compiled and run and I got error 4: >>>>> >>>>> root@gumstix-custom-verdex:~$ rayabot-sht15 >>>>> temp: 65280 humi: 65280 >>>>> Got error 4 >>>>> temp: 65280 humi: 65280 >>>>> Got error 4 >>>>> temp: 65280 humi: 65280 >>>>> Got error 4 >>>>> temp: 65280 humi: 65280 >>>>> Got error 4 >>>>> >>>>> If I disconect the sensor and run again the program it returns the same >>>>> error. >>>>> >>>>> So I am guesing that the read and write of the GPIO are not working... >>>> >>>> "Error 4" means it tried to read 4 bytes and got an error (1 bit) every >>>> time. >>>> This happens when the data pin is always high on reading. When this happened >>>> to >>>> me it was because the sensor wasn't connected properly, so the input was >>>> always >>>> 1 due to the pullup resistor. >>>> >>>> You should be able to increase all the delays everywhere in the code without >>>> affecting the logic. Stick a scope or meter on the pins and see if it makes >>>> sense. If the clock and data levels change, it's likely to be a hardware >>>> rather >>>> than software problem. >>>> >>>> -- >>>> | Harry Mason | .------------. | .___, |"Whatever you do will be | >>>> | University of | | hjm200 @ | | ___('v')___ | insignificant. However, | >>>> | Southampton | | zepler.net | | `"-\._./-"' | it is vitally important | >>>> | England | '------------' | hjm ^ ^ | that you do it." Gandhi | >>>> >>> >>> >>> >>> -- >>> Linus Casassa >>> Estudiante Ingeniería Civil Electrónica >>> Fono: 56-9-97776941 >>> >>> ------------------------------------------------------------------------------ >>> SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las Vegas, Nevada. >>> The future of the web can't happen without you. Join us at MIX09 to help >>> pave the way to the Next Web now. Learn more and register at >>> http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/ >>> _______________________________________________ >>> gumstix-users mailing list >>> gum...@li... >>> https://lists.sourceforge.net/lists/listinfo/gumstix-users >>> >> >> ------------------------------------------------------------------------------ >> SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las Vegas, Nevada. >> The future of the web can't happen without you. Join us at MIX09 to help >> pave the way to the Next Web now. Learn more and register at >> http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/ >> _______________________________________________ >> gumstix-users mailing list >> gum...@li... >> https://lists.sourceforge.net/lists/listinfo/gumstix-users >> > > > > -- > Linus Casassa > Estudiante Ingeniería Civil Electrónica > Fono: 56-9-97776941 > -- Linus Casassa Estudiante Ingeniería Civil Electrónica Fono: 56-9-97776941 |