Witam.
Chciałbym przerobić wagę łazienkową w taki sposób aby wynik był odczytywany przez atmegę. Jako wzmacniacza użyłem układu INA125
Czy jeżeli układ INA 125 zasilam napięciem 5V to napięcie referencyjne 5 volt nie osiągnie tego poziomu i będzie wynosić 4,48 V z uwagi na zbyt niskie napięcie zasilania?
Cały mój problem jest taki że mostem bez obciążenia daje mi 1,2mV mierzony miernikiem.
Po obciążeniu wagi napięcie spada i dopiero po przekroczeniu obciążenia 27kg napięcie zmienia polaryzację i rośnie w dół.
Co jest przyczyną tego stanu rzeczy?
Czy prawidłowo podłączyłem mostek?
Czy istniej możliwość pozostawienia elektroniki z wagi elektronicznej podpięcie się pod napięcie zasilenie mostka i użycie tego zasilania jako napięcia referencyjne dla atmegi a sygnał z mostka puścić na wzmocnienie na układ INA125?
W wadze mamy cztery czujniki
Górne czujniki mają przewody w kolorze
Lewy Prawy
Zielony, niebieski, żółty. Zielony, niebieski, żółty
Dolne czujniki
Lewy Prawy
Czarny, biały, czerwony Czarny, biały, czerwony
Opory między poszczególnymi przewodami
Czarny Czerwony 1972 i drugim Czujniku między Żółtym i Zielony 1972
Opory między przewodami Czarnym i Białym i Białym i Czerwonym 998
Również w drugim czujniku Żółty i niebieski i Zielony niebieski 998
Przewody połączyłem jak na rysunku.
#define BAUD 19200
#define MYUBRR F_CPU/BAUD/16-1
#include <stdio.h>
#include <avr/io.h>
#include <util/delay.h>
/* Inicjuje port szeregowy AVRa */
void USART_init(unsigned int myubrr)
{
/* Ustala prędkość transmisji */
UBRRH = (unsigned char)(myubrr>>8);
UBRRL = (unsigned char)myubrr;
/* Włącza nadajnika */
UCSRB = (1<<TXEN);
/* Format ramki: 8 bitów danych, 1 bit stopu, brak bitu parzystości */
UCSRC = (1<<URSEL)|(3<<UCSZ0);
}
/* Wysyła znak do portu szeregowego */
static int USART_Transmit(char c, FILE *stream)
{
while(!(UCSRA & (1<<UDRE)));
UDR = c;
return 0;
}
/* Tworzy strumienia danych o nazwie 'mystdout' połączony
z funkcją 'USART_Transmit' */
static FILE mystdout = FDEV_SETUP_STREAM(USART_Transmit, NULL, _FDEV_SETUP_WRITE);
int main(void)
{
/* Inicjalizuje port szeregowy AVRa */
USART_init(MYUBRR);
/* Przekierowuje standardowe wyjście do 'mystdout' */
stdout = &mystdout;
//ADMUX = |_BV(ADLAR) ; // wybierz kanał 0 przetwornika ADC
ADCSRA = (1 <<ADEN) | (1 << ADPS2)| (1 << ADPS1)| (1 << ADPS0);//ADPS = 128zobacz sobie w nocie
//1 << ADPS2) | (1 << ADPS0);
unsigned int adc_value;
printf("Witam Start Programu za 1 sekunde\n\r");
_delay_ms(1000);
printf("Start\n\r");
while(1)
{
ADCSRA |= (1 << ADSC);
// Oczekiwanie, aż konwersja kończy; ADSC = 0 oznacza Kompletna
while (ADCSRA & (1 << ADSC));
adc_value = ADCW;
printf("adc_value %d \r\n", adc_value);
_delay_ms(1000);
//TODO:: Please write your application code
}
}
Chciałbym przerobić wagę łazienkową w taki sposób aby wynik był odczytywany przez atmegę. Jako wzmacniacza użyłem układu INA125
Czy jeżeli układ INA 125 zasilam napięciem 5V to napięcie referencyjne 5 volt nie osiągnie tego poziomu i będzie wynosić 4,48 V z uwagi na zbyt niskie napięcie zasilania?
Cały mój problem jest taki że mostem bez obciążenia daje mi 1,2mV mierzony miernikiem.
Po obciążeniu wagi napięcie spada i dopiero po przekroczeniu obciążenia 27kg napięcie zmienia polaryzację i rośnie w dół.
Co jest przyczyną tego stanu rzeczy?
Czy prawidłowo podłączyłem mostek?
Czy istniej możliwość pozostawienia elektroniki z wagi elektronicznej podpięcie się pod napięcie zasilenie mostka i użycie tego zasilania jako napięcia referencyjne dla atmegi a sygnał z mostka puścić na wzmocnienie na układ INA125?
W wadze mamy cztery czujniki
Górne czujniki mają przewody w kolorze
Lewy Prawy
Zielony, niebieski, żółty. Zielony, niebieski, żółty
Dolne czujniki
Lewy Prawy
Czarny, biały, czerwony Czarny, biały, czerwony
Opory między poszczególnymi przewodami
Czarny Czerwony 1972 i drugim Czujniku między Żółtym i Zielony 1972
Opory między przewodami Czarnym i Białym i Białym i Czerwonym 998
Również w drugim czujniku Żółty i niebieski i Zielony niebieski 998
Przewody połączyłem jak na rysunku.
Kod: text
#define BAUD 19200
#define MYUBRR F_CPU/BAUD/16-1
#include <stdio.h>
#include <avr/io.h>
#include <util/delay.h>
/* Inicjuje port szeregowy AVRa */
void USART_init(unsigned int myubrr)
{
/* Ustala prędkość transmisji */
UBRRH = (unsigned char)(myubrr>>8);
UBRRL = (unsigned char)myubrr;
/* Włącza nadajnika */
UCSRB = (1<<TXEN);
/* Format ramki: 8 bitów danych, 1 bit stopu, brak bitu parzystości */
UCSRC = (1<<URSEL)|(3<<UCSZ0);
}
/* Wysyła znak do portu szeregowego */
static int USART_Transmit(char c, FILE *stream)
{
while(!(UCSRA & (1<<UDRE)));
UDR = c;
return 0;
}
/* Tworzy strumienia danych o nazwie 'mystdout' połączony
z funkcją 'USART_Transmit' */
static FILE mystdout = FDEV_SETUP_STREAM(USART_Transmit, NULL, _FDEV_SETUP_WRITE);
int main(void)
{
/* Inicjalizuje port szeregowy AVRa */
USART_init(MYUBRR);
/* Przekierowuje standardowe wyjście do 'mystdout' */
stdout = &mystdout;
//ADMUX = |_BV(ADLAR) ; // wybierz kanał 0 przetwornika ADC
ADCSRA = (1 <<ADEN) | (1 << ADPS2)| (1 << ADPS1)| (1 << ADPS0);//ADPS = 128zobacz sobie w nocie
//1 << ADPS2) | (1 << ADPS0);
unsigned int adc_value;
printf("Witam Start Programu za 1 sekunde\n\r");
_delay_ms(1000);
printf("Start\n\r");
while(1)
{
ADCSRA |= (1 << ADSC);
// Oczekiwanie, aż konwersja kończy; ADSC = 0 oznacza Kompletna
while (ADCSRA & (1 << ADSC));
adc_value = ADCW;
printf("adc_value %d \r\n", adc_value);
_delay_ms(1000);
//TODO:: Please write your application code
}
}
Kod: text
