Show Posts
Pages: [1] 2
1  Using Arduino / Networking, Protocols, and Devices / Multiple ethernet sockets - Web + UDP/TCP on: Today at 08:04:18 am
Hello,

While developing an application that can talk to the arduino via regular ethernet, I found myself in need of a local web server on the arduino to do, for example, a first time configuration of the device before connecting.

I tried to setup two ethernet servers with different ports (ex. port 80 + 8080) to try my idea. Everything works fine except that when a connection is established to the web server, you are stuck in a while loop and cannot use the other ethernet server at the same time.

I've played around with client.available() and client() instead of the while loop but with no luck at all. Every time I get it to work, it's one of the servers working until the client disconnects. Both works fine if I disable the other one.

Any thoughts?

Best regards,
Swoshie
2  Using Arduino / Sensors / How to measure amplitude value of a sine wave? on: April 07, 2014, 08:44:09 am
Hello everybody,

I am in the middle of a project and found myself in need of measuring the amplitude of a sine wave fixed at 455KHz. Is there a simple and efficient method for this that I am stupid enough not to see or is it a complicated measurement to do without any external circuitry more then the arduino itself?

Best regards,
Swoshie
3  Using Arduino / Microcontrollers / Re: Unable to write bootloader to Atmega328-AU on: December 03, 2013, 02:18:27 pm
Finally got it working!

The solution was to change the signature from 0x0F to 0x14 in avrdude.conf!
4  Using Arduino / Microcontrollers / Re: Unable to write bootloader to Atmega328-AU on: December 03, 2013, 07:10:49 am
This processor is using a 16MHz reference crystal with 22pF capacitors to ground.

I don't see any options for "Arduino on breadboard" in the latest Arduino software (1.0.5). Is that some kind of custom made option?
5  Using Arduino / Microcontrollers / Unable to write bootloader to Atmega328-AU on: December 02, 2013, 07:29:26 pm
Hello,

After many projects with Arduino I decided to build my own board with surface mount components, but I've run into a problem with loading the bootloader into the Atmega328-AU processor.

I've tried to use the Arduino Uno as a Arduino-ISP programmer and then chosen Arduino Duemilanove/Pro/Pro Mini etc as the target. I've wired the MISO, MOSI and SCK pins directly and also the RESET pin. Both cards has a common ground but separate +5V supplies.

My different tries has gotten me to various error messages. Everything from "Sync error" to "stk500_disable(): protocol error"  and also at some point it said that I had the wrong signature. I also tried changing the signature in the /avr/etc folder but it just started to say Sync error and no change after that. I have now reverted to original files.

Any help is highly appreciated!

Best regards,
Swoshie
6  Using Arduino / Audio / Decoding CTCSS - Possible? on: April 13, 2013, 07:43:17 pm
Hello,

I am currently building a repeater logic for a radio project and I have the need to decode CTCSS as an access method.

I've searched quite a lot and found no one doing it with the Arduino, only PIC and I don't know if that's an accurate reading or not. There is still hardware decoders out there but they are old and costs a lot, all the new radios today have all the options in one big IC.  smiley-razz

My first thought was to use the pulseIn() function and measure the input line via a low pass filter and a schmitt trigger but have not yet tested this theory. Do you think it's possible? Can the readings be accurate enough to not open on a nearby CTCSS frequency?

Maybe someone has a better idea? All answers are welcome!

Best regards,
Swoshie
7  Using Arduino / Networking, Protocols, and Devices / Re: Define frequency for MCP4725 via I2C on: January 05, 2013, 10:58:31 am
Thanks for the answer!

I don't quite understand your code here.. Is it the resolution that actually makes the frequency or is it some other variable?
8  Using Arduino / Networking, Protocols, and Devices / Define frequency for MCP4725 via I2C on: January 04, 2013, 06:37:06 pm
Hello,

I just bought the Sparkfun MCP4725 and was able to produce a sine wave using the following code:

Code:
#include <Wire.h>
#include <Adafruit_MCP4725.h>

Adafruit_MCP4725 dac;

// Set this value to 9, 8, 7, 6 or 5 to adjust the resolution
#define DAC_RESOLUTION    (8)

/* Note: If flash space is tight a quarter sine wave is enough
   to generate full sine and cos waves, but some additional
   calculation will be required at each step after the first
   quarter wave.                                              */

PROGMEM uint16_t DACLookup_FullSine_9Bit[512] =
{
  2048, 2073, 2098, 2123, 2148, 2174, 2199, 2224,
  2249, 2274, 2299, 2324, 2349, 2373, 2398, 2423,
  2448, 2472, 2497, 2521, 2546, 2570, 2594, 2618,
  2643, 2667, 2690, 2714, 2738, 2762, 2785, 2808,
  2832, 2855, 2878, 2901, 2924, 2946, 2969, 2991,
  3013, 3036, 3057, 3079, 3101, 3122, 3144, 3165,
  3186, 3207, 3227, 3248, 3268, 3288, 3308, 3328,
  3347, 3367, 3386, 3405, 3423, 3442, 3460, 3478,
  3496, 3514, 3531, 3548, 3565, 3582, 3599, 3615,
  3631, 3647, 3663, 3678, 3693, 3708, 3722, 3737,
  3751, 3765, 3778, 3792, 3805, 3817, 3830, 3842,
  3854, 3866, 3877, 3888, 3899, 3910, 3920, 3930,
  3940, 3950, 3959, 3968, 3976, 3985, 3993, 4000,
  4008, 4015, 4022, 4028, 4035, 4041, 4046, 4052,
  4057, 4061, 4066, 4070, 4074, 4077, 4081, 4084,
  4086, 4088, 4090, 4092, 4094, 4095, 4095, 4095,
  4095, 4095, 4095, 4095, 4094, 4092, 4090, 4088,
  4086, 4084, 4081, 4077, 4074, 4070, 4066, 4061,
  4057, 4052, 4046, 4041, 4035, 4028, 4022, 4015,
  4008, 4000, 3993, 3985, 3976, 3968, 3959, 3950,
  3940, 3930, 3920, 3910, 3899, 3888, 3877, 3866,
  3854, 3842, 3830, 3817, 3805, 3792, 3778, 3765,
  3751, 3737, 3722, 3708, 3693, 3678, 3663, 3647,
  3631, 3615, 3599, 3582, 3565, 3548, 3531, 3514,
  3496, 3478, 3460, 3442, 3423, 3405, 3386, 3367,
  3347, 3328, 3308, 3288, 3268, 3248, 3227, 3207,
  3186, 3165, 3144, 3122, 3101, 3079, 3057, 3036,
  3013, 2991, 2969, 2946, 2924, 2901, 2878, 2855,
  2832, 2808, 2785, 2762, 2738, 2714, 2690, 2667,
  2643, 2618, 2594, 2570, 2546, 2521, 2497, 2472,
  2448, 2423, 2398, 2373, 2349, 2324, 2299, 2274,
  2249, 2224, 2199, 2174, 2148, 2123, 2098, 2073,
  2048, 2023, 1998, 1973, 1948, 1922, 1897, 1872,
  1847, 1822, 1797, 1772, 1747, 1723, 1698, 1673,
  1648, 1624, 1599, 1575, 1550, 1526, 1502, 1478,
  1453, 1429, 1406, 1382, 1358, 1334, 1311, 1288,
  1264, 1241, 1218, 1195, 1172, 1150, 1127, 1105,
  1083, 1060, 1039, 1017,  995,  974,  952,  931,
   910,  889,  869,  848,  828,  808,  788,  768,
   749,  729,  710,  691,  673,  654,  636,  618,
   600,  582,  565,  548,  531,  514,  497,  481,
   465,  449,  433,  418,  403,  388,  374,  359,
   345,  331,  318,  304,  291,  279,  266,  254,
   242,  230,  219,  208,  197,  186,  176,  166,
   156,  146,  137,  128,  120,  111,  103,   96,
    88,   81,   74,   68,   61,   55,   50,   44,
    39,   35,   30,   26,   22,   19,   15,   12,
    10,    8,    6,    4,    2,    1,    1,    0,
     0,    0,    1,    1,    2,    4,    6,    8,
    10,   12,   15,   19,   22,   26,   30,   35,
    39,   44,   50,   55,   61,   68,   74,   81,
    88,   96,  103,  111,  120,  128,  137,  146,
   156,  166,  176,  186,  197,  208,  219,  230,
   242,  254,  266,  279,  291,  304,  318,  331,
   345,  359,  374,  388,  403,  418,  433,  449,
   465,  481,  497,  514,  531,  548,  565,  582,
   600,  618,  636,  654,  673,  691,  710,  729,
   749,  768,  788,  808,  828,  848,  869,  889,
   910,  931,  952,  974,  995, 1017, 1039, 1060,
  1083, 1105, 1127, 1150, 1172, 1195, 1218, 1241,
  1264, 1288, 1311, 1334, 1358, 1382, 1406, 1429,
  1453, 1478, 1502, 1526, 1550, 1575, 1599, 1624,
  1648, 1673, 1698, 1723, 1747, 1772, 1797, 1822,
  1847, 1872, 1897, 1922, 1948, 1973, 1998, 2023
};

PROGMEM uint16_t DACLookup_FullSine_8Bit[256] =
{
  2048, 2098, 2148, 2198, 2248, 2298, 2348, 2398,
  2447, 2496, 2545, 2594, 2642, 2690, 2737, 2784,
  2831, 2877, 2923, 2968, 3013, 3057, 3100, 3143,
  3185, 3226, 3267, 3307, 3346, 3385, 3423, 3459,
  3495, 3530, 3565, 3598, 3630, 3662, 3692, 3722,
  3750, 3777, 3804, 3829, 3853, 3876, 3898, 3919,
  3939, 3958, 3975, 3992, 4007, 4021, 4034, 4045,
  4056, 4065, 4073, 4080, 4085, 4089, 4093, 4094,
  4095, 4094, 4093, 4089, 4085, 4080, 4073, 4065,
  4056, 4045, 4034, 4021, 4007, 3992, 3975, 3958,
  3939, 3919, 3898, 3876, 3853, 3829, 3804, 3777,
  3750, 3722, 3692, 3662, 3630, 3598, 3565, 3530,
  3495, 3459, 3423, 3385, 3346, 3307, 3267, 3226,
  3185, 3143, 3100, 3057, 3013, 2968, 2923, 2877,
  2831, 2784, 2737, 2690, 2642, 2594, 2545, 2496,
  2447, 2398, 2348, 2298, 2248, 2198, 2148, 2098,
  2048, 1997, 1947, 1897, 1847, 1797, 1747, 1697,
  1648, 1599, 1550, 1501, 1453, 1405, 1358, 1311,
  1264, 1218, 1172, 1127, 1082, 1038,  995,  952,
   910,  869,  828,  788,  749,  710,  672,  636,
   600,  565,  530,  497,  465,  433,  403,  373,
   345,  318,  291,  266,  242,  219,  197,  176,
   156,  137,  120,  103,   88,   74,   61,   50,
    39,   30,   22,   15,   10,    6,    2,    1,
     0,    1,    2,    6,   10,   15,   22,   30,
    39,   50,   61,   74,   88,  103,  120,  137,
   156,  176,  197,  219,  242,  266,  291,  318,
   345,  373,  403,  433,  465,  497,  530,  565,
   600,  636,  672,  710,  749,  788,  828,  869,
   910,  952,  995, 1038, 1082, 1127, 1172, 1218,
  1264, 1311, 1358, 1405, 1453, 1501, 1550, 1599,
  1648, 1697, 1747, 1797, 1847, 1897, 1947, 1997
};

PROGMEM uint16_t DACLookup_FullSine_7Bit[128] =
{
  2048, 2148, 2248, 2348, 2447, 2545, 2642, 2737,
  2831, 2923, 3013, 3100, 3185, 3267, 3346, 3423,
  3495, 3565, 3630, 3692, 3750, 3804, 3853, 3898,
  3939, 3975, 4007, 4034, 4056, 4073, 4085, 4093,
  4095, 4093, 4085, 4073, 4056, 4034, 4007, 3975,
  3939, 3898, 3853, 3804, 3750, 3692, 3630, 3565,
  3495, 3423, 3346, 3267, 3185, 3100, 3013, 2923,
  2831, 2737, 2642, 2545, 2447, 2348, 2248, 2148,
  2048, 1947, 1847, 1747, 1648, 1550, 1453, 1358,
  1264, 1172, 1082,  995,  910,  828,  749,  672,
   600,  530,  465,  403,  345,  291,  242,  197,
   156,  120,   88,   61,   39,   22,   10,    2,
     0,    2,   10,   22,   39,   61,   88,  120,
   156,  197,  242,  291,  345,  403,  465,  530,
   600,  672,  749,  828,  910,  995, 1082, 1172,
  1264, 1358, 1453, 1550, 1648, 1747, 1847, 1947
};

PROGMEM uint16_t DACLookup_FullSine_6Bit[64] =
{
  2048, 2248, 2447, 2642, 2831, 3013, 3185, 3346,
  3495, 3630, 3750, 3853, 3939, 4007, 4056, 4085,
  4095, 4085, 4056, 4007, 3939, 3853, 3750, 3630,
  3495, 3346, 3185, 3013, 2831, 2642, 2447, 2248,
  2048, 1847, 1648, 1453, 1264, 1082,  910,  749,
   600,  465,  345,  242,  156,   88,   39,   10,
     0,   10,   39,   88,  156,  242,  345,  465,
   600,  749,  910, 1082, 1264, 1453, 1648, 1847
};

PROGMEM uint16_t DACLookup_FullSine_5Bit[32] =
{
  2048, 2447, 2831, 3185, 3495, 3750, 3939, 4056,
  4095, 4056, 3939, 3750, 3495, 3185, 2831, 2447,
  2048, 1648, 1264,  910,  600,  345,  156,   39,
     0,   39,  156,  345,  600,  910, 1264, 1648
};

void setup(void) {
  Serial.begin(9600);
  Serial.println("Hello!");

  // For Adafruit MCP4725A1 the address is 0x62 (default) or 0x63 (ADDR pin tied to VCC)
  // For MCP4725A0 the address is 0x60 or 0x61
  // For MCP4725A2 the address is 0x64 or 0x65
  dac.begin(0x62);

  Serial.println("Generating a sine wave");
}

void loop(void) {
    uint16_t i;

    // Push out the right lookup table, depending on the selected resolution
    #if DAC_RESOLUTION == 5
      for (i = 0; i < 32; i++)
      {
        dac.setVoltage(pgm_read_word(&(DACLookup_FullSine_5Bit[i])), false);
      }
    #elif DAC_RESOLUTION == 6
      for (i = 0; i < 64; i++)
      {
        dac.setVoltage(pgm_read_word(&(DACLookup_FullSine_6Bit[i])), false);
      }
    #elif DAC_RESOLUTION == 7
      for (i = 0; i < 128; i++)
      {
        dac.setVoltage(pgm_read_word(&(DACLookup_FullSine_7Bit[i])), false);
      }
    #elif DAC_RESOLUTION == 9
      for (i = 0; i < 512; i++)
      {
        dac.setVoltage(pgm_read_word(&(DACLookup_FullSine_9Bit[i])), false);
      }
    #else    // Use 8-bit data if nothing else is specified
      for (i = 0; i < 256; i++)
      {
        dac.setVoltage(pgm_read_word(&(DACLookup_FullSine_8Bit[i])), false);
      }
    #endif
}

The output frequency is around 25Hz and my plan is to have a variable output frequency based on a analog input voltage. Is this possible or did I get this all wrong?

Regards,
Swoshie

EDIT: The output frequency will be between 5-10KHz!
9  Using Arduino / Programming Questions / Re: Reading PIND and PINB on: January 02, 2013, 04:51:29 pm

I would think that would only work if all the individual signals were in phase with each other such that they all had the same 'starting time', and I would not think one could think or even wish that to be the case?

Lefty


Exactly, the 8 inputs can vary. While 1 input is chosen another input can start and if that one is better, the arduino should choose that one.
10  Using Arduino / Programming Questions / Re: Reading PIND and PINB on: January 02, 2013, 04:07:15 pm
Wow, it sounds more difficult then I thought!

As you say Lefty, the principle is pretty simple but that code just seems too hard for me to write. Maybe I'll have too stick to pulseIn after all..
11  Using Arduino / Programming Questions / Reading PIND and PINB on: January 02, 2013, 03:05:13 pm
Hi,

I've been trying to use pulseIn() for quite some time now but I want a faster way of reading the inputs and preferably at the same time.

My scenario:

To read 8 inputs and return the pin with the highest frequency. On every input there will be a sine wave between 5-7 KHz that is converted to a square wave via a schmitt trigger. I want to measure HIGH to LOW to HIGH or equivalent.

The problem with pulseIn is that all the pins are read after each other while PINx reads all the inputs as a whole byte.

When trying to read the inputs with
Code:
int inputPin = 5;
int inputByte;

void setup() {
  pinMode(inputPin, INPUT);
  Serial.begin(9600);
}

void loop() {
  inputByte = PIND;
  Serial.println(inputByte);
  delay(1000);
}

I just get the number 7 when nothing is attached. Fare enough I thought but how should I continue if I want to read which pin has the highest frequency?

Maybe it's a lot to ask for but I seriously don't understand how this works as most of the posts at this forums only describes OUTPUTS. I hope someone has the time to help me out!
 

Best regards,
Swoshie
12  Using Arduino / Sensors / Re: Measuring unstable input on: November 25, 2012, 08:57:43 am
I'm sorry. The input is not THAT unstable  smiley-razz

Think of it this way:



When the signal is getting weaker, the noise rises and makes the analog read unstable. I need to filter that somehow to get a solid value that is linear with the generated tone.

Thanks!
13  Using Arduino / Sensors / Measuring unstable input on: November 25, 2012, 08:38:48 am
Hello,

I'm currently trying to read an analog input that is very unstable, it's a signal meter indication that's part of a radio receiver. The DC voltage is good when the signal is strong but really noisy when the signal is weak.

I've tried to use several averaging codes but none seems to be enough, the value of the read is jumping up and down all the time.

The finished project is to make a tone out off the measured value, it has to be linear.

Any advice?

Thanks!
14  Using Arduino / Project Guidance / Re: Comparing 8 digital inputs to control multiplexer analog inputs on: September 24, 2012, 12:33:07 pm
Hello Paul and thank you for your response!

As I said in the start of this post, I am a complete newbie at this and trying to put code from the "playground" site etc together to accomplish what I want to do. I appreciate all the help I can get to get one step closer to my goal!

Okey, so do I have to make a "rxState = digitalRead" for every input or is there a better way of doing it? Another thing I've been wondering about is if the "digitalRead" only reads the state of the input once or if I have to make a new function for that (to read it every 10ms)?

Best regards,
Swoshie

15  Using Arduino / Project Guidance / Re: Comparing 8 digital inputs to control multiplexer analog inputs on: September 24, 2012, 11:34:21 am
Thank you for your advice!

I have now tried a different approach and made use of arrays (i understand now how much easier it gets) and came up with this:

Code:
int rxPins[] = {5, 6, 7, 8, 9, 10, 11, 12};    // input pins for rx 0 thru 7
int rxState = 0;                               // current rx selected
int count = 0;                                 // counters for rx 0 thru 7
int tx = 13;                                   // output pin for tx

// output pins for multiplexer
int r0 = 0;      //value of select pin at the 4051 (s0)
int r1 = 0;      //value of select pin at the 4051 (s1)
int r2 = 0;      //value of select pin at the 4051 (s2)
int countmux = 0;   //which y pin we are selecting

void setup()
{
  // initialize rx pins as input
  for (count=0;count<8;count++) {
    pinMode(rxPins[count], INPUT);
  }
  
  // initialize pins as output for multiplexer
  pinMode(2, OUTPUT);    // s0
  pinMode(3, OUTPUT);    // s1
  pinMode(4, OUTPUT);    // s2
}

void loop()
{
  // read inputs and count pulses
  for (count=0;count<8;count++) {
    rxState = digitalRead(rxPins[count], HIGH);
  }



 // if input is detected, turn on output
 if (rxState >= 1)
 {
   digitalWrite(tx, HIGH);
 }
 else
 {
   digitalWrite(tx, LOW);
 }
 
 
 
 // code for multiplexer
 for (countmux=0; countmux<=7; countmux++) {

    // select the bit  
    r0 = bitRead(countmux,0);    // use this with arduino 0013 (and newer versions)    
    r1 = bitRead(countmux,1);    // use this with arduino 0013 (and newer versions)    
    r2 = bitRead(countmux,2);    // use this with arduino 0013 (and newer versions)    

    //r0 = count & 0x01;      // old version of setting the bits
    //r1 = (count>>1) & 0x01;      // old version of setting the bits
    //r2 = (count>>2) & 0x01;      // old version of setting the bits

    digitalWrite(2, r0);
    digitalWrite(3, r1);
    digitalWrite(4, r2);

    //Either read or write the multiplexed pin here

  }  
}

I have no idea if this works but maybe it looks better? Any advice?

The problem now is how to compare the inputs and choose the one with most pulses each 10ms?

Best regards,
Swoshie
Pages: [1] 2