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   532 / 839
(#) proba válasza D_Zsolt hozzászólására (») Máj 18, 2019 /
 
Nem értem pontosan mit akarsz, de erre valók lennének a könyvtárak. Azt meg letöltesz, egyet kizippeled abban van minta, a lényeg a .cpp meg a .h file. Az ino meg ezeket fogja össze.
A hozzászólás módosítva: Máj 18, 2019
(#) D_Zsolt válasza proba hozzászólására (») Máj 18, 2019 /
 
Rossz helyre linkeltem, egyel alá kellett volna, de mindegy is.
A keretrendszer adta lehetőséggel élve .ino fájlokat kapok, nem .c, .cpp vagy .h-t és a miértekre keresném a választ, de hagyjuk! Értem én, hogy könyvtárak, de ezt az életben nem fogom máshol használni, úgy gondoltam, hogy ha nem szabályos (a félresikerült válaszom előtt lévő hozzászólásban hangzott el (kapu48#'2264684')), hogy .ino-nak hívják, akkor van valami egyéb út, de akkor majd hagyom a fájl alján ami már tutira megy és nem darabolok!
(#) ronin75 válasza D_Zsolt hozzászólására (») Máj 18, 2019 /
 
Ha jól értem amit szeretnél, ámde lehet, hogy butaságot írok, de nekem a múltkor úgy volt, hogy nem volt komplett lib fájlom a kódhoz, hanem csak .c vagy .h. A könytárak menünél van olyan, hogy fájl hozzáadása (talán), ekkor az aktiv ino mellé egy másik fülre odatette a .c/.h fájt, egy ablakon belül.
Ezután, ha kiüríted a .c fájlt és beleteszed a tiéd, akkor szerintem menni fog.
(#) D_Zsolt válasza ronin75 hozzászólására (») Máj 18, 2019 / 1
 
Nem egészen erre gondoltam.
(#) kapu48 válasza D_Zsolt hozzászólására (») Máj 19, 2019 /
 
Nem értem mért vagy fen akadva a szabályok feszegetésén?

Nem szabályok vannak, hanem ésszerű és hasznos elhatározások, bevett szokások.
Amit magadnak kel kitalálnod, eldöntened.

Pl.: Van egy készüléked, amit többször is használni akarsz, akkor annak a programját külön állományba rakod. Így könnyebben tudod majd átvinni másik alkalmazásba.
Vagy ha már túl nagyra nőt a programod, és nehezen találod meg az éppen érdeklő részletet?
Akkor is részekre bonthatod, általában valami nagyobb témát pl.: grafikus alkalmazás,
vagy bármit, ami egybe tartozik. Külön rakhatod, és jól megadod állomány név esetén, tudni fogod, hogy mit hól keressél.

Arról pedig, hogy mikor legyen C vagy Cpp a kiterjesztés könyveket lehet írni, és ezt már nagyon sokan megírták. Neked csak elkellene olvasni valamelyiket!
Már ha tényleg érdekel a téma?

És ha már szétbontod több részre, akkor kel a: *.h, abba teszed az olyan változókat deklarációkat,
Amiket több helyen is használni akarsz. És az adott állományba be includolhatod.
A hozzászólás módosítva: Máj 19, 2019
(#) kapu48 válasza D_Zsolt hozzászólására (») Máj 19, 2019 /
 
És mindennek úgy tudod hasznát venni, hogy szerkesztéskór több ablakot megnyitsz.
Nálam pl. 2 monitor van, és arduinot többet is megnyitok egymás mellé, külön lapokkal.
A fő képernyőn van a szerkeszthető rész a többit külső szerkesztőre állítom, így azok követik a változásokat, és csak keresésre használom őket.

Még szerkesztéskór nagyon hasznos alkalmazás a Programers Notepad!
(#) D_Zsolt válasza kapu48 hozzászólására (») Máj 19, 2019 /
 
Itt ez volt a lényeg, hogy ezt kb. soha az életben nem használnám máshol (háttérkép generálás, specifikusan ehez az egyhez), de c-ként nem tudom kezelni (illetve lehetne ha az include-okat is abba írnám gondolom, de sehol nem láttam ilyen példát még), míg ino-ként ment. Amit máshol is használnék, már kiraktam lib-be, volt bajom, de megvan, értem is (hellyel-közzel), hogy mit hová és miért. Azt nem értettem, hogy miért kell egyetlen ino-nak lennie és a keret miért generál mégis automatán ino kiterjesztést neki (megértettem amikor írtad, hogy egy későbbi verzió talán le sem fogja fordítani úgy, ezért kerestem egy szabványosabb utat), de írtam is, hogy hagyom a fájl végén inkább, hogy ne legyen ezer+1 ino egy projektben. Nincs ezzel gondom, csak néha következetlennek gondolom, mivel az ino fájlokat besorolja automatán és nem kell kétszer includolni semmit. (a háttérkép generálásnál is használ lcd-re írást és a főprogramom is ír az lcd-re). Itt megint az van, hogy nagyra nőtt és az alja/teteje között tekergetve néha fonalat vesztettem, hogy hol járok. Most azt tettem, hogy amit leteszteltem és működik, a fájl végére tolom és így csak 1db ino kiterjesztéssel dolgozom.
Attól, hogy fenn vagyok akadva a szabályokon, nem azt jelenti, hogy nem akarom alkalmazni őket, hanem érteni is szeretném! Van 3 gyerekem, egynek se adtam a kezébe egy könyvet, hogy olvasd végig, ott a megoldás benne, hanem igyekeztem egy közelítő támpontot adni, hogy a 3.fejezet első felében leírja! Qt-n is programozok ezt-azt, ott nem kérdéses a fájlkiterjesztés és működnek is amit írok! Az ino-val vagyok csak bajban, mert ez csak egy kitalált kiterjesztés egy c/cpp-nek. De amint írtam, nem gáz, a fájl végén hagyom, mert ezt a programrészt sosem fogom máshol használni! Amit igen azt már kiraktam belőle.
A hozzászólás módosítva: Máj 19, 2019
(#) D_Zsolt válasza kapu48 hozzászólására (») Máj 19, 2019 /
 
Erről küldhetnél egy képernyőképet (esetleg privátban ha nem ide való)! Sosem programoztam hivatásszerűen, csak mókából, de mostanában egyre többet Könnyíteném az életem ahol lehet!
(#) kapu48 válasza D_Zsolt hozzászólására (») Máj 19, 2019 / 1
 
Baloldalon a szerkeszthető változat, középen csak keresésre van valamelyik választható állomány, ha éppen több is van.
Jobb oldalon a harmadik ablak a második monitoron, Notepad amiben általában valamelyik éppen használt külső lib állományai vannak, akár több is egymás alatt.
A hozzászólás módosítva: Máj 19, 2019
(#) kapu48 válasza kapu48 hozzászólására (») Máj 19, 2019 /
 
Most, ha valahol szerkeszted valamelyik állományt, és azt elmented.

Akkor a középső külső szerkesztésre állított arduinoban minden javítás frissítésre kerül.
És végezhetsz próbafordítást. Siker esetén akár fel is töltheted a programod, ellenőrzés képen.

Viszont a baloldali arduino nem követi, ha például a notepadban szerkesztesz és mentesz valamit.
Ezért erre odakel figyelni!
A hozzászólás módosítva: Máj 19, 2019
(#) Kari55 hozzászólása Máj 22, 2019 /
 
Sziasztok!

Próba panelen összeállítottam Ezt a kapcsolást, de nem tudom mit csinálok rosszul, mert nekem nem úgy jelennek meg a karakterek mint a videón.
Csináltam képet hogy mire gondolok:

az óránál az idő és a kettőspont mintha el lenne csúszva jobbra.
(#) KoblogPerGyok válasza Kari55 hozzászólására (») Máj 22, 2019 /
 
Helló!

Az 1098. sortól kezdődően nézd ezt meg:

  1. //blinking dots on display
  2.  
  3.                 //I have to draw "dots" during draw symbol. In other case it's blinking.
  4.  
  5.                 //Better variant would update symbol before draw - before FOR structure. Maybe in next version
  6.  
  7.                 if (adr == 2 && dotStyle > 0){
  8.  
  9.                         //colon
  10.  
  11.                         if (i == 1) lc.setLed(adr, 1, 7, showDots);  //addr, row, column
  12.  
  13.                         if (i == 2) lc.setLed(adr, 2, 7, showDots);
  14.  
  15.                         if (i == 5) lc.setLed(adr, 5, 7, showDots);
  16.  
  17.                         if (i == 6) lc.setLed(adr, 6, 7, showDots);
  18.  
  19.                 }


A sor az ok, de a column-t nem értem miért 7. Az változtatná a villogó pontok helyét. Elvileg ha az egész LED modul 1 egységként van kezelve akkor csak azt a 7-t kell átírnod. Azonban szerintem a mátrix több elemből áll, ezért kell bele az address (adr változó). Ha igaz, akkor hibás címet kap, azaz nem a megfelelő alegység címét kapja meg. Soha nem dolgoztam ilyennel, próbálgass. Elsőként írd át 1-re, majd kettőre, háromra, stb. ezt a hetest. Így vándorolni fog. Ha végigment a kis egységen, akkor a címet is lehet változtatni.

Ez a függvény megkapja az add változót. Itt az if ben add==2 van. Esetleg ezt is átírhatnád próbaképpen pl 3-ra. Ha nem ez a gond, akkor ami ezt hívja meg, az rossz címet ad át.
(#) Kari55 válasza KoblogPerGyok hozzászólására (») Máj 22, 2019 /
 
Köszönöm a segítséget, holnap el játszadozom vele, ma már káprázik a szemem.
(#) asrock hozzászólása Máj 22, 2019 /
 
Valaki tud valuta váltó megoldást ami megbízható is?
Bővebben: Link
Minta példa sem működik pedig van net az átjárón ahová csatlakozik !
ezel panaszkodik
  1. Getting ticker data for bitcoin
  2. Error getting data: Failed to parse JSON
  3. ---------------------------------
  4. ---------------------------------
  5. Getting ticker data for ethereum
  6. Error getting data: Failed to parse JSON
  7. ---------------------------------
  8. ---------------------------------
  9. Getting ticker data for dogecoin
  10. Error getting data: Failed to parse JSON
(#) Kari55 válasza KoblogPerGyok hozzászólására (») Máj 23, 2019 /
 
  1. //blinking dots on display
  2.                 //I have to draw "dots" during draw symbol. In other case it's blinking.
  3.                 //Better variant would update symbol before draw - before FOR structure. Maybe in next version
  4.                 if (adr == 2 && dotStyle > 0){
  5.                         if (i == 1) lc.setLed(2, 1, 0, showDots);  //addr, row, column
  6.                         if (i == 2) lc.setLed(2, 2, 0, showDots);
  7.                         if (i == 5) lc.setLed(2, 5, 0, showDots);
  8.                         if (i == 6) lc.setLed(2, 6, 0, showDots);
  9.                 }
  10.                
  11.                 if (adr == 2 && systemState == 0 && showDateNow) {
  12.                         if (i == 5) lc.setLed(2, 5, 0, true);
  13.                         if (i == 6) lc.setLed(2, 6, 0, true);
  14.                 }

Jó reggelt, sikerült beállítani a segítségeddel.
A nullák voltak a nyerők.
Köszönöm még egyszer.
(#) icserny válasza KoblogPerGyok hozzászólására (») Máj 23, 2019 /
 
Szerintem nem a 7-essel van a gond, inkább az adr kiválasztással!

4 db 8x8-as LED mátrix van felfűzve, s ezek sorszáma 0, 1, 2, 3
a sorok és az oszlopok sorszáma pedig 0..7 lehet.

A programban az lc.setLed() függvényhívásnál az oszlop sorszáma azért 7, mert a második számjegy 7-es sorszámú (valójában nyolcadik) oszlopában kell megjeleníteni a kettőspontot.

Most úgy néz ki, hogy a mátrix sorszámozása nem jó, tehát én az
  1. if (adr == 2 && dotStyle > 0){

sort próbálnám megváltoztatni, hogy 2 helyett 1 legyen.

Az 1109. sorban is van egy hasonlós sor, ott is módosítani kell.

Már csak az a kérdés, hogy ha a kettőspont rossz helyre kerül, akkor a számok nem fordított sorrendben jelennek meg?
(#) Vacok hozzászólása Máj 23, 2019 /
 
Sziasztok!
Egy kis segítségre lenne szükségem, már hetek óta próbálok egy használható programot írni egy mikrokontroller vezérelt elektronikus gyújtáshoz, ami egy egyhengeres kétütemű motoron működne.
Dióhéjban a program működése: Egy hall érzékelő figyeli a főtengely állását. Amint az érzékelő jelet ad (attachInterrupt) elindítja a Timer1 számlálót majd a következő jelre a számláló alapján tárolt microseconds értéket eltárolja a periodTime tárolóban ami tulajdonképpen az egy fordulat alatt eltelt időt jelenti us mértékegységben, nullázza a microseconds tárolót és minden fordulatnál újra méri az egy fordulatnyi időt. Ez adja az alapját a loop()-ban lévő függvényeknek és a mikrokontroller kiszámolja, hogy mikor kell indítani a trafó töltését majd az áramkör megszakítását, a szikra adást. A trafó áramkörének zárását és nyitását egy ISR megszakításban lévő függvények végzik a microseconds és a lopp()-ban kiszámolt gyújtási idők alapján.
A probléma az, hogy az egy fordulatnyi időt úgy gondolom, jól méri (soros portot nem tudok használni), de mégsem ad minden fordulatnál gyújtást és nagyon lassan dolgozik a 16MHz órajel ellenére. Több utat is kipróbáltam, akkor is ez van, ha a trafó áramkör zárás és nyitás a loop()-ban van és egy megszakításban a micros() függvény segítségével mérem az egy fordulatnyi idő.
Esetleg valakinek van valami ötlete, hogy mit ronthatok el mindegy módszernél?
Előre is köszönöm a segítséget!

  1. //Processzoros gyújtás és előgyújtás vezérlés attiny45/85 mikrokontrollerrel
  2. //órajel: 16MHz belső PLL
  3.  
  4. //attiny45/85 kivezetéseinek beállítása:
  5. const byte HallPin1 = 2;    // Hall érzékelő bemenet
  6. const byte IgnOnPin = 1;    // Gyújtás engedélyezés
  7. const byte Ign1Pin = 0;     // Gyújtás kimenet (gyújtótrafó)
  8. const byte PowerLed = 4;    // Zöld led (power led)
  9. const byte ControllLed = 3; // Piros led
  10.  
  11. volatile unsigned long ignitionTime; // Szikra adás ideje (us), fordulatszám függő
  12. volatile unsigned int crankingDwellTime; // Gyújtótrafó töltlsi ideje motorindításkor
  13. volatile long int microseconds; // us számláló
  14. volatile long int periodTime; // Egy fordulat alatt eltelt idő (us)
  15. volatile int runningDwellTime; // Gyújtótrafó töltlsi ideje a motor járásakor
  16. volatile int dwellTime; // Gyújtótrafó töltési ideje
  17. volatile byte IgnOn; // gyújtás engedélyezése
  18. /***********************************************************************/
  19. void setup() {
  20.  
  21. pinMode(Ign1Pin, OUTPUT); // Gyújtás -- kimenet
  22. pinMode(PowerLed, OUTPUT); // Zöld led -- kimenet
  23. pinMode(ControllLed, OUTPUT); // Piros led -- kimenet
  24. pinMode(HallPin1, INPUT); // Hall érzékelő -- bemenet
  25. pinMode(IgnOnPin, INPUT); // Gyújtás engedélyezés -- bemenet
  26.  
  27. digitalWrite(HallPin1, HIGH); // Hall érzékelő bemenet H szintre állítás
  28. digitalWrite(IgnOnPin, HIGH); // Gyújtás engedélyezés bemenet H szintre állítás
  29. digitalWrite(Ign1Pin, LOW); //Gyújtótrafó kikapcsolás
  30. digitalWrite(PowerLed, HIGH); //Zöld led bekapcsolás
  31. digitalWrite(ControllLed, LOW); //Piros led kikapcsolás
  32.  
  33. attachInterrupt(0, SensorOn, FALLING); // Hall érzékelőre beállított megszakítás
  34.  
  35. crankingDwellTime = 4000; //Gyújtótrafó töltlsi ideje motorindításkor
  36. runningDwellTime = 3000; //Gyújtótrafó töltlsi ideje a motor járásakor
  37. periodTime = 0;
  38.  
  39. /**********Timer1 beállítás*************/
  40. noInterrupts(); //Összes megszakítás felfüggesztése
  41. TCCR1 = 0; // Timer1 Control regiszter kikapcsolása
  42. TCNT1 = 0; // Timer1 számláló nullázása
  43. GTCCR |= (1 << PSR1); // Órajel osztás visszaállítás
  44. TCCR1 |= (1 << CTC1); // CTC mód beállítás
  45. TIMSK |= (1 << OCIE1A); // Compare match megszakítás beállítás
  46. OCR1A = 8; // 64-es órajel osztás esetén 1 órajel 4us, megszakításnál 4us*8=32us (kb. 5100RPM esetén 32us = 1 fok elfordulás).
  47. OCR1C = 8; // Compare match megszakítás esetén Timer1 újraindítása és nullázása, ha TCNT1 = 8
  48. microseconds = 0; // us számláló nullázása
  49. interrupts(); // Megszakítások engedélyezése
  50. }
  51. //========================================================================
  52. /*Megszakítás függvény a hall érzékelő jelére: Timer1 elindul és a microseconds tároló értéke minden ISR megszakításnál 32us-mal nő.
  53. ********************************/
  54. void SensorOn () {
  55.  
  56. if (IgnOn == HIGH){ //Ha az engedélyezés bemenet H szinten van lefut az alábbi függvény, van gyújtás
  57.                     //engedélyezés L szint esetén nincs gyújtás
  58. periodTime = microseconds; // A főtengely egy fordulat alatt eltelt idő mérése
  59. TCNT1 = 0; // Timer1 nullázás
  60. microseconds = 0; // us számláló nullázás
  61. TCCR1 |= ((1 << CS12)|(1 << CS11)|(1 << CS10)); // 64-es órajel osztás beállítás és Timer1 indítás
  62.  
  63. // Motorindításkor (rpm < 300), a gyújtótrafó azonnal elkezd tölteni
  64. if ((periodTime>200000)||(periodTime==0)) {
  65. digitalWrite(Ign1Pin, LOW); // Gyújtótrafó bekapcsolása
  66. digitalWrite(ControllLed, HIGH); // Piros led bekapcsolása
  67. dwellTime = crankingDwellTime; //Gyaújtótrafó töltési ideje = Gyújtótrafó töltlsi ideje motorindításkor
  68. ignitionTime = 0; //Szikra adás ideje nullára állítva
  69. }
  70. // A motor járásakor (rpm >= 300),  tekercs az előző fordulatból származó adatok alapján fog tolteni és gyújtani.
  71. if ((periodTime<=200000)&&(periodTime!=0)){
  72. dwellTime = runningDwellTime; //Gyaújtótrafó töltési ideje = Gyújtótrafó töltlsi ideje a motor járásakor
  73. }
  74. }
  75. }
  76. /*=============================================================================
  77. Timer1 megszakítás függvény minden alkalommal végrehajtódik, amikor a TCNT1 eléri az OCR1A és OCR1C értékét (32uS)*/
  78. ISR(TIMER1_COMPA_vect) {
  79.  
  80. microseconds=microseconds+32; // microseconds értéke minden alkalommal 32-vel nő, amikor az ISR végrehajtódik
  81.  
  82. /************ gyújtótrafó töltés*****************************/
  83. if ((microseconds >= ignitionTime-dwellTime) && (microseconds < ignitionTime)) {
  84.  
  85. digitalWrite(Ign1Pin, HIGH); //Gyújtótrafó bekapcsolása
  86. }
  87. /***********Szikraadás*******************************************/
  88. //Amikor a microseconds értéke eléri az ignitionTime értékét a gyújtótrafó áramköre megszakad és szikrát ad
  89. if (microseconds >=ignitionTime) {
  90. digitalWrite(Ign1Pin, LOW); //Gyújtótrafó kikapcsolása (áramkör megszakítása)
  91. digitalWrite(ControllLed, LOW); //Piros led kikapcsolása
  92. // _________________________________________________________________________________________________________
  93. if (microseconds > 200000) { //Motorindításnál vagy ha a motor áll a Timer1 leállítása és nullázása
  94. TCCR1 &= ~((1 << CS12)|(1 << CS11)|(1 << CS10)); //Órajel osztó nullázása és Timer1 leállítása
  95. TCNT1 = 0; //Timer1 számláló nullázása
  96. microseconds = 0; // us számláló nullázása
  97. }
  98. }
  99. }
  100.  
  101. /***********************************************************/
  102. void loop() {
  103.  
  104. IgnOn = digitalRead(IgnOnPin); //Gyújtás engedélyezés bemenet beolvasása
  105.  
  106. //Előgyújtás görbe
  107. //A következő számok egy excell tábla alapján lettek kiszámolva, egy előre meghatározott görbe alapján.
  108.  
  109.    if (periodTime > 283019){ //előgyújtás 0-5 fok, ha RPM<212
  110.     ignitionTime = (0.9962*periodTime)-2847;
  111.    }
  112.    if ((periodTime > 67114) && (periodTime <= 283019)){ //előgyújtás 5-16,65 fok, ha 894>RPM>=212
  113.     ignitionTime = (0.9829*periodTime)-1955;
  114.    }
  115.    if ((periodTime > 37360) && (periodTime <= 67114)){ //előgyújtás 16,65-25 fok, ha 1606>RPM>=894
  116.     ignitionTime = (0.9609*periodTime)-1135.3;
  117.    }
  118.    if ((periodTime > 25641) && (periodTime <= 37360)){ //előgyújtás 25-30 fok, ha 2340>RPM>=1606
  119.     ignitionTime = (0.9413*periodTime)-631.31;
  120.    }
  121.    if ((periodTime > 20000) && (periodTime <= 25641)){ //előgyújtás 30-32,5 fok, ha 3000>RPM>=2340
  122.     ignitionTime = (0.9252*periodTime)-309.52;
  123.    }
  124.    if ((periodTime > 16216) && (periodTime <= 20000)){ //előgyújtás 32,5-33,8 fok, ha 3700>RPM>=3000
  125.     ignitionTime = (0.9123*periodTime)-100;
  126.    }
  127.    if ((periodTime > 12766) && (periodTime <= 16216)){ //előgyújtás 33,8-34,4 fok, ha 4700>RPM>=3700
  128.     ignitionTime = (0.9004*periodTime)+52.083;
  129.    }
  130.    if ((periodTime > 10909) && (periodTime <= 12766)){ //előgyújtás 34,4-34,15 fok, ha 5500>RPM>=4700
  131.     ignitionTime = (0.8922*periodTime)+141.67;
  132.    }
  133.    if ((periodTime > 9231) && (periodTime <= 10909)){ //előgyújtás 34,15-33,3 fok, ha 6500>RPM>=5500
  134.     ignitionTime = (0,8858*periodTime)+200;
  135.    }
  136.    if ((periodTime > 8000) && (periodTime <= 9231)){ //előgyújtás 33,3-32,1 fok, ha 7500>RPM>=6500
  137.     ignitionTime = (0.8837*periodTime)+216.67;
  138.    }
  139.    if (periodTime <= 8000){ //előgyújtás 32,1-30,5 fok, ha RPM>=7500
  140.     ignitionTime = (0.9003*periodTime)+100;
  141.    }
  142. }
A hozzászólás módosítva: Máj 23, 2019
(#) mateatek válasza Vacok hozzászólására (») Máj 23, 2019 /
 
Én a hall érzékelő jelét a maximum előgyújtásra állítanám. Jön a megszakításkérés, majd a megszakításban történik a várakozás. Minél alacsonyabb a fordulat, annál többet. Max fordulaton rögtön csattan a szikra. A megszakításon kívül pedig számíthatod a fordulatszámot.
(#) KoblogPerGyok válasza icserny hozzászólására (») Máj 23, 2019 /
 
Igen én is írtam, hogy ha nem megy akkor azt is meg kell nézni. Utolsó sorban erre gondoltam, de tanulok, elfáradok délutánra/estére, olykor nekem sem világos mit írok le!

Illetve sosem kódoltam ilyet, csak belenéztem a kódba.
(#) Vacok válasza mateatek hozzászólására (») Máj 23, 2019 /
 
Most jelenleg úgy próbálom meg összehozni, hogy amikor a dugattyú átfordul a felső holtponton, a hall érzékelő akkor ad jelet és a mikrokontroller számolja az összes többit. A te megoldásod esetén is számolnia kell ugyanezeket, csak éppen van egy 2000-es fordulatszám tartomány, ahol a a hall ic jelére adja a szikrát és a mikrokontrollernek semmi dolga. Ebben az esetben nem állna elő a korábban vázolt probléma?
Nekem inkább az az érzésem van, mintha a kontroller nem tudná megfelelően használni a periodTime tárolóba rögzített fordulat időt.
(#) mateatek válasza Vacok hozzászólására (») Máj 23, 2019 /
 
Én lehet, hogy nem vonnám bele a timert a késleltetésbe. Mint fentebb írtam, a legnagyobb előgyújtásra tenném a hall érzékelő megszakítás jelét és a megszakításban lenne egy for ciklus, ami néhány NOP-ot futtatna. Ahogy lassulna a fordulat, úgy futna egyre többször a for ciklus.
Amire ránéznék, az az lenne, hogy a CTC módban hajtott timer nálam sokszor véletlenszerűen indul. Gondolok itt arra, hogy nem mindig felfutó éllel indul, hanem sokszor lefutóval. (328-nál). Ilyen gondom nem szokott lenni sem fast pwm módban, sem fáziskorrekt pwm módban. A CTC szokott szivatni.
(#) Kovidivi válasza mateatek hozzászólására (») Máj 23, 2019 /
 
Azzal szokott probléma lenni, amikor a váltás előtt változtatod a komparálási értéket, így pont amikor a kimenetnek váltania kellene, nem vált, az új érték miatt pedig kb. dupla olyan hosszú lesz a kimenet állapota, mint lennie kellene. Magától nem csinál butaságot a timer, vagyis én még nem tapasztaltam.
(#) mateatek válasza Kovidivi hozzászólására (») Máj 23, 2019 /
 
Ha egyszerre indítok mondjuk 4 timert, 3 darabot fast pwm módban, 1-et ctc-ben, akkor a fast pwm-ek ugyanúgy szinkronban indulnak, a ctc pedig véletlen szerűen fel, vagy lefutó éllel. Hiába nullázom a létező összes regisztert.
Csináltam egy programot, ami figyeli a ctc-s timer kimenetét. Ha nem ugyanúgy felfutó éllel indul, akkor leállítja és újra indítja. Ritkán elsőre is indul jól. Általában másodszor-harmadszor a jó, de van, hogy kilencszer is nullázni és indítani kell, hogy felfutó éllel induljon.
(#) Kovidivi válasza mateatek hozzászólására (») Máj 23, 2019 /
 
Ilyenről még nem hallottam, de simán lehetséges. Ha a timernek adsz kezdőértéket, akkor is ezt csinálja? A kimenetet váltod (output change), vagy pedig fix állapotot rendelsz hozzá? Arra gondolok, hogy az output change okozhat gondot, nem tudom, hol van eltárolva az előző állapot (ami bekapcsoláskor nem is létezik). De megoldottad a problémát, ez a lényeg!
(#) mateatek válasza Kovidivi hozzászólására (») Máj 23, 2019 /
 
CTC módba, mindkét kimenetet felhasználva ugyanazon frekit kaphatod mindkét kimeneten, de állítható fázisban. Ilyenkor sok esetben még egymáshoz képest is változóan indulnak.
A timernek miként adhatok kezdő értéket? Ezt nem tudom.
(#) Kovidivi válasza mateatek hozzászólására (») Máj 23, 2019 /
 
TCNTx regiszter tárolja az aktuális értéket. Lehet le kell nulláznod mindet, mert indítás után azonnal elkezd számolni, és ha egymás után konfigurálod a timer-eket, az első már máshol tart, mint kellene. Lehet ez a gond?
(#) mateatek válasza Kovidivi hozzászólására (») Máj 23, 2019 /
 
Akkor ez kilőve, mert ezek nullázva vannak.
(#) proba válasza Vacok hozzászólására (») Máj 23, 2019 /
 
Ami észrevételem, a lebegőpontos számítások nagyon lassúak, bár nem tudom mennyire összemérhető az időkkel, de ha mikrosecekről van szó, akkor már számottevőek lehetnek. Ha lehet inkább eltolás összeadás közelítést alkalmaznék. A másik, mi van ha néha téves mérés történik, lehet a mért értékek valamiféle átlagolása, és a nagyon eltérőek szelektálása sem volna hátrányos.
(#) Rober_4 hozzászólása Máj 23, 2019 /
 
Ha nem haragszotok meg, feltölteném ide az eddigi programot, a vs1053-as illetve Arduino Nano kombinációban készített samplerrel, ilyen mentés funkcióból, hogy ne kelljen elölről kezdenem. Nagyjából kommenteztem az elejét, de a program közben nem, mert rohadt zavaró volt... Elvileg 50 program választható, mindegyikhez külön beállítások, illetve mintakönyvtár beállítás, hogy az sd kártyáról honnan töltse be. Programonként állíthatóak a minták eleje, illetve végei, hangszín értéke, a minta sebessége, az "earspeaker" értéke. 50 beállítás menthető a romba. Programváltáskor előhívható. Több különböző logikájú billentyűmód... Beállítható, hogy csak midi kontroller legyen. Akkor csak Midi üzeneteket küld, olyankor gyorsabb a készülék. Még egy két animációszerűség is van benne. Kb 73% memóriát használ. Sajnos vannak gyermekbetegségei, de játéknak jó... A folytatásban valahogy meg kell oldanom, hogy adatokat tudjak olvasni, illetve azokat feldolgozni, visszaírni a vs1053 bufferébe...
(#) djusee válasza Vacok hozzászólására (») Máj 24, 2019 /
 
Szia, a 134. sorban van egy hiba. Tizedes jelnek (,) vesszőt használsz.
Következő: »»   532 / 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