Portál AbcLinuxu, 1. května 2025 05:22
Andruino beru taky jako možnost, ale hledám nejlevnější alternativu a vlastní cestu (neprobádanou + chci se naučit jak to funguje).
Navíc co se týče "programování", tak jen Bash, s Cčkem neumim a nikdy jsem nepochopil jak funguje (ano, jsem barbar).
xoscope
Díky moc, to vypadá přesně jako to, co jsem celou dobu hledal. Ještě něco co by dokázalo číst signál na vstupu a počítat impulzy a bylo by to perfektní
Právě 25-kolíková zástrčka mě docela děsí, protože teď je všude jen ta 9-kolíková
Tak ale na USB můžu připojit rovnou andruino, radši bych něco primitivního, co umí klidně i jen posílat data jedním směrem, ale zato to skoro nic nestojí
Nezapomínám, právě mi jde jen o ty impulzy. Teda, takže přes zvukovku už i posílat sériově data? No, ne že by mě to nenapadlo, ale že na to opravdu existuje i nějaká knihovna.....wow
jen nezapomeňte, že jsou tam kondenzátory a projdou jen impulzy - žádné delší úrovně v 0 nebo 1Menšestr nebo podobná modulace. Tohle nevím v jakém je stavu.
lspci
takto:
00:06.0 Communication controller: NetMos Technology PCI 9815 Multi-I/O Controller (rev 01) Subsystem: LSI Logic / Symbios Logic 2P0S (2 port parallel adaptor) Flags: medium devsel, IRQ 17 I/O ports at d800 [size=8] I/O ports at d400 [size=8] I/O ports at d000 [size=8] I/O ports at c800 [size=8] I/O ports at c400 [size=8] I/O ports at c000 [size=16] Kernel driver in use: parport_pc Kernel modules: parport_pcAdresy, co potřebujeme, jsou ta první a ta třetí v pořadí, v případě pochybností je to neejedoduší to zkusit přímo na hardwaru, nebo nechat jádro natáhnout ovladač a kouknout se, co vypíše:
parport1: PC-style at 0xd800 (0xd400), irq 17, using FIFO [PCSPP,TRISTATE,COMPAT,ECP] parport2: PC-style at 0xd000 (0xc800), irq 17, using FIFO [PCSPP,TRISTATE,COMPAT,ECP]Ty druhé jsou pro EPP/ECP a pro používaní paralelního portu jako GPIO nejsou potřeba. Pokud se nechcete trápit s USB obludkami, je tohle asi nejjednoduší řešení.
Děkuji moc, vypadá to jako moc zajímavá možnost
0x11
a 0x13
), kde XOFF znamená, zjednodušeně řečeno, "Teď nic neposílej, mám plno" a XON "Můžeš zas posílat". Tento protokol používají většinou pomalá zařízení, obzvlášť když komunikují v textovém protokolu. K připojení stačí jen tři vodiče, RX, TX a zem.
Pak je několik variant řízení toku pomocí signálú na řízení modemu, většinou pomocí RTS+CTS (občas i DTR+DSR). Když je zařízení na druhém konci může přijímat, nastaví RTS (Ready To Send), které je připojené k vstupu CTS (Clear To Send) a naopak. Z pohledu aplikace se o to není třeba nijak, stačí to jen zapnout a ovladač udělá zbytek.
Na připojení je třeba pět vodičů, i když teoreticky jde použít k řízení i další signály*. Hlavní výhoda je možnost použít vyšší rychlosti (než, řekněme, 9 600 baudů) a bezproblémové přenášení binárních dat. A často používaný převodník úrovní TTL<->RS232 MAX232 má právě čtyři vstupy/výstupy, takže na TX+RX+RTS+CTS to přesně stačí.
Nevýhoda je, že různá zařízení to řeší různým způsobem, i když ve většině případu by mělo stačit jen proházet dráty. Tedy alespoň teoreticky ...
*Například jsem viděl popis GPS přijímače, kde jeden signál indikoval 2D/3D fix (tj. získání polohy) a druhý posílal sekundové pulzy.
/* Generovani sinusovky */ /* Autor: Vaclav Svirga */ /* (tedy az na nastaveni zvukovky, to uz nevim z jakeho tutorialu sem vykrad) */ /* DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE Version 2, December 2004 Copyright (C) 2004 Sam Hocevar <sam@hocevar.net> Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed. DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. You just DO WHAT THE FUCK YOU WANT TO. */ #include <unistd.h> #include <fcntl.h> #include <sys/types.h> #include <sys/ioctl.h> #include <stdlib.h> #include <stdio.h> #include <linux/soundcard.h> #include <math.h> //Uzivatelske konstanty #define D_AMP 128 //defaultni amplituda (0 - 128, vyssi amplitudy se orezou) #define D_FREQ 440 //defaultni frekvence (Hz) #define D_TIME -1 //defaultni delka hrani (v sekundach) //klidne to muze byt desetinne cislo, ale nejmensi casovy usek je //delka jedne periody sinu * (N + 10), kde N je pocet period //aby se to presne vlezlo do poctu vzorku (aby sinusovka navazovala) //Pro NEKONECNO jde zadat -1 //Nejake interni konstanty, nemenit az na vzorkovaci frekvenci #define RATE 48000 // the sampling rate #define SIZE 8 // sample size: 8 or 16 bits - jen pro nastaveni zvukovky */ #define CHANNELS 1 // 1 = mono 2 = stereo - jen pro nastaveni zvukovky #define LENGTH 20 //max delka bufferu v sekundach unsigned char buf[LENGTH*RATE*SIZE*CHANNELS/8]; //jednosekundovy buffer //Pomocna funkce pro vytvoreni sinu s patricnou amplitudou ve stupnich //x je uhel, a je |amplituda|, nula sinusovky je ve 128 //Pri amplitude 128 se pro kladnou cast dela amplituda 127, aby se vysledek vesel na 8 bitu // tedy je sinus nesymetricky //Pri vyssich amplitudach se sinus orezava na 8 bitu int sinus(int x, int a) { if (a==0) return 0; x %= 360; int ret = sin((M_PI * 2.0 * x) / 360.0) * ((x<= 180 && a == 128) ? 127 : a) + 128; if(ret > 255) ret = 255; if(ret < 0) ret = 0; return ret; } int main(int argc, char *argv[]) { //Nejaka magie pro otevreni zvukovky int fd; /* sound device file descriptor */ int arg; /* argument for ioctl calls */ int status; /* return status of system calls */ /* open sound device */ fd = open("/dev/dsp", O_RDWR); if (fd < 0) { perror("open of /dev/dsp failed"); exit(1); } /* set sampling parameters */ arg = SIZE; /* sample size */ status = ioctl(fd, SOUND_PCM_WRITE_BITS, &arg); if (status == -1) perror("SOUND_PCM_WRITE_BITS ioctl failed"); if (arg != SIZE) perror("unable to set sample size"); arg = CHANNELS; /* mono or stereo */ status = ioctl(fd, SOUND_PCM_WRITE_CHANNELS, &arg); if (status == -1) perror("SOUND_PCM_WRITE_CHANNELS ioctl failed"); if (arg != CHANNELS) perror("unable to set number of channels"); arg = RATE; /* sampling rate */ status = ioctl(fd, SOUND_PCM_WRITE_RATE, &arg); if (status == -1) perror("SOUND_PCM_WRITE_WRITE ioctl failed"); //nacteni parametru int f = D_FREQ, amp = D_AMP, i; float time = D_TIME; if (argc > 1) f = atoi(argv[1]); if (argc > 2) amp = atoi(argv[2]); if (argc > 3) time = atof(argv[3]); printf("Hrani sinusovky na /dev/dsp\n" "Pokud vam to nehraje, nebo chcete softwarovy mixer, zkuste to pustit s aoss ./program\n\n" "Frekvence je: %6i Hz \t(mozne zadat jako 1. arg)\n" "Amplituda je: %6i \t(mozne zadat jako 2. arg, idealne 0 - 128, vyssi amp se orezou, 128 je 127 pro kladnou cast)\n" "Delka hrani je: %3.3f s\t(mozne zadat jako 3. arg (i des. cislo), -1 je nekonecno)\n", f, amp, time); if(f <= 0 || amp < 0) exit(1); //Spocitame kolik amplitud sinusovky se nam PRESNE vleze do vzorkovaci frekvence + 10 //Je to nutne proto, aby sinusovky hezky navazovaly na sebe a buffer nebyl prilis kratky //Pokud by se to nesplnilo, nemuselo by to hrat pekne ;] int count_amp = 10; while ((RATE * count_amp) % (f) != 0) count_amp++; //Spocitame delku vsech amplitud ve vzorcich int size_amps = (RATE * count_amp) / (f); int s; //vygenerujeme buffer se vzorky sinu for (i = 0; i < size_amps + 1; i++) { s = sinus((360.0 * count_amp * i) / size_amps, amp); buf[i] = s > 255 ? 255 : s; } //zahrajeme sinusovku :) float remain = (RATE * time) / size_amps - (int) ((RATE * time) / size_amps); //budeme prehravat buffer tak dlouho, aby jsme hrali pozadovany cas for(i = 0; time < 0 ? 1 : i < (int) ((RATE * time) / size_amps); i++) { status = write(fd, buf, size_amps); } //A nakonec prehrajeme zbytek do pozadovaneho casu, nalezite osekly status = write(fd, buf, size_amps * remain); }Přeložíš to takhle: gcc -lm -o program program.c a pustis treba takhle: ./program (bude hrat porad komorni a pri amplitude 128) nebo ./program 200 10 0.5 (pul sekundy 200 Hz pri amplitude 10) nebo ./program 200 10 -1 (nekonecne dlouho 200 Hz pri amplitude 10). Zbytek informaci je v komentarich a napovede co to vypise pri spusteni...
//vygenerujeme buffer se vzorky sinu for (i = 0; i < size_amps; i++) { buf[i] = sinus((360.0 * count_amp * i) / size_amps, amp); }Ale funguje to stejne
Teda, díky moc za vlákno příspěvků, určitě se to bude hodit I když spíš koukám po sox, i tak - bude se mi to hodit minimálně v případě, kdybych se učil programovat v C
Pochopeno správně Snažím se použít naprosto nejjednodušší principy, jestli se k tomu jednou dokopu, tak to pojede jednovláknově a pokudmožno chci aby všechno šlo zrealizovat v Bashi. A proč to dělám? Protože můžu
A protože neumim s C
Děkuji, obecně analog bych pořád cpal kamkoli to jde, asi je to můj osud
Děkuju moc za hromadu linků, rychle jsem na to kouknul a zaujalo mě to Hlavně programování Andruina přes zvukovku
Jestli někdy programovat mikročipy, tak chci jít rozhodně do AVR
IMG099.jpgŽádnej průběh nevidím, ale máte hezkej vchod do baráku
Žádnej průběh nevidím, ale máte hezkej vchod do barákuNo jo. Debilní lesklé obrazovky. To nahoře je waveform, ten Gauss je okno a to pod tím je spektrogram. Čím víc vpravo, tím vyšší frekvence a osa směrem dolů je čas. Původně to byly skoro schodky, proto tolik čar za sebou i ve vyšších frekvencích (jsou to harmonické).
Jinak pozor, mám za to, že jsem si spekrálním analyzérem ze zvukovky odpálil zvukovku.Musíš kontrolovat kolik ti tam leze energie. Dobré jsou takové ty trafa co se dají šroubovákem přizpůsobit.
To nahoře je waveform, ten Gauss je okno a to pod tím je spektrogram. Čím víc vpravo, tím vyšší frekvence a osa směrem dolů je čas. Původně to byly skoro schodky, proto tolik čar za sebou i ve vyšších frekvencích (jsou to harmonické).Stačí napsat Baudline to mluví samo za sebe
No já jsem jen sondoval přijímač FSK 868MHz s napětím 5V maxNa to už bude potřeba nějaká elektronika, že? Já to zkoušel jen na jednoduchý R-C filtr.
Mám cca 2 roky, má COM, LPT přes bracket (za stovku) a GamePort leda kdybych se postavil na hlavu, stáhnul všechnu dokumentaci k desce, připájel konektor a napsal si ovladač.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.