13-01-2017, 18:53
Witajcie,
Mam problem który nie wiem jak ugryźć. Potrzebuję za pośrednictwem UNO spróbkować sygnał analogowy o częstotliwości ok 50Hz i wysłać dane do komputera, by odczytać to np w Matlabie, czy tam napisać program w Pythonie.
Widziałem w internecie różne projekty jak ludzi wykorzystywali arduino do prostego oscyloskopu, więc pomyślałem że Uno da radę.
Jednakże pomimo różnych supportów i API nie jestem w stanie przetworzyć sygnału oscylującego szybciej niż 5Hz. Co jest mega dziwne.
Po wielu bojach z kilkoma platformami wczoraj wpadłem na tzw. Kreślarkę w Arduino IDE. Tam odziwo okazało się że wszystko działa poprawnie, i mogę przetworzyć ładnego sinusa nawet o f=300Hz.
Czy macie może pomysł co może być nie tak, i czemu to tak nie chce działać?
Powyżej kod którego używam z "Kreślarką" przy najwyższej wydajności. Zmieniony prescaler, i max baudrate. Natomiast do Matlaba używam oficjalnego "support package for arduino".
Byłbym wdzięczny za jakiekolwiek wskazówki, ponieważ muszę to szybko ogarnąć :/
Mam problem który nie wiem jak ugryźć. Potrzebuję za pośrednictwem UNO spróbkować sygnał analogowy o częstotliwości ok 50Hz i wysłać dane do komputera, by odczytać to np w Matlabie, czy tam napisać program w Pythonie.
Widziałem w internecie różne projekty jak ludzi wykorzystywali arduino do prostego oscyloskopu, więc pomyślałem że Uno da radę.
Jednakże pomimo różnych supportów i API nie jestem w stanie przetworzyć sygnału oscylującego szybciej niż 5Hz. Co jest mega dziwne.
Po wielu bojach z kilkoma platformami wczoraj wpadłem na tzw. Kreślarkę w Arduino IDE. Tam odziwo okazało się że wszystko działa poprawnie, i mogę przetworzyć ładnego sinusa nawet o f=300Hz.
Czy macie może pomysł co może być nie tak, i czemu to tak nie chce działać?
Kod:
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
void setup() {
// initialize the serial communication:
sbi(ADCSRA,ADPS2) ;
cbi(ADCSRA,ADPS1) ;
cbi(ADCSRA,ADPS0) ;
Serial.begin(250000);
}
void loop() {
// send the value of analog input 0:
Serial.println(analogRead(A0));
// wait a bit for the analog-to-digital converter
// to stabilize after the last reading:
//delay(1);
}
Powyżej kod którego używam z "Kreślarką" przy najwyższej wydajności. Zmieniony prescaler, i max baudrate. Natomiast do Matlaba używam oficjalnego "support package for arduino".
Byłbym wdzięczny za jakiekolwiek wskazówki, ponieważ muszę to szybko ogarnąć :/