Sign In

Trouble Sending A Variable Output Out Of ADC

Remco de Jongh remco.de.jongh@hotmail.nl

Hardware: ATmega328p 16MHZ On Breadboard Software: C Project On Atmel Studio 7.0

i want to send a voltage out of the ADC which i can control with a pot meter but i can't get it to work

Images

Program

/*
 * tekst naar display manier 2.c
 *
 * Created: 24-5-2018 11:14:06
 * Author : 
 */ 

#ifndef F_CPU
#define F_CPU 16000000UL 
#endif 
// libraries toevoegen

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>


uint8_t StatusByte;				// onderstaande bytes:

#define DAQ_KanaalA 0			// tbv selectie kanaal A van DAQ MCP4922
#define DAQ_KanaalB 1			// tbv selectie kanaal B van DAQ MCP4922
#define NotCS 2					// DAQ 4922 CS selected(0) of not selected(1)
#define NotLDAC 1				// DAQ 4922 LDAC output not updated(0) of updated(1)
#define NotAofB 15				// DAQ 4922 knaalA (0) of kanaalB(1)
#define Buf 14					// DAQ 4922 ongebufferd (0) of gebufferd(1)
#define NotGA 13				// DAQ 4922 1xGain(0) of 2xGain(1)
#define NotSHDN 12				// DAQ 4922 active(0) of shutdown(1)
#define ShiftByte 8				// Byte shift

uint16_t Datawrd;						//DAQwoord tbv spi DAQ
uint16_t teller=2;
uint16_t zendwaarde;


void spi_init_master (void)
// Stel de SPI poort in als master tbv oa. de DAC
// Geen parameters nodig
{
	// Zet MOSI, SCK, SS en LDAC als uitgang
	DDRB=(1<<PB5)|(1<<PB3)|(1<<PB2)|(1<<PB1);
	PORTB |= (1<<NotCS)|(1<<NotLDAC);  //Maak CS en LDAC initieel hoog;
	
	// Configureer de SPI voor communicatie met de DAC
	// Enable SPI, stel als Master in;
	// Prescaler: Fosc/16;
	//The MOSI, SCK en CS pins zoals default van de ATMega328:
	SPCR=(1<<SPE)|(1<<MSTR)|(1<<SPR0);
}


unsigned char spi_tranceiver (uint8_t data)
// Deze routine wordt opgeroepen in routine Zend_naar_DAQ. Beter niet zelfstandig gebruiken.
// Deze routine stuurt de controle/datawaarden (byte) naar de DAC via SPI.
// De pre-parameter is de te versturen data, post-parameter heeft geen toepassing in dit programma
{
	SPDR = data;                       //Schrijf de gewenste data naar het zendregister, zenden van byte start
	while(!(SPSR & (1<<SPIF) ));       //Wacht totdat de zenden van de data klaar is
	{;}
	return(SPDR);                      //Ontvang de data-byte van de externe SPI module (bij de dac doen we hier niets mee)
}

void Zend_naar_DAQ(uint16_t Analog_value, uint16_t Kanaal)
// Deze routine voert de volledige stappen uit om een waarde (uint8_t) te sturen naar de DAC. Hij gebruikt routine spi_tranceiver.
// De pre_parameters zijn de analoge 8bits waarde , de tweede pre-parameter is op het gewenste kanaal van de DAC te kiezen,
// er zijn twee analoge output kanalen. Deze routine heeft geen post-parameter.
{
	uint8_t dummy;	//tijdelijke variabelen om compiler error te voorkomen
	
	//zend twee bytes voor het activeren van een analoge waarde op de DAQ
	DDRC= (1<<PC5);
	Datawrd |= (Kanaal<<NotAofB)|(1<<NotGA)|(1<<NotSHDN)|(Analog_value & 0x0FFF);  //controle bits DAC instellen
	PORTB &= ~(1<<NotCS);						//CS laag maken
	
	//verstuur MSByte DAQwoord
	dummy=spi_tranceiver((Datawrd >> ShiftByte));  //bit 15 t/m 8
	//verstuur LSByte DAQwoord
	dummy = spi_tranceiver(Datawrd & 0xFF);		//bit7 t/m 0
	// Analoge waarde op de geselecteerde uitgang van de DAQ
	PORTB |= (1<<NotCS);						//CS hoog
	Datawrd=0;
}


// kanaal 5 uitlezen
uint8_t Kanaal5uitlezen(void)
{
	ADMUX &= 0xF0;
	ADMUX |= (1<<MUX0) | (1<<MUX2);
	// met deze regel maak ik van kanaal 5 een ingang, door mux0 en mux2 hoog te maken
	ADCSRA |= (1<<ADSC);
	while (ADCSRA & (1<<ADSC))
	{
		;
	}
	return (ADCH);
}


////////////////////////////////////////////////////////////////
int main(void)
{
	
	spi_init_master();
	

	while (1) 
    {
		utoa(((Kanaal5uitlezen()/51)*819))
		
		
		
	
		Zend_naar_DAQ (Kanaal5uitlezen(),DAQ_KanaalA); //zend tellerwaarde naar output DAC
		
	}
}
/////////////////////////////////////////////////////////////////////////
	

Post a reply to Remco de Jongh

Think you can help Remco de Jongh ? Then post your thoughts that might help Remco de Jongh. You will earn a lot of reputation in the technical community.

If your program is in multiple files, then ZIP the entire folder and attach below

Images and Screenshots

These helps other better understand your suggestion.