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   70 / 854
(#) atus1981 hozzászólása Dec 28, 2014 /
 
Köszi a hőmérős ötleteket, már megy is
(#) Kovidivi válasza Panhard hozzászólására (») Dec 29, 2014 /
 
A programmemória 75%-on van, de lehet a RAM-od tele. Rakj be egy kis programot, ami megmondja, hány byte szabad. Próbáld meg a soros portos szövegeket mindenhol kikapcsolni ideiglenes, hátha az zavar be. Nem tudom, hogy interrupt megszakíthatja-e, de ha igen, akkor az érdekes lehet. Lehet, hogy Te vagy egy másik külsős funkció átállította pl. a timer0-t, Te meg delay-t használsz. Ezek jutottak eszembe. Nálam még az is probléma volt, ha olyan elemére hivatkoztam egy tömbnek, ami nem létezett, stb.
(#) Panhard válasza Kovidivi hozzászólására (») Dec 29, 2014 /
 
Szia! Megnéztem a RAMot, 297 bájt szabad. A programban szerintem nincs hiba, mert működik, ha csökkkentem a méretét, 78% alá. Még arra gondoltam, hogy a bootloader-t nem számolja bele az Arduino, az ugye 8K, az ATMEGA328P az ugye 32K. Ha ezt így számoljuk, akkor 75%-nál már tele van a kontroller.
A hozzászólás módosítva: Dec 29, 2014
(#) Medve válasza Panhard hozzászólására (») Dec 29, 2014 /
 
hello, érdemesebb lenne (?) a 2k-s bootloadert használnod, sőt akár a 0.5k-sat is.
(#) andykaaa hozzászólása Dec 30, 2014 /
 
Sziasztok
Van egy mukodo (mert csak programozasra hasznaltam) ArduinoUNO lapkam, de sikerult kiegetni az osszes tobbi ATMega328 botloaderes IC-imet.
Vasaroltam is nehany szuz ATMega328-at , viszont a neten nagyon sokfele infot talaltam a botloader feltoltesere.
Azt szeretnem kerdezni hogy az UNO eseteben ezzel a megoldassal (16MHz kristaly, 10 K ellenallas es kondenzatorok) feltolthetem a szuz ATMega328-ra a botloadert ?
Botloader irasa kozbe el kell, vagy nem, tavolitani az UNO lapkabol az IC-t ?
Esetleg tudtok egy eggyertelmubb leirast valahol ?
Koszonom.
(#) Kovidivi válasza andykaaa hozzászólására (») Dec 30, 2014 /
 
Szerintem egyértelmű a leírás. Két lehetőség van. Az egyik, amikor a Bootloader töltöd az Atmega-ba, akkor SPI csatlakozó csatlakozik az üres Atmega SPI-jére. Ha megvan a Bootloader, csak utána tudsz RX TX-en keresztül programot tölteni az Atmega-ba. Nem Bootloadert, hanem Programot! Bootloader 1x kerül az Atmega-ba, és ott is marad.
Én pl. programot egy Arduino mini-re úgy rakok, hogy RX,TX, Reset, +VS, GND össze van kötve az UNO-val, a programban a menüből kiválasztom, hogy Atmega328p, és feltöltés. Nem veszek ki semmi IC-t, egy-az-egyben megy a programozás (feltéve, ha az UNO-n nincs semmi program, ami soros porton kommunikálni. Ilyen időkre felrakok rá egy villogó programot, addig is csináljon valami hasznosat ). Ha normál DIP-es Atmega328-at akarsz programozni, akkor RX,TX kommunikációkor ki kell venni az UNO-ból az Atmega-t. Nem próbáltam ki, de lehetséges, hogy ha nem veszed ki, mindkét IC tartalma azonos lesz Bár előtte ki lesz olvasva egy azonosító, tehát nem valószínű. Inkább csak simán nem fog feltöltődni a programod.
A hozzászólás módosítva: Dec 30, 2014
(#) andykaaa válasza Kovidivi hozzászólására (») Dec 30, 2014 /
 
Pontosan ilyen lapkam van es DIP-es Atmega328 -at akarok programozni, termeszetesen eloszor botloader-t es aztan a trobbi.
A botloader feltoltesevel vana gond.
A hozzászólás módosítva: Dec 30, 2014
(#) Kovidivi válasza andykaaa hozzászólására (») Dec 30, 2014 /
 
Akkor összerakod a Breadboard-os kapcsolást, és SPI-ket összekötöd, a rajz alapján. Aztán csak a programban kiválasztod, hogy bootloader írása. Sok sikert. Kövesd a leírást! Ha kell, fordítsd le.
A hozzászólás módosítva: Dec 30, 2014
(#) andykaaa hozzászólása Dec 30, 2014 /
 
Hellotok, probalkozom a bootloaderrel de csak azt irja ki hogy "Hiba lepett fel ..."
Idézet:
„Using Port : \\.\COM9
Using Programmer : stk500v1
Overriding Baud Rate : 19200
avrdude: Send: 0 [30] [20]
avrdude: Send: 0 [30] [20]
avrdude: Send: 0 [30] [20]
avrdude: Recv:
avrdude: stk500_getsync(): not in sync: resp=0x00

avrdude done. Thank you.”

ennyi
Hol hibaztam ?
A hozzászólás módosítva: Dec 30, 2014
(#) mikrokapcsolo válasza andykaaa hozzászólására (») Dec 30, 2014 /
 
A 21-es lábat is kösd tápra, hátha segít.
(#) andykaaa válasza andykaaa hozzászólására (») Dec 30, 2014 /
 
Most meg ezt irja, csatolasba (hosszu),

ERROR.txt
    
(#) mikrokapcsolo válasza andykaaa hozzászólására (») Dec 30, 2014 /
 
A hibakód alapján reset problémái vannak. Bővebben: Link
mellesleg, most nézem, a reset lábnál az az ellenállás miért a gnd-re húzza a reset lábat? Kösd át, hogy felhúzó ellenállás legyen.
(#) andykaaa válasza mikrokapcsolo hozzászólására (») Dec 30, 2014 /
 
"Done burning bootloader"
Koszonom a segitsegeteket.
"Sok szem tobbet lat", legalabb 5 x neztem at es megis bejott a hiba.
Koszonom, meglett.
Egy tovabbi szep estet mindenkinek.
(#) erdeidominik1999 hozzászólása Dec 30, 2014 /
 
Sziasztok! Vettem egy 16x16-os mátrix led panelt, programot találtam is hozzá, de nem értem, mi alapján tudom meghatározni, hogy melyik világítson és melyik ne. Előre is köszi a válaszokat!
  1. #include <Arduino.h>
  2.  
  3. //IO    
  4. #define LEDARRAY_D 2
  5. #define LEDARRAY_C 3
  6. #define LEDARRAY_B 4
  7. #define LEDARRAY_A 5
  8. #define LEDARRAY_G 6
  9. #define LEDARRAY_DI 7
  10. #define LEDARRAY_CLK 8
  11. #define LEDARRAY_LAT 9
  12.  
  13.  
  14. unsigned char Display_Buffer[2];
  15. const unsigned char  Word1[1][32] =
  16. {//*********************************************************************
  17. 0xff,0xff,0x80,0x01,0x80,0x01,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x80,0x03,
  18. 0x80,0x03,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x9f,0xff,0x80,0x01,0x80,0x01,0xff,0xff
  19. };//ugye itt kéne megadni, hogy melyik világítson, de hogyan?**********************
  20.  
  21.  
  22. void setup()
  23. {
  24.         pinMode(LEDARRAY_D, OUTPUT);
  25.         pinMode(LEDARRAY_C, OUTPUT);
  26.         pinMode(LEDARRAY_B, OUTPUT);
  27.         pinMode(LEDARRAY_A, OUTPUT);
  28.         pinMode(LEDARRAY_G, OUTPUT);
  29.         pinMode(LEDARRAY_DI, OUTPUT);
  30.         pinMode(LEDARRAY_CLK, OUTPUT);
  31.         pinMode(LEDARRAY_LAT, OUTPUT);
  32. }
  33.  
  34. void loop()
  35. {
  36.         Display(Word1);
  37. }
  38.  
  39.  
  40.  
  41. //************************************************************
  42.  
  43. //*************************************************************
  44. void Display(const unsigned char dat[][32])                                    
  45. {
  46.         unsigned char i;
  47.  
  48.         for( i = 0 ; i < 16 ; i++ )
  49.         {
  50.                 digitalWrite(LEDARRAY_G, HIGH);        
  51.                
  52.                 Display_Buffer[0] = dat[0][i];         
  53.                 Display_Buffer[1] = dat[0][i+16];
  54.  
  55.                 Send(Display_Buffer[1]);
  56.                 Send(Display_Buffer[0]);
  57.  
  58.                 digitalWrite(LEDARRAY_LAT, HIGH);                                        
  59.                 delayMicroseconds(1);
  60.        
  61.                 digitalWrite(LEDARRAY_LAT, LOW);
  62.                 delayMicroseconds(1);
  63.  
  64.                 Scan_Line(i);                                                  
  65.  
  66.                 digitalWrite(LEDARRAY_G, LOW);
  67.                
  68.                 delayMicroseconds(100);;                       
  69.         }      
  70. }
  71.  
  72. //****************************************************
  73.  
  74. //****************************************************
  75. void Scan_Line( unsigned char m)
  76. {      
  77.         switch(m)
  78.         {
  79.                 case 0:                
  80.                         digitalWrite(LEDARRAY_D, LOW);digitalWrite(LEDARRAY_C, LOW);digitalWrite(LEDARRAY_B, LOW);digitalWrite(LEDARRAY_A, LOW);                                       
  81.                         break;
  82.                 case 1:                                
  83.                         digitalWrite(LEDARRAY_D, LOW);digitalWrite(LEDARRAY_C, LOW);digitalWrite(LEDARRAY_B, LOW);digitalWrite(LEDARRAY_A, HIGH);              
  84.                         break;
  85.                 case 2:                                
  86.                         digitalWrite(LEDARRAY_D, LOW);digitalWrite(LEDARRAY_C, LOW);digitalWrite(LEDARRAY_B, HIGH);digitalWrite(LEDARRAY_A, LOW);              
  87.                         break;
  88.                 case 3:                                
  89.                         digitalWrite(LEDARRAY_D, LOW);digitalWrite(LEDARRAY_C, LOW);digitalWrite(LEDARRAY_B, HIGH);digitalWrite(LEDARRAY_A, HIGH);             
  90.                         break;
  91.                 case 4:
  92.                         digitalWrite(LEDARRAY_D, LOW);digitalWrite(LEDARRAY_C, HIGH);digitalWrite(LEDARRAY_B, LOW);digitalWrite(LEDARRAY_A, LOW);              
  93.                         break;
  94.                 case 5:
  95.                         digitalWrite(LEDARRAY_D, LOW);digitalWrite(LEDARRAY_C, HIGH);digitalWrite(LEDARRAY_B, LOW);digitalWrite(LEDARRAY_A, HIGH);             
  96.                         break;
  97.                 case 6:
  98.                         digitalWrite(LEDARRAY_D, LOW);digitalWrite(LEDARRAY_C, HIGH);digitalWrite(LEDARRAY_B, HIGH);digitalWrite(LEDARRAY_A, LOW);             
  99.                         break;
  100.                 case 7:
  101.                         digitalWrite(LEDARRAY_D, LOW);digitalWrite(LEDARRAY_C, HIGH);digitalWrite(LEDARRAY_B, HIGH);digitalWrite(LEDARRAY_A, HIGH);            
  102.                         break;
  103.                 case 8:
  104.                         digitalWrite(LEDARRAY_D, HIGH);digitalWrite(LEDARRAY_C, LOW);digitalWrite(LEDARRAY_B, LOW);digitalWrite(LEDARRAY_A, LOW);              
  105.                         break;
  106.                 case 9:
  107.                         digitalWrite(LEDARRAY_D, HIGH);digitalWrite(LEDARRAY_C, LOW);digitalWrite(LEDARRAY_B, LOW);digitalWrite(LEDARRAY_A, HIGH);             
  108.                         break
  109.                 case 10:
  110.                         digitalWrite(LEDARRAY_D, HIGH);digitalWrite(LEDARRAY_C, LOW);digitalWrite(LEDARRAY_B, HIGH);digitalWrite(LEDARRAY_A, LOW);             
  111.                         break;
  112.                 case 11:
  113.                         digitalWrite(LEDARRAY_D, HIGH);digitalWrite(LEDARRAY_C, LOW);digitalWrite(LEDARRAY_B, HIGH);digitalWrite(LEDARRAY_A, HIGH);            
  114.                         break;
  115.                 case 12:
  116.                         digitalWrite(LEDARRAY_D, HIGH);digitalWrite(LEDARRAY_C, HIGH);digitalWrite(LEDARRAY_B, LOW);digitalWrite(LEDARRAY_A, LOW);             
  117.                         break;
  118.                 case 13:
  119.                         digitalWrite(LEDARRAY_D, HIGH);digitalWrite(LEDARRAY_C, HIGH);digitalWrite(LEDARRAY_B, LOW);digitalWrite(LEDARRAY_A, HIGH);            
  120.                         break;
  121.                 case 14:
  122.                         digitalWrite(LEDARRAY_D, HIGH);digitalWrite(LEDARRAY_C, HIGH);digitalWrite(LEDARRAY_B, HIGH);digitalWrite(LEDARRAY_A, LOW);            
  123.                         break;
  124.                 case 15:
  125.                         digitalWrite(LEDARRAY_D, HIGH);digitalWrite(LEDARRAY_C, HIGH);digitalWrite(LEDARRAY_B, HIGH);digitalWrite(LEDARRAY_A, HIGH);           
  126.                         break;
  127.                 default : break;       
  128.         }
  129. }
  130.  
  131. //****************************************************
  132.      
  133. //****************************************************
  134. void Send( unsigned char dat)
  135. {
  136.         unsigned char i;
  137.         digitalWrite(LEDARRAY_CLK, LOW);
  138.         delayMicroseconds(1);; 
  139.         digitalWrite(LEDARRAY_LAT, LOW);
  140.         delayMicroseconds(1);;
  141.  
  142.         for( i = 0 ; i < 8 ; i++ )
  143.         {
  144.                 if( dat&0x01 )
  145.                 {
  146.                         digitalWrite(LEDARRAY_DI, HIGH);       
  147.                 }
  148.                 else
  149.                 {
  150.                         digitalWrite(LEDARRAY_DI, LOW);
  151.                 }
  152.  
  153.                 delayMicroseconds(1);
  154.                 digitalWrite(LEDARRAY_CLK, HIGH);                                
  155.                         delayMicroseconds(1);
  156.                 digitalWrite(LEDARRAY_CLK, LOW);
  157.                         delayMicroseconds(1);          
  158.                 dat >>= 1;
  159.                        
  160.         }                      
  161. }
(#) kapu48 válasza erdeidominik1999 hozzászólására (») Dec 31, 2014 /
 
Biztosan ismered a számok Hexa ill. Bináris ábrázolását?
Programozó számológép Hex állapotában beírod, az említet értékeket, és átváltasz Bin állapotra.
A kapott 16*16 bit Mátrix jelképezi a LED-ek állapotát.:
11111111 11111111
10000000 00000001
….
...
A hozzászólás módosítva: Dec 31, 2014
(#) Kovidivi hozzászólása Dec 31, 2014 /
 
Sziasztok!
Az hogyan lehet, hogy ez a feltétel nem fut le, ha az egyik tömbben 99, a másikban pedig 9 van?
if (!(pontosido[0]==elozoido[0])) ? Visszaírattam soros porton, tényleg ez a két érték van bennük. És nem úgy van a szám eltárolva, hogy pontosido[0]=9, pontosido[1]=9, hanem pontosido[0]=99.
CodeBlocks-ban rendesen lefut, akkor a változóknál kell kutatkodnom... Köszönöm.
A hozzászólás módosítva: Dec 31, 2014
(#) Kovidivi válasza Kovidivi hozzászólására (») Dec 31, 2014 /
 
Meg lett a hiba. A feltétel lefutott, csak utána én vétettem hibát. Bocs a zavarásért!
Dominik: multiplexálásnak nézz utána, itt hobbielektronikán van róla egy szuper cikk. A lényeg, hogy egyszerre csak pár LED világít, és végig van pásztázva minden a 16x16 LED, de olyan gyorsan, hogy állóképnek látod. Kapcsolási rajzot is linkelj, akkor írok róla pár szót, hogyan tudsz csak 1 LED-et bekapcsolni.
Ahol a sok HEX-a kód van, abban csak karakterek vannak letárolva, vagy valami minta, azt küldi ki a kontroller a LED-ek felé. Ha átírsz párat HEX-ből BIN-be egymás alá, rá fogsz jönni, hogy mit akart ábrázolni. Pl. az első pár szám: Bővebben: Link
1111 1111
1111 1111
1000 0000
0000 0001
1000 0000
0000 0001
1001 1111
... Ez mondjuk semmire sem hasonlít.
A hozzászólás módosítva: Dec 31, 2014
(#) andykaaa hozzászólása Jan 1, 2015 /
 
B.U.É.K. !
(#) erdeidominik1999 válasza Kovidivi hozzászólására (») Jan 1, 2015 /
 
Köszi, már működik és B.U.É.K!
Lenne még egy olyan kérdésem, hogy azt hogyan lehetne megcsinálni, hogy ha csinálok arduinoból egy webszervert, de a weboldal html-ben sd kártyán van, akkor az arduinotól kifelé a weboldal felé hogyan tudnék adatokat továbábbítani?
A hozzászólás módosítva: Jan 1, 2015
(#) Kovidivi válasza erdeidominik1999 hozzászólására (») Jan 1, 2015 /
 
Nincs rá ötletem.
(#) Panhard válasza erdeidominik1999 hozzászólására (») Jan 1, 2015 /
 
Én a napokban csináltam ilyen webszervert, remekül működik.
Bővebben: Link
(#) erdeidominik1999 válasza Panhard hozzászólására (») Jan 2, 2015 /
 
Ezer hála, sokat segítettél!
(#) sanya26 hozzászólása Jan 2, 2015 /
 
Sziasztok!

Még csak most ismerkedem a programozással és az arduinoval, szóval egy kis segítséget, tanácsot kérnék mivel a mikroprocik lelki világát annyira nem ismerem.
Ha egy lábat bemenetnek használok optocstolós leválasztással és bekapcsolom a felhúzó ellenállást akkor elég ez, vagy kívülre is kell (R1)? Így gondoltam, mint a mellékelt képen látható. Működő képes megoldás ez?
Ha én a bemeneti lábon csak azt nézem, hogy van-e 5V, vagy nincs, azt analóg bemeneten hogy tudom megcsinálni? ADC-t külön be kell kapcsolni, vagy automatikusan átalakítja a megfelelő digitális jellé? És ezt, hogy tudom felhasználni?
A segítségetek előre is köszönöm.

Névtelen.jpg
    
(#) mikrokapcsolo válasza sanya26 hozzászólására (») Jan 2, 2015 /
 
Ha INPUT_PULLUP ként adod meg a lábat, nem kell külső felhúzó ellenállás. Nem kell bekapcsolni, csak arra a lábra kell kötni a bemenetet, mint amelyiknek megmondod, hogy bemenet, és a programban lekéred az értéket.
(#) sanya26 válasza mikrokapcsolo hozzászólására (») Jan 2, 2015 /
 
Jól gondolom, hogy a második mondatod a második kérdésemre a válasz?
Akkor ezek szerint rákötöm az 5V-ot az analog bemenetre és beolvasom az értékét. Az eredményül 1023-at kapok? Jól gondolom?
Ehhez viszont gondolom használnom kell a referencia lábat is amire 5V-ot kell kötnöm?

INPUT_PULLUP esetén nem kell külön bekapcsolnom a felhúzó ellenállást. Jól gondolom?
A hozzászólás módosítva: Jan 2, 2015
(#) mikrokapcsolo válasza sanya26 hozzászólására (») Jan 2, 2015 /
 
Ha a setupban úgy adod meg, hogy
pinMode(pin, INPUT); akkor neked kell felhúzó ellenállás, ha pedig
pinMode(pin, INPUT_PULLUP); akkor nem kell külön felhúzó ellenállat.
Ha ertek = digitalRead(pin); sort használod, akkor az értéked 0-1023 között alakul. 5V-nál 1023 lesz.
Ha az arduino panelen dolgozol, nem kell kötnöd semmit a ref lábra tudtommal, legalábbis én nem kötök oda semmit.
A hozzászólás módosítva: Jan 2, 2015
(#) csatti2 válasza atus1981 hozzászólására (») Jan 3, 2015 /
 
Óvatosan a belső hőmérővel. Ha külső analóg referencia feszültséget használsz (ami javasolt ha pontosan akarsz mérni) és váltogatod a referenciaforrást, tönkreteheted (kb. 100% eséllyel) a kontrollert (rövidre zárja a belső 1V1-et és a külső referenciát). Bár a kézikönyvben azt írja, hogy át kell váltani a hőmérsékletméréshez a belső 1V1-re, valójában ez nem teljesen igaz. Lehet használni a külső 5V-t is csak nem lesz különösebben pontos a hőmérsékletmérés: kb. 5K-es (Kelvin) felbontása lesz (túlmelegedés ellenőrzésére ez is megteszi).
(#) csatti2 válasza Panhard hozzászólására (») Jan 3, 2015 /
 
A gond as SRAM-oddal van. Ugye 2K áll rendelkezésre és azt írja ki, hogy 297 szabad. Azonban az valójában azt írja, hogy minimum mennyi szükséges a futtatáshoz.
Pl.: az egyik saját programom:
Binary sketch size: 32 242 bytes (used 100% of a 32 256 byte maximum) (7,14 secs)
Minimum Memory Usage: 1356 bytes (66% of a 2048 byte maximum)

Azt írja, hogy még vagy 33% szabad. A valóságban, ha 100byte-al többet használok már összeomlik. Neked is elfogyott az SRAM-od.

Egy viszonlyag jól használható és könnyű trükkel felszabadíthatsz valamennyit. Ahol csak string-eket használsz próbáld ki az F makrót.
pl. Serial.println("Valami üzenet"); ---> Serial.println(F("Valami üzenet"));
Ez azt csinálja, hogy a szövegeket csak a flash-ben tárolja és onnan tölti be. Ha hagyományosan adod meg, akkor mindig leképzi az SRAM-ban is, ezért az a 2K rohamosan fogy. A módzser hátránya, hogy az így megadott string-ek egyszer használatosak (valójában a fenti példa szintén egyszer használatos stringet eredményez a hagyományos módszernél is). Ha többször használatos kell, akkor jöhet szóba a PROGMEM használata, ha érdekel mutathatok példát arra is.
(#) csatti2 válasza csatti2 hozzászólására (») Jan 3, 2015 /
 
Ehhez a témához kapcsolódik még, hogy nem csak a belső hőmérsékletet lehet megmérni az analóg bemenetekkel hanem az 1V1 belső referenciafeszültséget is (plusz a GND-t). Ez látszólag céltalannak tűnik, azonban az 1V1 feszültsége nagyon stabil (bár pontatlan, hisz uC-ről uC-re változik egy elég nagy tartományban, tehát használata előtt kalibrálni kell). Amit valójában mérünk tehát az az AVCC-re kötött feszültség (AREF-et most nem használunk), hisz a mért érték ennek a feszültségnek a függvényében változik majd. Ez nagyon hasznos lehet akkumulátorról / elemről működő alkalmazásoknál az akkumulátor / elem feszültségének meghatározására. Így még időben kiírhatjuk az adatokat EEPROM-ra, illetve meggyújthatunk egy figyelmeztető LED-et. A legszebb az egészben, hogy nincs szükség ehhez semmilyen külön hardverre.
(#) Panhard válasza csatti2 hozzászólására (») Jan 3, 2015 /
 
Azóta teszteltem, szerintem tényleg a program memóriám fogyott el, mert pont annyit foglal a bootloader, amennyivel hamarabb megtelik. Mindenképpen kipróbálom majd azt a módszert, amit írtál. Már rendeltem egy Arduino Mega panelt Ebayról, hamarosan megérkezik.
Következő: »»   70 / 854
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