Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Idézet: „ameddig nyomom a BUTTON-t olyan időközzel villog a led?” Inkább ahány szór nyomom a BUTTON-t? Annyi szór 1000ms várakozás van a villogások között.
Még ezt szúrdbe :
A hozzászólás módosítva: Júl 15, 2018
Pergés ellen rakhatsz delay 30..50s is digitalread ....
A hozzászólás módosítva: Júl 15, 2018
Ez már egy értelmezhető méret. Ez egy úgynevezett tárolós shift regiszter (latch). Először belépteted az adatot sorosan, aztán átírod a kimenetre a regiszter tartalmát. Előnye, hogy amíg shiftelsz, addig a kimeneten ez nem látszik, tehát nem fog villogni. Az adatlapja szerint ez az ic úgy működik, hogy SER bemenetre ráteszed az adatot, aztán az SRCLK pinnel lépteted egyet. Megint SER, aztán megint lépteted az SRCLK-val. Mindezt nyolcszor. Így szépen belépteted az összes bitet, és amikor ez megvolt, akkor kell az RCLK, amivel a shift regiszter állapotát átmásolod a kimenetre. Lehet léptetni a következő nyolcast, a kimenet nem változik amíg a következő RCLK meg nem érkezik. Nem beszéltünk még két kivezetésről, egyik az SRCLR, ez instant törli a shift tárolóban lévő biteket (figyelem, amíg RCLK nem érkezik, addig ezt sem veszed észre!). A másik az OE kivezetés, ez leválasztja a kimeneti lábakat a külvilágról. Erre akkor van szükség, amikor buszra van kötve az ic, mert ebben az állapotban mintha nem is létezne, úgy viselkedik (nagyimpedanciás állapot). Azok a lábak amiknek a neve egy vonallal felül van húzva, azok gnd-re aktívak (OE és SRCLR), a többi élvezérelt, tehát magasról alacsony szinre váltáskor lép működésbe. OE-t tehát alacsonyan tartod, SRCLR-t pedig magasban.
Hálás köszönet,ez valóban egy jó alap a készülő programhoz. Nagyon leköteleztél
![]()
Lehet ez kicsit off, de attiny témában csak egy halott topicot találtam, és szerintem elfér itt is. Ja, arduino IDE-vel csináltam a kódot, szóval nem is annyira off.
Röviden: legalább 10 kHz nagyságrendű PWM jelet szeretnék a PB4 pin-en (TCCR1), de nem megy, 4 kHz fölé nem jutok el. Mit rontok el?
Datasheet szerint ennek 250 kHz-nek kellene lennie, ebből nekem a 4 kHz (25 usec periódushossz) sehogy se jön ki. A cpufreki 1 MHz, azt nem is nagyon akarom bántani. Szerk.: attiny85, ezt elfelejtettem leírni A hozzászólás módosítva: Júl 15, 2018
Ha 1MHz-ből 250KHz-es PWM jelet akarsz készíteni, akkor a proci minden 4. órajelénél vége egy periódusnak. Így ha az OCR értéket 0-nak hagyod, akkor az órajel szerint lesz 4 alacsony jeled, majd periódus újraindul. Ha OCR = 1, akkor 1 magas, 3 alacsony, és újraindul. Ha OCR 2, akkor vagyunk 50% kitöltési tényezőnél, 2 magas, 2 alacsony kimeneted lesz, majd újraindul a periódus.
250KHz-es PWM-hez 1MHz-en csak 4 érték társul. 16MHz-en se sokkal jobb a helyzet, de már használható valamire: 16000000/250000=64 értékkel tudod a kitöltési tényezőt meghatározni, ez már 6 bit. A hozzászólás módosítva: Júl 15, 2018
A shift regiszteres problémám még mindig fent áll.
Nem értem mit szeretnél még.. Kapu48 megmutatta (magyarul!), hogy hogy működik a shiftOut(), ezt kérted. Én elmagyaráztam neked hogy működik a shift regiszter.
Itt van még egy példakód, hátha ez segít. Itt a numberToDisplay helyére beírhatsz akármit, azt fogod látni a ledjeiden.
Ha még most sem jó, akkor légyszíves írd le egyértelműen hogy mire vágysz!
Valaki tudna segiteni ezt mivel lehet leforditani filmware állományra lenne szükségem!
heatgun
Azt nem értem, hogy hogyan lehetne egyszerre több kimenetet felkapcsolni. Pl a 2-es lábat és a 7-eset, egy másodperc múlva meg a 4-es lábat és a 6-osat felkapcsolni.
Nem, 10 kHz nagyságrendben szeretnék PWM jelet, minél nagyobbat (annyival egyszerűbb lenne utána az RC halom), 10 kHz már elég is lenne. Az értem én, hogy 1 MHz/256 = 4 kHz, de én PWM frekvenciaként egy teljes periódus hosszát értem (vagyis 1/x, érted), és nem 1/256 hosszt - aztán lehet hogy én vettem be fordítva a gyógyszert.
A datasheet amúgy ezt írja: Idézet: „The Timer/Counter1 features a high resolution and a high accuracy usage with the lower prescaling opportunities. It can also support two accurate, high speed, 8-bit Pulse Width Modulators using clock speeds up to 64 MHz (or 32 MHz in Low Speed Mode). In this mode, Timer/Counter1 and the output compare registers serve as dual standalone PWMs with non-overlapping non-inverted and inverted outputs.” Ez ugye 64x vagy 32x nagyobb, mint az 1 MHz-es órajelem, és én már a 3x-ostól is nagyon boldog tudnék lenni. Tuti én cseszek el valamit valahol, de nem látom hogy hol. Illetve látom, nyilván valamit kihagyok vagy rosszul csinálok, de ötletem sincs. Esetleg az lehet probléma, hogy analogwrite-tal írok ki valamit bitpiszkálás helyett? Bár alapban ez a kimenet 2 kHz volt, a setup utolsó 3 sorával sikerült 4 kHz-re növelnem, a többi ugyanaz mindenhol, szóval ez cáfolná ezt az elméletet... Idézet: „Esetleg az lehet probléma, hogy analogwrite-tal írok ki valamit bitpiszkálás helyett?” Mondjam azt, hogy igen? Pont az Arduino topikban írjam le, hogy nem érdemes Arduinot használni, mert lassú és korlátozott? ![]() Nem pont PWM, de jól rávilágít az Arduino keretrendszer lassúságára: https://gist.github.com/vargham/fda52a17ab4001f50aec245615713cf8
Ezt az ARM - Miértek, hogyanok c. topikban kellene megkérdezni!
Itt egy másik projekt leírása a fíckónak, s valószínőleg az első bekezdésben megnevezetett fejlesztőszoftvereket használta az általad kinézett projekthez is. A hozzászólás módosítva: Júl 16, 2018
Ezt nem igazán értem!
Mi köze van a HW TIMER1 működési sebességéhez, hogy milyen IDEn készült a project? Ez csupán az MCU órajelén, a Prescaler, és a OCR1C regiszterek beállításán mulhat.
Az IDE mindegy. De az Arduino nem csak IDE, hanem egy C és C++ keverékben megírt függvénykönyvtár is. Az AVR Libc-ben nincs se digitalWrite, se analogWrite, se hasonlók. Egyszer nézd meg ezeknek a forrását! A regiszerek piszkálásán kívül van bennük egy csomó felesleges és lassú utasítás is.
Ezekkel mind tisztában vagyok.
De a HW TIMER1 működési sebességét ezek nem befolyásolják! Még az említet plusz megszakítások sem. A hozzászólás módosítva: Júl 16, 2018
Digitális iránytűt használok, arduinoval.
Az lenne a célom, ha egy iránytű által mért irányszög (0 -360) megváltozik pl. 10 fokkal többel, akkor induljon be egy folyamat. Ezzel nem is lenne gond, de hogy oldjam meg azt, hogy ha a alapállapot 353 fok, és felfelé megyünk 10 fokot, akkor 3 fokon fogok állni, és ez nem tartozik vele a 353 -+ 10 fokba ("matematikailag"). Van erre valami okos trükk?
Az említett összeadás példánál, ha az új érték kisebb, mint a régi?
Akkor átléptük a felső határt és a képlet: (360 – 353) + 3 = 10 Ebből következik, hogy kivonásnál az alsó határt figyeled, ha kisebb mint a régi: ? A hozzászólás módosítva: Júl 16, 2018
Törölve.
A hozzászólás módosítva: Júl 16, 2018
Inkább:
3-353= -350, 360 - 350 = 10 Így is 2 műveletbe kerül, és nem is lehet unsigned int-en ábrázolni. A hozzászólás módosítva: Júl 16, 2018
Sajnos a feladat még mindig nyitott!
példa 1: Ki indulási érték nagyobb = 353 Új érték kisebb = 343 360 – 353 = 7 360 – 343 = 17 17 – 7 = 10 ez -10 lenne vagy: 353 - 343 = 10 ez -10 lenne példa 2: Ki indulási érték nagyobb = 353 Új érték kisebb = 3 360 – 353 = 7 7 + 3 = 10 ez meg +10 De hogyan döntsük el, hogy melyik művelet sort használjuk??? A hozzászólás módosítva: Júl 16, 2018
Ide kivül nem ismerek más környezetet amibe boldogulok is!
![]() ARM tudásom totál 0000! ![]()
10-350 közti alapállapotnál nem gond a szelekció.
A maradék 20 estre, csak olyan megoldást találtam (a fejembe), hogy egyesével csinálok feltételt az alapszögekre. pl.
Ez a szokásos favágó megoldás... ![]() A hozzászólás módosítva: Júl 16, 2018
Javítsd ki:
A hozzászólás módosítva: Júl 16, 2018
Kösz. Marad a favágás?
Ha megnézed a videót:
Bővebben: Link Neki ís megbolomdúl a kijalzés, mikór átfordúl a 360 fokos határon.
Szia!
A változás irányát nem tudod figyelni ( egy változó jelezné, hogy a szögértékek nőnek vagy nem, balra vagy jobbra forog az iránytű!) ?!
Próbáld meg ezt:
A=a pillanatnyi irány (0-359) B=a kívánt irány (0-359) A trükk: A-hoz adj hozzá egy fix konstanst (legyen pl. 400). Vond ki A-ból B-t és ha az eredmény nagyobb 400-nál, akkor jobbra kell helyesbíteni, ha kisebb 400-nál, akkor balra. Fontos, hogy többet adj hozzá, mint ahány részre a teljes kört felosztottad. Így sosem lesz negatív az eredmény. A hozzászólás módosítva: Júl 16, 2018
Kezdő érték = 353
353 + 400 = 753 Új érték = 3 753 – 3 = 750 jobbra OK Új érték = 343 753 – 343 = 410 Ez is jobbra KO?? Pedig 343 < 353 = balra még mindig a határon a jobbra 10 fok, helyet balra 370 fokot fordúl. |
Bejelentkezés
Hirdetés |