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   232 / 849
(#) icserny válasza Tóth László hozzászólására (») Máj 21, 2016 /
 
Kockás papír is elég, elvégre nem kell feltalálni a spanyolviaszt, csak a megfelelő angol/latin betűket kell ékezettel kiegészíteni. De fontszerkesztő programokat is találhatsz, ha körbenézel. Például itt: GLCD font creator
(#) airwalker hozzászólása Máj 21, 2016 /
 
Sziasztok!
Van 2 db MCP4261-es digipotim, amiket daisy chainbe lehet kötni. Nekem 4 potméterre van szükségem, viszont nem tudom hogy hogyan címezzem meg a 3. és 4. potit ha csak egy SS lábat használok. Tudok 2 SS pint csinálni? Mert akkor amelyiket LOW-ra teszem, az az ic fogadja a parancsot.
(#) Balázs válasza airwalker hozzászólására (») Máj 21, 2016 /
 
Persze! Az SS lábat amúgy is manuálisan kellene kapcsolgatni (AVR alapú Arduinóknál legalábbis).
(#) bunny válasza Tóth László hozzászólására (») Máj 22, 2016 / 1
 
Karaktert készíteni nem ördöngősség, itt egy példa saját kódból, igaz más mátrix de a logikát meg tudod érteni. Ez egy balra nyíl, az 1-es ahol be van kapcsolva a pixel, így rögtön látod a formát, nem kell se kockáslap se tervező, én így a tömbben rajzoltam ki minden egyedi ikonomat.

byte iconArrowLeft[8] = {
B00010,
B00100,
B01000,
B10111,
B01000,
B00100,
B00010,
};

#define CHAR_LEFT 3
lcd.createChar(CHAR_LEFT, iconArrowLeft);

Így íratod ki:
lcd.write(byte(CHAR_LEFT));

A CHAR_LEFT csak a 3-mas karakterkód helyettesítése, nyilván nem kötelező nevet adni. Illetve rárakhatod már létező karakter kódjára, ha nem akarsz byte()-ozgatni.
Ha nem akarsz nulláról indulni, ahogy már többet ajánlották fogsz egy ékezet nélkülit és átrajzolod, de mivel a hely elég kevés, valószínűleg jobb előről kezdeni.
A hozzászólás módosítva: Máj 22, 2016
(#) szeg76 válasza Tóth László hozzászólására (») Máj 22, 2016 /
 
Átírásra nem vállalkozok, de ötletet talán tudok adni.

Kezdetnek bővítsd ki a font8x16_basic tömböt ezzel a sorral (ez legyen az utolsó elem):
/* Á (128) */ 0x08, 0x10, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00

Ez az 'Á' betű karakterképe, a program drawChar() függvénye a 128-as karakterkód hatására rajzolja ki.

Legyen message[]="BOGLÁRKA ";
Futtasd le a programot: Á helyett két zizis valamit fog kirajzolni, nem lesz jó.

Legyen most message[]="BOGL\200RKA ";
A '\200' 128-as értéket helyettesít be a karakterlánc adott helyén, ami Á betűt fog eredményezni.

Fapados, kicsit nehezen olvasható szöveg, de már lehet kezdeni vele valamit.


Emberi formátumú szöveg kezeléséhez több programozásra lesz szükség:

-Először is írd össze, milyen nem ASCII karaktereket akarsz használni.

-Rajzold meg a képüket a font8x16_basic tömbben.

-Derítsd ki, milyen kódok tartoznak az illető karakterekhez, például figyeld meg soros monitoron az alábbi program kimenetét:
  1. Serial.begin(4800);
  2. Serial.println((unsigned)'Á', HEX);
  3. Serial.println((unsigned)'á', HEX);

A nem ASCII karaktereket több bájtos kód írja le, az 'Á'-t valószínűleg 0xC381, 'á'-t 0xC3A1, stb.

-Írni kell egy olyan függvényt, ami bájtonként sorra veszi a kiíratandó szöveget, az ASCII karaktereket változás továbbítja a drawChar() felé, míg egy beeső 0xC3, C5, ilyesmi esetén megnézi a következő bájtot is és a kettő alapján ad drawChar()-nak egy karakterkép-kódot, példánkban 'Á' vagyis 0xC381 esetén 128-at.
(#) snapscan válasza szeg76 hozzászólására (») Máj 22, 2016 /
 
A 256 byte-os ASCII táblázatban már szerepelnek ékezetes karakterek, tehát byte-on belül marad minden (amit a drawchar rutin le is kezel). Két út van (mindkettőhöz meg kell szerkeszteni a magyar ékezetes karaktereket, de első esetben nem kell külön programozni):
1. A magyar karaktereket defíniálod az ASCII táblázat szerinti helyükre (pl. 'Á' helye dec 193), a tömb többi elemét dec 128-tól az utolsó magyar ékezetes karakterig teli kell írni nullával, a tömb az utolsó magyar ékezetes karakternél befejezhető. Ez eszi a memóriát, de nyugodtan használható a message[]="BOGLÁRKA ", le fogja kezelni, nem kell pluszban programozni semmit.
2. tetszőleges sorrendben defíniálod a magyar karaktereket a tömbben a dec 128-as helyről, és a drwachar() rutinban az elején egy if vagy switch/case utasítássorral beállítod a megfelelő indexet. Így kisebb lesz a tömb, nem tartalmaz felesleges adatokat, de programozni kell. Előbbi példánál maradva: 'Á' defíniálva a tömbben a 128-as helyre, a drwachar rutinba pedig beírod: if (n==193) n=128; A többi karakterrel ugyanígy eljársz.
Ha van még memória, én az első változatot használnám, később is jól jöhet..
(#) Tóth László válasza szeg76 hozzászólására (») Máj 22, 2016 /
 
köszönöm a sok értékes hozzászólást, tanácsot ezek mind jó kiindulási alapot adnak
(#) Tibicsek hozzászólása Máj 24, 2016 /
 
Üdv! segítséget szeretnék kérni írtam egy félkész programot, de ott elakadtam, hogy milliszekundumot átkellene alakítani órába percbe és másodpercbe ebben szeretnék segítséget kérni senkise nézze eddig nagyon a programot még nincsnagyon kész
  1. #include <LiquidCrystal.h>
  2.  
  3. const int led = 52;
  4. const int led2 = 51;
  5. unsigned long currentMillis;
  6. unsigned long previousMillis;
  7. int interval = 100000;
  8. unsigned long time;
  9. int stat;
  10. unsigned long perc;
  11. unsigned long masodperc;
  12. unsigned long hours;
  13. float oszto = 0.0166666667;
  14.  
  15. LiquidCrystal lcd(9,8,7,6,5,4);
  16.  
  17. void setup(){
  18.   lcd.begin(16,2);
  19.   pinMode(led, OUTPUT);
  20.   pinMode(led2, OUTPUT);
  21. }
  22.  
  23. void loop(){
  24. currentMillis=millis();
  25. if(currentMillis-previousMillis<interval){
  26. time= interval-(currentMillis-previousMillis);
  27. }else{
  28.   stat++;
  29. previousMillis=millis();
  30. }
  31. if (stat == 1){
  32.   digitalWrite(led, HIGH);
  33. }
  34. if (stat == 2){
  35.   digitalWrite(led, LOW);
  36.   digitalWrite(led2, HIGH);
  37. }
  38. if (stat ==3){
  39.   stat = 0;
  40. }
  41. /*masodperc = time / 1000;
  42. perc = masodperc / oszto;
  43. if (masodperc>59){
  44.   masodperc==0;
  45. }
  46. lcd.setCursor(7,0);
  47. lcd.print(masodperc);
  48. lcd.setCursor(1,0);
  49. lcd.print(perc);*/
  50. lcd.setCursor(1,1);
  51. lcd.print(stat);
  52. }
A hozzászólás módosítva: Máj 24, 2016
(#) szeg76 válasza Tibicsek hozzászólására (») Máj 24, 2016 /
 
  1. mp=msec/1000;   // eltelt másodpercek összesen
  2. masodperc=mp%60; // másodperc 0..59
  3. perc=(mp/60)%60;  // perc 0..59
  4. hours=(mp/3600)%24;  // óra 0..23
(#) Tibicsek válasza szeg76 hozzászólására (») Máj 24, 2016 /
 
Ez jó köszönöm szépen! Az a baj, hogyha az intervalba 100000-et töltök akkor a kijelzőn - számok jelennek meg, ha pedig unsigned long-al int helyett akkorse jó a számlálás milehet itt a baj?
(#) kapu48 válasza Tibicsek hozzászólására (») Máj 24, 2016 /
 
Ne töltsé bele 100000-et
Int érték határ

Használj inkább:
UnsignedLongot

unsigned long time = millis();
A hozzászólás módosítva: Máj 24, 2016
(#) Tibicsek válasza kapu48 hozzászólására (») Máj 24, 2016 /
 
Köszönöm! Még egy kérdés, ha megengeded, miért van az, hogy ha a másodperc 10 alá megy akkor nem 09-08-07 stb így folytatja, hanem 90-80-70?
(#) szeg76 válasza Tibicsek hozzászólására (») Máj 24, 2016 /
 
A tizes nullája bent maradt a kijelzőben, és mivel utána egyjegyű számokat íratsz ki, ez lesz az eredmény.
Próbáld ilyen formában a kiíratást:
  1. lcd.setCursor(7,0);
  2. if(masodperc<10) LCD.print(' '); // vagy '0'
  3. lcd.print(masodperc);
A hozzászólás módosítva: Máj 24, 2016
(#) Tóth László válasza snapscan hozzászólására (») Máj 25, 2016 /
 
Üdv. elakadtam, nem tudom az ékezetes karaktereket megszerkeszteni, ehhez szeretnék segítséget kérni
(#) Balázs válasza Tóth László hozzászólására (») Máj 25, 2016 / 2
 
Nézzük például a K betűt. Ez a 16 bájt van hozzá definiálva:
  1. 0x00, 0x00, 0x00, 0xE6, 0x66, 0x66, 0x6C, 0x78, 0x78, 0x6C, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00

Minden bájt egy sort jelent. Ha kirajzolod egymás alá a bitmintákat, már látod is a K betűt:
  1. 00000000  -->  . . . . . . . .
  2. 00000000  -->  . . . . . . . .
  3. 00000000  -->  . . . . . . . .
  4. 11100110  -->  X X X . . X X .
  5. 01100110  -->  . X X . . X X .
  6. 01100110  -->  . X X . . X X .
  7. 01101100  -->  . X X . X X . .
  8. 01111000  -->  . X X X X . . .
  9. 01111000  -->  . X X X X . . .
  10. 01101100  -->  . X X . X X . .
  11. 01100110  -->  . X X . . X X .
  12. 01100110  -->  . X X . . X X .
  13. 11100110  -->  X X X . . X X .
  14. 00000000  -->  . . . . . . . .
  15. 00000000  -->  . . . . . . . .
  16. 00000000  -->  . . . . . . . .

Ez alapján remélem, érthető, hogyan tudsz saját karaktereket szerkeszteni.
A hozzászólás módosítva: Máj 25, 2016
(#) Tóth László válasza Balázs hozzászólására (») Máj 25, 2016 /
 
Üdv. Köszönöm, eddig teljesen érthető amit levezettél, ebből hogyan olvasható, szerkeszthető
a felső táblázat.
(#) Kera_Will válasza Tóth László hozzászólására (») Máj 25, 2016 /
 
  1. 1. 00000000  -->  . . . . . . . .
  2. 2. 00000000  -->  . . . . . . . .
  3. 3. 00000000  -->  . . . . . . . .
  4. 4. 11100110  -->  X X X . . X X .
  5.                   8 4 2 1 8 4 2 1

Ezek az első 3 sor 00 -k mert mindeütt pont van
a 4dik sor E6(hex) az nem áll másból mint a felső 4 bit hexa E-t adja ki alsó 4 bit pedig a hexa 6ot
szét választva a 8 bit / pixel a 4dik sorban :
(ahol X van az 1 ahol . van az 0)
felső 4bit alsó 4bit
1110 * 0110
1110 ---> 8+4+2 = 14(dec) -->> E (hex)
0110 ---> 4+2 = 6 (dec) ---> 6 (hex)
ezért van a 4dik helyen 0xE6 hexa érték a karaktert leíró adattáblában.

Így már érthető ?
A hozzászólás módosítva: Máj 25, 2016
(#) Kera_Will válasza Tóth László hozzászólására (») Máj 25, 2016 /
 
  1. 2 hatványai       7 6 5 4 3 2 1 0
  2. 4. 11100110  -->  X X X . . X X .
  3.                   8 4 2 1 8 4 2 1

Az egyszerűbb hexadecimális átváltáshoz szét választjuk alsó és felső 4 - 4 bitre a 8 bites számot és külön külön fél bájtonként , elvégezzük a hexadecimális konvertálást.
A hozzászólás módosítva: Máj 25, 2016
(#) Tóth László válasza Kera_Will hozzászólására (») Máj 25, 2016 /
 
Üdv. még nem értem, hogy az 5-k sorban lévő számsort honnan származtatjuk /ez minden 8 bites rendszerre igaz :
(#) Kera_Will válasza Tóth László hozzászólására (») Máj 25, 2016 /
 
  1. 5. 01100110  -->  . X X . . X X .
  2. dec               8 4 2 1 8 4 2 1
  3. 2hatv             3 2 1 0 3 2 1 0  mert a hexa konverzióhoz így könnyű akár fejben is megoldani


akkor nézzük újra :
felső 4 bit : 0110 --->> 0+4+2+0 = 6 dec -->> 6 hex
alsó 4 bit : 0110 --->> 0+4+2+0 = 6 dec -->> 6 hex
(0 mert pont van azon a biten 1 mert X van azon a biten)

ezért lesz a 0x66 a 5. sorban / pozícióban

Folytassam ? Van még vissza 10 sor vagy meg tudod magadtól is csinálni a binárisról hexadecimális átváltásokat most már ?!
A hozzászólás módosítva: Máj 25, 2016
(#) Kera_Will válasza Tóth László hozzászólására (») Máj 25, 2016 /
 
számrendszerek közti átváltás :
16os hexadecimális számrendszer alapjai
2es bináris számrendszerről írások
A 8-as oktális számrendszerről
uController programozáshoz némi bináris , decimális, hexadecimális , oktális számrendszerek ismerete is szükséges.
A hozzászólás módosítva: Máj 25, 2016
(#) Tóth László válasza Kera_Will hozzászólására (») Máj 25, 2016 /
 
decimálisról hexadecimálisra történő átváltás már megy, 5-k sorra /8, 4, 2, 1/ sikerült rájönnöm az valójában a 2 hatványa
köszönöm, ezt a szájbarágós, érthető levezetést
(#) RoliNyh válasza Tóth László hozzászólására (») Máj 25, 2016 /
 
Ha nem akarsz magad számolgatni, a windows számológép (calculator) átváltja helyetted is...
(Mindent mindenre)
A hozzászólás módosítva: Máj 25, 2016
(#) bunny válasza Tóth László hozzászólására (») Máj 25, 2016 / 1
 
Ne vedd magadra, nem személyeskedésből írom, de azért hajmeresztő, hogy valaki programozni akar és gőze sincs a binális és hexa számokról. Basszus itt tart már az oktatás színvonala?
Oké, hogy már nem kell gépikódban programozni és regisztereket shiftelgetni, de azért még mindig így működik a számítógép és ahogy látható még mindig nem árt tisztába lenni az alapokkal, ha az ember meg akar érteni dolgokat. Mondjuk egy logikai AND / OR / XOR enélkül igencsak nehézkesen fogható fel. Vagy akár egy html RGB színkódot.
(#) Kera_Will válasza RoliNyh hozzászólására (») Máj 25, 2016 /
 
Az nem jó mert akkor soha se fog rajta gondolkodni és soha nem is fogja megérteni.
(#) csabeszq válasza bunny hozzászólására (») Máj 25, 2016 /
 
Ha ma az iskolában a nebulókkal programozás címszó alatt hexadecimális / bináris számrendszereket nyomnának, hát nem győzném szapulni a tanárokat, hogy a 80-as évek már elmúltak.

Az informatika hatalmas részéről kiszorult a hexadecimális/bináris aritmetika. Az int32 a problémák 99%-ára elég, de manapság már az int64 megy, mert 64 bites rendszerek vannak szinte mindenütt. Elmúlt az a kor, hogy tudni kellett, hogy mennyi az int felső határa. Fogalmam sincs, internet nélkül meg nem mondom, hogy mekkora a legnagyobb szám, amit az int32/64 lefed. Nem is érdekel.

A modern szoftverfejlesztésben (java, C#, C++, javascript,...) mi a fenét kezdesz egy hexadecimális számmal? Milyen problémát tudsz vele megoldani?

A fenti bináris kijelzős feladat megoldása PC-n az, hogy felinstallálod a TTF-et, amit grafikusok megrajzoltak, meghívod a metódust, amelyik kirajzolja a képernyőre és kész.

Arduino alatt pont azért használsz hexadecimális aritmetikát, amiért C64-en is használtak: kicsi int-méret, nincsenek előre megírt könyvtárak, amik feleslegessé teszik tudnod, hogy melyik regiszter mit csinál, satöbbi. Vedd észre, hogy a hexadecimális aritmetika elavult, kizárólag mikrovezérlők alatt maradt némi értelme, de ott sem túl sokáig lesz már.

A mikrovezérlők szépen lassan térnek át 32 bites processzorokra, beépített ROM függvényekkel (ESP8266, Raspberry Pi), ahol nincs többé regiszter írogatás, hanem meghívod, hogy I2C szolgát szeretnél elindítani. Hexadecimális számoknak meg jóformán semmi értelme, decimálisan is megadhatod őket, ha úgy jobban tetszik.
A hozzászólás módosítva: Máj 25, 2016
(#) Kera_Will válasza csabeszq hozzászólására (») Máj 25, 2016 /
 
... És így múlik el a világ dicsősége ... ... mindenki a (fél)kész osztályokat eszi, nem kap mást.
Aztán csodálkozunk , hogy a sokadik gigaherzes sokadik magos procin se fut / bútol be a rendszer gyorsabban mint a 2 lemezes XT-s időkben
(#) RoliNyh hozzászólása Máj 25, 2016 /
 
Arról nem is beszélve, hogy már egy nyomorult oprendszernek is 10GB hely kell a háttértáron...
(#) csabeszq válasza RoliNyh hozzászólására (») Máj 25, 2016 /
 
Senki nem fizeti nekem meg, hogy kis kódot írjak. Lehetne feleakkora ötször gyorsabb kód, sokkal több munkával.

A munkabérem magasabb, mint 1TB merevlemez ára, ezért elegánsan legyint mindenki, ha nagy kódot írok, vagy 1MB memóriát ideiglenesen lefoglalok.

Arduino alatt az idő zöme azzal megy el, hogy a 2k RAM elég legyen. Az emberi munka is pénz, nem is kevés.
A hozzászólás módosítva: Máj 25, 2016
(#) RoliNyh válasza csabeszq hozzászólására (») Máj 25, 2016 /
 
Egyáltalán nem is rád gondoltam...
A hozzászólás módosítva: Máj 25, 2016
Következő: »»   232 / 849
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