Help - Multiple driver message

Status
Not open for further replies.

manush30

Member level 1
Joined
Jul 14, 2016
Messages
33
Helped
0
Reputation
0
Reaction score
0
Trophy points
6
Activity points
340
Hi all,

I try to compile this code but i get


pls someone can help me?

the code:

Code:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
USE IEEE.STD_LOGIC_ARITH.ALL;

ENTITY VALVE_1TO3 IS
  PORT( 
		CLK1M  		: IN  STD_LOGIC; 
		RESET  		: IN  STD_LOGIC;
		CLK1HZ      : IN  STD_LOGIC;
		SW_ACT	 	: IN  STD_LOGIC; --- ACTIVATE THE SYSTEM
		SW_CAL		: IN  STD_LOGIC; --- ACTIVATE THE SYSTEM
		SW_RST	    : IN  STD_LOGIC;
		PB	        : IN  STD_LOGIC;
		A2D_CALC 	: IN  STD_LOGIC_VECTOR(11 DOWNTO 0);
		-- CART1	 	: IN  STD_LOGIC_VECTOR(11 DOWNTO 0); ------- Xweight
		-- CART2		: IN  STD_LOGIC_VECTOR(11 DOWNTO 0); ------- Yweight
		-- CART3		: IN  STD_LOGIC_VECTOR(11 DOWNTO 0); ------- Zweight
		-- TRAY			: IN  STD_LOGIC_VECTOR(11 DOWNTO 0);
		-- FULL_TRAY	: IN  STD_LOGIC_VECTOR(11 DOWNTO 0);
		LEDS_IND    : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
		VALVE 		: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
		PUMP     	: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); --- 2-0 BIT FOR ACTIVATE THE PUMPS
END VALVE_1TO3;

ARCHITECTURE ARC_VALVE_1TO3 OF VALVE_1TO3 IS


COMPONENT LC_CAL IS
  PORT( 
		CLK1M     	 : IN  STD_LOGIC; 
		RESET	     : IN  STD_LOGIC;
		SW_CAL		 : IN  STD_LOGIC; --- ACTIVATE THE SYSTEM
		SW_RST	 	 : IN  STD_LOGIC;
		PB			 : IN  STD_LOGIC;
		CLK1HZ  	 : IN  STD_LOGIC;
		CH0_A2D		 : IN  STD_LOGIC_VECTOR(11 DOWNTO 0);
		LEDS_REG	 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
		CART1		 : OUT STD_LOGIC_VECTOR(11 DOWNTO 0);
		CART2	 	 : OUT STD_LOGIC_VECTOR(11 DOWNTO 0);
		CART3		 : OUT STD_LOGIC_VECTOR(11 DOWNTO 0);
		TRAY_O		 : OUT STD_LOGIC_VECTOR(11 DOWNTO 0);
		FULL_TRAY_O  : OUT  STD_LOGIC_VECTOR(11 DOWNTO 0));
END COMPONENT;


TYPE    STATE IS(IDLE, VALVE1, FIRST, VALVE2, SECOND ,VALVE3, THIRD);
SIGNAL  NS			:  STATE;   
SIGNAL  CLK_1kHZ_O  :  STD_LOGIC; 
SIGNAL	CLK_1kHZ   	:  STD_LOGIC;
SIGNAL	FLAG   	    :  STD_LOGIC;
SIGNAL	TOTAL		:  STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL	CART1_B		:  STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL	CART2_B		:  STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL	CART3_B		:  STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL	TRAY		:  STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL	FULL_TRAY	:  STD_LOGIC_VECTOR(11 DOWNTO 0);


 BEGIN
 
 CALIBRATION: LC_CAL PORT MAP (
		CLK1M	 =>	CLK1M  ,  	
		CLK1HZ   =>	CLK1HZ,
		RESET	 => RESET,
		SW_CAL	 =>	SW_CAL,
		SW_RST	 => SW_RST,
		PB		 => PB,
		CH0_A2D	 =>	A2D_CALC,
		CART1	 => CART1_B,
		CART2	 => CART2_B,
		CART3	 => CART3_B,
		TRAY_O	 => TRAY,
		LEDS_REG =>	LEDS_IND,
		FULL_TRAY_O=> FULL_TRAY	
		 );
		 
 -- GENERATING 1kHz CLOCK FOR VALVE DELAY PULSE AND ACTIVATE PUMP--
		 
 PROCESS(CLK1M,RESET)
	VARIABLE COUNTER : INTEGER RANGE 0 TO 500;
BEGIN	
	IF RESET='0' THEN   	
	   COUNTER := 0;
	ELSIF (CLK1M'EVENT and CLK1M= '1') THEN 
	   IF COUNTER = 500 THEN 
		  CLK_1kHZ  <= NOT(CLK_1kHZ);
	  	  COUNTER  := 0;
	   ELSE
          COUNTER := COUNTER + 1;
   	   END IF;
	END IF;
END PROCESS;


---STATE MACHINE FOR ACTIVATE THE PUMPS 
PROCESS (RESET, CLK_1kHZ)
	VARIABLE  VALVE_DLY 	  :  INTEGER RANGE 0 TO 100  ; 	
	BEGIN
		IF (RESET='0')  THEN
			
			VALVE_DLY  :=  0   ;
			FLAG	  <=  '0'  ;
			NS     	  <= IDLE  ;
			PUMP	  <= "0000";
			VALVE	  <= "0000";
			-- CART1_B	  <= CART1 ;
			-- CART2_B	  <= CART2 ;
			-- CART3_B	  <= CART3 ;
			-- TOTAL	  <= FULL_TRAY ;
		ELSIF (CLK_1kHZ'EVENT AND CLK_1kHZ='1') THEN	
		 
			
			CASE NS IS
			WHEN IDLE =>
				PUMP <= "0000";
				
				IF (SW_ACT='1') THEN
					FLAG 	  <=   '0'  ;
					PUMP      <= "0001";
					VALVE	  <= "0000";--- START POSITION
					NS <= VALVE1;
				END IF;
			WHEN VALVE1 =>
					IF (SW_ACT='1') THEN --- SWITCH1 ACTIVATE AND PAUSE THE SYSTEM
						IF (FLAG='0') THEN 
							IF (VALVE_DLY < 100) THEN
								VALVE   <= "1010";
								VALVE_DLY := VALVE_DLY + 1;
							ELSE
								FLAG <= '1';
								VALVE 	  <= "0000" ;
								VALVE_DLY :=   0    ;
								NS		  <=  FIRST;
							END IF;
						END IF;	
					ELSE
						NS   <= VALVE1;
					END IF;
					
	--------------------CALCULATING THE FIRST CONTAINER TO BE EMPTY. TRYING TO GET: TOTAL = TRAY + Y + Z - 120g ------------------
			WHEN FIRST =>
					IF (SW_ACT='1')THEN
						IF (CART1_B <= X"14") THEN ------ IF THE FIRST CONTAINER EMPTY
							PUMP <=  "0001";
							--TOTAL <= A2D_CALC;
							FLAG  <=   '0'  ;
							TOTAL <= CART2_B + CART3_B + TRAY + CART1_B; ----- IN THIS STATE CART1_B VALUE BETWEEN X"00" TO X"14"
							NS    <= VALVE2 ;
						ELSE 
							PUMP 	<= "1001";
							CART1_B	<= A2D_CALC;
							NS   	<= FIRST ;
						END IF;
					ELSE
						PUMP <= "0000";
					END IF;
									
		------------- SWITCHING THE NEXT CONTAINER ---------------	
			WHEN VALVE2 =>
					IF (SW_ACT='1') THEN 
						IF (FLAG='0') THEN 
							IF (VALVE_DLY < 100) THEN
								VALVE   <= "0101";
								VALVE_DLY := VALVE_DLY + 1;
							ELSE
								FLAG <= '1';
								VALVE 	  <= "0000" ;
								VALVE_DLY :=   0    ;
								NS		  <=  SECOND;
							END IF;
						END IF;	
					ELSE
						NS   <= VALVE2;
					END IF;
	
	--------------------CALCULATING THE SECOND CONTAINER TO BE EMPTY. TRYING TO GET: TOTAL = TRAY + Y + 240g ------------------
			WHEN SECOND => 
					IF (SW_ACT='1')THEN 
						IF (CART2_B <= X"14") THEN 
							PUMP  <=  "0001";
							FLAG  <=   '0'  ;
							TOTAL <=  CART3_B + TRAY + CART1_B + CART2_B;
							NS    <= VALVE3 ;
						ELSE 
							PUMP 	<= "0101";
							CART2_B	<= A2D_CALC;
							NS   	<= SECOND ;
						END IF;
					ELSE
						PUMP <= "0000";
					END IF;
					
					
			WHEN VALVE3 =>
					IF (SW_ACT='1') THEN
						IF (FLAG='0') THEN
							IF (VALVE_DLY < 100) THEN
								VALVE   <= "0110";
								VALVE_DLY := VALVE_DLY + 1;
							ELSE
								FLAG <= '1';
								VALVE 	  <= "0000";
								VALVE_DLY :=   0   ;
								NS		  <=  THIRD;
							END IF;
						END IF;	
					ELSE
						NS   <= VALVE3;
					END IF;
		--------------------CALCULATING THE SECOND CONTAINER TO BE EMPTY. TRYING TO GET: TOTAL = TRAY + Y + 240g ------------------			
			WHEN THIRD => 
					IF (SW_ACT='1')THEN 
						IF (CART2_B <= X"14") THEN 
							PUMP <=  "0001";
							FLAG <=   '0'  ;
							TOTAL <=  TRAY + CART1_B + CART2_B + CART3_B;
							NS   <= IDLE ;
						ELSE 
							PUMP 	<= "0011";
							CART2_B	<= A2D_CALC;
							NS   	<= THIRD ;
						END IF;	
					ELSE
						PUMP <= "0000";
					END IF;
			END CASE;
			END IF;	
		--END IF;
	END PROCESS;
	
	-- FULL_TRAY <= TOTAL ;
END ARC_VALVE_1TO3;



Thx alot!!!!:sad::sad::smile::smile:
 

You are driving CART1_B and CART2_B by the instance LC_CAL and the process, you commented out the assignments in the reset branch but left the assignments in later branches.
 

Thx a lot.

still, uncomment the lines u mantioned under the reset branch and get a new message:

"No identifier "cart1" in scope"

cart (1..3) are 3 containers want to sample their weight by load cell through 12bit ADC.
The LC_CAL component needs to calibrate all the measurements and save them to registers.
Now, the valve_1to3 needs to switch between the 3 cartridges by measured the CART1 till it get to 120g( 14h or 20dec a2d).
CART1 need to be the value of the container, and CART1_B need to be sampled every time till the container < or = to 14h.

The calibration i wrote, work very good but the problem is the switching.

Thx u all!
 

In regards to the error
"No identifier "cart1" in scope"
As you haven't supplied updated code nor did you supply the LC_CAL code don't know if you changed something and broke your code.

If you need to "switch" between stuff use a mux.
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…