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   610 / 838
(#) Massawa válasza asch hozzászólására (») Márc 27, 2020 /
 
Elég jo a TAVIR tanfolyam, én is végigcsináltam az összel. Egy kicsit hiányoltam belöle a praktikusabb dolgokat, de amit tanultam, az mind jo és érthetö volt, csak ajánlani tudom. Ha érdekel szolj privátban elküldhetem a jegyzeteimet ( a könyvet nem láttam).
A YT-bon van németül egy remek vagy 35 részes kurz. A svájci kolléga nagyon érthetöen és szép lassan lépésröl lépésre elmond mindent, söt optimalizálja is a kodokat. Van egy hasonlo amerikai kurz is, annak sajnos az eleje nagyon rosszul zavaroan lett vágva (az kb az elsö 10 lecke), de amit a csávo beszél az nagyon jo és ott rengeteg praktikus applikácio van.
(#) tbarath válasza Massawa hozzászólására (») Márc 27, 2020 /
 
Ez utóbbi érdekelne engem is, ha tudsz valami konkrétabbat mondani róla, ami alapján megtalálom.
(#) Massawa válasza tbarath hozzászólására (») Márc 27, 2020 /
 
Szia

Ebböl a két tanfolyambol illetve a kapcsolodo filmecskékböl rengeteget tanultam az összel ( ágyhoz voltam kötve).

dronebot

Hobbyelektroniker
A hozzászólás módosítva: Márc 27, 2020
(#) Vacok válasza proba hozzászólására (») Márc 27, 2020 /
 
Szia!
A korábban említett ébresztőóránál jelenleg a csipogóval bíbelődök. Sikerült megoldani, hogy a passzív zümmert a Timer1 hajtsa. A probléma csak az, hogy a csipogás időtartama alatt az egyik gomb is aktiválódik.
  1. #define MIN_BUTTON_PIN 11
  2. #define ALARM_BUTTON_PIN 15
  3. #define LED_ALARM_PIN 18
  4. #define BUZZER 10
  5.  
  6. volatile byte astable = 0;
  7. unsigned long previousBeepMillis = 0;
  8. unsigned long beepInterval = 250;
  9. int error_pause = 600;
  10. int error_beep = 250;
  11. boolean tone_state = false;
  12. boolean alarmRinging = false;
  13.  
  14. void setup() {
  15.   pinMode(LED_ALARM_PIN, OUTPUT);
  16.   pinMode(MIN_BUTTON_PIN, INPUT);
  17.   pinMode(BUZZER, OUTPUT);
  18.   pinMode(ALARM_BUTTON_PIN, INPUT);
  19.   digitalWrite(MIN_BUTTON_PIN, HIGH);
  20.   digitalWrite(ALARM_BUTTON_PIN, HIGH);
  21.   digitalWrite(LED_ALARM_PIN, LOW);
  22.  
  23.   // Timer1 beállítás
  24.   TCCR1A = 0;  //TCCR1A regiszter nullázás
  25.   TCCR1B = 0;  //TCCR1B regiszter nullázás
  26.   TIMSK1 |= (1 << OCIE1A);  //compare match interrupt engedélyezés
  27.   TCCR1A |= ((1 << WGM10) | (1 << WGM11));
  28.   TCCR1B |= ((1 << WGM12) | (1 << WGM13));  //fastpwm mód beállítás
  29.   OCR1A = 1025;  //TCNT1 max értéke, ezután újtaindul, mikrovezérlő indulásakor 3900Hz
  30.   TCNT1 = 0;  // Számlálás indítása 0-ról
  31.   //OCR1A = 1025    3900Hz
  32.   //OCR1A = 2000    2000Hz
  33.   //OCR1A = 1509    2650Hz
  34.   //OCR1A = 1000    4000Hz
  35.   //OCR1A = 889     4500Hz
  36. }
  37.  
  38. void loop() {
  39.   if (digitalRead(ALARM_BUTTON_PIN) == LOW) {
  40.     alarmRinging = true;
  41.   }
  42.  
  43.   if (digitalRead(MIN_BUTTON_PIN) == LOW) {
  44.     digitalWrite(LED_ALARM_PIN, HIGH);
  45.   } else {
  46.     digitalWrite(LED_ALARM_PIN, LOW);
  47.   }
  48.  
  49.   if (alarmRinging) {
  50.     if (millis() - previousBeepMillis >= beepInterval) {
  51.       if (tone_state) {
  52.         beepInterval = error_pause;  //600ms szünet
  53.         TCCR1B &= ~ (1 << CS10);  //Timer1 leállítás
  54.         TCNT1 = 0;  //TCNT1 nullázás
  55.       } else {
  56.         beepInterval = error_beep;  //250ms sípolás
  57.         OCR1A = 1025;  //3900Hz
  58.         TCCR1B |= (1 << CS10);  //Timer1 indítás
  59.       }
  60.       tone_state = !(tone_state);
  61.       previousBeepMillis = millis();
  62.     }
  63.   }
  64. }
  65.  
  66. // Timer 1 interrupt.  Beep.
  67. ISR(TIMER1_COMPA_vect) {
  68.   if (astable == 0) {
  69.     digitalWrite(BUZZER, HIGH);
  70.   }
  71.   if (astable == 1) {
  72.     digitalWrite(BUZZER, LOW);
  73.   }
  74.   if (astable == 0) {  //félpeiódus csere
  75.     astable = 1;
  76.   } else {
  77.     astable = 0;
  78.   }
  79. }

A gond az, hogy amikor a 250ms sípolás van, akkor a LED_ALARM_PIN is H szintre vált, illetve nem világít olyan fényesen, mint amikor lenyomom az ALARM_BUTTON_PIN-re kötött gombot. A 600ms szünet alatt a led elalszik.
Tudnál benne segíteni, hogy mi a gond?
(#) Massawa válasza Massawa hozzászólására (») Márc 27, 2020 /
 
Még 2 kérdésem lenne ehhez a dologhoz.
Ugy tudom, hogy az Arduinoban nem tudok egy megszakitást csinálni, ha az

uint_8 value változik.
Az lenne az optimális ha a proci minden változásra reagálna. Ha csak az loop IF-be irom be lehet, hogy nem kap el minden változást.

A másik kérdés meg olyasmit kellene csinálnom, hogyha a fenti érték egy bizonyos ideig nem változik, akkor resetelnem kellene egy számlálot.
Kösz.
(#) asch válasza Massawa hozzászólására (») Márc 28, 2020 /
 
Azt kell először végiggondolnod, hogy mi az a legrövidebb idő, amire reagálni kell? Ha a loopod periódusideje kisebb, akkor nem kell megszakítás. Ha nagyobb, akkor kell megszakítás. Talán egyszerűbb megszakítással megvalósítani.

Pin change interrupt megszakítást is könnyű csinálni. Erre is igaz, hogy ha nem az Arduino libet használod (attachInterrupt), hanem megírod direktben ahogy AVR-GCC-ben kell (bekonfigurálás+ISR(PCINTX_vect)), akkor sokkal gyorsabb lesz.

Én így csinálnám interrupttal:

* PCINT interruptot állítanék be, hogy minden változásra jöjjön ISR(PCINTx_vect)
* Változáskor megnézném, hogy az előző állapothoz képest (amit ugye tárolnék) valid-e a mostani állapotátmenet? Ha nem, akkor egy hibajelzőt beállítanék
* Leolvasnám az órát, és az előző állapothoz képest megnézném mennyi idő telt el: ha túl kevés, akkor az is invalid, hibajelző beállít
* számlálás, ha minden oké

Főprogramban:

* Ellenőrizgetjük az előző változás óta eltelt időt: ha túl nagy, akkor nullázzuk a számlálót és töröljük a hibajelzőt
* Frissítjük a képernyőn a számot, és a hibajelzőt (pl a 8 szegmenses kijelző pontját lehet hibajelzőnek használni)

Itt van pin change interruptos példa: https://playground.arduino.cc/Main/PinChangeInterrupt/
(#) Massawa válasza asch hozzászólására (») Márc 28, 2020 /
 
Kösz, ki fogom probálni. A változások nem gyorsak, csak itt irták a kollégák, hogy lehet a kimeneten valami bizonytalan állapot, amit lehet, hogy a loopban futo koddal nem fogok látni.
A loop ideje joval kisebb, tegnap csak ugy probálgattam a looppal, fél perc alatt majdnem 50000 lépést számolt (fix bemenettel) ennyit a motor egy ora alatt sem kap.
A hozzászólás módosítva: Márc 28, 2020
(#) Lac364 hozzászólása Márc 28, 2020 /
 
Üdv mindenkinek.
Egy kérdésem lenne, hogyan tudok egy tömböt létrehozni arduinón ,hogy egy for ciklusba beágyazott

For stb...
{
myGLCD.print( "Touch", 15, (y1 + 7));
}
stb...
Touch helyére egy előre megírt tömbből olvassa ki a megjelenítendő szavakat.

Remélem érthető mit szeretnék.Próbáltam már megírt programokból lesni de nem találok per pillanat Köszi előre is.
(#) Lac364 hozzászólása Márc 28, 2020 /
 
Közben részben megoldódott.
Most csak annyi a gondom , hogy nem lép tovább csak a Jan - szót írja egyfolytában

const char *Name[12] = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};


For stb...
{
myGLCD.print( *Name, 15, (y1 + 7)); //
}
(#) Lac364 hozzászólása Márc 28, 2020 /
 
Sikerült megoldanom. A moderátor törölheti , ne foglalja az értékes megabájtokat a hozzászólásom.
A const char* -nál a * jelzés mi célt szolgál?
(#) lelkes amatőr hozzászólása Márc 28, 2020 /
 
Sziasztok,

Segítséget keresek, öreg vagyok én már ehhez.
A programban van egy ciklus (uint8_t reply[10]) ami 10x futtatja le a mérést, utána leáll. Ezt szeretném kiiktatni, hogy folyamatos legyen a mérés, de nem tudom mit töröljek ki.

Köszönöm.
A hozzászólás módosítva: Márc 28, 2020
(#) pipi válasza lelkes amatőr hozzászólására (») Márc 28, 2020 /
 
A kutya elásva a programodban lesz (ino), amit nem mellékeltél. Ez a szenzor olvasó library egy darabja(cpp). Az a reply változó tömb az adat beolvasáshoz kell, ami több bájtból áll, nem a mérési eredményeket tárolja.
(#) lelkes amatőr válasza pipi hozzászólására (») Márc 28, 2020 /
 
Az .ino fájlban nincs semmi, ami a ciklusra utalna, viszont ha a uint8_t reply[10] sorban a 10 értékét növelem akkor nő a mérések száma. Ezért gondolom, hogy itt kellene valamit módósitani.
(#) vargaf válasza lelkes amatőr hozzászólására (») Márc 28, 2020 /
 
Idézet:
„gondolom, hogy itt kellene valamit módósitani”

Inkább az ino programot tedd fel, mert nem vagyunk gondolatolvasók.
A hozzászólás módosítva: Márc 28, 2020
(#) lelkes amatőr válasza vargaf hozzászólására (») Márc 28, 2020 /
 
Innen szedtem le a programot.
(#) icserny válasza lelkes amatőr hozzászólására (») Márc 28, 2020 /
 
Ez a programkönyvtár, amit belinkeltél nem futtatja 10x a mérést. A reply nevű tömbbe minden mérésnél 8 db. bájtot olvas be a program. Ebből állítja össze az eredményt.

A programkönyvtár úgy van megírva, hogy 2 másodpercnél sűrűbben nem mér. Nyilván az eszköz működésében van egy ilyen korlát. Ennél tehát ne akarj "folyamatosabban" mérni!
(#) lelkes amatőr válasza icserny hozzászólására (») Márc 28, 2020 /
 
A 2 mp. nem gond, még ritkább is elég, viszont 10 mérés után leáll a program, ezt szeretném kiküszöbölni.
(#) icserny válasza lelkes amatőr hozzászólására (») Márc 28, 2020 /
 
"10 mérés után leáll a program, ezt szeretném "
Melyik program és hol áll le?
A könyvtári program meg van pakolva kiírató utasításokkal, célszerű azokat kivenni a kommentből, akkor jobban lehet látni, hogy mi a probléma.
(#) lelkes amatőr válasza icserny hozzászólására (») Márc 28, 2020 /
 
Bocsánat mindenkitől az esetleges félrevezetés miatt, az .ino fájl LCD-re lett átírva.
A problémám ennek ellenére ugyanaz.
A zip fájlban a teljes program és tartozékai vannak.

Arduino.zip
    
(#) KoblogPerGyok válasza lelkes amatőr hozzászólására (») Márc 28, 2020 /
 
Gyanús nekem valami.

Az example kódban a loop-ban az első feltétel arra utal, hogy ha van HIBÁS adat akkor írjon a serial printre.

Ez megtörténik nálad mielőtt nem olvas többé?

Mert ha igen akkor van egy tippem a return;- miatt. Lehet kilépteti az egész loop függvényből!
A hozzászólás módosítva: Márc 28, 2020
(#) KoblogPerGyok válasza lelkes amatőr hozzászólására (») Márc 28, 2020 /
 
Erre gondolok:

  1. if (! am2315.readTemperatureAndHumidity(&temperature, &humidity)) {
  2.     Serial.println("Failed to read data from AM2315");
  3.     return;  // ez nem csak az if-ből léptet ki szerintem, hanem mindenből
  4.   }


Ez a küldött ino fájlban van. De régen foglalkoztam arduino kódokkal.
(#) lelkes amatőr válasza KoblogPerGyok hozzászólására (») Márc 28, 2020 /
 
Gondolom, ott azt figyeli, hogy a 2mp. várakozás kell 2 adatfrissítés között.
A 10 cikluson belül nincs is probléma vele, de ha lejár a 10 ciklus akkor a kijelző üres lesz.
(#) KoblogPerGyok válasza lelkes amatőr hozzászólására (») Márc 28, 2020 /
 
A loop függvény biztosítja a folytonosságot. Az ottani kódok futnak folyton az mcu-ban. A késleltetést a delay(2000); sor biztosítja.
(#) KoblogPerGyok válasza lelkes amatőr hozzászólására (») Márc 28, 2020 /
 
mondjuk a 10 az tényleg jelent valamit. A serial-on figyeled mik történnek? Nem csak az LCD-n?
(#) KoblogPerGyok válasza KoblogPerGyok hozzászólására (») Márc 28, 2020 /
 
Nekem tényleg az a gyanúm, hogy hiba esetén kilépteti a fő loop ciklusból, és soha többé nem folytatja a kódok futtatását. Az LCD elsötétül, mert megszakad minden. A soros monitor tartalmát ide másolhatnád.

Ha igazam van akkor egy ilyen üzenet előzi meg a hibát:

"Failed to read data from AM2315"

A soros monitoron természetesen. De ma nem vagyok ok, fáj a fejem, nem aludtam rendesen, kijárás tilalom is van 4 hete nem ittam semmit, és nincs is itthon semmi...
(#) lelkes amatőr válasza KoblogPerGyok hozzászólására (») Márc 28, 2020 /
 
Serialt nem néztem, ennek sz.gép nélkül kellene menni.
Az alap elképzelés az, hogy egy 328-as tartalmazza a programot és LCD-n keresztül mutassa az aktuális értéket. Ha beindul, akkor lenne egy kapcsolójel, ami adott érték-kombinációnál billenne.
(#) lelkes amatőr válasza KoblogPerGyok hozzászólására (») Márc 28, 2020 /
 
Közben megnéztem serial monitorral is, leállás után semmit se ír ki.
(#) KoblogPerGyok válasza lelkes amatőr hozzászólására (») Márc 28, 2020 /
 
Nem tudom akkor mi a gond.
Alszok egyet rá, remélem valaki segíteni tud neked.
(#) lelkes amatőr válasza KoblogPerGyok hozzászólására (») Márc 28, 2020 /
 
Mindenesetre, kössz a segitőszándékot.
(#) Vacok válasza Vacok hozzászólására (») Márc 28, 2020 /
 
Végül meglett a hiba oka. Nem programhiba volt, hanem hardverhiba. A mikrovezérlő közvetlenül hajtotta meg a passzív zümmert és valami visszarúgás okozta a hibát. 220R ellenállást betéve a zümmer és a mikrovezérlő közé a hiba is megszűnt. Piezo zümmernél nem gondoltam, hogy ilyen jelenség fellép.
Következő: »»   610 / 838
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