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   425 / 840
(#) tbarath válasza kapu48 hozzászólására (») Feb 9, 2018 /
 
Szerintem figyeli, ha A változik akkor nézi B értékét, és ettől függően dönti el az irányt.
(#) mikroferi válasza wbt hozzászólására (») Feb 9, 2018 /
 
Max 600 percenként a max fordulat.A megszakításba hogyan tudok értéket írni illetve kiolvasni?
A hozzászólás módosítva: Feb 9, 2018
(#) mikroferi válasza kapu48 hozzászólására (») Feb 9, 2018 /
 
Holnap megpróbálkozom a fenti kóddal.Köszönöm.De fentebb írták hogy megszakítás kell,ez viszont nem az ha jól làtom.
A hozzászólás módosítva: Feb 9, 2018
(#) tbarath válasza mikroferi hozzászólására (») Feb 9, 2018 /
 
Meg kellene nézni, hogy nincs-e ún. bounce. Ez olyasmi, mint a nyomógomb prellegése, valahogy ki kell szűrni. Vannak hw-es és sw-es megoldások is, "debounce" néven érdemes rákeresni, mindenki másra esküszik, nyilván tapasztalat alapján. Schmitt-trigger, kondi ide-oda, ellenállások variálása, stb.

Aztán ha sok a fordulat, akkor ne digitalread-et használj, mert az lassú lehet. Olvasd direktben a portot, az sokkal gyorsabb. És ahogy már javasolták: megszakítás lesz a barátod.
(#) tbarath válasza mikroferi hozzászólására (») Feb 9, 2018 /
 
Nem feltétlenül kell megszakítás, mert ha semmi mást nem csinál a kód, mint hogy a rotary-t olvasgatja, akkor maradhatsz is a loop-ban a vizsgálatoddal. De általában a kódok csinálnak mást is, és nem a rotary olvasgatása az egyetlen dolguk.
Ha nem interrupt irányba mész el, akkor nagyon fontos, hogy minél kevesebb ideig foglalkozz mással. Ha 600/min a max. fordulat, akkor ez max 10/s, tehát másodpercenként legalább 40x le kell lefutna a loop ciklusodnak, minél többször annál jobb.
Ha interrupt irányba mész el, akkor az interrupt legyen rövid. Nagyon rövid. Semmi kiiratás vagy ilyesmi, hanem olvasol (portot preferáltan), egy változó értékét növeled vagy csökkented és ennyi.

A megszakításra, portolvasásra és sok más dologra is találsz példakódot a linken, amit kapu48 linkelt az előző oldalon.
(#) kapu48 válasza mikroferi hozzászólására (») Feb 9, 2018 /
 
Inkább ezt próbáldki:
  1. const byte encoderPinA = 2;//outputA digital pin2
  2. const byte encoderPinB = 3;//outoutB digital pin3
  3. volatile int count = 0;
  4. int protectedCount = 0;
  5. int previousCount = 0;
  6.  
  7. #define readA bitRead(PIND,2)//faster than digitalRead()
  8. #define readB bitRead(PIND,3)//faster than digitalRead()
  9.  
  10.  
  11. void setup() {
  12.   Serial.begin (115200);
  13.  
  14.   pinMode(encoderPinA, INPUT_PULLUP);
  15.   pinMode(encoderPinB, INPUT_PULLUP);
  16.  
  17.   attachInterrupt(digitalPinToInterrupt(encoderPinA), isrA, CHANGE);
  18.   attachInterrupt(digitalPinToInterrupt(encoderPinB), isrB, CHANGE);
  19. }
  20.  
  21. void loop() {
  22.   noInterrupts();
  23.   protectedCount = count;
  24.   interrupts();
  25.  
  26.   if(protectedCount != previousCount) {
  27.     Serial.println(protectedCount);
  28.   }
  29.   previousCount = protectedCount;
  30. }
  31.  
  32. void isrA() {
  33.   if(readB != readA) {
  34.     count ++;
  35.   } else {
  36.     count --;
  37.   }
  38. }
  39. void isrB() {
  40.   if (readA == readB) {
  41.     count ++;
  42.   } else {
  43.     count --;
  44.   }
  45. }
(#) mikroferi válasza kapu48 hozzászólására (») Feb 10, 2018 /
 
Köszönöm mindenkinek a választ, rendesek vagytok! A fenti kódot megpróbálom értelmezni és kipróbálni, nagy segítség az biztos. Délután jövök az eredményekkel!
(#) kleinie hozzászólása Feb 10, 2018 /
 
Sziasztok!

Adott egy Atmega8L-8PU próbapanelen összerakva, nincs külső kristály. Összeraktam egy párhuzamos port programozót. Ill. van egy PL2303HX USB-TTL adapterem. Lehetséges, hogy feltöltök rá egy bootloader-t, mondjuk az optiboot-ot, mert a 8k flash elég kevésnek tűnik és utána tudom használni simán a PL2303 adaptert, hogy feltöltsek rá programokat?
Egyelőre nem mertem semmit csinálni, mert a FUSE bit-eket nem akarom elrontani, nincs kéznél kristály, ha véletlenül félresikerülne valami. Avrdude-al tudok csatlakozni a programozón keresztül, sikerült kiolvasnom a FUSE bit-eket, ill. az egyelőre üres EEPROM-ot is.
(#) proba válasza mikroferi hozzászólására (») Feb 10, 2018 1 /
 
Próbálkozhatsz régi görgős egerekkel is, azok soros porton elküldik a pontos elfordulást. A processzor meg csinálhat amit akar párhuzamosan.
(#) devilke3000 hozzászólása Feb 10, 2018 /
 
Helló!
Nyári óra állítást szeretném megoldani DS3231!
De angol megfelelőit sem találom a témának!
Tudna valaki javaslatot hogy indulhatok el vele?

mx_clock2.ino
    
(#) icserny válasza devilke3000 hozzászólására (») Feb 10, 2018 /
 
(#) mikroferi válasza proba hozzászólására (») Feb 10, 2018 /
 
Azoknak mekkora felbontásuk van? Nekem legalább 400 imp/ford-ra lenne szükségem..
(#) Bakman válasza mikroferi hozzászólására (») Feb 10, 2018 /
 
A lehető legnagyobb frekvenciával kell járatni a kontrollert, Interrupt On Change megszakítást használni. Ebben a cikkben: Bővebben: Link, 64 MHz-re van állítva a PIC, a butább enkóderrel kb. 1700 f/p sebességig bírja az iramot.
(#) mikroferi válasza kapu48 hozzászólására (») Feb 10, 2018 /
 
Szia! Feltöltöttem a kódot és a jelenség az, hogy akármilyen irányba tekerem, szinte mindig egyhelyben számol. Két szám között ugrál szinte mindig. Egyébként az encoder ez: https://www.hestore.hu/prod_10037805.html
(#) Bakman válasza mikroferi hozzászólására (») Feb 10, 2018 /
 
Ha jól értelmezem a kódot, akkor ez a mechanikus enkóderekhez lett készítve, a te enkódered kimenetén pedig Gray kód jelenik meg. Lásd itt: Bővebben: Link. Szerintem a kód olyan enkóderhez készült, amelyiknek olyna a kimenete, mint az oszcilloszkóp ábrákon is szerepel.
(#) proba válasza mikroferi hozzászólására (») Feb 10, 2018 /
 
Ha szétszeded, a tárcsát átszereled valami áttétellel, a felbontással már nem lehet gond. A műanyag tárcsán olyan 100 körüli rés van, egy 1:4 áttétel után már lehet elég volna. Bár elég komoly mechanikai kihívás elé állít, hogy ne lötyögjön. Ami elbizonytalanít, azért az egereket nem lehet olyan gyorsan tolni, bár azokban is komoly áttétel volt.
(#) mikroferi válasza proba hozzászólására (») Feb 10, 2018 /
 
Értem, amit mondasz, de mivel ipari gépen lesz alkalmazva, nem szeretnék "házi" módszereket alkalmazni. Inkább megveszem a gyári encodert,az tudom stabilan, jól felszerelni, csak arra kellene megoldás, hogy pontosan számoljon, miközben még más feladatokat is végrehajt.
(#) mikroferi válasza mikroferi hozzászólására (») Feb 10, 2018 /
 
Amennyiben a B megszakításnál felcserélem a számlálót, úgy teljesen stabilan számol, csak akkor mindig egyirányba...De legalább stabil és elég gyors.
(#) sakrafi válasza devilke3000 hozzászólására (») Feb 10, 2018 /
 
Próbálj meg ebből kiindulni ez ds1307-re készült.

RTC.get(rtc,true);
// nyári időszámítás----------------------------------------------------------
if(rtc[5]==3 && (rtc[4]>=25 && rtc[4]<=31)&& rtc[3]==7 && rtc[2]==2 && rtc[1]==0){
// Nyári időszámítás 1 órával előre
RTC.set(DS1307_HR,3);
}
if(rtc[5]==10 && (rtc[4]>=25 && rtc[4]<=31)&& rtc[3]==7 && rtc[2]==3 && rtc[1]==0){
// Őszi időszámítás 1 órával vissza
RTC.set(DS1307_HR,2);
}
(#) mikroferi hozzászólása Feb 10, 2018 /
 
Úgy néz ki sikerült stabilan megoldanom a problémát. Most elég gyors, és pontos is. Az alábbi kódot sikerült összerakni :
int APhase = 2;
int BPhase = 3;
volatile int lepes = 0;
int ertek = 0;
int elozoertek = 0;


void setup() {

Serial.begin (9600);

pinMode(APhase,INPUT_PULLUP);
pinMode(BPhase,INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(APhase),szamlaloA,CHANGE);
attachInterrupt(digitalPinToInterrupt(BPhase),szamlaloB,CHANGE);

}

void loop() {

ertek=lepes;

if (ertek != elozoertek) {
Serial.println(ertek);
}
elozoertek=ertek;
}

void szamlaloA ( ) {
if (digitalRead(APhase)==HIGH)
{
if (digitalRead(BPhase)==LOW)
{
lepes++;
} else {
lepes--;
}
}
}

void szamlaloB ( ) {
if (digitalRead(APhase)==HIGH)
{
if (digitalRead(BPhase)==HIGH)
{
lepes++;
} else {
lepes--;
}
}
}


Köszönöm mindenkinek a segítséget, biztosan hamarosan jövök az újabb problémáimmal.
A hozzászólás módosítva: Feb 10, 2018
(#) djuice hozzászólása Feb 10, 2018 /
 
Sziasztok!

Arduino alapokat hol és hogy lehetne netről autodidakta mód legjobban megtanulni?
(#) mikroferi válasza djuice hozzászólására (») Feb 10, 2018 / 1
 
Szia!

Én is most kezdem,de nekem nagyon sokat segít a következő oldal:

http://www.elektromanoid.hu/progi1.html
(#) tbarath válasza sakrafi hozzászólására (») Feb 10, 2018 /
 
Ez a visszaállításnál (3 -> 2) nem fog mindig visszaállni 2-re?
(#) tbarath válasza djuice hozzászólására (») Feb 10, 2018 / 1
 
Szerintem tavir.hu, arduino 60 nap alatt tanfolyam. Naponta kapsz egy magyar nyelvű levelet, benne tananyag, feladat, akármi.

Persze ehhez nem árt, ha vannak hozzá "sallangok" is, pl. rtc chip, hőmérő modul, ellenállás, LED, ilyesmi.
(#) djuice hozzászólása Feb 10, 2018 /
 
Köszönöm!
(#) sakrafi válasza tbarath hozzászólására (») Feb 10, 2018 /
 
Mivel október25 és 31 között egyszer fordul elő vasárnap hajnali 2.00 így a feltétel csak egyszer teljesül.
A hozzászólás módosítva: Feb 10, 2018
(#) tbarath válasza sakrafi hozzászólására (») Feb 10, 2018 /
 
Nem így értem:
2:59:58, 2:59:59, 2:00:00, 2:00:01, 2:00:02, ... , 2:59:58, 2:59:59, 2:00:00, stb.
Persze ha egy változóban tárolod, hogy épp nyári vagy "normál" időszámításban vagy, akkor ez nem probléma, de ha ezt nem teszed meg akkor nem látom be, hogy ez miért ne következne be újra és újra.

  1. RTC.get(rtc,true);
  2. // nyári időszámítás----------------------------------------------------------
  3. if (rtc[5]==3 && rtc[4]>=25 && rtc[3]==7 && rtc[2]==2 && rtc[1]==0 && !summertime){
  4.   // Nyári időszámítás 1 órával előre
  5.   RTC.set(DS1307_HR,3);
  6.   summertime = true;
  7. }
  8.  
  9. if(rtc[5]==10 && rtc[4]>=25 && rtc[3]==7 && rtc[2]==3 && rtc[1]==0 && summertime){
  10.   // Téli (normál) időszámítás 1 órával vissza
  11.   RTC.set(DS1307_HR,2);
  12.   summertime = false;
  13. }
(#) sakrafi válasza tbarath hozzászólására (») Feb 10, 2018 /
 
Igazad van, köszönöm szépen ez elkerülte a figyelmem.
(#) kleinie válasza djuice hozzászólására (») Feb 10, 2018 /
 
A tavir email tanfolyam jó kezdés, ahogy írták előttem. Én már a vége felé járok. De majd ha meglesz az összes levél akkor állok neki. Egyelőre próbapanelen van egy Atmega8L-8PU, amihez csináltam egy párhuzamos port programozót. Egyszerű LED villogtatás már ment vele. Most egy bootloader-t akarok rá tenni, hogy ne kelljen a párhuzamos portot használni, de még nem sikerült.
A hozzászólás módosítva: Feb 10, 2018
(#) devilke3000 válasza sakrafi hozzászólására (») Feb 10, 2018 /
 
Köszönöm!
Következő: »»   425 / 840
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