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   51 / 839
(#) IMi válasza MGaa73 hozzászólására (») Okt 12, 2014 /
 
Sziasztok!
Nekem is az első van. Ami plusz a másikhoz képest a ki-be kapcsoló valamint a két "táp sáv" között külön-külön választható feszültség (0V-3.3V-5V)
(#) pepe1125 válasza rmis hozzászólására (») Okt 12, 2014 /
 
Elvileg jó. Működik.

De azt hittem van erre egy egyszerűbb művelet is. Amit még nem tudok.
Mert ez a 0,1,3,7,stb... ugyan úgy 8 bites szám, csak helyiértékenként növekvő. Mint a Johnson kód. Valami Binárisból Johnson kódba alakító művelet kellene...

  1. B00000000
  2. B00000001
  3. B00000011
  4. B00000111
  5. B00001111
  6. B00011111
  7. B00111111
  8. B01111111
  9. B11111111
(#) rmis válasza pepe1125 hozzászólására (») Okt 12, 2014 /
 
Ilyen tudtommal nincs.
DE!
Tudsz írni magadnak.
Itt találsz segítséget:Bővebben: Link
A hozzászólás módosítva: Okt 12, 2014
(#) Kovidivi válasza Medve hozzászólására (») Okt 13, 2014 /
 
Szia.
Egyszerűen így oldható meg a kezelése több LCD-nek I2C-n:
  1. LiquidCrystal_I2C lcd1(0x26, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  
  2. LiquidCrystal_I2C lcd2(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
  3. lcd1.begin(20,4);
  4. lcd2.begin(16,1);
  5. lcd1.print("elso kijelzo");
  6. lcd2.print("masodik");

És tök jól működik!
(#) zsolt58 válasza zsolt58 hozzászólására (») Okt 13, 2014 /
 
Valaki segitene?
(#) rmis válasza zsolt58 hozzászólására (») Okt 13, 2014 /
 
HI!

Lehet, hogy azért nem kaptál választ, mert ilyennel még nem nagyon foglalkozott egyikünk sem. Ha megvan a megoldás, akkor közkinccsé tehetnéd.
(#) GPeti1977 válasza zsolt58 hozzászólására (») Okt 13, 2014 /
 
Építs STK200 programozót.
(#) zsolt58 válasza GPeti1977 hozzászólására (») Okt 13, 2014 /
 
És mért pont az?
Mért nem mondjuk STK500?
(#) GPeti1977 válasza zsolt58 hozzászólására (») Okt 13, 2014 /
 
Vagy azt, arduinon kívül is van élet.
(#) zsolt58 válasza GPeti1977 hozzászólására (») Okt 13, 2014 /
 
Az STK 200-nak mi köze az arduinonak?
udv
(#) proba válasza zsolt58 hozzászólására (») Okt 13, 2014 /
 
Arduinot nem csak sorosan, bootloaderrel lehet programozni. Abban is közönséges atmega chippek vannak, ergo stk 200-al is lehet programozni.
(#) zsolt58 válasza proba hozzászólására (») Okt 13, 2014 /
 
Bocs de ebbol nem ertetem semmit!
(#) Kera_Will válasza zsolt58 hozzászólására (») Okt 13, 2014 /
 
Akkor nézzél utána annak miaz hogy bootloader a uController világban + stk 200 500 milyen fajta tudású uController programozó eszközök.
Ennyi ... Google a barátod ...
(#) melorin hozzászólása Okt 13, 2014 /
 
Sziasztok.
Vásároltam egy rotary encodert.
Betöltöttem az arduino honlapján található kódot, és csak minden 2. fokozatban csinál valamit az encoder, tehát ha jobbra tekerem, ezt csinálja: 1-semmi-2-semmi-3...és így tovább.
Mi a probléma?

Íme a kód:
  1. int val;
  2.  int encoder0PinA = 3;
  3.  int encoder0PinB = 4;
  4.  int encoder0Pos = 0;
  5.  int encoder0PinALast = LOW;
  6.  int n = LOW;
  7.  
  8.  void setup() {
  9.    pinMode (encoder0PinA,INPUT);
  10.    pinMode (encoder0PinB,INPUT);
  11.    Serial.begin (9600);
  12.  }
  13.  
  14.  void loop() {
  15.    n = digitalRead(encoder0PinA);
  16.    if ((encoder0PinALast == LOW) && (n == HIGH)) {
  17.      if (digitalRead(encoder0PinB) == LOW) {
  18.        encoder0Pos--;
  19.      } else {
  20.        encoder0Pos++;
  21.      }
  22.      Serial.print (encoder0Pos);
  23.      Serial.print ("/");
  24.    }
  25.    encoder0PinALast = n;
  26.  }
(#) benjami válasza melorin hozzászólására (») Okt 13, 2014 /
 
Mert csak az A bemenet felfutó élénél léptetsz, a lefutó élnél nem. Tovább növelheted a felbontást, ha B bemenet változásainál is számolsz.
A hozzászólás módosítva: Okt 13, 2014
(#) melorin válasza benjami hozzászólására (») Okt 13, 2014 /
 
Ezt kifejtenéd kérlek? Köszönöm!
(#) benjami válasza melorin hozzászólására (») Okt 13, 2014 /
 
  1. void loop() {
  2.    n = digitalRead(encoder0PinA);
  3.    if ((encoder0PinALast == LOW) && (n == HIGH)) {
  4.      if (digitalRead(encoder0PinB) == LOW) {
  5.        encoder0Pos--;
  6.      } else {
  7.        encoder0Pos++;
  8.      }
  9.      Serial.print (encoder0Pos);
  10.      Serial.print ("/");
  11.    }
  12.  
  13.    if ((encoder0PinALast == HIGH) && (n == LOW)) {
  14.      if (digitalRead(encoder0PinB) == LOW) {
  15.        encoder0Pos++;
  16.      } else {
  17.        encoder0Pos--;
  18.      }
  19.      Serial.print (encoder0Pos);
  20.      Serial.print ("/");
  21.    }
  22.  
  23.    encoder0PinALast = n;
  24.  }
(#) melorin válasza benjami hozzászólására (») Okt 13, 2014 /
 
Kipróbáltam. Azt csinálja, hogy: -1 0-1 0-1 0-1 0
tehát nem növeli vagy csökkenti az értéket, hanem oda vissza szabályoz egyet.
(#) benjami válasza melorin hozzászólására (») Okt 13, 2014 /
 
Lehet hogy a növelést/csökkentést elrontottam a második részben, próbáld így:
  1. if ((encoder0PinALast == HIGH) && (n == LOW)) {
  2.      if (digitalRead(encoder0PinB) == LOW) {
  3.        encoder0Pos--;
  4.      } else {
  5.        encoder0Pos++;
  6.      }
  7.      Serial.print (encoder0Pos);
  8.      Serial.print ("/");
  9.    }
(#) andykaaa hozzászólása Okt 14, 2014 /
 
Sziasztok,
Az en ismereteim szerint egy analog erteket (peldaul LM35 leolvasasat) ha csak egesz szamkent akarok megjeleniteni akkor a program lekerekit, vagyis levagja a tizedesvesszo utani erteket. Gondolom nem tevedek.
Amit en akarok az lenne hogy ne lekerekitse hanem hogy: ha az n erteke n,51 es (n+1),50 kozott van akkor nekem n+1 erteket mutasson.
Pelda: ha az ertek 3,51 es 4,50 kozott van, akkor 4 -et irjon ki.
Lehetseges egy ilyen fuggveny ?
Vagy ha nem akkor a tovabbi szamitasokat csak az egesz szammal vegezze, ne vegye figyelembe a tizedesvesszo utani erteket.
Koszonom.
UI: remelem nem baromsag amit kerdeztem, ha igen akkor legyen torolve.
A hozzászólás módosítva: Okt 14, 2014
(#) Kovidivi válasza andykaaa hozzászólására (») Okt 14, 2014 /
 
Bővebben: Link Matematika szabályai szerint 3.5-4.49999ig 4re kerekítünk, tehat nem 4.5ig. Azt már 5re.
(#) Kovidivi válasza melorin hozzászólására (») Okt 14, 2014 /
 
Szia!
Megosztom az én rotary encoder kódom.
Amit tud: normál sebességű tekerésnél 10-zel csökkenti vagy növeli a változót, "hipergyors" tekerésnél 50-nel, ha lassan tekered, akkor pedig 1-gyel. Felrakom az egész programot, szerintem ki tudod bogarászni belőle ami neked kell. Ez minden kattanásra reagál, és csak egy interrupt pin-t használ fel. Az alap kódot én is úgy találtam, viszont a gyorsulás érzékelés már saját részlet.
  1. #define encoder0PinA  2
  2. #define encoder0PinB  4
  3.  
  4. int perges=5; //pergés mentesítés ms-ban
  5. int hipergyors=22; //gyors sebesség
  6. int hipergyors_valt=50; //érték
  7. int gyors=70;  //normál sebesség  //ennél lassabban megy egyesével!
  8. int gyors_valt=10;
  9. int ertekmax=2400; //0-tól 2400-ig változik az érték
  10. volatile boolean frissit=1;
  11.  
  12. #include "Wire.h"
  13. #include <LiquidCrystal_I2C.h>
  14.  
  15. //ezt majd módosítod, ha neked normál kijelződ van:
  16. LiquidCrystal_I2C lcd(0x26, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
  17.  
  18. volatile unsigned int encoder0Pos = 0;
  19. volatile int idoelozo=1,idomost=20;
  20. void setup() {
  21.   lcd.begin(20,4);
  22.   lcd.clear();
  23.   lcd.setCursor(0,4);
  24.   lcd.write("teszt");
  25.  
  26.   pinMode(encoder0PinA, INPUT);
  27.   digitalWrite(encoder0PinA, HIGH);       // turn on pullup resistor
  28.   pinMode(encoder0PinB, INPUT);
  29.   digitalWrite(encoder0PinB, HIGH);       // turn on pullup resistor
  30.  
  31.   attachInterrupt(0, doEncoder, CHANGE);  // encoder pin on interrupt 0 - pin 2
  32.   Serial.begin (9600);
  33.   Serial.println("start");                // a personal quirk
  34. }
  35.  
  36. void loop(){
  37.   Serial.begin(9600);
  38.   if (frissit)
  39.   //csak akkor frissítjük a kijelzőt, ha változás történik!
  40.   //ezzel nem fog vibrálni a kijelzés. Lehet egy kis delay-t
  41.   //rakni az if elé, ez még csak tesztprogram.
  42.   {
  43.   lcd.setCursor(0,0);
  44.   lcd.write("                     ");
  45.   lcd.setCursor(0,0);
  46.   //itt 0-2400 lehet az encoder0Pos változó, én viszont ennek
  47.   //a 100-ad részét írom ki, tehát 1534 esetén 15.34-et.
  48.   //én feszültség állításra fogom használni.
  49.   if ((encoder0Pos/100)<10) lcd.print(" ");
  50.   //nullát ír ki, ha 10nél kisebb a szám.
  51.   lcd.print(encoder0Pos/100);
  52.   lcd.print(",");
  53.   if ((encoder0Pos%100)<10) lcd.print("0");
  54.   lcd.print(encoder0Pos%100);
  55.   lcd.setCursor(8,0);
  56.   lcd.print((idomost-idoelozo));
  57.   lcd.setCursor(0,2);
  58.   lcd.print("   ");
  59.   lcd.setCursor(0,2);
  60.   //ez pedig csak kis visszajelzés, hogy melyik üzzemód szerint
  61.   //tekerem az encodert.
  62.   if ((idomost-idoelozo)<hipergyors) lcd.print("+++");
  63.   else if ((idomost-idoelozo)<gyors) lcd.print("++");
  64.   else lcd.print("+");
  65.   frissit=0;
  66.   }
  67. }
  68.  
  69. void doEncoder() {
  70.   //ez lenne az interrupt. elég pazarló, rengeteg szempontból!
  71.   //ez még gyorsításra szorul, de az alapdolgok szépen látszanak.
  72.   idoelozo=idomost;
  73.   idomost=millis();
  74.   //érdekes, ha a következő sor if legfelül van, akkor kifagy
  75.   //a program gyors tekerésnél...
  76.   if ((idomost-idoelozo)<=perges) return;  //pergésmentesítés
  77.   frissit=1; //ki kell írni a kijelzőre!
  78.   if (digitalRead(encoder0PinA) == digitalRead(encoder0PinB)) {
  79.     if((idomost-idoelozo)<hipergyors) encoder0Pos-=hipergyors_valt;
  80.     else if((idomost-idoelozo)<gyors) encoder0Pos-=gyors_valt;
  81.     else  encoder0Pos-=1; //balra
  82.   }
  83.   else {
  84.     if((idomost-idoelozo)<hipergyors) encoder0Pos+=hipergyors_valt;
  85.     else if((idomost-idoelozo)<gyors) encoder0Pos+=gyors_valt;
  86.     else  encoder0Pos+=1; //jobbra
  87.   }
  88.   //ha túlfut a határokon, visszaterelem. Ha 0-nál csökkented az
  89.   //értékét, akkor 65000 valamennyi lesz a változó értéke, ezért van
  90.   //két külön if.
  91.   if (encoder0Pos>ertekmax&&encoder0Pos<32000) encoder0Pos=ertekmax;
  92.   if (encoder0Pos>32000)encoder0Pos=0;
  93. }
(#) Kovidivi válasza andykaaa hozzászólására (») Okt 14, 2014 /
 
Vagy még ez is megoldás:
x = x+0.5;
int y = (int)x;
(#) andykaaa válasza Kovidivi hozzászólására (») Okt 14, 2014 /
 
Koszi, azt hiszem ez utobbinal maradok (Arduino - Cast).
Remelem mukodik nalam is.
(#) csabeszq válasza Kovidivi hozzászólására (») Okt 14, 2014 /
 
Igen, ez egy megoldás, bár a kockafejű informatikusok nem rajonganak érte. A lényeg: működik, használható.

Viszont eszméletlen lassú és rengeteg memóriát foglal a mikrokontrolleren. Egy mezei PC-n, vagy laptopon a float/double típusok gyakorlatilag minimálisan lassabbak az int-nél, hardverből tolnak mindent. A minőségi videokártyákról (AMD/NVidia) meg ne is beszéljünk, mert az ottani számítási teljesítmény tényleg brutális.

A mikrovezérlő egyik fenti esetbe sem sorolható és egy mezei float összeadás órajelek százait veszi igénybe, az osztás, szorzás meg még sokkal lassabb.

Kerekítésre használni lebegőpontos aritmetikát az ágyúval verébre lövöldözés tipikus esete.

Ha 1 számjegy pontosságra van szükséged, akkor az int-et felszorzod, 16-tal.
- tört rész: szám AND 15
- egész rész: szám / 16

Amikor a tört rész nagyobb 8-nál (szám AND 15) felfelé kerekítesz.
(#) melorin válasza Kovidivi hozzászólására (») Okt 14, 2014 /
 
Kipróbáltam a kódodat.
Sajnos nem bírom feltölteni az arduinomra, mert fordításkor ezzel a sorral minden baja van:
LiquidCrystal_I2C lcd(0x26, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
(#) Kovidivi válasza melorin hozzászólására (») Okt 14, 2014 /
 
Az könnyen előfordulhat, mivel ott egy I2C-re kötött, 0x26-os címen levő, 20x4-es kijelző használok. Ha neked normál kijelződ van, nem I2C kapcsolattal, akkor ahhoz írd be a megfelelő sort: LiquidCrystal lcd(12, 11, 5, 4, 3, 2); (a lábakat csatlakoztasd megfelelően!!!) , az include részben is cseréld ki erre: #include <LiquidCrystal.h> . A setup részben pedig írd át, ha kisebb kijelződ van, mondjuk 16x2-es erre: lcd.begin(16, 2); . További infók itt: Bővebben: Link
A hozzászólás módosítva: Okt 14, 2014
(#) andykaaa hozzászólása Okt 15, 2014 /
 
Na es LINK a megoldas ?, ez is nagy memoriaigenyu ?
(#) Kovidivi válasza csabeszq hozzászólására (») Okt 15, 2014 /
 
Szia. Ha jól értem, bármilyen műveletnél az egyik tag tört részt tartalmaz, akkor az egész művelet float-ként lesz értelmezve? Gondolok itt pl. az ADC visszaalakítása feszültséggé: (Vref*ADC_erte)/1023 (10bit esetén), az eredmény float lesz, amit mi nem szeretnénk. Mit lehet tenni ilyen esetben?Esetleg mV-ban megadni a Vref-et, így az eredmény is két tizedes jegyig lesz pontos (vagyis le lesz vágva a többi). Vagy a Te módszereddel kerekíthető.
A Te módszered nem nagyon értem, mire gondolsz 1 számjegy pontosságon? 1 tizedes jegyet a vessző után? És hogyan lesz egy egész int számból tizedes jegy?
(#) erdeidominik1999 hozzászólása Okt 15, 2014 /
 
Sziasztok! Szeretnék csinálni arduinoból egy autómata akkumulátortöltőt, arra gondoltam, hogy egy tranzisztorral vezérelném, illetve, hogy egy analogread()-del oldanám meg, de ez azért nem jó, mert ha megy a töltés, akkor nem fogja tudni megmondani az akku feszültségét, mert a töltőáramét fogja mérni, ezért mindíg le fog kapcsolni a töltés. Hogyan lehetne ezt kiküszöbölni, a másik kérdésem milyen tranzisztort használjak? Előre is köszi!
Következő: »»   51 / 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