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   34 / 850
(#) nyitraitomi válasza csabeszq hozzászólására (») Jún 15, 2014 /
 
Még nem írtam programot gcc-ben. Azt tudom, hogy sokkal jobb, de az már biztos, hogy el kell kezdenem. Tehát akkor első lépésként le kell töltenem az avr gcc-t. Ezt honnan érdemes (win7)?
(#) icserny válasza nyitraitomi hozzászólására (») Jún 15, 2014 /
 
Idézet:
„Tehát akkor első lépésként le kell töltenem az avr gcc-t. Ezt honnan érdemes (win7)?”
Nem kell letölteni, mivel benne van az Arduino keretrendszerben. Az Arduino vázlatokat (sketch) is az fordítja...
(#) nyitraitomi válasza icserny hozzászólására (») Jún 15, 2014 /
 
No ezt sem tudtam. Köszönöm!
Akkor most szeretnék nagy segítséget kérni.
Össze kellene dobni egy "egyszerű" kódot a következő képpen: adott pin 50us-ig magas, 10ms-ig alacsony állapotban.
Sajnos a legelejéről kell kezdenem kezdve az avr gcc beállításokkal. Itt most a bootloader stb.-re gondolok.
(#) Kera_Will válasza nyitraitomi hozzászólására (») Jún 15, 2014 /
 
Van 2 függvény az egyik a :

delayMicroseconds() :

Ez 8MHz órajel esetén 8usec vagy 16MHz órajel esetén 4usec lépésköz esetén pontos, köztes értékekben bizonytalan . (max 65535) (tehát 48 vagy 56 usec jobb lenne neked talán)


delay() : milli sec időzítést végez (max 65535)

  1. //Nagyjából ennyi a kód ami kell neked az Arduino környezet megkötéseit figyelembe véve
  2.  
  3. void setup()
  4. {                
  5.  
  6.   // Pin 5 a kimeneti port (bármelyik lehet majd beállítod mi kell neked)
  7.   pinMode(5, OUTPUT);    
  8. }
  9.  
  10. void loop() {
  11.   digitalWrite(5, HIGH);// bekapcsol 5ös kimenet magas
  12.   delayMicroseconds(50) ;  
  13. // 50(48/56) usec szünet ami nem biztos hogy pontos lesz mert nem osztható 8 vagy 4 el maradék nélkül
  14.   digitalWrite(5, LOW);    // 5ös kimenet kikapcsol
  15.   delay(10);  // 10 msec szunet
  16. }
  17. //loopban van  így a 5ös port fel/le billeg folyamatosan

Ha ez kevés a pulzáid pontosságához akkor a uC ASM vagy C programozása szükséges.
A hozzászólás módosítva: Jún 15, 2014
(#) nyitraitomi válasza Kera_Will hozzászólására (») Jún 15, 2014 /
 
Hát az arduino-s környezeten már túl vagyok. Tulajdonképpen a projekt nagy része abból állna, hogy előállítok egy impulzust ami jelen esetben egy tekercsre kapcsol feszültséget. Az impulzus hossza a tekercs induktivitásától függ majd kezdeti értéknek 50 us, de a lényeg az lenne hogy az impulzus hossza nem változhat. Az impulzus megszűnése után 20 és 100us között valamikor meg kell mérnem a tekercsen lecsengő feszültséget. Ez az idő sem változhat. Mintahogy említetted 4us-os bizonytalanság adódott az arduinos környezetben. Ez már olyannyira sok, hogy az arduino adc bemenetén óriási különbségek voltak állandó jelalaknál. Szkópon nézve vettem észre, hogy az impulzuso hossza is változik 4us-ot, tehát gondolom az analóg mérés időzítése is ugyanígy változik.
Ezért kell a gcc-t megtanulnom. De azt a legelejéről.
Elsőnek az impulzust kell előállítani.
A hozzászólás módosítva: Jún 15, 2014
(#) nyitraitomi válasza Kera_Will hozzászólására (») Jún 16, 2014 /
 
A kezdeti érték lehet 56 is. Az nem olyan fontos, hogy milyen hosszú, csak ne változzon.
(#) Kera_Will válasza nyitraitomi hozzászólására (») Jún 16, 2014 /
 
Próba , cseresznye .... szkóppal meglesed a végeredményt ...
A hozzászólás módosítva: Jún 16, 2014
(#) csabeszq válasza Kera_Will hozzászólására (») Jún 16, 2014 /
 
Ez Arduino alatt kizárt, hogy pontosan menjen.

A timer0 interrupttól a Serial.println-ig az égvilágon mindenki beakaszt a processzornak, aztán meg csodálkozol, hogy nincs megfelelő pontosság.

A delay 10-en a várakozás mértéke teljesen kiszámíthatatlan, attól függ, hogy éppen hogyan esik a timer interrupt be (millis() függvényt hasonlítgatja).

icserny írta le helyesen a választ (Secrets of Arduino PWM):

- AVR specifikációt elővenni
- timer1-et beállítani Fast PWM-re
- OCR1A-t beállítani olyan értékre, hogy 10.05 ms legyen a teteje (10.05 ms / 1000ms * 16MHz = 160800, ami sok a 16 bites timernek, ezért 8-as előosztás kell: 20100).
- OCR1B-t beállítod 50us-re, ami a fenti képlet alapján 100 lesz.
- A kimeneted az OCR1B kimenete lesz, amit engedélyezned kell

Ezzel a megoldással 1/16MHz-es pontosságú hardver négyszögjelet kapsz. Mindent a hardver fog csinálni, szóval ezalatt azt csinálhatsz, amit akarsz, akár végtelenciklussal is kiakaszthatod a processzort, akkor is kint lesz a négyszögjeled.
A hozzászólás módosítva: Jún 16, 2014
(#) nyitraitomi válasza csabeszq hozzászólására (») Jún 16, 2014 /
 
Most akkor kezdeném a legelejéről.
hogyan indítom el a gcct? Hol van?
(#) solti_imre válasza TheShaft hozzászólására (») Jún 16, 2014 / 1
 
Amiket már vettem az ebay-ről és nem volt /nincs velük semmi probléma:

- Nano
- UNO
- Leonardo
- Mega1280
- Mega2560
- Due

- GPRS modul
- WiFi modul
- Ethernet shield
- LCD-k (Karakteresek - 16x2-től 20x4-esig, Grafikusak - monokróm és színes, érintőfelületes TFT 2,5"-ostól az 5"-osig)
- MP3-as modul
- Gyorsulásmérő és egyéb szenzorok
- Motorvezérlők

- és még sok mindent. Problémám egyetlen esetben volt: Más lábkiosztással kaptam pár 3,2"-os LCD-t, mint ami a fotóján szerepelt - de az eladó korrekt volt és részleges visszatérítésben kiegyeztünk. Az itthoni elszállt árakat nézve, ha csak minden második lenne jó, még akkor is bőven megérné az ebay-en vásárolni!! (Pl. GPRS modul: itthon 40 ezer, ebay: 12-13 ezer. Ultrahangos távolságmérő modul itthon 9000 Ft, ebay: 400-500 Ft....)

Úgyhogy a kérdés csak az lehet: Ki az, aki NEM az ebay-ről vásárol???
(#) csabeszq válasza nyitraitomi hozzászólására (») Jún 17, 2014 /
 
A legelejéről:

- Arduino programnyelv nincs, a nyelv, amit az Arduino használ az C++
- A sketch-eket az Arduino avr-gcc-vel fordítja le

Ahogy föntebb írták, az Arduino tartalmazza az avr-gcc-t, ugyebár azzal készíti el a mikrokontrollerre feltöltendő fájlokat.

Ahogy nézem az Arduino Timer1 library-je lehet, hogy megfelelő lenne neked.
http://playground.arduino.cc/Code/Timer1
(#) csabeszq válasza csabeszq hozzászólására (») Jún 17, 2014 /
 
  1. #include "TimerOne.h"
  2.  
  3. void setup()
  4. {
  5.   pinMode(10, OUTPUT);    // 10-es pinen jön ki a négyszögjel
  6.   Timer1.initialize(10050); // 10050 us a periódus idő
  7.   Timer1.pwm(10, 5);        // pwm a 10-es pinre, 5/1024 * 100% kitöltéssel (49 us)
  8. }
  9.  
  10. void loop()
  11. {
  12.   // your program here...
  13. }
(#) nyitraitomi válasza csabeszq hozzászólására (») Jún 17, 2014 /
 
Éppen ezt nézegetem. Közvetlenül a regiszterbe ír. De hogyan lehet várakozni pontos ideig? Szerintem a pwm nem lenne jó, mert az impulzus végétől is pontos időre kellene megnézni az analóg bemeneten a feszültséget. A pwm-nél meg folyton nézegetni kellene, hogy éppen milyen állapotban van a pwm pin. Vagy rosszul gondolom?
(#) csabeszq válasza nyitraitomi hozzászólására (») Jún 17, 2014 /
 
Azért nem pontos az Arduino, mert interruptok vannak (Serial, timer), amik megbolygatnak mindent. Az alábbi kód (nem próbáltam ki) pontossága kb. 1us lehet 16MHz-n.

  1. #include <avr/interrupt.h>
  2. #include <avr/io.h>
  3.  
  4. void setup()
  5. {
  6. }
  7.  
  8. void loop()
  9. {
  10.   cli(); // letiltod a megszakításokat, hogy ne hülyéskedjen az Arduino
  11.  
  12.   TCCR1A = _BV(WGM10) | _BV(WGM11);
  13.   TCCR1B = _BV(WGM12) | _BV(WGM13); // Fast PWM mód bekapcsolása Timer1-en
  14.   OCR1A   = 20100; // A timer maximális értéke 10.050 us
  15.   TCNT1 = 0; // A timer nullázása
  16.   TCCR1B |= _BV(CS11); // timer1 indul 8-as előosztással
  17.  
  18.   while(1)
  19.   {
  20.      while(TCNT1 < 100); // nem telt még le 50 us? -> akkor várj
  21.      PORTD &= ~_BV(PD0); // PIN 0 kikapcsolása, a digitalWrite lassú
  22.      while(TCNT1 >= 100); // várj amíg a timer körbe nem ér és ki nem nullázódik
  23.      PORTD |= _BV(PD0); // PIN 0 bekapcsolása, a digitalWrite lassú
  24.   }
  25.  
  26.   // itt ne lépj ki, mert fogalmad sincs, hogy mit fog az Arduino csinálni
  27. }
A hozzászólás módosítva: Jún 17, 2014
(#) csabeszq válasza csabeszq hozzászólására (») Jún 17, 2014 /
 
Bocs, elfelejtettem a PIN 0-t kimenetre állítani.

  1. void setup()
  2. {
  3.   DDRD = _BV(PD0);
  4. }
A hozzászólás módosítva: Jún 17, 2014
(#) Zaustuv hozzászólása Jún 22, 2014 /
 
Sziasztok!

Ma elkezdtem kísérletezni egy Arduino UNO panelen: a 10-es PWM-es lábára kötöttem egy 22k-s ellenállást, ami egy MOSFET drain-jéhez csatlakozik. Ez a MOSFET az 5V-os tápfeszen keresztül vezérel egy egyenáramú motort. Az AO-ás lábához rendeltem egy potmétert is, ami az állásától függően kiküld egy PWM jelet a 10-es lábra, amivel a MOSFET-et vezérli.
A számomra fura dolog az volt, hogy amikor csatlakoztattam egy harmadik lábához egy nyomógombot, aminek a motort ki/be kéne kapcsolnia (úgy, hogy a belső felhúzó ellenállást engedélyeztem rajta), majd hozzárendeltem ehhez a lábhoz egy megszakítás programot, ez a program addig amíg kevés áramot vett fel a motor, működött, de amikor nőtt az áramfelvétele/jobban kinyittattam a MOSFET-et, a motor leállt. Mi lehet a gond?
(#) nyitraitomi válasza Zaustuv hozzászólására (») Jún 22, 2014 /
 
Ha mutatnád a kódot, többet tudnánk. Mérted a fet gate-jén a jelet?
(#) nyitraitomi válasza csabeszq hozzászólására (») Jún 22, 2014 /
 
Nos ezt nem igazán eszi meg az arduino. Nem tetszik neki a PD0. De némi utánnaolvasással és kísérletezéssel sikerült elérnem 4Mhz-ez frekvenciát. Inkább órajelekben próbálok gondolkodni. Most a késleltetést for ciklussal és nop-pal próbálom megoldani. Sajnos lassan haladok, mert kevés az időm rá, de véleményeket szívesen várok! Lassan lesz szkópábra is.
(#) csabeszq válasza Zaustuv hozzászólására (») Jún 23, 2014 /
 
Elég gyenge motor lehet, ha képes 30 mA-ről működni (annyit ad le maximálisan az IC lába).

Mindenesetre a legtöbb esetben a MOSFET gate lábára kötik az IC PWM kimenetét, nem a drainre.
A hozzászólás módosítva: Jún 23, 2014
(#) nyitraitomi válasza csabeszq hozzászólására (») Jún 23, 2014 /
 
Ezen még én is átsiklottam. Azért írtam, hogy a gate lábon mérje a feszültséget.
(#) Zaustuv válasza csabeszq hozzászólására (») Jún 23, 2014 /
 
Igen, ez egy egyszerű egyenáramú kismotor a HEstore-ból
Én a gate lábára kötöttem a PWM kimenetet. A Drain-en a panel 5V-ja van (ami USB 2.0 lévén 0.5A-t is le tud adni). Rosszul magyaráztam esetleg?
Egyébként azóta kicsit árírtam a progit, kitöröltem belőle a megszakítás programot, és azóta tökéletesen működik.
(#) nyitraitomi válasza Zaustuv hozzászólására (») Jún 23, 2014 /
 
Igen, mert azt írtad a mosfet drain-jére kötötted a pwm kimenetet. Mi volt a hiba? Merthogy a hibákból tanulunk!
(#) Zaustuv válasza nyitraitomi hozzászólására (») Jún 23, 2014 /
 
Az a baj, hogy én se tudom biztosan. Volt egy előző "projektem", amin egy stopper óra megállítására használtam megszakítást. Ezt a mostanit gyakorlatilag erre építettem volna. Nem változtattam semmit az áramkörön, a megszakítás programot egy az egyben bemásoltam az új programba, és mégis, amikor feljebb tekerem a potmétert, hogy növeljem a motor fordulatszámát és áramfelvételét, a motor egyszercsak megáll, és csak akkor indul el újra ezután, ha nyomva tartom a gombot, és akkor működik újból nyomógombként, ha visszatekerem a potit.
Méregettem is, amit tudtam, az előző, stopperes projektnél 4,85V-ig esett le a tápfesz, itt viszont, amikor a mikrokontroller megkergült, 4,7V volt csak a tápfeszültség. Nem tudom hogy ez lehet-e a hiba forrása. A megszakítás lefutó élre aktiválódik.
(#) nyitraitomi válasza Zaustuv hozzászólására (») Jún 23, 2014 /
 
Lehetséges az is, hogy mivel pwm-mel kapcsolgatod a motort, (ami persze induktív fogyasztó) csúnya zavart tesz rá a mikrokontroller tápjára, és akkor bármi történhet. Jó lett volna látni szkópon.
(#) Zaustuv válasza nyitraitomi hozzászólására (») Jún 24, 2014 /
 
Végre sikerült kijavítanom a gondot. Lehet tényleg a zajokkal lehetett a gond, mert egy szintérzékelést betéve a megszakításba már jól működik a progi.
Szkópom sajnos nincs itt (a többi komolyabb eszközzel együtt nem hoztam el a nyaralónkba).
(#) nyitraitomi válasza Zaustuv hozzászólására (») Jún 24, 2014 /
 
Tegyél a tápra egy 100nF ost.
(#) Kovidivi hozzászólása Jún 25, 2014 /
 
Sziasztok!
Jó az Ebay-ről vett Arduino is? Bővebben: Link Arra gondolok, hogy túl olcsó, esetleg nincs benne a bootloader? Szerintem a linkeltre benevezek! A 60napos tanfolyamot csinálom éppen, már van is ötletem, hogyan tudnám lemérni a Lithium Ion celláim kapacitását, és gépen log-olni közben! Van egy másik fajta, ha jól látom, egy csip-ben különböznek (USB kommunikáció?) Bővebben: Link. Mindegy, melyiket veszem?
A hozzászólás módosítva: Jún 25, 2014
(#) mrobi válasza Kovidivi hozzászólására (») Jún 25, 2014 /
 
Szia!

Nem tudom, hogy milyenek az ebay-en található arduinok. Az biztos, hogy a második linken lévőt venném meg, mert abba ki tudod cserélni a mikrovezérlőt! Én az arduino mini vásárláson gondolkozok. 600-700Ft-ért már beszerezhető. Igaz kell hozzá egy USB-TTL átalakító, de ennyiért még a mikrovezérlőt se kapom meg Magyarországon. Bővebben: LinkBővebben: Link
(#) Kovidivi válasza mrobi hozzászólására (») Jún 25, 2014 /
 
Tehát amit Te linkeltél, az ugyan az, mint amit én, csak külön-külön van az USB és az Arduino rész? Nekem szimpatikusabb, ha egyben van, meg a méret sem számít. A cserélhetőség jó ötlet! Azt hiszem, van olyan verzió is 8$ körül is. Neked miért a mini kell? Elég annak a tudása? Kimenetei?
Az még fontos lenne, hogy van-e benne bootloader. Nem nagyon találom a leírásban, csak hogy "Arduino-compatible Board. New." - ez nem sokat mond. Én már csak azért is bootloader-eset szeretnék, hogy az első lépés ne kudarc legyen, hogy még be kell programozni, utána kell járni, hogyan, mivel lehet. Első lépés legyen a LED villogtató program!
A hozzászólás módosítva: Jún 25, 2014
(#) mrobi válasza Kovidivi hozzászólására (») Jún 25, 2014 /
 
Szia.

A mini nem különbözik a nagytól, csak a méretében. Igen az usb része külön van.
Ha jól látom szegedi vagy. Nekem van gyári arduinom. Ha netalán nem lenne benne a bootloader abban amit rendelsz, akkor fel tudom neked rá tölteni.
A hozzászólás módosítva: Jún 25, 2014
Következő: »»   34 / 850
Bejelentkezés

Belépés

Hirdetés
XDT.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