Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   546 / 839
(#) kapu48 válasza Rober_4 hozzászólására (») Júl 27, 2019 /
 
Ha 8 Bit-es LCDt használnál, az I2C lcd helyett az is jóval gyorsabb lenne!

Sajnos a grafikához és a hang keltéshez kellenek a gyors hardverek!
A hozzászólás módosítva: Júl 27, 2019
(#) Rober_4 válasza kapu48 hozzászólására (») Júl 27, 2019 /
 
A méret nem számít, a sebesség a fontos a loop while ciklusában.
Tehát a sinus(ido, idomax)-al hívom meg, de ő a (sinusfg[ido * 360 / idomax])-t fogja végrehajtani?
Köszönöm a segítséget, ha ez így van pont ott gyorsul ahol kell!
(#) Pulyka válasza KoblogPerGyok hozzászólására (») Júl 27, 2019 /
 
Szia.

Itt, a step down kapcsolási rajzán közösnek tűnik a föld.
Köszi a többieknek is.
A hozzászólás módosítva: Júl 27, 2019
(#) Rober_4 válasza kapu48 hozzászólására (») Júl 27, 2019 /
 
Így is úgy is kell mellé egy nanot tennem, szerintem az fogja megcsinálni a vezérlést...
(#) kapu48 válasza Rober_4 hozzászólására (») Júl 27, 2019 / 1
 
A meghívások maradnak, úgy ahogy eredetileg voltak!

Természetesen megnéztem, hogy itt érdemes gyorsítani.

Mivel így elmaradnak a függvény hívások és a hozzá tartozó verem műveletet, valamivel gyorsabb lesz.
(#) Rober_4 válasza djusee hozzászólására (») Júl 27, 2019 /
 
Köszi, csak úgy hirtelen, hogy nagyjából lehessen érteni miről szól a dolog.
(#) kapu48 válasza Rober_4 hozzászólására (») Júl 27, 2019 /
 
Ez a zene még csak mono, egy csatornás?
(#) Rober_4 válasza kapu48 hozzászólására (») Júl 27, 2019 /
 
Igazából az audio.h 88100-ra állítja a mintavételt, ez stereo*44100. A 100 nem tudom mi mellette, de levettem 50-re, így minha a latency csökkent volna.
Egyébként jól látod a problémát, szerintem én ugyanazt a mono jelet kiszámolom mindkét oldalra, feleslegesen, csak ugye nem kezeltem még ezelőtt buffert, lehet minden második index a jobb és a bal csatorna...
(Ha a felvett zenére gondolsz az igen, csak ugye 4 hang szólal meg egyszerre, és azok különböző burkológörbékkel vannak vezérelve, amik ugye hangerőértékek egész számokban, amik változnak, és van megszorozva velük a jel, így sokszor darabosak, de ami tök vicces a pich görbe, a generátortimemaxhoz adódik hozzá, így a frekvencia változik darabosan, ezért olyan érdekes nyöszörgős, tulajdonképpen hiba hiba hátán... )
A hozzászólás módosítva: Júl 27, 2019
(#) kapu48 válasza Rober_4 hozzászólására (») Júl 27, 2019 /
 
Ha még a DUE mellé akarsz rakni arduinot az nagyon bonyolítaná a rendszeredet!

Szerintem jobban járnál egy ilyen rendszerrel:
Bővebben: Discovery kit with STM32F407VG MCU
Leírás:
[PDF]Discovery kit with STM32F407VG MCU - STMicroelectronics

168MHz-es és már rajta van a hangrendszer is:
6.5 On-board audio capability
The STM32F407VG microcontroller uses an audio DAC (CS43L22) to output sounds through the audio mini-jack connector.
The STM32F407VG microcontroller controls the audio DAC through the I2C interface and processes digital signals through an I2S connection or an analog input signal.
• The sound can come independently from different inputs: – ST-MEMS microphone (MP45DT02): digital using PDM protocol or analog when using the low pass filter – USB connector: from external mass storage such as a USB key, USB HDD, and so on – Internal memory of the STM32F407VG microcontroller • The sound can be output in different ways through the audio DAC: – Using I2S protocol – Using DAC to analog input AIN1x of the CS43L22 – Using the microphone output directly via a low-pass filter to analog input AIN4x of the CS43L22

És arduino alól is lehet programozni.
A hozzászólás módosítva: Júl 27, 2019
(#) kapu48 válasza kapu48 hozzászólására (») Júl 27, 2019 /
 
És ez a DAC jobban szól a 2*24Bit-jével:
Bővebben: DAC CS43L22
(#) Rober_4 válasza kapu48 hozzászólására (») Júl 27, 2019 /
 
Eredetileg egy Arduino Nano-Vs1053 párosítással indultam. Ugye a Nano szkennelte a billentyűzetet, vezérelte a kijelzőt és a midi be és kimeneteket. Viszont a vs1053-nak 3hónap próbálkozás után sem sikerült a DAC-jának pufferét közvetlenül elérnem. Mindig úgy kezdődött a dolog, hogy állítsak össze egy wav fájl fejlécet, majd utána küldözgessem az adatokat. Mindez tök jól hangzik, de nem sikerült megoldanom. Természetesen mp3 fájlokat kiválóan lejátszott sd kártyáról, de még a midi hangeszközt is midi fájlfejléc után lehetett elérni, ami kifejezetten nem lett realtime. Ráadásul ott is a 1053-nak kellett volna számolni a dolgokat... Utána szétnéztem, hogy lehetne-e a vs1053-at közvetlenül felprogramozni, és nagyon jó kis ingyenes program van hozzá, nagyon jó példákkal, csak ugye meg kell venned egy fejlesztőeszközt, hogy feltöltsd rá a mikrokódot, vagy egy ilyet:vs1053devboard
És ekkor döntöttem úgy, hogy olyan eszközt keresek, ahol nem kell olyan dolgokkal foglalkoznom, amivel nem akarok, hanem tulajdonképpen közvetlenül elérhető a DAC pufferja. Így választottam a Due-t
Az általad javasolt eszközön fogalmam sincs, hogy kezdenék hozzá a fejlesztéshez. Tulajdonképpen már múltkor is rákerestem, de még az árát sem találtam meg...
A paraméterei kiválóak egyébként, de félek hasonló problémákba ütköznék mint a legelső esetben...
(#) kapu48 válasza Rober_4 hozzászólására (») Júl 27, 2019 /
 
És mért nem ezt próbáltad?:
Bővebben: VS1053 MP3 Shield

Van hozzá bőven arduino támogatás. És jóval olcsóbb.
A SPI buszon keresztül rávehető MIDI lejátszásra is, és feltölthetők a Pluginek is.
A hozzászólás módosítva: Júl 27, 2019
(#) Rober_4 válasza kapu48 hozzászólására (») Júl 27, 2019 /
 
Ez van. Nem tudom elérni a puffert közvetlenül. Erről írtam. És tulajdonképpen feladtam. Három hónapig azzal vacakoltam, hogy ne mp3-om lejátszó jöjjön ki belőle, de nem sikerült...
A hozzászólás módosítva: Júl 27, 2019
(#) Rober_4 válasza kapu48 hozzászólására (») Júl 27, 2019 /
 
Megcsináltam a #define-t és érezhető a gyorsulás, és ráadásul a sztereó puffer miatt, aminek minden páros illetve páratlan indexei a jobb és a bal csatorna, tulajdonképpen kétszer számoltam ki ugyanazt. Tehát most négyszer annyi oszcillátor szól négy hang polifóniánál, és Audio.begin(88200, 50) beállításnál. Köszönöm nagyon hálás vagyok a segítségért!
(#) djusee válasza Rober_4 hozzászólására (») Júl 27, 2019 /
 
Valami rögtönzött próba zene?Pls
(#) Rober_4 válasza djusee hozzászólására (») Júl 27, 2019 / 1
 
Hát nem tudom engedik-e a modik, de rögtönöztem neked egyet, de ugye nem írtam át az előző hangszínt sokat, mert ugye változókban vannak a paraméterek, de ez már sztereó, és több hullám szól egyszerre, jobb és bal oldalt másképp
A hozzászólás módosítva: Júl 27, 2019
(#) kapu48 válasza Rober_4 hozzászólására (») Júl 27, 2019 /
 
Akkor lenne még gyorsítási tippem.
Ezeket a 4 páros vizsgálatot is össze vonhatod:
  1. if (tvatime1 >= 0) {
  2.         tvatime1++;
  3.       }    
  4. if (tvatime1 >= hangmintahossz) {
  5.         tvatime1 = -1;
  6.       }
  7.  
  8. Igy:
  9.      if ((tvatime1 >= 0) && (tvatime1  < hangmintahossz)) { //Mivel ez a feltétel többször teljesül (a fordító ráadásul már a regiszterben találja a tvatime1 változót)
  10.         tvatime1++;
  11.       }else if (tvatime1 >= hangmintahossz) {// Ezért ezt a vizsgálatot már átugorja. Tehát időt spórolsz.
  12.         tvatime1 = -1;
  13.       }


Ez a zene már sokkal jobb, érződik a streo hatás.
A hozzászólás módosítva: Júl 27, 2019
(#) Rober_4 válasza kapu48 hozzászólására (») Júl 27, 2019 /
 
Köszi! Javítva.
(#) rolandgw válasza Rober_4 hozzászólására (») Júl 27, 2019 / 1
 
Ezeket ajánlom, ha használható szintit szeretnél, jól szólnak.
Bővebben: Link
Bővebben: Link
Bővebben: Link
(#) kapu48 válasza Rober_4 hozzászólására (») Júl 27, 2019 /
 
Idézet:
„Audio.begin(88200, 50)”

Ezzel csak a puffer méretet csökkentetted.
  1. // Audio.cpp
  2. ...
  3. void AudioClass::begin(uint32_t sampleRate, uint32_t msPreBuffer) {
  4.         // Allocate a buffer to keep msPreBuffer milliseconds of audio
  5.         bufferSize = msPreBuffer * sampleRate / 1000;
  6.         if (bufferSize < 1024)
  7.                 bufferSize = 1024;
  8.         buffer = (uint32_t *) malloc(bufferSize * sizeof(uint32_t));
  9.         half = buffer + bufferSize / 2;
  10.         last = buffer + bufferSize;
  11.  
  12.         // Buffering starts from the beginning
  13.         running = buffer;
  14.         next = buffer;
  15.  
  16.         // Start DAC
  17.         dac->begin(VARIANT_MCK / sampleRate);
  18.         dac->setOnTransmitEnd_CB(onTransmitEnd, this);
  19. }
  20. ...
(#) Rober_4 válasza kapu48 hozzászólására (») Júl 28, 2019 /
 
Igen, mert van egy kis késés a reakcióban. Szerintem ezzel gyorsabban reagál a midi inputra, mivel kevesebbet számol ki egyszerre. De lehet tévedek, de érzésre olyan, mérni nem mértem meg. Meg ugye látszik, hogy 1024 alá nem is megy... Viszont ha túl kevésre állítom be, akkor szétesik a hang...
(#) benjami válasza Rober_4 hozzászólására (») Júl 28, 2019 / 2
 
Én sinus táblázat méretnek nem 360-at használnék, hanem 2 egész hatványát, azaz 256, 512, 1024... stb méretet. A táblázat kiolvasásához történő frekvenciától függő lépésköznek pedig egy 32 bites fixpontos számot, ahol az egészeket annyi biten tárolnám, ahány bites a táblázat méretem (pl. 256 elemű esetén 8 bit egész + 24 bit tört, 1024 elemű esetén 10 bit egész + 22 bit tört). Így egyetlen összeadás, egy bit shiftelés és egy táblázat olvasás elegendő lenne egy sinus hullám előállításához, ráadásul a frekvencia értékét is sokkal nagyobb pontossággal lehetne megadni.
(#) Rober_4 válasza benjami hozzászólására (») Júl 28, 2019 /
 
Köszönöm. Én is úgy láttam, hogy a mintaprogramokon is ilyen tömböket használtak. Próbálom megcsinálni!
(#) sargarigo válasza benjami hozzászólására (») Júl 28, 2019 /
 
Ezt a megoldást láttam már adatlapokban is, de nem értettem a lényegét. Így ezzel a levezetéssel már megvilágosodtam! Köszönöm!
A hozzászólás módosítva: Júl 28, 2019
(#) Rober_4 válasza benjami hozzászólására (») Júl 29, 2019 /
 
Nincs rá valami mintád? Nem boldogulok vele.
Már fixpontos típust sem találok, nem hogy mit adjak össze és toljak el...
Segítséged köszönöm!
(#) benjami válasza Rober_4 hozzászólására (») Júl 29, 2019 / 1
 
Semmilyen fixpontos típus nem kell hozzá, egész számokkal kell csak dolgozni. Mindössze értelmezés kérdése, hogy a lenti példán a 10. bit után teszed képzeletben a kettedes pontot:
  1. const int16_t sine1024[] = {0,201, 402, 603, 804,1005 ...};
  2. uint32_t sinewave1ptr = 0;
  3. uint32_t sinewave1freq = 0x40000000; // f = fmintavétel / 4
  4. for(i = 0; i < WAVEBUFFERLENGTH; i++)
  5. {
  6.   wavebuffer[i] = sine1024[sinewave1ptr >> 22];
  7.   sinewave1ptr += sinewave1freq;
  8. }
A hozzászólás módosítva: Júl 29, 2019
(#) kapu48 válasza benjami hozzászólására (») Júl 29, 2019 /
 
Bocsi! De ezt a gondolatmenetet nem igazán értem!

Mi értelme van bonyolítani és a felső 10 Biten dolgozni: [sinewave1ptr >> 22]; ?

Egyszerűbb lenne az index növelést eltolni jobbra:
uint32_t sinewave1freq = 0x40000000 >> 22; // f = fmintavétel / 4

De ezt sem értem, hogyan jött ki ez a szám?: sinewave1freq = 0x40000000
Túl nagynak találom.
(#) benjami válasza kapu48 hozzászólására (») Júl 29, 2019 /
 
Pedig van értelme.
1. Nem kell foglalkozni a sinewave1ptr túlcsordulásával
2. Így lehet a legnagyobb felbontással a frekvenciát megadni
Ez a szám pedig úgy jött ki, hogy minden negyedik összeadás után ki fog nullázódni a sinewave1ptr és így a sinus táblázat elejére fog visszatérni.
(#) Rober_4 válasza benjami hozzászólására (») Júl 30, 2019 /
 
A dolog működik, kezd alakulni, bár még egy kis szépséghibája van...
A frekvencia tényleg sokkal finomabban állítható, mint az én megoldásomon.
Csak azok a tüskék ne lennének

ui: Most nézem azok a max és a min helyek...
A hozzászólás módosítva: Júl 30, 2019

sinus.png
    
(#) Rober_4 válasza Rober_4 hozzászólására (») Júl 30, 2019 /
 
Kicsit túl nagyok az értékek kiszaladtunk az int16-ból. Most már jó. Köszönöm!!!!
Kalibrálhatom újra az egészet
A hozzászólás módosítva: Júl 30, 2019
Következő: »»   546 / 839
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem