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   652 / 839
(#) vargham válasza sargarigo hozzászólására (») Szept 11, 2020 /
 
Vagy használjon egyben egy egész 8 bites portot.
(#) szili83 válasza mateatek hozzászólására (») Szept 11, 2020 /
 
Levettem a 10k felhúzó ellenállásokat, és tettem rá 100nF-ot is, de akkor sem jó. Valószínű encoder probléma, mást már nem tudok elképzelni.
(#) Lamprologus válasza jamiki hozzászólására (») Szept 11, 2020 /
 
Idézet:
„Esetleg valaki tudna egy olyan leírásról, ahol az arduino utasítások, parancsok stb. fel vannak sorolva (esetleg magyar nyelven)?”
Bővebben: Link
Google le is fordítja neked!
(#) mateatek válasza szili83 hozzászólására (») Szept 11, 2020 /
 
Hát, ha másik programmal sem működik, akkor enkóder probléma.
(#) jamiki válasza Lamprologus hozzászólására (») Szept 11, 2020 /
 
Kösz, de ezt már átnéztem, nincs benne. Sőt a hozzáfüzött magyarázatokat is.
A Harsányi Réka művei között sem találtam.
A GitHub-nál sem. Az utasítás valahogy így nétett ki: XXX(pin 21, pin 25, pin 32.....)
Nem egymás melletti pineket akarok csoportba foglalni és ez komplikálja a feladatot.
Valahol a bit műveleteknél találtam, el kellett mennem a géptől, mire visszajöttem eltünt.
A kisseb laoknál van A C D csoportba foglalás, de az ATMEGA 2560-nak 54 digitális kimenete van de én nem az egymás melletti ( 22 - 53 ) lábakat szeretném használni.
( Úgy rémlik hogy a Harsányi Réka számomra ismeretlen leírásában volt. )
(#) vargham válasza jamiki hozzászólására (») Szept 11, 2020 1 / 1
 
Van rá lib:
https://create.arduino.cc/projecthub/ambhatt/8-bit-io-port-library-...5c11a6
Ha nem számít a sebesség, akkor jó lesz.
Ha gyorsnak kell lennie, akkor csak az jó, ha fizikai portot használsz.
(#) jamiki válasza vargham hozzászólására (») Szept 11, 2020 /
 
Valami hasonlót láttam.
Kifogom próbálni. A könyvtárt fel tudtam venni.
A bemenet, kimenetet be is tudtam tölteni, a fordítás nem jelzett hibát.
Kösz a segítséget.
(#) Kovidivi válasza vargham hozzászólására (») Szept 11, 2020 /
 
A direkt portregiszter írása sem lassú, pl. ha mind a 8 láb külön porton van, akkor 8-16 órajelbe kerül a kimenetek állítása, ami 16MHz-nél 0.5-1us... Az azért annyira nem lassú szerintem!
(#) vargham válasza Kovidivi hozzászólására (») Szept 11, 2020 /
 
A direkt portregiszter írása valóban nem lassú, de a mellékelt lib az Arduino digitalWrite függvényét használja, ami tele van ellenőrzéssel. Az pedig elég sok idő, ~80 μs. És teszi mindezt nyolcszor, azaz ~640 μs. Ha a port regisztert írná csak, akkor 0.0625 μs lenne. Így 10000x lassabb.

Bővebben: Arduino’s digitalWrite Performance

Itt egy kicsivvel gyorsabbnak mérték, de a nagyságrendi eltérés hasonló.
Bővebben: To use or not use digitalWrite
(#) asch válasza jamiki hozzászólására (») Szept 12, 2020 /
 
Először is azt kell eldönteni, hogy mi az a sebesség amit el akarsz érni! És azt is, hogy sok a jelváltás, vagy ritkán van, de akkor egyszerre kell lennie? Szóval hogy pontosan mik a követelmények, mit akarsz elérni? Általánosságban annyit lehet mondani, hogy az érték kiírás 1 portra 1 órajel (pl PORTB=0b10101010 C nyelvű utasítás a b port összes kimenetét egyszerre átállítja, de valójában két ASM utasítás, mert regiszterből lehet csak portra írni, tehát az első utasítás regiszterbe fogja tenni a konstans értéket. ), de általában egy csomót számolgatunk mire megvan, hogy mit írjunk ki, és az sok idő.
(#) vargham válasza vargham hozzászólására (») Szept 12, 2020 /
 
Azt is vedd figyelembe, hogy ezzel a libbel két bit megváltozása között is lesz ~80 μs. Tehát ha a porton egyszerre kell megjelennie a kiemneti értéknek, és nem bitenként, akkor sem jó megoldás ez neked.
(#) Andralin válasza asch hozzászólására (») Szept 12, 2020 /
 
Sziasztok!
Ha gyors port írás vagy olvasás kell, akkor beágyazott assembler a megoldás.
Tavaly dolgoztam egy projecten, ahol 10 μs pontossággal kellett írni a portot, egy 50 μs periódusidejű külső órajelre rászinkronizálva. Egy régi autórádió fejegység CD modulját szimuláltam le a fő processzor számára Arduino Nano használatával.

Arduino kódból lehetetlen küldetés volt, bármilyen módszert is próbáltam, néha átment egy-egy bájt, de leginkább elcsúszott az egész kommunikáció. Végül beleástam magam a beágyazott assemblerbe és megírtam abban az időkritikus portkezelő programrészeket, így már rendben működött.

Az asm volatile() paranccsal lehet beilleszteni ASM kódot és az Arduino változókat is át lehet neki adni oda-vissza.

Itt egy részlet az ASM kódból.
Képként kell betennem, mert a fórummotor a visszaper n karaktereket lefordítja automatikusan sortörésnek.
A hozzászólás módosítva: Szept 12, 2020

asm.jpg
    
(#) vargham válasza Andralin hozzászólására (») Szept 12, 2020 /
 
Ha közvetlenül a port regisztert írod, akkor C-ből sem lassú.
(#) jointsilver36 hozzászólása Szept 12, 2020 /
 
Sziasztok!Megépítettem egy lézer gravirozót dvd alkatrészekből.A lézert egy relémodul kapcsolgatja.Van egy nyákom ami 5voltrol hajtja a lézert.Van rajta ttl vezérlést lehetővé tevő bekotés is .A kérdésem az lenne,hogy a mellékelt ábrán levő ttl meghajtó helyére ráköthetem e a shield ttl tűskélyére?A kis nyák az általam használt meghajtó.Köszönöm a válaszokat.
A hozzászólás módosítva: Szept 12, 2020
(#) Josi777 válasza vargham hozzászólására (») Szept 12, 2020 /
 
Szia. Engem érdekelnek ezek a dolgok, mivel asm "barát" vagyok Nem tudnád, pl. pastebinre feltenni a teljes programot, tanulmányozás céljából?
(#) Andralin válasza Josi777 hozzászólására (») Szept 13, 2020 / 1
 
Szia!
Nem akarom itt megosztani az egészet, de elküldtem neked privát üzenetben.
(#) Josi777 válasza Andralin hozzászólására (») Szept 13, 2020 /
 
Köszönöm szépen!
Van néhány Arduinos programom, ha esetleg érdekel valamelyik, akkor itt megnézheted. Nem nagyon használok bennük ASM-ot, ezért is érdekel a téma, hátha ezekkel a betétekkel jobbá lehetne tenni a programjaimat.
A hozzászólás módosítva: Szept 13, 2020
(#) Josi777 hozzászólása Szept 13, 2020 /
 
Sziasztok.
Úgy tapasztaltam, hogy a több analóg olvasás jelentősen lelassítja a loop-ot, mivel az olvasás végigvárja a teljes A-D konverzíót és majd csak ha megvan a digitális érték, akkor lép tovább. Találkozott-e már valaki ezzel a problémával és sikerült-e megoldania? Megoldásként arra gondolok, hogy elindítom a konverziót, majd valamennyi idő múlva vagy a ADC status flag figyelése alapján kiolvasom a regiszter értékét.
(#) icserny válasza Josi777 hozzászólására (») Szept 13, 2020 / 2
 
Itt ismertetnek egy megoldást az ADC programmegszakításos kezelésével.
(#) morgo válasza Josi777 hozzászólására (») Szept 14, 2020 /
 
Próbáld ki ezt a libet: Bővebben: Link
A hozzászólás módosítva: Szept 14, 2020
(#) mateatek hozzászólása Szept 14, 2020 /
 
Üdvözlet!

Beszereztem olyan, klón Arduino Nano-t, amire a kis gyártói Atmega328pb csippet forrasztottak. Ezt a lapkát szeretném használni, kihasználva benne a plusz timereket. (timer3, timer4) Egyenlőre próbálkoztam mindenféle föllelhető könyvtárakat használni, de eddig sikertelenül. Ha "hagyományos" 328-ra fordított kódot töltök rá, akkor az működik. Ha 328pb libbel fordítom és töltöm föl, akkora Blink sem villog.

Köszönöm
(#) KoblogPerGyok válasza mateatek hozzászólására (») Szept 14, 2020 / 1
 
Helló!

Olvad el ezt:

Bővebben: Link

Az első lap végén a kérdező leírta, hogy megoldotta egy github-os link alapján. A gond az Arduino IDE-vel van, nincs felkészítve a PB-re. Mármint eddig nem volt. A linken 2018-as dolgok vannak. A második lapon van, hogy esetleg az új ide már jó lesz hozzá, lehet az már elérhető.

Szedd le a legújabb Arduino IDE-t, ha nem megy azzal sem, akkor linkben szereplő megoldással elindulna szerintem.
(#) usane válasza KoblogPerGyok hozzászólására (») Szept 14, 2020 /
 
Nem az IDE-vel, a board fájl az amit nem oldottak meg.

Saját kérdés. Már rág csináltam és ezeket a mutatós dolgokat midig elfelejtem.
Van változóm ami visszaad valami mutató típusú értéket. Meglevő lib. Hogy tudom ezt legegyszerűbben egy sima byte-ba belegyömöszölni?
Lásd:
valami = eztkapom;
erre persze az jön, hogy:
Idézet:
„invalid conversion from 'uint8_t* {aka unsigned char*}' to 'uint8_t {aka unsigned char}' [-fpermissive]
(#) usane válasza usane hozzászólására (») Szept 14, 2020 /
 
Ezt elvileg megoldottam. Azt hittem, hogy megoldhatom egy globális inicializálással, hogy hívásonként csak egy plusz utasítás legyen, de minimum 2.
(#) wbt hozzászólása Szept 14, 2020 /
 
Sziasztok!
Találtam LGT8F328P kispaneleket, játszom vele, 99% M328 kompatibilis. Valaki ezekkel dolgozott? Arduino kompatibilis (elméletileg), de csak annyi infót kaptam, hogy vannak gondok...de hogy mi az, az hadititok... Eddig nekem tetszik, 32MHz, DAC, több Timer stb. Valamiért Timer3-at nem tudom kezelni (na, jó, ASMben igen). Valakinek tapasztalata vele?
(#) usane válasza usane hozzászólására (») Szept 14, 2020 /
 
Ehh. Mégsem oldottam meg. 1 karakteres stringből, hogy a legegyszerűbb egy sima uint8_t értéket kreálni?
(#) mateatek válasza KoblogPerGyok hozzászólására (») Szept 14, 2020 /
 
Köszönöm a választ! Átrágom magamat rajta.
(#) mateatek válasza wbt hozzászólására (») Szept 14, 2020 / 1
 
Szia!

Én használom sokat ezeket. A timer3-at is használom. Két gondod lehet vele, ami igazából nem is gond. Az egyik az az, hogy timer a PD2 és a PD3-as jelű kimenetre van kivezetve.De igazából a timer a PF1 és a PF2 kimenetre csatlakozik és ez a qfp32-es tokozásnál ugyanazon lábon van. A csatolt kép szerint látható. Ezért a kimenet konfigurálásánál a következőket használd:
  1. DDRF = (1 << PF1);
  2.   DDRF = (1 << PF2);


A másik, hogy az ICR3-as regisztert, az OCR3A és OCR3B és a többi 16 bites regisztert nem tudod 16 bites értékkel feltölteni, ahogy a 328 kompatibilis timerekét. Külön kell a 8-8 bites értéket beírnod az L és a H regiszterbe. Mint a példán:
  1. TCCR3A = 0;
  2.   TCCR3B = 0;
  3.   TCCR3A = _BV(WGM31) | _BV(COM3A1);
  4.   TCCR3B = _BV(WGM33) | _BV(CS32) | _BV(WGM32);
  5.   ICR3H = (300 >> 8);
  6.   ICR3L = (300 & 0x00FF);
  7.   OCR3AH = (100 >> 8);
  8.   OCR3AL = (100 & 0x00FF);


Hirtelen ennyi. De van még pár eltérés. Kissé másként működik az ADC, meg lehetne oldalakat írogatni róla. Ha kérdésed van, és tudok, akkor írok róla.
Szerk: A belső 32 MHz-es órajel borzasztóan fáziszajos és hőmérséklet függő. Erősen órajel függő alkalmazásba nem javasolt. Vélhetőleg a Doki is ebből az MCU-ból csinálta belső orajellel az óráját és a mért idő alapján került "Vissza a jövőbe". Kvarccal rendben van.
A hozzászólás módosítva: Szept 14, 2020
(#) usane válasza usane hozzászólására (») Szept 14, 2020 /
 
Megoldottam. Csak egy kényszerített típuskonvverziós atoi kellett.
(#) wbt válasza mateatek hozzászólására (») Szept 14, 2020 /
 
Köszönöm, egy félIsten vagy.
Olvasom a 283 oldalt, próbálom is, néha elakadok, de csak akkor teszek fel kérdést, ha nem értem vagy lusta vagyok (sültgalamb). Szűz Chip-et mivel/mi módon tudom felprogramozni? Most Bootloader-el használom... de nem értem azt, hogy ez különben hol van a flash-ben? (bár ez nagyon késői probléma lesz, de ez még nagyon nem világos). Mégegyszer nagyon köszönöm, játszani fogok még vele, mire letisztul.
Következő: »»   652 / 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