יום רביעי, 29 ביוני 2011

תוכנה להפעלת AD0804

        rd equ P1.0           ;Read signal P1.0
        wr equ P1.1           ;Write signal P1.1
        cs equ P1.2           ;Chip Select P1.2
        intr equ P1.3         ;INTR signal P1.3

        adc_port equ P2       ;ADC data pins P2
        adc_val equ 30H       ;ADC read value stored here

        org 100H
start:                    ;Start of Program
        acall conv            ;Start ADC conversion
        acall read            ;Read converted value
        mov P3,adc_val        ;Move the value to Port 3
        sjmp start            ;Do it again

conv:                     ;Start of Conversion
        clr cs                ;Make CS low
        clr wr                ;Make WR Low
        nop
        setb wr               ;Make WR High
        setb cs               ;Make CS high
wait:
        jb intr,wait          ;Wait for INTR signal
        ret                   ;Conversion done

read:                     ;Read ADC value
        clr cs                ;Make CS Low
        clr rd                ;Make RD Low
        mov a,adc_port        ;Read the converted value
        mov adc_val,a         ;Store it in local variable
        setb rd               ;Make RD High
        setb cs               ;Make CS High
        ret                   ;Reading done
----------------------------------------------------------------------------------
#include <REG89X51.H>
#define adc_port P2              //ADC Port
#define rd P1_0                  //Read signal P1.0
#define wr P1_1                  //Write signal P1.1
#define cs P1_2                  //Chip Select P1.2
#define intr P1_3                //INTR signal P1.3

void conv();                     //Start of conversion function
void read();                     //Read ADC function

unsigned char adc_val;

void main(){
        while(1){                    //Forever loop
                conv();                  //Start conversion
                read();                  //Read ADC
                P3 = adc_val;            //Send the read value to P3
        }
}

void conv(){
        cs = 0;                      //Make CS low
        wr = 0;                      //Make WR low
        wr = 1;                      //Make WR high
        cs = 1;                      //Make CS high
        while(intr);                 //Wait for INTR to go low
}

void read(){
        cs = 0;                      //Make CS low
        rd = 0;                      //Make RD low
        adc_val = adc_port;          //Read ADC port
        rd = 1;                      //Make RD high
        cs = 1;                      //Make CS high
}

חיבור ממיר AD0804 למעבד 80X51

AD0804 הוא ממיר מתח אנלוגי לדיגיטלי הפשוט ביותר. זה המעגל ואופן חיבור.

תזמון של מערכת:

מנגנון עבודה מחולק לשני חלקים: חלק ראשון - לפני קריאת תוצאות, חלק שני אחרי.
חלק ראשון:
  1. Make chip select (CS) signal low.
  2. Make write (WR) signal low.
  3. Make chip select (CS) high.
  4. Wait for INTR pin to go low (means conversion ends).
חלק שני:
  1. Make chip select (CS) pin low.
  2. Make read (RD) signal low.
  3. Read the data from port where ADC is connected.
  4. Make read (RD) signal high.
  5. Make chip select (CS) high.


יום שלישי, 28 ביוני 2011

תכנות מנוע צד בשפת C ושפת אסמבלי.

Programming Full step Sequence (90 degrees)
#include <REG89c51.H>.
#define stepper P1
void delay();

void main(){
        while(1){
                stepper = 0x0C;
                delay();
                stepper = 0x06;
                delay();
                stepper = 0x03;
                delay();
                stepper = 0x09;
                delay();
        }
}

void delay(){
        unsigned char i,j,k;
        for(i=0;i<6;i++)
                for(j=0;j<255;j++)
                        for(k=0;k<255;k++);
}
------------------------------------------------
org 100H

stepper equ P1

main:
        mov stepper, #0CH
        acall delay
        mov stepper, #06H
        acall delay
        mov stepper, #03H
        acall delay
        mov stepper, #09H
        acall delay
        sjmp main

delay:
        mov r7,#4
wait2:
        mov r6,#0FFH
wait1:
        mov r5,#0FFH
wait:
        djnz r5,wait
        djnz r6,wait1
        djnz r7,wait2
        ret
        end
-------------------------------------------------------
 
-------------------------------------
Programming Half step Sequence (45 degrees)
void main(){
        while(1){
                stepper = 0x08;
                delay();
                stepper = 0x0C;
                delay();
                stepper = 0x04;
                delay();
                stepper = 0x06;
                delay();
                stepper = 0x02;
                delay();
                stepper = 0x03;
                delay();
                stepper = 0x01;
                delay();
                stepper = 0x09;
                delay();
        }
}
----------------------------------
main:
        mov stepper, #08H
        acall delay
        mov stepper, #0CH
        acall delay
        mov stepper, #04H
        acall delay
        mov stepper, #06H
        acall delay
        mov stepper, #02H
        acall delay
        mov stepper, #03H
        acall delay
        mov stepper, #01H
        acall delay
        mov stepper, #09H
        acall delay
        sjmp main
-----------------------------
 
----------------------------------------------
Programming for 2-wire connection of Unipolar Stepper Motor
void main(){
        while(1){
                stepper = 0x03;
                delay();
                stepper = 0x01;
                delay();
                stepper = 0x00;
                delay();
                stepper = 0x02;
                delay();
        }
}
-------------------------------
main:
        mov stepper, #03H
        acall delay
        mov stepper, #01H
        acall delay
        mov stepper, #00H
        acall delay
        mov stepper, #02H
        acall delay
        sjmp main
--------------------------------------------
----------------------------------------------------------
Programming for Bipolar Stepper Motor
void main(){
        while(1){
                stepper = 0x08;
                delay();
                stepper = 0x02;
                delay();
                stepper = 0x04;
                delay();
                stepper = 0x01;
                delay();
        }
}
---------------------------------
main:
        mov stepper, #08H
        acall delay
        mov stepper, #02H
        acall delay
        mov stepper, #04H
        acall delay
        mov stepper, #01H
        acall delay
        sjmp main
---------------------------------