Amplituda rzeczywista jest inna niż w w programie

Tematy związane z LabVIEW pracującym w czasie rzeczywistym.
arturooo
Posty: 7
Rejestracja: 18 lut 2017 14:25
Wersja środowiska: LabVIEW 2016

Amplituda rzeczywista jest inna niż w w programie

Post autor: arturooo » 18 lut 2017 14:37

Zrobiłem(w sensie fizycznym) pulsometr który mierzy puls i wyniki przez bluetooth przesyła do labview. Tam je ilustruje na wykresie jako wykres EKG.
Mam problem z wyrównaniem napięć, tak żeby napiecie które podaje na atmege było tej samej amplitudy (lub jakoś proponcjonalne) co w środowisku.
Np podaje 1,5 V z baterii a na wykresie raz skacze skacze do10, czasem do 8 a innym razem do 80 jednostek, mimo że cały czas podaje napiecei z baterii.
Tu jest kod w atmedze:

Kod: Zaznacz cały

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


void ADC_init();
void USART_Transmit(unsigned int);
void USART_Init(unsigned int);

volatile uint16_t pomiar;
volatile uint16_t licznik = 0;

int main(void)
{
	sei();
	USART_Init(51);   //51 z noty katalogowej dla baud=9600, U2X=0;
	ADC_init();

	while(1)
	{
	}
}


ISR(ADC_vect)
{
	licznik++;
	if(licznik>200)
	{
		pomiar = ADCH;
		USART_Transmit(pomiar);

		licznik = 0;
	}
}

void ADC_init(void)
{
	ADMUX |= (1<<REFS0) | (1<<ADLAR); //napiecie odniesienia VCC,rejestr z wartoscia = ADCH
	ADCSR |= (1<<ADEN) | (1<<ADSC) | (1<<ADFR) | (1<<ADIE); //wlaczenie ADC, start, Free Running, zezwolenie na przerwanie
	ADCSR |= (1<<ADPS0) | (1<<ADPS1) | (1<<ADPS2); //preskaler /128
}

void USART_Transmit(unsigned int data)
{
	while ( !( UCSRA & (1<<UDRE)) );
	UDR = data;
}

void USART_Init(unsigned int baud)
{
	UBRRH = (uint8_t)(baud>>8);
	UBRRL = (uint8_t)baud;

	UCSRB = (1<<RXEN) | (1<<TXEN); //włączenie nadajnika i odbiornika
	UCSRC = (1<<URSEL) | (3<<UCSZ0);  //8 bitów, 1 bit stopu
}
Program labview w załączniku
Załączniki
LabViewPulse.vi
(25.38 KiB) Pobrany 84 razy
Ostatnio zmieniony 18 lut 2017 20:09 przez arturooo, łącznie zmieniany 2 razy.

PiDi
Posty: 624
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice
Has thanked: 3 times
Been thanked: 3 times

Re: Amplituda rzeczywista jest inna niż w w programie

Post autor: PiDi » 18 lut 2017 18:47

Wrzuć załączniki na forum, nie na jakieś zewnętrzne strony (drugi zresztą nie działa).
ObrazekObrazekObrazekObrazek

arturooo
Posty: 7
Rejestracja: 18 lut 2017 14:25
Wersja środowiska: LabVIEW 2016

Amplituda rzeczywista jest inna niż w w programie

Post autor: arturooo » 18 lut 2017 20:09

Poprawione

PiDi
Posty: 624
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice
Has thanked: 3 times
Been thanked: 3 times

Re: Amplituda rzeczywista jest inna niż w w programie

Post autor: PiDi » 20 lut 2017 20:22

Możesz zapisać jeszcze tego VIja do wersji 2015? (w LV: Menu File->Save For Previous Version...).
ObrazekObrazekObrazekObrazek

arturooo
Posty: 7
Rejestracja: 18 lut 2017 14:25
Wersja środowiska: LabVIEW 2016

Re: Amplituda rzeczywista jest inna niż w w programie

Post autor: arturooo » 21 lut 2017 19:02

wersja 2015
Załączniki
LabViewPulse.vi
(20.61 KiB) Pobrany 73 razy

PiDi
Posty: 624
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice
Has thanked: 3 times
Been thanked: 3 times

Re: Amplituda rzeczywista jest inna niż w w programie

Post autor: PiDi » 24 lut 2017 20:10

1. Dlaczego Twoja funkcja USART_Transmit przyjmuje unsigned int? Rejestr UDR ma 1 bajt na TX i 1 bajt na RX, z tego co widzę tutaj choćby: http://maxembedded.com/2013/09/the-usar ... e-avr/#UDR (niżej w tym linku jest też przykład kodu).
2. Wysyłasz bajty, a nie liczby w ASCII - funkcja Decimal String To Number nie będzie tu działać. Użyj String To Byte Array, żeby skonwertować string na właściwe wartości U8.
Ostatnio zmieniony 24 lut 2017 20:10 przez PiDi, łącznie zmieniany 1 raz.
ObrazekObrazekObrazekObrazek

ODPOWIEDZ