forum.mcontrollers.com - hlavní stránka forum.mcontrollers.com - fórum

 

.: fórum - hlavní stránka :.
Technology Stronghold by Rudolf Vesely
How to build Microsoft System Center hosted cloud series
FAQFAQ HledatHledat Seznam uživatelůSeznam uživatelů Uživatelské skupinyUživatelské skupiny RegistraceRegistrace
ProfilProfil StatistikaStatistika Soukromé zprávySoukromé zprávy PřihlášeníPřihlášení

 
Texas Instruments ADS1191 - problém s programovaním cez AVR

 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> AVR
 
violator
Nováček
Nováček


Založen: 3.1.2015
Příspěvky: 1

PříspěvekZaslal: 04 leden 2015, 17:37    Předmět: Texas Instruments ADS1191 - problém s programovaním cez AVR Citovat

Ahojte,

mám problém so získavaním testovacích signálov z tohto EKG čipu. Zapisovanie do registrov funguje v pohode, ale pri snahe o získavanie korektných dát mi posiela späť chybné dáta.

Na programovanie spomínaného čipu využívam ATmega328p a AVR Dragon programér + Atmel Studio 6.0.

Ak by mi niekto vedel poradiť kde môže byť chyba budem mu veľmi vďačný Wink
kód:

/*
 * Simplified_first_time.c
 *
 * Created: 18. 12. 2014 18:28:00
 *  Author: Kubo
 */

#include <avr/io.h>
#include <util/delay.h>
#include "spi.h"

//init PINs
#define MOSI_PIN   3
#define MISO_PIN    4
#define SCK_PIN      5
#define SS_PIN      2
#define RESET_PIN   6
#define DRDY_PIN   7
#define START_PIN   0

//ADS1191 SPI commands
#define ADS_CMD_WAKEUP     0x02
#define ADS_CMD_STANDBY     0x04
#define ADS_CMD_RESET     0x06
#define ADS_CMD_START     0x08
#define ADS_CMD_STOP     0x0A
#define ADS_CMD_OFFSETCAL 0x1A
//read commands
#define ADS_CMD_RDATAC     0x10
#define ADS_CMD_SDATAC     0x11
#define ADS_CMD_RDATA     0x12
//register commands
#define ADS_CMD_RREG     0x20
#define ADS_CMD_WREG     0x40

//ADS1191 command macros
#define ADS_wakeup()   ADS_spi_send(ADS_CMD_WAKEUP)
#define ADS_standby()   ADS_spi_send(ADS_CMD_STANDBY)
#define ADS_reset()       ADS_spi_send(ADS_CMD_RESET)
#define ADS_start()       ADS_spi_send(ADS_CMD_START)
#define ADS_stop()       ADS_spi_send(ADS_CMD_STOP)
#define ADS_offsetcal()   ADS_spi_send(ADS_CMD_OFFSETCAL)
#define ADS_rdatac()   ADS_spi_send(ADS_CMD_RDATAC)
#define ADS_sdatac()   ADS_spi_send(ADS_CMD_SDATAC)
#define ADS_rdata()       ADS_spi_send(ADS_CMD_RDATA)

//ADS1194 register addresses
#define ADS_REG_ID          0x00
#define ADS_REG_CONFIG1      0x01
#define ADS_REG_CONFIG2      0x02
#define ADS_REG_LOFF        0x03
#define ADS_REG_CH1SET      0x04
#define ADS_REG_CH2SET      0x05
#define ADS_REG_RLD_SENS    0x06
#define ADS_REG_LOFF_SENS   0x07
#define ADS_REG_LOFF_STAT   0x08
#define ADS_REG_MISC1       0x09
#define ADS_REG_MISC2       0x0A
#define ADS_REG_GPIO        0x0B


//functions

void ADS_CSelect()
{
   PORTB &= ~(1<<SS_PIN);
}

void ADS_de_CSelect()
{
   PORTB|= (1<<SS_PIN);
}


uint8_t ADS_read_register(uint8_t address){
   //spi_send(0x20 | (address&0x1F));
   //ADS_CSelect();
   spi_send(0x20 | address);
   spi_send(0x00);
   uint8_t ret = spi_send(0xff);
   //ADS_de_CSelect();
   return ret;
}

void ADS_write_register(uint8_t address, uint8_t value){
   spi_send(0x40 | (address&0x1F));
   spi_send(0x00);
   spi_send(value);
}

uint8_t ADS_spi_send(uint8_t data){
   //ADS_CSelect();
   uint8_t ret = spi_send(data);
   //ADS_de_CSelect();
   return ret;
}

void USART_Init()
{
   UCSR0B=(1<<RXEN0)|(1<<TXEN0); // enable USART Receiver and Transmitter
   UCSR0C=(1<<UCSZ00)|(1<<UCSZ01); // set 8-bit form of data to receive and transmit + 1 stop bit
   UBRR0=0; //0.5 MBaudov pri Fosc=8MHz 
}
void USART_Transmit(unsigned int data)
{
   //while((UCSR0A&(1<<UDRE0)) == 0b00100000 alebo 32=2^5) ako v IFe vysledky 2 - true or false, NETREBA PORROVNAVAT!!!
   while(!(UCSR0A&(1<<UDRE0))) // kym bude 0- caka kym sa nevyprazdni buffer, akonahle 1 - buffer je prazdny
   {
   }
   UDR0=data; // okamžite odošle
}

void ADS_Init()
{
   spi_init();
   ADS_de_CSelect();
   PORTB &= ~(1<<RESET_PIN);
   for (int k=0;k<10;k++)
   {
      _delay_ms(100);             //RESET=1 for 1s
   }
   PORTB |= (1<<RESET_PIN); //POWERDOWN
   _delay_ms(1);
   PORTB &= ~(1<<RESET_PIN);
   _delay_ms(1);
   PORTB |= (1<<RESET_PIN);
   _delay_ms(7);
   
   ADS_CSelect();
   ADS_sdatac();
   
   _delay_ms(1);
}


int main(void)
{

   ADS_Init();
   
   ADS_write_register(ADS_REG_CONFIG1,0x02);
   ADS_write_register(ADS_REG_CONFIG2,0xA3);
   ADS_write_register(ADS_REG_CH1SET,0x05);
   ADS_write_register(ADS_REG_CH2SET,0x05);
   ADS_write_register(ADS_REG_MISC1,0x02);
   ADS_write_register(ADS_REG_MISC2,0x82);
   ADS_offsetcal();
   _delay_ms(1);
   ADS_de_CSelect();
   _delay_ms(5);
   ADS_CSelect();
   ADS_stop();
   _delay_ms(5);
   ADS_sdatac();
   _delay_ms(5);
   ADS_de_CSelect();
   //_delay_ms(5);
   //PORTB |= (1<<START_PIN);
   //ADS_start();
   _delay_ms(5);
   //ADS_CSelect(); 
   PORTB |= (1<<START_PIN);
   _delay_ms(10);
   ADS_CSelect();
   //ADS_rdata();
   ADS_rdatac();
   _delay_ms(3); 
   ADS_de_CSelect();
   for (int k=0;k<10;k++)
   {
      _delay_ms(100);             
   }
   ADS_CSelect();
   _delay_ms(3); 
   //while(!(PORTB&(1<<DRDY_PIN)))
   //{
      
      
      uint8_t Status1 = ADS_spi_send(0xff);
      uint8_t Status2 = ADS_spi_send(0xff);
      uint8_t MSB_CH1 = ADS_spi_send(0xff);
      uint8_t LSB_CH1 = ADS_spi_send(0xff);
      uint8_t MSB_CH2 = ADS_spi_send(0xff);
      uint8_t LSB_CH2 = ADS_spi_send(0xff);
      //uint8_t MSB_CH3 = ADS_spi_send(0xff);
      //uint8_t LSB_CH3 = ADS_spi_send(0xff);
   //}
   _delay_ms(1);
   ADS_sdatac();
   //ADS_stop();
   _delay_ms(5);
   ADS_de_CSelect();
   //ADS_read_register(ADS_REG_CH2SET);
   PORTC=0;
   
    while(1)
    {   
   
    }
}


Díky moc Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

Zobrazit příspěvky z předchozích:   
Zobrazit předchozí téma :: Zobrazit následující téma  
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> AVR Časy uváděny v GMT + 2 hodiny
 
Strana 1 z 1
Přejdi na:  
Můžete přidat nové téma do tohoto fóra.
Můžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Můžete k příspěvkům připojovat soubory
Můžete stahovat a prohlížet přiložené soubory
 



Num Lock Holder - app to hold Numlock
Copyright © 2017 Rudolf Veselý, mcontrollers.com.
Je zakázáno používat části tohoto webu bez souhlasu autora. || Powered by phpBB © 2001, 2002 phpBB Group - with RedSquare DoubleJ(Jan Jaap)