Pages: [1]   Go Down
Author Topic: Upgrade from Duemilanove to 16 Analog inputs  (Read 2591 times)
0 Members and 1 Guest are viewing this topic.
South Africa
Offline Offline
Newbie
*
Karma: 0
Posts: 20
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi
I have developed a working Analog Data Logger (6 Analog inputs) using VB6 and a Duemilanove. I run Arduino 019 and WinXP. I want to upgrade my Logger to 16 Analog inputs.
I could buy a ATMega2560 but I've seen a number of reports on software, bootloader and USB issues with this board.
I'm not sure how easy it would be to extend the on board software to the 2560.

I would like some advice on whether I should go for the ATMega2560 or another solution or Arduino Board for my upgrade.
Regards
Martin
Logged

Portugal
Offline Offline
God Member
*****
Karma: 6
Posts: 962
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

You can always add an external ADC, like this one:
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en010530
Logged

South Africa
Offline Offline
Newbie
*
Karma: 0
Posts: 20
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Thanks Senso
How easy/difficult would it be to interface with my Duemilanove?
It's USB Serial output works really well for me. I wouldn't like to change too much if possible.
Martin
Logged

Portugal
Offline Offline
God Member
*****
Karma: 6
Posts: 962
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

You use the SPI interface, and I would bet that there is already one lib to use this ADC with arduino.
The SPI interface uses the digital pin 13,12,11 and 10, you just read it and send the data via serial just like you do using the internal ADC and the analogRead() command.
Logged

Global Moderator
Dallas
Offline Offline
Shannon Member
*****
Karma: 205
Posts: 12844
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset


http://www.arduino.cc/playground/Learning/4051
Logged

South Africa
Offline Offline
Newbie
*
Karma: 0
Posts: 20
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Thanks guys
I'll investigate your suggestions further. For anyone who's looking, I found this Code for an SPI interface with an 8 channel MCP3208.

http://www.arduino.cc/playground/Code/MCP3208

Regards
Martin
Logged

South Africa
Offline Offline
Newbie
*
Karma: 0
Posts: 20
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Coding Badly
I've succeeded in adapting the 4051 multiplexer solution into my Data Logging project. It works well.
Thanks a lot
Martin
Logged

Global Moderator
Netherlands
Offline Offline
Shannon Member
*****
Karma: 216
Posts: 13663
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Could you share code and how you did it?
« Last Edit: December 17, 2010, 11:42:31 am by robtillaart » Logged

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

South Africa
Offline Offline
Newbie
*
Karma: 0
Posts: 20
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I'll put some code together over the weekend and post it
Logged

South Africa
Offline Offline
Newbie
*
Karma: 0
Posts: 20
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I have not yet made a 16 channel version, but here is the code for a working 8 channel version. The code is an extension of the code found on:
 
http://www.arduino.cc/playground/Learning/4051

Details of the 4051 are available on that site:

I create a CSV data stream with 9 elements, 8 Analog values read in sequentially from the 4051 plus a digital value to read a push button on Digital Input 3. The output from the 4051 goes to Analog Input(0). When the button is pressed, data is loaded into a MSFlexgrid.
It should be easy to extend the software for a second 4051 feeding into Analog Input(1).

****** Arduino Code Ver 0019
/*
 * codeexample for useing a 4051 * analog multiplexer / demultiplexer
 * by david c. and tomek n.* for k3 / malm[ch65533] h[ch65533]gskola
 *
 * To read 8 Analog Values into a single Analog Input Pin on Arduino
 * + read a single Button Input on a Digital Input
 */  

const int buttonPin = 3; //digital input 3 Pin 4
int led = 13;    //just an led
int r0 = 0;      //value select pin at the 4051 (s0)
int r1 = 0;      //value select pin at the 4051 (s1)
int r2 = 0;      //value select pin at the 4051 (s2)
int row = 0;     // storing the bin code
int count = 0;    // just a count
int  bin [] = {000, 1, 10, 11, 100, 101, 110, 111};//bin = bin[ch65533]r, some times it is so easy

void setup(){
  // initialize the serial port:
  pinMode(buttonPin, INPUT); //designate buttonPin as Input
  
  pinMode(7, OUTPUT);    // s0 //Output MUX code to 4051 pin 8
  pinMode(6, OUTPUT);    // s1  pin 7
  pinMode(5, OUTPUT);    // s2  pin 6
  digitalWrite(led, HIGH);
  
  Serial.begin(9600);
}

void loop () {

  for (count=0; count<=7; count++) {   //count through 8 MUX codes
    row = bin[count];      
    r0 = row & 0x01;
    r1 = (row>>1) & 0x01;
    r2 = (row>>2) & 0x01;
    digitalWrite(7, r0); //send MUX code to 4051
    digitalWrite(6, r1);
    digitalWrite(5, r2);
    //Serial.print(r0);  // used to include 4051 code in datastring
    //Serial.print(r1);
    //Serial.print(r2);
    //Serial.println();
    //Serial.print(",");
  
    // read the sensor into ch0
    int sensorReading = analogRead(0);  // Analog Input goes to Ch 0 (pin 6)  after each input of 4051 is selected
    // print its value out as an ASCII numeric string
    Serial.print(sensorReading, DEC);    
    Serial.print(",");  //add comma
    }
          
  //read digital input  and write to end of line
  int DigitalsensorReading = digitalRead(buttonPin);  //normally Hi. press for Lo
  Serial.print(DigitalsensorReading);  
  // after the sensors have been read,
  // print a newline and carriage return
  Serial.println();
    //delay (300);  //Optional
  }  

 ******  My VB6 code for a Test Program is:

Dim RowCounter As Integer

Private Sub Form_Load()
 
    RowCounter = 1
    Label1.BackColor = vbRed 'initial program run condition.
                                'to make the square box in red color.
End Sub

Private Sub CmdOpen_Click()  
    MSComm1.CommPort = 1
    MSComm1.Settings = "9600,N,8,1"   '9600=baud rate N=no parity 8bits 1 stop bit
    MSComm1.InputLen = 0
    MSComm1.PortOpen = True
    Label1.BackColor = vbGreen
End Sub

Private Sub Timer1_Timer()  'Timer.Interval = 150
    Dim DataValues() As String
    Dim DataString() As String
    Dim DataLines() As String
    Dim MsComStringData As String
    Dim HP, kmh As Single
    
    If MSComm1.InBufferCount > 0 Then
        
        MsComStringData = MSComm1.Input
        Text2.Text = MsComStringData
        MsComStringData = Replace(MsComStringData, Chr(13), "") 'replaces vbCr Carriage Return
                                                                'with null
        DataLines = Split(MsComStringData, Chr(10))  'Split MsComStringData
                                                     'at vbLf  Line Feed
        DataString = Split(DataLines(UBound(DataLines) - 1), ",") 'Split DataLines
                                                                  'at comma
                'for 8  channels MUX output from 4051
                
        If UBound(DataString) < 8 Then   '6 Then  ''for 6 channels
            Exit Sub
        End If
            txt0.Text = DataString(0)
            txt1.Text = DataString(1)
            txt2.Text = DataString(2)
            txt3.Text = DataString(3)
            txt4.Text = DataString(4)
            txt5.Text = DataString(5)
            txt6.Text = DataString(6)
            txt7.Text = DataString(7)
            txtButtonPin.Text = DataString(smiley-cool            
            If txtButtonPin = 1 Then txtButtonPin.BackColor = vbRed
                                                'Button not Pressed
            If txtButtonPin = 0 Then
                txtButtonPin.BackColor = vbWhite 'Button Pressed
                grdTable1.Row = RowCounter

                grdTable1.Col = 0
                grdTable1.Text = txt0.Text
                
                grdTable1.Col = 1
                grdTable1.Text = txt1.Text

               grdTable1.Col = 2
               grdTable1.Text = txt2.Text
                
                grdTable1.Col = 3
                grdTable1.Text = txt3.Text

                grdTable1.Col = 4
                grdTable1.Text = txt4.Text
                
                grdTable1.Col = 5
                grdTable1.Text = txt5.Text

grdTable1.Col = 0
                grdTable1.Text = txt0.Text
                
                grdTable1.Col = 1
                grdTable1.Text = txt1.Text


                RowCounter = RowCounter + 1
                
            End If
        
    End If
End Sub

Private Sub cmdClose_Click()
    MSComm1.PortOpen = False
    Label1.BackColor = vbRed
End Sub

Private Sub cmdExit_Click()
    End
End Sub
Logged

South Africa
Offline Offline
Newbie
*
Karma: 0
Posts: 20
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

The last section of my VB6 Code got scrambled. Here it is again

 If txtButtonPin = 1 Then txtButtonPin.BackColor = vbRed
                                                'Button not Pressed
            If txtButtonPin = 0 Then
                txtButtonPin.BackColor = vbWhite 'Button Pressed

                grdTable1.Row = RowCounter

                grdTable1.Col = 0              
                grdTable1.Text = txt0.Text
                
                grdTable1.Col = 1
                grdTable1.Text = txt1.Text

       grdTable1.Col = 3              
                grdTable1.Text = txt3.Text
                
                grdTable1.Col = 4
                grdTable1.Text = txt4.Text

       grdTable1.Col = 5              
                grdTable1.Text = txt5.Text
                
                grdTable1.Col = 6
                grdTable1.Text = txt6.Text

       grdTable1.Col = 7              
                grdTable1.Text = txt7.Text                
                
                RowCounter = RowCounter + 1
                
            End If
        
    End If
End Sub

Private Sub cmdClose_Click()
    MSComm1.PortOpen = False
    Label1.BackColor = vbRed
End Sub

Private Sub cmdExit_Click()
    End
End Sub
Logged

Global Moderator
Netherlands
Offline Offline
Shannon Member
*****
Karma: 216
Posts: 13663
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Thanx,
Tip: when writing the CSV file you might need to add a time /date column
« Last Edit: December 18, 2010, 06:27:18 am by robtillaart » Logged

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Pages: [1]   Go Up
Jump to: